Browse Source

Add reindex downloads description

Closes #8546
Also disable sound for the notification and cancel running indexing job if invalidating.
arkon 2 years ago
parent
commit
2d86f69caa

+ 1 - 0
app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt

@@ -191,6 +191,7 @@ class SettingsAdvancedScreen : SearchableSettings {
                 ),
                 Preference.PreferenceItem.TextPreference(
                     title = stringResource(R.string.pref_invalidate_download_cache),
+                    subtitle = stringResource(R.string.pref_invalidate_download_cache_summary),
                     onClick = { Injekt.get<DownloadCache>().invalidateCache() },
                 ),
                 Preference.PreferenceItem.TextPreference(

+ 50 - 52
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt

@@ -222,6 +222,7 @@ class DownloadCache(
 
     fun invalidateCache() {
         lastRenew = 0L
+        renewalJob?.cancel()
     }
 
     /**
@@ -242,70 +243,67 @@ class DownloadCache(
         }
 
         renewalJob = scope.launchIO {
-            try {
-                notifier.onCacheProgress()
+            notifier.onCacheProgress()
 
-                var sources = getSources()
+            var sources = getSources()
 
-                // Try to wait until extensions and sources have loaded
-                withTimeout(30.seconds) {
-                    while (!extensionManager.isInitialized) {
-                        delay(2.seconds)
-                    }
+            // Try to wait until extensions and sources have loaded
+            withTimeout(30.seconds) {
+                while (!extensionManager.isInitialized) {
+                    delay(2.seconds)
+                }
 
-                    while (sources.isEmpty()) {
-                        delay(2.seconds)
-                        sources = getSources()
-                    }
+                while (sources.isEmpty()) {
+                    delay(2.seconds)
+                    sources = getSources()
                 }
+            }
 
-                val sourceDirs = rootDownloadsDir.dir.listFiles().orEmpty()
-                    .associate { it.name to SourceDirectory(it) }
-                    .mapNotNullKeys { entry ->
-                        sources.find {
-                            provider.getSourceDirName(it).equals(entry.key, ignoreCase = true)
-                        }?.id
-                    }
+            val sourceDirs = rootDownloadsDir.dir.listFiles().orEmpty()
+                .associate { it.name to SourceDirectory(it) }
+                .mapNotNullKeys { entry ->
+                    sources.find {
+                        provider.getSourceDirName(it).equals(entry.key, ignoreCase = true)
+                    }?.id
+                }
 
-                rootDownloadsDir.sourceDirs = sourceDirs
-
-                sourceDirs.values
-                    .map { sourceDir ->
-                        async {
-                            val mangaDirs = sourceDir.dir.listFiles().orEmpty()
-                                .filterNot { it.name.isNullOrBlank() }
-                                .associate { it.name!! to MangaDirectory(it) }
-
-                            sourceDir.mangaDirs = ConcurrentHashMap(mangaDirs)
-
-                            mangaDirs.values.forEach { mangaDir ->
-                                val chapterDirs = mangaDir.dir.listFiles().orEmpty()
-                                    .mapNotNull {
-                                        when {
-                                            // Ignore incomplete downloads
-                                            it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
-                                            // Folder of images
-                                            it.isDirectory -> it.name
-                                            // CBZ files
-                                            it.isFile && it.name?.endsWith(".cbz") == true -> it.name!!.replace(".cbz", "")
-                                            // Anything else is irrelevant
-                                            else -> null
-                                        }
+            rootDownloadsDir.sourceDirs = sourceDirs
+
+            sourceDirs.values
+                .map { sourceDir ->
+                    async {
+                        val mangaDirs = sourceDir.dir.listFiles().orEmpty()
+                            .filterNot { it.name.isNullOrBlank() }
+                            .associate { it.name!! to MangaDirectory(it) }
+
+                        sourceDir.mangaDirs = ConcurrentHashMap(mangaDirs)
+
+                        mangaDirs.values.forEach { mangaDir ->
+                            val chapterDirs = mangaDir.dir.listFiles().orEmpty()
+                                .mapNotNull {
+                                    when {
+                                        // Ignore incomplete downloads
+                                        it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
+                                        // Folder of images
+                                        it.isDirectory -> it.name
+                                        // CBZ files
+                                        it.isFile && it.name?.endsWith(".cbz") == true -> it.name!!.replace(".cbz", "")
+                                        // Anything else is irrelevant
+                                        else -> null
                                     }
-                                    .toMutableSet()
+                                }
+                                .toMutableSet()
 
-                                mangaDir.chapterDirs = chapterDirs
-                            }
+                            mangaDir.chapterDirs = chapterDirs
                         }
                     }
-                    .awaitAll()
+                }
+                .awaitAll()
 
-                lastRenew = System.currentTimeMillis()
-                notifyChanges()
-            } finally {
-                notifier.dismissCacheProgress()
-            }
+            lastRenew = System.currentTimeMillis()
+            notifyChanges()
         }
+        renewalJob?.invokeOnCompletion { notifier.dismissCacheProgress() }
     }
 
     private fun getSources(): List<Source> {

+ 1 - 0
app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt

@@ -159,6 +159,7 @@ object Notifications {
                     setName(context.getString(R.string.channel_downloader_cache))
                     setGroup(GROUP_DOWNLOADER)
                     setShowBadge(false)
+                    setSound(null, null)
                 },
                 buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) {
                     setName(context.getString(R.string.channel_progress))

+ 1 - 0
i18n/src/main/res/values/strings.xml

@@ -505,6 +505,7 @@
     <string name="cache_delete_error">Error occurred while clearing</string>
     <string name="pref_auto_clear_chapter_cache">Clear chapter cache on app close</string>
     <string name="pref_invalidate_download_cache">Invalidate downloads index</string>
+    <string name="pref_invalidate_download_cache_summary">Force app to recheck downloaded chapters</string>
     <string name="pref_clear_database">Clear database</string>
     <string name="pref_clear_database_summary">Delete history for entries that are not saved in your library</string>
     <string name="clear_database_source_item_count">%1$d non-library entries in database</string>