From fccc32a84f2349631a08d09da5f751bce8f94ee3 Mon Sep 17 00:00:00 2001 From: Philipp Woessner <64482866+pwoessner@users.noreply.github.com> Date: Tue, 7 Jul 2020 18:40:39 +0200 Subject: [PATCH] Fixed the outdated check for the locally persisted files (#839) * remove all files from the cache if they are no longer present in the server date index * Set version to 1.0.5 for hotfix release --- .../storage/keycache/KeyCacheRepository.kt | 17 ++++++++++------- .../coronawarnapp/util/CachedKeyFileHolder.kt | 4 +++- .../util/CachedKeyFileHolderTest.kt | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt index 92fb64795..243a5b300 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt @@ -21,7 +21,7 @@ package de.rki.coronawarnapp.storage.keycache import android.content.Context import de.rki.coronawarnapp.storage.AppDatabase -import de.rki.coronawarnapp.storage.FileStorageHelper.isOutdated +import timber.log.Timber import java.io.File import java.net.URI @@ -58,13 +58,16 @@ class KeyCacheRepository(private val keyCacheDao: KeyCacheDao) { } ) - suspend fun deleteOutdatedEntries() = keyCacheDao.getAllEntries().forEach { - val file = File(it.path) - if (file.isOutdated() || !file.exists()) { - deleteFileForEntry(it) - keyCacheDao.deleteEntry(it) + suspend fun deleteOutdatedEntries(validEntries: List<String>) = + keyCacheDao.getAllEntries().forEach { + Timber.v("valid entries for cache from server: $validEntries") + val file = File(it.path) + if (!validEntries.contains(it.id) || !file.exists()) { + Timber.w("${it.id} will be deleted from the cache") + deleteFileForEntry(it) + keyCacheDao.deleteEntry(it) + } } - } private fun deleteFileForEntry(entry: KeyCacheEntity) = File(entry.path).delete() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CachedKeyFileHolder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CachedKeyFileHolder.kt index be5b2edf7..15437cf47 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CachedKeyFileHolder.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CachedKeyFileHolder.kt @@ -91,9 +91,11 @@ object CachedKeyFileHolder { ) } } else { + val uuidListFromServer = serverDates + .map { getURLForDay(it).generateCacheKeyFromString() } // queries will be executed after the "query plan" was set val deferredQueries: MutableCollection<Deferred<Any>> = mutableListOf() - keyCache.deleteOutdatedEntries() + keyCache.deleteOutdatedEntries(uuidListFromServer) val missingDays = getMissingDaysFromDiff(serverDates) if (missingDays.isNotEmpty()) { // we have a date difference diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/CachedKeyFileHolderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/CachedKeyFileHolderTest.kt index d796b4c7e..b03e57dd7 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/CachedKeyFileHolderTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/CachedKeyFileHolderTest.kt @@ -37,7 +37,7 @@ class CachedKeyFileHolderTest { every { CoronaWarnApplication.getAppContext() } returns context every { KeyCacheRepository.getDateRepository(any()) } returns keyCacheRepository mockkObject(CachedKeyFileHolder) - coEvery { keyCacheRepository.deleteOutdatedEntries() } just Runs + coEvery { keyCacheRepository.deleteOutdatedEntries(any()) } just Runs } /** @@ -60,7 +60,7 @@ class CachedKeyFileHolderTest { coVerifyOrder { CachedKeyFileHolder.asyncFetchFiles(date) CachedKeyFileHolder["getDatesFromServer"]() - keyCacheRepository.deleteOutdatedEntries() + keyCacheRepository.deleteOutdatedEntries(any()) CachedKeyFileHolder["getMissingDaysFromDiff"](arrayListOf<String>()) keyCacheRepository.getDates() keyCacheRepository.getFilesFromEntries() -- GitLab