Change "Invalidate downloads index" to "Reindex downloads"

This commit is contained in:
AntsyLich 2024-10-19 17:06:29 +06:00
parent 337806d9e1
commit d2afbfe4ed
No known key found for this signature in database
2 changed files with 36 additions and 37 deletions

View file

@ -96,13 +96,13 @@ class DownloadCache(
private val diskCacheFile: File private val diskCacheFile: File
get() = File(context.cacheDir, "dl_index_cache_v3") get() = File(context.cacheDir, "dl_index_cache_v3")
private val rootDownloadsDirLock = Mutex() private val rootDownloadsDirMutex = Mutex()
private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory()) private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory())
init { init {
// Attempt to read cache file // Attempt to read cache file
scope.launch { scope.launch {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
try { try {
if (diskCacheFile.exists()) { if (diskCacheFile.exists()) {
val diskCache = diskCacheFile.inputStream().use { val diskCache = diskCacheFile.inputStream().use {
@ -112,7 +112,7 @@ class DownloadCache(
lastRenew = System.currentTimeMillis() lastRenew = System.currentTimeMillis()
} }
} catch (e: Throwable) { } catch (e: Throwable) {
logcat(LogPriority.ERROR, e) { "Failed to initialize disk cache" } logcat(LogPriority.ERROR, e) { "Failed to initialize from disk cache" }
diskCacheFile.delete() diskCacheFile.delete()
} }
} }
@ -198,7 +198,7 @@ class DownloadCache(
* @param manga the manga of the chapter. * @param manga the manga of the chapter.
*/ */
suspend fun addChapter(chapterDirName: String, mangaUniFile: UniFile, manga: Manga) { suspend fun addChapter(chapterDirName: String, mangaUniFile: UniFile, manga: Manga) {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
// Retrieve the cached source directory or cache a new one // Retrieve the cached source directory or cache a new one
var sourceDir = rootDownloadsDir.sourceDirs[manga.source] var sourceDir = rootDownloadsDir.sourceDirs[manga.source]
if (sourceDir == null) { if (sourceDir == null) {
@ -230,7 +230,7 @@ class DownloadCache(
* @param manga the manga of the chapter. * @param manga the manga of the chapter.
*/ */
suspend fun removeChapter(chapter: Chapter, manga: Manga) { suspend fun removeChapter(chapter: Chapter, manga: Manga) {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return
provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach { provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {
@ -250,7 +250,7 @@ class DownloadCache(
* @param manga the manga of the chapter. * @param manga the manga of the chapter.
*/ */
suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) { suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return
chapters.forEach { chapter -> chapters.forEach { chapter ->
@ -271,7 +271,7 @@ class DownloadCache(
* @param manga the manga to remove. * @param manga the manga to remove.
*/ */
suspend fun removeManga(manga: Manga) { suspend fun removeManga(manga: Manga) {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return
val mangaDirName = provider.getMangaDirName(manga.title) val mangaDirName = provider.getMangaDirName(manga.title)
if (sourceDir.mangaDirs.containsKey(mangaDirName)) { if (sourceDir.mangaDirs.containsKey(mangaDirName)) {
@ -283,7 +283,7 @@ class DownloadCache(
} }
suspend fun removeSource(source: Source) { suspend fun removeSource(source: Source) {
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
rootDownloadsDir.sourceDirs -= source.id rootDownloadsDir.sourceDirs -= source.id
} }
@ -322,10 +322,10 @@ class DownloadCache(
val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id } val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id }
rootDownloadsDirLock.withLock { rootDownloadsDirMutex.withLock {
rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory()) val updatedRootDir = RootDirectory(storageManager.getDownloadsDirectory())
val sourceDirs = rootDownloadsDir.dir?.listFiles().orEmpty() updatedRootDir.sourceDirs = updatedRootDir.dir?.listFiles().orEmpty()
.filter { it.isDirectory && !it.name.isNullOrBlank() } .filter { it.isDirectory && !it.name.isNullOrBlank() }
.mapNotNull { dir -> .mapNotNull { dir ->
val sourceId = sourceMap[dir.name!!.lowercase()] val sourceId = sourceMap[dir.name!!.lowercase()]
@ -333,36 +333,35 @@ class DownloadCache(
} }
.toMap() .toMap()
rootDownloadsDir.sourceDirs = sourceDirs updatedRootDir.sourceDirs.values.map { sourceDir ->
async {
sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty()
.filter { it.isDirectory && !it.name.isNullOrBlank() }
.associate { it.name!! to MangaDirectory(it) }
sourceDirs.values sourceDir.mangaDirs.values.forEach { mangaDir ->
.map { sourceDir -> val chapterDirs = mangaDir.dir?.listFiles().orEmpty()
async { .mapNotNull {
sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty() when {
.filter { it.isDirectory && !it.name.isNullOrBlank() } // Ignore incomplete downloads
.associate { it.name!! to MangaDirectory(it) } it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
// Folder of images
sourceDir.mangaDirs.values.forEach { mangaDir -> it.isDirectory -> it.name
val chapterDirs = mangaDir.dir?.listFiles().orEmpty() // CBZ files
.mapNotNull { it.isFile && it.extension == "cbz" -> it.nameWithoutExtension
when { // Anything else is irrelevant
// Ignore incomplete downloads else -> null
it.name?.endsWith(Downloader.TMP_DIR_SUFFIX) == true -> null
// Folder of images
it.isDirectory -> it.name
// CBZ files
it.isFile && it.extension == "cbz" -> it.nameWithoutExtension
// Anything else is irrelevant
else -> null
}
} }
.toMutableSet() }
.toMutableSet()
mangaDir.chapterDirs = chapterDirs mangaDir.chapterDirs = chapterDirs
}
} }
} }
.awaitAll() }
.awaitAll()
rootDownloadsDir = updatedRootDir
} }
_isInitializing.emit(false) _isInitializing.emit(false)

View file

@ -582,7 +582,7 @@
<string name="pref_reset_user_agent_string">Reset default user agent string</string> <string name="pref_reset_user_agent_string">Reset default user agent string</string>
<string name="requires_app_restart">Requires app restart to take effect</string> <string name="requires_app_restart">Requires app restart to take effect</string>
<string name="cookies_cleared">Cookies cleared</string> <string name="cookies_cleared">Cookies cleared</string>
<string name="pref_invalidate_download_cache">Invalidate downloads index</string> <string name="pref_invalidate_download_cache">Reindex downloads</string>
<string name="pref_invalidate_download_cache_summary">Force app to recheck downloaded chapters</string> <string name="pref_invalidate_download_cache_summary">Force app to recheck downloaded chapters</string>
<string name="download_cache_invalidated">Downloads index invalidated</string> <string name="download_cache_invalidated">Downloads index invalidated</string>
<string name="pref_clear_database">Clear database</string> <string name="pref_clear_database">Clear database</string>