diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt b/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt index 3d132077..9c547959 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt @@ -14,6 +14,8 @@ import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.ExistingWorkPolicy +import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import coil3.EventListener @@ -207,18 +209,31 @@ class Amber : } private fun startCleanLogsAlarm() { - val workRequest = PeriodicWorkRequestBuilder( + val workManager = WorkManager.getInstance(this) + + // Run an immediate one-time cleanup on every startup to handle accumulated data. + // KEEP policy ensures only one instance runs at a time if the app is restarted quickly. + val immediateRequest = OneTimeWorkRequestBuilder() + .addTag("clearLogsWorkOneTime") + .build() + workManager.enqueueUniqueWork( + "ClearLogsWorkerOneTime", + ExistingWorkPolicy.KEEP, + immediateRequest, + ) + + // Also schedule a daily periodic run. + // KEEP policy preserves the existing schedule so app restarts don't reset the timer. + val periodicRequest = PeriodicWorkRequestBuilder( 24, TimeUnit.HOURS, ) - .setInitialDelay(5, TimeUnit.MINUTES) // Delay first run by 5 minutes .addTag("clearLogsWork") .build() - - WorkManager.getInstance(this).enqueueUniquePeriodicWork( + workManager.enqueueUniquePeriodicWork( "ClearLogsWorker", - ExistingPeriodicWorkPolicy.REPLACE, - workRequest, + ExistingPeriodicWorkPolicy.KEEP, + periodicRequest, ) } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/ClearLogsWorker.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/ClearLogsWorker.kt index 9fd270b4..b5ae694f 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/ClearLogsWorker.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/ClearLogsWorker.kt @@ -47,10 +47,6 @@ class ClearLogsWorker(appContext: Context, workerParams: WorkerParameters) : Cor Log.d(Amber.TAG, "Trimmed $excessLogs excess log entries (cap: $MAX_LOG_ENTRIES)") } - // Reclaim freed space from SQLite pages - logDatabase.openHelper.writableDatabase.execSQL("VACUUM") - historyDatabase.openHelper.writableDatabase.execSQL("VACUUM") - val database = Amber.instance.getDatabase(it.npub) database.dao().updateExpiredPermissions(TimeUtils.now()) val deleted = database.dao().deleteOldApplications(now / 1000)