feat(backup): automatic periodic .ics export of local calendars (#8)
Scheduled one-way export of local calendars to a user-chosen folder, overwriting calendula-backup.ics each run — the manual backup, automated. Not a sync; stays INTERNET-free (provider reads + local file write). - WorkManager periodic job (deps: work-runtime-ktx, documentfile); worker pulls collaborators via a Hilt @EntryPoint, so no custom WorkerFactory wiring. First periodic run is delayed one interval so it can't race the immediate "run now" feedback run; the writer also overwrites the canonical file and cleans up any "(1)" duplicates from earlier races. - SettingsPrefs: enabled, interval (minutes, floored at 30), folder Uri, last-run status; persisted SAF write grant. - UI in Calendars > Backup: toggle, folder picker, amount+unit interval dialog, last-run status line. Notifies after repeated failures. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,10 +26,14 @@ lifecycleCompose = "2.10.0"
|
||||
androidxTestRules = "1.7.0"
|
||||
# Glance: 1.1.1 is the latest stable (1.2.0 is still rc, 1.3.0 alpha).
|
||||
glance = "1.1.1"
|
||||
work = "2.10.1"
|
||||
documentfile = "1.0.1"
|
||||
|
||||
[libraries]
|
||||
# AndroidX core
|
||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||||
androidx-work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" }
|
||||
androidx-documentfile = { group = "androidx.documentfile", name = "documentfile", version.ref = "documentfile" }
|
||||
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
|
||||
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntime" }
|
||||
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
|
||||
|
||||
Reference in New Issue
Block a user