mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add reindex downloads description
Closes #8546 Also disable sound for the notification and cancel running indexing job if invalidating.
This commit is contained in:
		| @@ -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( | ||||
|   | ||||
| @@ -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) | ||||
|                     } | ||||
|  | ||||
|                     while (sources.isEmpty()) { | ||||
|                         delay(2.seconds) | ||||
|                         sources = getSources() | ||||
|                     } | ||||
|             // Try to wait until extensions and sources have loaded | ||||
|             withTimeout(30.seconds) { | ||||
|                 while (!extensionManager.isInitialized) { | ||||
|                     delay(2.seconds) | ||||
|                 } | ||||
|  | ||||
|                 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 | ||||
|                     } | ||||
|                 while (sources.isEmpty()) { | ||||
|                     delay(2.seconds) | ||||
|                     sources = getSources() | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|                 rootDownloadsDir.sourceDirs = sourceDirs | ||||
|             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 | ||||
|                 } | ||||
|  | ||||
|                 sourceDirs.values | ||||
|                     .map { sourceDir -> | ||||
|                         async { | ||||
|                             val mangaDirs = sourceDir.dir.listFiles().orEmpty() | ||||
|                                 .filterNot { it.name.isNullOrBlank() } | ||||
|                                 .associate { it.name!! to MangaDirectory(it) } | ||||
|             rootDownloadsDir.sourceDirs = sourceDirs | ||||
|  | ||||
|                             sourceDir.mangaDirs = ConcurrentHashMap(mangaDirs) | ||||
|             sourceDirs.values | ||||
|                 .map { sourceDir -> | ||||
|                     async { | ||||
|                         val mangaDirs = sourceDir.dir.listFiles().orEmpty() | ||||
|                             .filterNot { it.name.isNullOrBlank() } | ||||
|                             .associate { it.name!! to MangaDirectory(it) } | ||||
|  | ||||
|                             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 | ||||
|                                         } | ||||
|                         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> { | ||||
|   | ||||
| @@ -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)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user