Ver Fonte

Check the actual folder when deleting source folder in case of stale cache

arkon há 2 anos atrás
pai
commit
f9bbbce466

+ 2 - 16
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt

@@ -6,7 +6,6 @@ import com.hippo.unifile.UniFile
 import eu.kanade.domain.manga.model.Manga
 import eu.kanade.tachiyomi.data.database.models.Chapter
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.SourceManager
 import kotlinx.coroutines.flow.onEach
 import uy.kohesive.injekt.Injekt
@@ -114,15 +113,6 @@ class DownloadCache(
         return 0
     }
 
-    /**
-     * Returns true if source has download
-     *
-     * @param source the source to check.
-     */
-    fun sourceHasDownload(source: Source): Boolean {
-        return rootDir.files[source.id]?.files?.size?.let { it > 0 } ?: false
-    }
-
     /**
      * Checks if the cache needs a renewal and performs it if needed.
      */
@@ -138,17 +128,13 @@ class DownloadCache(
      * Renews the downloads cache.
      */
     private fun renew() {
-        val onlineSources = sourceManager.getOnlineSources()
-
-        val stubSources = sourceManager.getStubSources()
-
-        val allSource = onlineSources + stubSources
+        val sources = sourceManager.getOnlineSources() + sourceManager.getStubSources()
 
         val sourceDirs = rootDir.dir.listFiles()
             .orEmpty()
             .associate { it.name to SourceDirectory(it) }
             .mapNotNullKeys { entry ->
-                allSource.find { provider.getSourceDirName(it).equals(entry.key, ignoreCase = true) }?.id
+                sources.find { provider.getSourceDirName(it).equals(entry.key, ignoreCase = true) }?.id
             }
 
         rootDir.files = sourceDirs

+ 9 - 3
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt

@@ -279,14 +279,20 @@ class DownloadManager(
             val chapterDirs = provider.findChapterDirs(filteredChapters, manga, source)
             chapterDirs.forEach { it.delete() }
             cache.removeChapters(filteredChapters, manga)
-            if (cache.getDownloadCount(manga) == 0) { // Delete manga directory if empty
+
+            // Delete manga directory if empty
+            if (cache.getDownloadCount(manga) == 0) {
                 chapterDirs.firstOrNull()?.parentFile?.delete()
                 cache.removeManga(manga)
             }
-            if (!cache.sourceHasDownload(source)) { // Delete source directory if empty
-                provider.findSourceDir(source)?.delete()
+
+            // Delete source directory if empty
+            val sourceDir = provider.findSourceDir(source)
+            if (sourceDir?.listFiles()?.isEmpty() == true) {
+                sourceDir.delete()
             }
         }
+
         return filteredChapters
     }