mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 16:06:32 +00:00
a562ea59b8995b33ff42a41dc7be234f3078bc47
Every save in the event editor rebuilt the participants with new ids and put every attendee back to needs-action, the user's own answer on an invitation included. Saves now keep each attendee's id and answer; new attendees are asked. As on the web, only an organizer who moves an event (its start, end, all-day or recurrence rule; not a time zone rewrite, and not a zero-length event) asks the others again. The series scopes did not fit that: - "All events" wrote the opened occurrence's start, length, zone and participants onto the series: a stretched occurrence stretched every one, and one day's decline spread to the whole series. The series now keeps its own list and takes only the attendees the user added or removed, and its times change only when the occurrence moved (by the same delta), its rule only when it changed. - "This and following" makes a new series, which Stalwart sends only to attendees who have not answered: its attendees are asked again. - Stalwart sends a new occurrence override, the first change to one occurrence, only to attendees who have not answered (0.16.6 to 1.0). A change that keeps answers now goes out in two writes: the override as the occurrence stands without scheduling, then the change as an update of it, to the occurrence looked up again. Checked live on 1.0 and 0.16.23. - A save of an invitation someone else organizes writes no participants while the user left them alone, and never asks for scheduling, so the organizer gets no reply for a changed alert. The switch to send invitations is hidden there. Also: - a reminder change on one occurrence of a series that uses the calendar's default alerts turns the defaults off for the series first (keeping what it shows under ids of its own); 1.0 kept showing the defaults - all-day and floating occurrences expanded on the device no longer carry the master's utcStart/utcEnd, so their reminders are scheduled for each day; master instants that are not the master's own (0.16.23's year 32548, or the next occurrence's) are ignored - the editor warns when the attendees and the organizer go over the calendars capability's maxParticipantsPerEvent, and a refusal for it (Stalwart 1.0 enforces it, answers included) is explained in the editor, the series dialogs, the detail sheet and the invitation banner, in all languages; a failed save used to fail silently - refused event creates, updates and answers keep their SetError type - Calendar/get asks for its properties by name
Bulwark Mobile
Beta - work in progress. Many features are unfinished or rough. Expect bugs, missing functionality, and breaking changes between releases. Do not rely on this for primary email yet.
React Native (Expo SDK 54) client for Bulwark Webmail - a JMAP-based mail, calendar, and contacts app.
What works today
- Sign in to any JMAP server (e.g. Stalwart)
- Multiple accounts
- Email list, threads, compose
- Calendar (basic)
- Contacts (basic)
- Push notifications via the Bulwark relay - FCM by default, or UnifiedPush (e.g. ntfy) for devices without Google Play services
- In-app sideload updates from GitHub Releases
What's missing or rough
- iOS builds, but push notifications and client certificates are Android-only so far
- S/MIME, plugins, themes - UI stubs only (filters & rules, the vacation responder and file storage are real implementations)
- Calendar editing is partial; contacts editing is basic
- No Play Store distribution yet (sideload APK from Releases); iOS ships via TestFlight
Run locally
npm install
npx expo start
Then press a for Android, i for iOS, or scan the QR with Expo Go.
For release APK builds and signing see docs/android-release.md. For iOS builds and TestFlight distribution see docs/ios-release.md.
License
AGPL-3.0-only. See LICENSE.
Languages
TypeScript
95.9%
Kotlin
2.1%
JavaScript
0.9%
Swift
0.4%
HTML
0.4%
Other
0.2%