mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Check the actual folder when deleting source folder in case of stale cache
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user