Feature/decouple thumbnail downloads and cache (#581)

* Rename "DownloadedFilesProvider" to "ChaptersFilesProvider"

* Move files into sub packages

* Further abstract "DownloadedFilesProvider"

* Rename "getCachedImageResponse" to "getImageResponse"

* Extract getting cached image response into new function

* Decouple thumbnail cache and download

* Download and delete permanent thumbnails

When adding/removing manga from/to the library make sure the permanent thumbnail files will get handled properly

* Move thumbnail cache to actual temp folder

* Rename "mangaDownloadsRoot" to "downloadRoot"

* Move manga downloads into "mangas" subfolder

* Clear downloaded thumbnail
This commit is contained in:
schroda
2023-08-12 17:14:43 +02:00
committed by GitHub
parent b8b92c8d69
commit f2dd67d87f
19 changed files with 342 additions and 82 deletions

View File

@@ -7,6 +7,10 @@ package suwayomi.tachidesk.manga.impl
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.select
@@ -19,6 +23,8 @@ import suwayomi.tachidesk.manga.model.table.MangaTable
import java.time.Instant
object Library {
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
suspend fun addMangaToLibrary(mangaId: Int) {
val manga = getManga(mangaId)
if (!manga.inLibrary) {
@@ -41,6 +47,8 @@ object Library {
}
}
}
}.apply {
handleMangaThumbnail(mangaId, true)
}
}
}
@@ -52,6 +60,22 @@ object Library {
MangaTable.update({ MangaTable.id eq manga.id }) {
it[inLibrary] = false
}
}.apply {
handleMangaThumbnail(mangaId, false)
}
}
}
fun handleMangaThumbnail(mangaId: Int, inLibrary: Boolean) {
scope.launch {
try {
if (inLibrary) {
ThumbnailDownloadHelper.download(mangaId)
} else {
ThumbnailDownloadHelper.delete(mangaId)
}
} catch (e: Exception) {
// ignore
}
}
}