diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt index 5fb0c589..1ed4138a 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/Anime.kt @@ -23,8 +23,8 @@ import suwayomi.tachidesk.anime.model.table.AnimeStatus import suwayomi.tachidesk.anime.model.table.AnimeTable import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.clearCachedImage -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.clearCachedImage +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getCachedImageResponse import suwayomi.tachidesk.server.ApplicationDirs import java.io.InputStream diff --git a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt index a4e62408..25bd3f2f 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/anime/impl/extension/Extension.kt @@ -40,7 +40,7 @@ import suwayomi.tachidesk.anime.impl.util.PackageTools.trustedSignatures import suwayomi.tachidesk.anime.model.table.AnimeExtensionTable import suwayomi.tachidesk.anime.model.table.AnimeSourceTable import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getCachedImageResponse import suwayomi.tachidesk.server.ApplicationDirs import uy.kohesive.injekt.injectLazy import java.io.File diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/ExtensionController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/ExtensionController.kt index 7e1501ab..7ca59cb4 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/ExtensionController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/ExtensionController.kt @@ -71,9 +71,10 @@ object ExtensionController { /** icon for extension named `apkName` */ fun icon(ctx: Context) { val apkName = ctx.pathParam("apkName") + val useCache = ctx.queryParam("useCache")?.toBoolean() ?: true ctx.future( - future { Extension.getExtensionIcon(apkName) } + future { Extension.getExtensionIcon(apkName, useCache) } .thenApply { ctx.header("content-type", it.second) it.first diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt index cc9852ac..5aa31f8f 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt @@ -31,9 +31,10 @@ object MangaController { /** manga thumbnail */ fun thumbnail(ctx: Context) { val mangaId = ctx.pathParam("mangaId").toInt() + val useCache = ctx.queryParam("useCache")?.toBoolean() ?: true ctx.future( - future { Manga.getMangaThumbnail(mangaId) } + future { Manga.getMangaThumbnail(mangaId, useCache) } .thenApply { ctx.header("content-type", it.second) it.first @@ -152,9 +153,10 @@ object MangaController { val mangaId = ctx.pathParam("mangaId").toInt() val chapterIndex = ctx.pathParam("chapterIndex").toInt() val index = ctx.pathParam("index").toInt() + val useCache = ctx.queryParam("useCache")?.toBoolean() ?: true ctx.future( - future { Page.getPageImage(mangaId, chapterIndex, index) } + future { Page.getPageImage(mangaId, chapterIndex, index, useCache) } .thenApply { ctx.header("content-type", it.second) it.first diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt index a42beba6..765e3053 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt @@ -23,7 +23,7 @@ import suwayomi.tachidesk.manga.impl.Page.getPageName import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource import suwayomi.tachidesk.manga.impl.util.getChapterDir import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass import suwayomi.tachidesk.manga.model.table.ChapterMetaTable import suwayomi.tachidesk.manga.model.table.ChapterTable @@ -233,7 +233,7 @@ object Chapter { private fun firstPageExists(mangaId: Int, chapterId: Int): Boolean { val chapterDir = getChapterDir(mangaId, chapterId) - return CachedImageResponse.findFileNameStartingWith( + return ImageResponse.findFileNameStartingWith( chapterDir, getPageName(0, chapterDir) ) != null diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt index b0c44539..3b53f612 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt @@ -22,8 +22,8 @@ import suwayomi.tachidesk.manga.impl.Source.getSource import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.clearCachedImage -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.clearCachedImage +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.impl.util.updateMangaDownloadDir import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass import suwayomi.tachidesk.manga.model.dataclass.toGenreList @@ -157,11 +157,11 @@ object Manga { } private val applicationDirs by DI.global.instance() - suspend fun getMangaThumbnail(mangaId: Int): Pair { + suspend fun getMangaThumbnail(mangaId: Int, useCache: Boolean): Pair { val saveDir = applicationDirs.mangaThumbnailsRoot val fileName = mangaId.toString() - return getCachedImageResponse(saveDir, fileName) { + return getImageResponse(saveDir, fileName, useCache) { val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } val sourceId = mangaEntry[MangaTable.sourceReference] diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt index 4c07caec..f9b7fc5e 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt @@ -20,8 +20,8 @@ import org.kodein.di.instance import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource import suwayomi.tachidesk.manga.impl.util.getChapterDir import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.manga.model.table.PageTable @@ -41,7 +41,7 @@ object Page { return page.imageUrl!! } - suspend fun getPageImage(mangaId: Int, chapterIndex: Int, index: Int): Pair { + suspend fun getPageImage(mangaId: Int, chapterIndex: Int, index: Int, useCache: Boolean = true): Pair { val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) val chapterEntry = transaction { @@ -69,7 +69,7 @@ object Page { } // is of directory format - return CachedImageResponse.getImageResponse { + return ImageResponse.getNoCacheImageResponse { source.fetchImage(tachiyomiPage).awaitSingle() } } @@ -87,14 +87,14 @@ object Page { File(chapterDir).mkdirs() val fileName = getPageName(index, chapterDir) // e.g. 001 - return getCachedImageResponse(chapterDir, fileName) { + return getImageResponse(chapterDir, fileName, useCache) { source.fetchImage(tachiyomiPage).awaitSingle() } } // TODO(v0.6.0) : zero based pages are deprecated fun getPageName(index: Int, chapterDir: String): String { - val zeroBasedPageExists = CachedImageResponse.findFileNameStartingWith( + val zeroBasedPageExists = ImageResponse.findFileNameStartingWith( chapterDir, formatPageName(0) ) != null diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt index e7160ffc..4cc29623 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt @@ -39,7 +39,7 @@ import suwayomi.tachidesk.manga.impl.util.PackageTools.dex2jar import suwayomi.tachidesk.manga.impl.util.PackageTools.getPackageInfo import suwayomi.tachidesk.manga.impl.util.PackageTools.loadExtensionSources import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.storage.CachedImageResponse.getCachedImageResponse +import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable import suwayomi.tachidesk.server.ApplicationDirs @@ -267,13 +267,13 @@ object Extension { return installExtension(pkgName) } - suspend fun getExtensionIcon(apkName: String): Pair { + suspend fun getExtensionIcon(apkName: String, useCache: Boolean): Pair { val iconUrl = if (apkName == "localSource") "" else transaction { ExtensionTable.select { ExtensionTable.apkName eq apkName }.first() }[ExtensionTable.iconUrl] val saveDir = "${applicationDirs.extensionsRoot}/icon" - return getCachedImageResponse(saveDir, apkName) { + return getImageResponse(saveDir, apkName, useCache) { network.client.newCall( GET(iconUrl) ).await() diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageResponse.kt similarity index 86% rename from server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt rename to server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageResponse.kt index 783acda2..1135e055 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/CachedImageResponse.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/storage/ImageResponse.kt @@ -13,7 +13,7 @@ import java.io.File import java.io.FileInputStream import java.io.InputStream -object CachedImageResponse { +object ImageResponse { private fun pathToInputStream(path: String): InputStream { return FileInputStream(path).buffered() } @@ -69,7 +69,7 @@ object CachedImageResponse { } } - suspend fun getImageResponse(fetcher: suspend () -> Response): Pair { + suspend fun getNoCacheImageResponse(fetcher: suspend () -> Response): Pair { val response = fetcher() if (response.code == 200) { @@ -86,4 +86,12 @@ object CachedImageResponse { throw Exception("request error! ${response.code}") } } + + suspend fun getImageResponse(saveDir: String, fileName: String, useCache: Boolean = false, fetcher: suspend () -> Response): Pair { + return if (useCache) { + getCachedImageResponse(saveDir, fileName, fetcher) + } else { + getNoCacheImageResponse(fetcher) + } + } }