fix(sync): IMPL_08B - Bypass global cooldown for onSave syncs
Changes: - Constants.kt: Add SYNC_ONSAVE_TAG constant for worker tagging - NoteEditorViewModel.triggerOnSaveSync(): Tag SyncWorker with "onsave" tag - SyncWorker.doWork(): Skip global cooldown check for onSave-tagged workers - onSave retains 3 protection layers: 5s own throttle, tryStartSync mutex, syncMutex - Auto/WiFi/periodic syncs still respect 30s global cooldown
This commit is contained in:
@@ -111,8 +111,13 @@ class SyncWorker(
|
|||||||
// Verhindert dass Foreground und Background gleichzeitig syncing-State haben
|
// Verhindert dass Foreground und Background gleichzeitig syncing-State haben
|
||||||
val prefs = applicationContext.getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE)
|
val prefs = applicationContext.getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE)
|
||||||
|
|
||||||
// Globaler Cooldown-Check (verhindert unnötige Server-Checks)
|
// 🆕 v1.8.1 (IMPL_08B): onSave-Syncs bypassen den globalen Cooldown
|
||||||
if (!SyncStateManager.canSyncGlobally(prefs)) {
|
// Grund: User hat explizit gespeichert → erwartet zeitnahen Sync
|
||||||
|
// Der eigene 5s-Throttle + isSyncing-Mutex reichen als Schutz
|
||||||
|
val isOnSaveSync = tags.contains(Constants.SYNC_ONSAVE_TAG)
|
||||||
|
|
||||||
|
// Globaler Cooldown-Check (nicht für onSave-Syncs)
|
||||||
|
if (!isOnSaveSync && !SyncStateManager.canSyncGlobally(prefs)) {
|
||||||
Logger.d(TAG, "⏭️ SyncWorker: Global sync cooldown active - skipping")
|
Logger.d(TAG, "⏭️ SyncWorker: Global sync cooldown active - skipping")
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Logger.d(TAG, "✅ SyncWorker.doWork() SUCCESS (cooldown)")
|
Logger.d(TAG, "✅ SyncWorker.doWork() SUCCESS (cooldown)")
|
||||||
|
|||||||
@@ -545,6 +545,7 @@ class NoteEditorViewModel(
|
|||||||
Logger.d(TAG, "📤 Triggering onSave sync")
|
Logger.d(TAG, "📤 Triggering onSave sync")
|
||||||
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
|
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
|
||||||
.addTag(Constants.SYNC_WORK_TAG)
|
.addTag(Constants.SYNC_WORK_TAG)
|
||||||
|
.addTag(Constants.SYNC_ONSAVE_TAG) // 🆕 v1.8.1 (IMPL_08B): Bypassed globalen Cooldown
|
||||||
.build()
|
.build()
|
||||||
WorkManager.getInstance(getApplication()).enqueue(syncRequest)
|
WorkManager.getInstance(getApplication()).enqueue(syncRequest)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,4 +86,7 @@ object Constants {
|
|||||||
// 🆕 v1.8.1 (IMPL_08): Globaler Sync-Cooldown (über alle Trigger hinweg)
|
// 🆕 v1.8.1 (IMPL_08): Globaler Sync-Cooldown (über alle Trigger hinweg)
|
||||||
const val KEY_LAST_GLOBAL_SYNC_TIME = "last_global_sync_timestamp"
|
const val KEY_LAST_GLOBAL_SYNC_TIME = "last_global_sync_timestamp"
|
||||||
const val MIN_GLOBAL_SYNC_INTERVAL_MS = 30_000L // 30 Sekunden
|
const val MIN_GLOBAL_SYNC_INTERVAL_MS = 30_000L // 30 Sekunden
|
||||||
|
|
||||||
|
// 🆕 v1.8.1 (IMPL_08B): onSave-Sync Worker-Tag (bypassed globalen Cooldown)
|
||||||
|
const val SYNC_ONSAVE_TAG = "onsave"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user