Commit Graph

471 Commits

Author SHA1 Message Date
a1d1894f84 fix: detach the occurrence when editing one instance of an unsynced series (#234)
"Edit only this event" wrote a modified-occurrence exception unconditionally.
That is the right shape for a synced series and the wrong one for everything
else: an exception attaches to its parent through ORIGINAL_SYNC_ID, so on a row
with no _sync_id the link never forms — the insert fails or lands an orphan, the
generic catch in EventEditViewModel turns it into a snackbar, and the scope
dialog just closes again. To the reporter that read as "nothing happens, ever",
with a stray copy of the event left behind the one time the insert did land.

This is the same constraint deleteOccurrence has documented since #47, and the
same calendars: a local calendar, Calendula's own contact special-date
calendars, and — the reporter's case — a Google calendar whose rows the sync
adapter has not stamped yet, which is exactly why it "shows as on-device".

updateOccurrence now branches on _sync_id the way deleteOccurrence does. A
synced series keeps the exception path untouched; its write shape is load-
bearing and verified. A series without one gets the occurrence excluded from the
parent via EXDATE and the edited values inserted as a standalone event on the
same calendar — a detached instance, minus the RECURRENCE-ID the provider has no
way to store here. The cost is honest and worth naming: the edited occurrence
stops travelling with its series. The alternative is an edit that silently does
nothing.

Two things shape the write. The parent update reuses buildOccurrenceExdateValues
unchanged, so it keeps carrying the whole time/recurrence set — an EXDATE-only
update is not a recurrence change to the provider and leaves the expanded
instances standing (#47's first quirk). And the form's RRULE is stripped before
the insert: the exception path gets an inherited rule cleared for free by
DTSTART + DURATION, but nothing clears one here, so leaving it would insert a
second *series* overlapping the first.

Ordering is chosen for the failure cases, not the happy path. The insert runs
first, so a failure there leaves the series completely untouched — the discipline
updateEventFromOccurrence already follows. If the EXDATE update then fails, the
new row is a visible duplicate of an occurrence still in the series, so it is
rolled back (best effort) before the failure surfaces. The reverse order could
strand an occurrence excluded from its series with nothing standing in for it,
turning an edit into a silent delete.

Also makes a failed save legible, since this bug was invisible precisely because
it wasn't: the failure snackbar gets the long duration instead of a flash, and
the catch logs the scope and event id — never the form's content — so a failure
leaves something to report.

Adds JVM tests for the detached shape: the rule is dropped and the row becomes a
one-off with DTEND, all-day stays on UTC midnights, and the detached row's
DTSTART agrees with the EXDATE stamp that removes it from the parent, timed and
all-day. The provider behaviour itself still needs a device.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 19:57:35 +02:00
Julie
db5104a7d0 Translated using Weblate (Slovak)
Currently translated at 32.0% (184 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/sk/
2026-08-27 03:40:53 +00:00
Julie
6306064fc3 Translated using Weblate (Slovak)
Currently translated at 25.0% (144 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/sk/
2026-08-26 23:38:37 +00:00
Julie
d5a4761f2c Translated using Weblate (Slovak)
Currently translated at 13.5% (78 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/sk/
2026-08-26 21:23:50 +00:00
Dmitri Gabinski
66d6681798 Translated using Weblate (Belarusian)
Currently translated at 24.9% (143 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/be/
2026-08-26 21:23:49 +00:00
Weblate
fb61169656 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-26 13:57:44 +00:00
Julie
62079fba0b Added translation using Weblate (Slovak) 2026-08-26 13:57:44 +00:00
Dmitri Gabinski
cc0fc8edc3 Translated using Weblate (Belarusian)
Currently translated at 23.8% (137 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/be/
2026-08-26 13:57:43 +00:00
Sup99999
62174fcd53 Translated using Weblate (Arabic)
Currently translated at 97.7% (561 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-25 16:03:15 +00:00
Dmitri Gabinski
55c1b2ac25 Translated using Weblate (Belarusian)
Currently translated at 4.5% (26 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/be/
2026-08-25 02:58:46 +00:00
Sup99999
0ccc610144 Translated using Weblate (Arabic)
Currently translated at 95.9% (551 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-25 02:58:45 +00:00
Weblate
5d009b7dc0 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-24 06:55:51 +00:00
Dmitri Gabinski
28924daf02 Added translation using Weblate (Belarusian) 2026-08-24 06:55:51 +00:00
Sup99999
e71fb2a625 Translated using Weblate (Arabic)
Currently translated at 92.6% (532 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-22 14:29:52 +00:00
SpiritOTHawk
aa5f76fc1b Translated using Weblate (Russian)
Currently translated at 28.2% (162 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ru/
2026-08-22 14:29:52 +00:00
163d821d1f 2.19.3 — Czech, Japanese and Russian in the language picker
Surface the community translations that landed via Weblate but were never
listed in locales_config.xml. European Portuguese stays out: it has one
translated string.
2026-08-22 11:10:06 +02:00
James Trivette
c0270ab3a0 Translated using Weblate (Czech)
Currently translated at 36.0% (207 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/cs/
2026-08-21 13:13:33 +00:00
James Trivette
6019d6c0b8 Translated using Weblate (Czech)
Currently translated at 33.7% (194 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/cs/
2026-08-21 05:51:15 +00:00
James Trivette
19bc5967a4 Translated using Weblate (Czech)
Currently translated at 33.6% (193 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/cs/
2026-08-21 05:51:05 +00:00
ame0011
ddab3454bb Translated using Weblate (Japanese)
Currently translated at 13.9% (80 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ja/
2026-08-20 18:48:25 +00:00
ame0011
247c9ee6cd Translated using Weblate (Japanese)
Currently translated at 11.1% (64 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ja/
2026-08-20 16:29:43 +00:00
Bernardo Krzysczak
6be170cae2 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (574 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/pt_BR/
2026-08-20 16:29:42 +00:00
James Trivette
8133584f1e Translated using Weblate (Czech)
Currently translated at 16.3% (94 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/cs/
2026-08-20 09:52:46 +00:00
Weblate
4cdb42afba Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-20 05:43:16 +00:00
James Trivette
19a4c05e93 Added translation using Weblate (Czech) 2026-08-20 05:43:16 +00:00
ame0011
aba06affbf Translated using Weblate (Japanese)
Currently translated at 9.4% (54 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ja/
2026-08-20 05:43:16 +00:00
ame0011
2b132a5b7a Translated using Weblate (Japanese)
Currently translated at 4.3% (25 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ja/
2026-08-19 16:12:28 +00:00
Weblate
52ecce03b8 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-19 09:41:07 +00:00
ame0011
0eb76db12d Added translation using Weblate (Japanese) 2026-08-19 09:41:07 +00:00
Jean-Luc Makiola
d03985eada Release 2.19.2 (#216)
All checks were successful
Release — F-Droid repo + Gitea/Codeberg release + Play / detect (push) Successful in 7s
Release — F-Droid repo + Gitea/Codeberg release + Play / release (push) Successful in 16m50s
Release — F-Droid repo + Gitea/Codeberg release + Play / play (push) Successful in 1m34s
Release 2.19.2 — `versionName` 2.19.2 / `versionCode` 21902. Merging this cuts the release.

A meeting you declined is struck through everywhere it appears and no longer schedules a reminder (#180). Tapping an event in month view opens the event instead of its day, in every month style (#187). An edit shows immediately when the same occurrence is re-opened (#196).

The month widget's arrows died after a couple of taps: the grid serialised ~740 views and one update ran to 450–540 KB, which overran the launcher's async binder buffer and made Android drop the whole widget host — killing updates for every widget on the home screen. The grid is down to 192 views, and `SizeMode.Exact` is kept so a resized widget reflows instead of clipping (#214). Widget taps now redraw the tapped widget by its own id rather than `updateAll`, whose provider lookup is empty in a cold-woken process (#18).

Jump-to-today in seamless weeks lands on the current week row (#191), and the day and week timelines got an end inset (#192).

Two follow-ups beyond the issues: the detail re-read keeps the loaded content on screen instead of blinking back to the skeleton, and a month chip tap with no recorded touch down (TalkBack, D-pad) no longer resolves to the previous tap's chip.

Release notes: `CHANGELOG.md` 2.19.2 section and `fastlane/metadata/android/en-US/changelogs/21902.txt` (471 chars).

Closes #18
Closes #180
Closes #187
Closes #191
Closes #192
Closes #196
Closes #214

Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de>
Reviewed-on: https://codeberg.org/jlmakiola/calendula/pulls/216
2026-08-17 21:54:46 +02:00
Weblate
b1ce6f85cc Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-16 10:49:54 +00:00
Sup99999
ca5f87af11 Translated using Weblate (Arabic)
Currently translated at 90.0% (517 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-16 10:49:53 +00:00
chip
7445092767 Translated using Weblate (Russian)
Currently translated at 22.6% (130 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ru/
2026-08-15 10:22:21 +00:00
Sup99999
5ef66120bf Translated using Weblate (Arabic)
Currently translated at 86.5% (497 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-13 20:22:23 +00:00
chip
bda86cd73d Translated using Weblate (Russian)
Currently translated at 11.6% (67 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ru/
2026-08-13 20:22:23 +00:00
Weblate
56953b0c50 Translated using Weblate (Italian)
Currently translated at 100.0% (574 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/it/
2026-08-13 20:22:23 +00:00
Sam Gamgee
7c8cd1e145 Translated using Weblate (Italian)
Currently translated at 100.0% (574 of 574 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/it/
2026-08-13 20:22:22 +00:00
Sup99999
bce36956d1 Translated using Weblate (Arabic)
Currently translated at 86.1% (493 of 572 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/ar/
2026-08-12 06:31:32 +00:00
Jean-Luc Makiola
e0fdadc7ca 2.19.1 — drag to reschedule can be turned off (#176)
All checks were successful
Renovate / renovate (push) Successful in 3m1s
Release — F-Droid repo + Gitea/Codeberg release + Play / detect (push) Successful in 6s
Release — F-Droid repo + Gitea/Codeberg release + Play / release (push) Successful in 16m19s
Release — F-Droid repo + Gitea/Codeberg release + Play / play (push) Successful in 2m29s
Release branch for 2.19.1. Merging this cuts the release — versionName is bumped to 2.19.1 (versionCode 21901), which is what release.yaml picks up.

### What's in it

- **Drag to reschedule can be turned off** (#173). Settings → Views → *Drag to reschedule*, on by default. Turned off, no event block in the month, week or day view registers a drag gesture. The gate is `EventMoveScope.dragEnabled` rather than the scope itself, so the screen-reader "Move event" action — which only opens the edit form — stays available either way. The setting reads as off until the stored value has actually loaded, so a cold start can't hand out a drag before the preference is known.

### Release prep

- CHANGELOG 2.19.1 section written.
- Per-version "What's New" hand-written for all 12 store locales (`ar`, `de-DE`, `en-GB`, `en-US`, `es-ES`, `fr-FR`, `it-IT`, `pl-PL`, `pt-BR`, `pt-PT`, `ru-RU`, `zh-CN`).
- `lint test assembleDebug` and `check_translations.py` green locally.
- main is one commit ahead (Weblate #175, translations only) and merges clean — not merged into the branch, it comes along with this one.

Closes #173

Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de>
Reviewed-on: https://codeberg.org/jlmakiola/calendula/pulls/176
2026-08-11 18:20:09 +02:00
02fd599e6b Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.3% (185 of 572 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/pt_BR/
2026-08-11 15:55:09 +00:00
b0412a96f3 Translated using Weblate (German)
Currently translated at 100.0% (572 of 572 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/de/
2026-08-11 15:55:09 +00:00
Weblate
06dbb89868 Translated using Weblate (German)
Currently translated at 100.0% (572 of 572 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/de/
2026-08-11 15:55:09 +00:00
Weblate
c1eb702384 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/
2026-08-11 15:20:07 +00:00
Anonymous
307517e85a Translated using Weblate (Polish)
Currently translated at 85.6% (459 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/pl/
2026-08-11 15:20:04 +00:00
Anonymous
a8ba227e8b Translated using Weblate (Spanish)
Currently translated at 79.4% (426 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/es/
2026-08-11 15:19:55 +00:00
Weblate
cbfdfb9710 Translated using Weblate (German)
Currently translated at 82.8% (444 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/de/
2026-08-11 15:19:53 +00:00
d85003416e Translated using Weblate (German)
Currently translated at 82.8% (444 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/de/
2026-08-11 15:19:52 +00:00
Anonymous
61c516149e Translated using Weblate (German)
Currently translated at 82.8% (444 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/de/
2026-08-11 15:19:52 +00:00
Bernardo Krzysczak
560225cb8c Translated using Weblate (Portuguese (Brazil))
Currently translated at 3.1% (17 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/pt_BR/
2026-08-11 15:19:48 +00:00
Anonymous
2e8367afd4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 3.1% (17 of 536 strings)

Translation: Calendula/Strings
Translate-URL: https://weblate.dev.jeanlucmakiola.de/projects/calendula/strings/pt_BR/
2026-08-11 15:19:47 +00:00