diff --git a/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt b/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt index 1ee1a7608..2d7ae90ae 100644 --- a/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt +++ b/app/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt @@ -104,6 +104,7 @@ class RepoUpdateManager @JvmOverloads constructor( repoErrors.add(Pair(repo, result.e)) } } + db.getAppPrefsDao().walCheckpoint() fdroidPrefs.lastUpdateCheck = System.currentTimeMillis() if (repoErrors.isNotEmpty()) showRepoErrors(repoErrors) if (reposUpdated) { @@ -136,6 +137,7 @@ class RepoUpdateManager @JvmOverloads constructor( } finally { notificationManager.cancelUpdateRepoNotification() _isUpdating.value = false + db.getAppPrefsDao().walCheckpoint() } } diff --git a/libs/database/src/main/java/org/fdroid/database/AppPrefsDao.kt b/libs/database/src/main/java/org/fdroid/database/AppPrefsDao.kt index d6eb2e357..9a7241bd1 100644 --- a/libs/database/src/main/java/org/fdroid/database/AppPrefsDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/AppPrefsDao.kt @@ -8,10 +8,20 @@ import androidx.room.Insert import androidx.room.MapInfo import androidx.room.OnConflictStrategy.Companion.REPLACE import androidx.room.Query +import androidx.room.RawQuery +import androidx.sqlite.db.SimpleSQLiteQuery +import androidx.sqlite.db.SupportSQLiteQuery public interface AppPrefsDao { public fun getAppPrefs(packageName: String): LiveData public fun update(appPrefs: AppPrefs) + + /** + * Force a checkpoint on the SQLite WAL such that the file size gets reduced. + * Blocks until concurrent reads have finished. + * Useful to call after large inserts (repo update) + */ + public fun walCheckpoint() } @Dao @@ -48,4 +58,12 @@ internal interface AppPrefsDaoInt : AppPrefsDao { @Insert(onConflict = REPLACE) override fun update(appPrefs: AppPrefs) + + override fun walCheckpoint() { + rawCheckpoint((SimpleSQLiteQuery("pragma wal_checkpoint(truncate)"))) + } + + @RawQuery + fun rawCheckpoint(supportSQLiteQuery: SupportSQLiteQuery): Int + }