diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt index 072013415b..98eaf84de2 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt @@ -61,6 +61,9 @@ object SettingsDownloadScreen : SearchableSettings { allCategories = allCategories, ), getDownloadAheadGroup(downloadPreferences = downloadPreferences), + // KMK --> + getDownloadCacheRenewInterval(downloadPreferences = downloadPreferences), + // KMK <-- ) } @@ -190,4 +193,30 @@ object SettingsDownloadScreen : SearchableSettings { ), ) } + + // KMK --> + @Composable + private fun getDownloadCacheRenewInterval( + downloadPreferences: DownloadPreferences, + ): Preference.PreferenceGroup { + return Preference.PreferenceGroup( + title = stringResource(MR.strings.download_cache_renew_interval), + preferenceItems = persistentListOf( + Preference.PreferenceItem.ListPreference( + pref = downloadPreferences.downloadCacheRenewInterval(), + title = stringResource(MR.strings.download_cache_renew_interval), + entries = persistentMapOf( + -1 to stringResource(MR.strings.download_cache_renew_interval_manual), + 1 to stringResource(MR.strings.download_cache_renew_interval_1hour), + 2 to stringResource(MR.strings.download_cache_renew_interval_2hour), + 6 to stringResource(MR.strings.download_cache_renew_interval_6hour), + 12 to stringResource(MR.strings.download_cache_renew_interval_12hour), + 24 to stringResource(MR.strings.download_cache_renew_interval_24hour), + ), + ), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_cache_renew_interval_info)), + ), + ) + } + // KMK <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index 57c416bde6..75c0468c83 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -45,6 +45,7 @@ import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter +import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.storage.service.StorageManager @@ -69,6 +70,9 @@ class DownloadCache( ) { private val scope = CoroutineScope(Dispatchers.IO) + // KMK --> + private val downloadPreferences: DownloadPreferences = Injekt.get() + // KMK <-- private val _changes: Channel = Channel(Channel.UNLIMITED) val changes = _changes.receiveAsFlow() @@ -79,7 +83,11 @@ class DownloadCache( * The interval after which this cache should be invalidated. 1 hour shouldn't cause major * issues, as the cache is only used for UI feedback. */ - private val renewInterval = 1.hours.inWholeMilliseconds + private val renewInterval //= 1.hours.inWholeMilliseconds + // KMK --> + get() = downloadPreferences.downloadCacheRenewInterval().get() + .hours.inWholeMilliseconds + // KMK <-- /** * The last time the cache was refreshed. @@ -320,7 +328,7 @@ class DownloadCache( lastRenew = 0L renewalJob?.cancel() diskCacheFile.delete() - renewCache() + renewCache(/* KMK --> */ 0L /* KMK <-- */) } // KMK --> @@ -335,9 +343,9 @@ class DownloadCache( /** * Renews the downloads cache. */ - private fun renewCache() { + private fun renewCache(/* KMK --> */ renewInterval: Long = this.renewInterval /* KMK <-- */) { // Avoid renewing cache if in the process nor too often - if (lastRenew + renewInterval >= System.currentTimeMillis() || renewalJob?.isActive == true) { + if (/* KMK --> */ renewInterval < 0L || /* KMK <-- */ lastRenew + renewInterval >= System.currentTimeMillis() || renewalJob?.isActive == true) { return } diff --git a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt index a0625e5a7f..96af591e53 100644 --- a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt @@ -42,4 +42,8 @@ class DownloadPreferences( "download_new_categories_exclude", emptySet(), ) + + // KMK --> + fun downloadCacheRenewInterval() = preferenceStore.getInt("download_cache_renew_interval", 1) + // KMK <-- } diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index 42bdc9bca6..5c7ff31cfe 100644 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -489,6 +489,14 @@ Save as CBZ archive Split tall images Improves reader performance + Download cache renew interval + Manual + 1 hour + 2 hours + 6 hours + 12 hours + 1 day + If set to "manual", either refresh each manga or using the "Invalidate downloads index" action in "Advanced" Tracking guide