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 92fb647955abfe21cc6ff76add9a8e8afde8986c..243a5b3004b408239381fe0a9ab06547fecb48f9 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 be5b2edf70b909a2fc43eacf02211adc088aea57..15437cf475839ca2d6fb7f8588fb58c37eac474e 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 d796b4c7e66fb9a2ea3ae2f7edb924abe990bf06..b03e57dd79478303134648a0bd26d9d8638d2b04 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()