diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index fd0b1e4b3..1b371adf7 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -263,7 +263,7 @@ class DownloadManager(private val context: Context) { if (removeNonFavorite && !manga.favorite) { val mangaFolder = provider.getMangaDir(manga, source) - cleaned += 1 + (mangaFolder.listFiles()?.size ?: 0) + cleaned += 1 + mangaFolder.listFiles().orEmpty().size mangaFolder.delete() cache.removeManga(manga) return cleaned @@ -284,8 +284,7 @@ class DownloadManager(private val context: Context) { if (cache.getDownloadCount(manga) == 0) { val mangaFolder = provider.getMangaDir(manga, source) - val size = mangaFolder.listFiles()?.size ?: 0 - if (size == 0) { + if (!mangaFolder.listFiles().isNullOrEmpty()) { mangaFolder.delete() cache.removeManga(manga) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index 9b1f5e6e4..b99d84f1d 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -123,14 +123,12 @@ class DownloadProvider(private val context: Context) { source: Source ): List { val mangaDir = findMangaDir(manga, source) ?: return emptyList() - return mangaDir.listFiles()!!.asList().filter { - ( - chapters.find { chp -> - getValidChapterDirNames(chp).any { dir -> - mangaDir.findFile(dir) ?: mangaDir.findFile("$dir.cbz") != null - } - } == null - ) || it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true + return mangaDir.listFiles().orEmpty().asList().filter { + chapters.find { chp -> + getValidChapterDirNames(chp).any { dir -> + mangaDir.findFile(dir) ?: mangaDir.findFile("$dir.cbz") != null + } + } == null || it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true } } // SY <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 66489cb01..19e769b1b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -41,6 +41,7 @@ import eu.kanade.tachiyomi.util.preference.preferenceCategory import eu.kanade.tachiyomi.util.preference.summaryRes import eu.kanade.tachiyomi.util.preference.switchPreference import eu.kanade.tachiyomi.util.preference.titleRes +import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.toast import exh.debug.SettingsDebugController @@ -347,27 +348,28 @@ class SettingsAdvancedController : SettingsController() { private fun cleanupDownloads(removeRead: Boolean, removeNonFavorite: Boolean) { if (job?.isActive == true) return activity?.toast(R.string.starting_cleanup) - job = GlobalScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT) { + job = launchIO { val mangaList = db.getMangas().executeAsBlocking() - val sourceManager: SourceManager = Injekt.get() val downloadManager: DownloadManager = Injekt.get() var foldersCleared = 0 - val sources = sourceManager.getOnlineSources() - - for (source in sources) { + Injekt.get().getOnlineSources().forEach { source -> val mangaFolders = downloadManager.getMangaFolders(source) - val sourceManga = mangaList.filter { it.source == source.id } + val sourceManga = mangaList + .asSequence() + .filter { it.source == source.id } + .map { it to DiskUtil.buildValidFilename(it.originalTitle) } + .toList() - for (mangaFolder in mangaFolders) { - val manga = sourceManga.find { it.originalTitle == mangaFolder.name } + mangaFolders.forEach mangaFolder@{ mangaFolder -> + val manga = sourceManga.find { (_, folderName)-> folderName == mangaFolder.name }?.first if (manga == null) { // download is orphaned delete it - foldersCleared += 1 + (mangaFolder.listFiles()?.size ?: 0) + foldersCleared += 1 + (mangaFolder.listFiles().orEmpty().size) mangaFolder.delete() - continue + } else { + val chapterList = db.getChapters(manga).executeAsBlocking() + foldersCleared += downloadManager.cleanupChapters(chapterList, manga, source, removeRead, removeNonFavorite) } - val chapterList = db.getChapters(manga).executeAsBlocking() - foldersCleared += downloadManager.cleanupChapters(chapterList, manga, source, removeRead, removeNonFavorite) } } withUIContext {