Эх сурвалжийг харах

Better ignore irrelevant files when indexing downloads

arkon 1 жил өмнө
parent
commit
c06beac660

+ 0 - 10
app/src/main/java/eu/kanade/core/util/CollectionUtils.kt

@@ -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)

+ 8 - 7
app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt

@@ -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 ->