mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Better ignore irrelevant files when indexing downloads
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
package eu.kanade.core.util
 | 
			
		||||
 | 
			
		||||
import androidx.compose.ui.util.fastForEach
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap
 | 
			
		||||
import kotlin.contracts.ExperimentalContracts
 | 
			
		||||
import kotlin.contracts.contract
 | 
			
		||||
 | 
			
		||||
@@ -20,15 +19,6 @@ fun <T : R, R : Any> List<T>.insertSeparators(
 | 
			
		||||
    return newList
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns a new map containing only the key entries of [transform] that are not null.
 | 
			
		||||
 */
 | 
			
		||||
inline fun <K, V, R> Map<out K, V>.mapNotNullKeys(transform: (Map.Entry<K?, V>) -> R?): ConcurrentHashMap<R, V> {
 | 
			
		||||
    val mutableMap = ConcurrentHashMap<R, V>()
 | 
			
		||||
    forEach { element -> transform(element)?.let { mutableMap[it] = element.value } }
 | 
			
		||||
    return mutableMap
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun <E> HashSet<E>.addOrRemove(value: E, shouldAdd: Boolean) {
 | 
			
		||||
    if (shouldAdd) {
 | 
			
		||||
        add(value)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@ import android.content.Context
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.core.net.toUri
 | 
			
		||||
import com.hippo.unifile.UniFile
 | 
			
		||||
import eu.kanade.core.util.mapNotNullKeys
 | 
			
		||||
import eu.kanade.tachiyomi.extension.ExtensionManager
 | 
			
		||||
import eu.kanade.tachiyomi.source.Source
 | 
			
		||||
import kotlinx.coroutines.CancellationException
 | 
			
		||||
@@ -327,14 +326,16 @@ class DownloadCache(
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id }
 | 
			
		||||
 | 
			
		||||
            rootDownloadsDirLock.withLock {
 | 
			
		||||
                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
 | 
			
		||||
                    .filter { it.isDirectory && !it.name.isNullOrBlank() }
 | 
			
		||||
                    .mapNotNull { dir ->
 | 
			
		||||
                        val sourceId = sourceMap[dir.name!!.lowercase()]
 | 
			
		||||
                        sourceId?.let { it to SourceDirectory(dir) }
 | 
			
		||||
                    }
 | 
			
		||||
                    .toMap()
 | 
			
		||||
 | 
			
		||||
                rootDownloadsDir.sourceDirs = sourceDirs
 | 
			
		||||
 | 
			
		||||
@@ -342,7 +343,7 @@ class DownloadCache(
 | 
			
		||||
                    .map { sourceDir ->
 | 
			
		||||
                        async {
 | 
			
		||||
                            sourceDir.mangaDirs = sourceDir.dir.listFiles().orEmpty()
 | 
			
		||||
                                .filterNot { it.name.isNullOrBlank() }
 | 
			
		||||
                                .filter { it.isDirectory && !it.name.isNullOrBlank() }
 | 
			
		||||
                                .associate { it.name!! to MangaDirectory(it) }
 | 
			
		||||
 | 
			
		||||
                            sourceDir.mangaDirs.values.forEach { mangaDir ->
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user