Fix cleanup orphaned downloads removing valid downloads
This commit is contained in:
parent
be1e7f28ef
commit
4fa2c968a9
@ -263,7 +263,7 @@ class DownloadManager(private val context: Context) {
|
|||||||
|
|
||||||
if (removeNonFavorite && !manga.favorite) {
|
if (removeNonFavorite && !manga.favorite) {
|
||||||
val mangaFolder = provider.getMangaDir(manga, source)
|
val mangaFolder = provider.getMangaDir(manga, source)
|
||||||
cleaned += 1 + (mangaFolder.listFiles()?.size ?: 0)
|
cleaned += 1 + mangaFolder.listFiles().orEmpty().size
|
||||||
mangaFolder.delete()
|
mangaFolder.delete()
|
||||||
cache.removeManga(manga)
|
cache.removeManga(manga)
|
||||||
return cleaned
|
return cleaned
|
||||||
@ -284,8 +284,7 @@ class DownloadManager(private val context: Context) {
|
|||||||
|
|
||||||
if (cache.getDownloadCount(manga) == 0) {
|
if (cache.getDownloadCount(manga) == 0) {
|
||||||
val mangaFolder = provider.getMangaDir(manga, source)
|
val mangaFolder = provider.getMangaDir(manga, source)
|
||||||
val size = mangaFolder.listFiles()?.size ?: 0
|
if (!mangaFolder.listFiles().isNullOrEmpty()) {
|
||||||
if (size == 0) {
|
|
||||||
mangaFolder.delete()
|
mangaFolder.delete()
|
||||||
cache.removeManga(manga)
|
cache.removeManga(manga)
|
||||||
} else {
|
} else {
|
||||||
|
@ -123,14 +123,12 @@ class DownloadProvider(private val context: Context) {
|
|||||||
source: Source
|
source: Source
|
||||||
): List<UniFile> {
|
): List<UniFile> {
|
||||||
val mangaDir = findMangaDir(manga, source) ?: return emptyList()
|
val mangaDir = findMangaDir(manga, source) ?: return emptyList()
|
||||||
return mangaDir.listFiles()!!.asList().filter {
|
return mangaDir.listFiles().orEmpty().asList().filter {
|
||||||
(
|
chapters.find { chp ->
|
||||||
chapters.find { chp ->
|
getValidChapterDirNames(chp).any { dir ->
|
||||||
getValidChapterDirNames(chp).any { dir ->
|
mangaDir.findFile(dir) ?: mangaDir.findFile("$dir.cbz") != null
|
||||||
mangaDir.findFile(dir) ?: mangaDir.findFile("$dir.cbz") != null
|
}
|
||||||
}
|
} == null || it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true
|
||||||
} == null
|
|
||||||
) || it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
@ -41,6 +41,7 @@ import eu.kanade.tachiyomi.util.preference.preferenceCategory
|
|||||||
import eu.kanade.tachiyomi.util.preference.summaryRes
|
import eu.kanade.tachiyomi.util.preference.summaryRes
|
||||||
import eu.kanade.tachiyomi.util.preference.switchPreference
|
import eu.kanade.tachiyomi.util.preference.switchPreference
|
||||||
import eu.kanade.tachiyomi.util.preference.titleRes
|
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.powerManager
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import exh.debug.SettingsDebugController
|
import exh.debug.SettingsDebugController
|
||||||
@ -347,27 +348,28 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
private fun cleanupDownloads(removeRead: Boolean, removeNonFavorite: Boolean) {
|
private fun cleanupDownloads(removeRead: Boolean, removeNonFavorite: Boolean) {
|
||||||
if (job?.isActive == true) return
|
if (job?.isActive == true) return
|
||||||
activity?.toast(R.string.starting_cleanup)
|
activity?.toast(R.string.starting_cleanup)
|
||||||
job = GlobalScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT) {
|
job = launchIO {
|
||||||
val mangaList = db.getMangas().executeAsBlocking()
|
val mangaList = db.getMangas().executeAsBlocking()
|
||||||
val sourceManager: SourceManager = Injekt.get()
|
|
||||||
val downloadManager: DownloadManager = Injekt.get()
|
val downloadManager: DownloadManager = Injekt.get()
|
||||||
var foldersCleared = 0
|
var foldersCleared = 0
|
||||||
val sources = sourceManager.getOnlineSources()
|
Injekt.get<SourceManager>().getOnlineSources().forEach { source ->
|
||||||
|
|
||||||
for (source in sources) {
|
|
||||||
val mangaFolders = downloadManager.getMangaFolders(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) {
|
mangaFolders.forEach mangaFolder@{ mangaFolder ->
|
||||||
val manga = sourceManga.find { it.originalTitle == mangaFolder.name }
|
val manga = sourceManga.find { (_, folderName)-> folderName == mangaFolder.name }?.first
|
||||||
if (manga == null) {
|
if (manga == null) {
|
||||||
// download is orphaned delete it
|
// download is orphaned delete it
|
||||||
foldersCleared += 1 + (mangaFolder.listFiles()?.size ?: 0)
|
foldersCleared += 1 + (mangaFolder.listFiles().orEmpty().size)
|
||||||
mangaFolder.delete()
|
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 {
|
withUIContext {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user