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 f7255604..a30a83ef 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt @@ -21,9 +21,9 @@ import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.update import suwayomi.tachidesk.manga.impl.Manga.getManga import suwayomi.tachidesk.manga.impl.Page.getPageName -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.getChapterDir import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass import suwayomi.tachidesk.manga.model.dataclass.MangaChapterDataClass 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 8828e796..3ab4c664 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt @@ -21,9 +21,9 @@ import org.kodein.di.conf.global import org.kodein.di.instance import suwayomi.tachidesk.manga.impl.MangaList.proxyThumbnailUrl import suwayomi.tachidesk.manga.impl.Source.getSource -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle import suwayomi.tachidesk.manga.impl.util.network.await +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.clearCachedImage import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt index 2ff304d1..3017d8f8 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt @@ -13,8 +13,8 @@ import org.jetbrains.exposed.sql.insertAndGetId import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.transactions.transaction import suwayomi.tachidesk.manga.impl.Manga.getMangaMetaMap -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass import suwayomi.tachidesk.manga.model.dataclass.toGenreList 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 40820a30..52485420 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt @@ -17,9 +17,9 @@ import org.jetbrains.exposed.sql.update import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.getChapterDir import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt index 661337e4..a1193d78 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt @@ -10,8 +10,8 @@ package suwayomi.tachidesk.manga.impl import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import suwayomi.tachidesk.manga.impl.MangaList.processEntries -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass object Search { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt index f91e942d..fc3bb7c2 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt @@ -20,9 +20,9 @@ import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance import suwayomi.tachidesk.manga.impl.extension.Extension.getExtensionIconUrl -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSource -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getCatalogueSourceOrStub -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.invalidateSourceCache +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.invalidateSourceCache import suwayomi.tachidesk.manga.model.dataclass.SourceDataClass import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable 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 f9a51240..62a82d08 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 @@ -28,7 +28,6 @@ import org.kodein.di.conf.global import org.kodein.di.instance import suwayomi.tachidesk.manga.impl.extension.ExtensionsList.extensionTableAsDataClass import suwayomi.tachidesk.manga.impl.extension.github.ExtensionGithubApi -import suwayomi.tachidesk.manga.impl.util.GetHttpSource import suwayomi.tachidesk.manga.impl.util.PackageTools import suwayomi.tachidesk.manga.impl.util.PackageTools.EXTENSION_FEATURE import suwayomi.tachidesk.manga.impl.util.PackageTools.LIB_VERSION_MAX @@ -39,6 +38,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.source.GetCatalogueSource import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable @@ -240,7 +240,7 @@ object Extension { PackageTools.jarLoaderMap.remove(jarPath)?.close() // clear all loaded sources - sources.forEach { GetHttpSource.invalidateSourceCache(it) } + sources.forEach { GetCatalogueSource.invalidateSourceCache(it) } File(jarPath).delete() } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/DirName.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/DirName.kt index 4548837e..acef7f3d 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/DirName.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/DirName.kt @@ -12,6 +12,7 @@ import org.jetbrains.exposed.sql.transactions.transaction import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource import suwayomi.tachidesk.manga.impl.util.storage.SafePath import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.manga.model.table.MangaTable @@ -22,7 +23,7 @@ private val applicationDirs by DI.global.instance() fun getMangaDir(mangaId: Int): String { val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - val source = GetHttpSource.getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = GetCatalogueSource.getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) val sourceDir = source.toString() val mangaDir = SafePath.buildValidFilename(mangaEntry[MangaTable.title]) @@ -46,7 +47,7 @@ fun getChapterDir(mangaId: Int, chapterId: Int): String { /** return value says if rename/move was successful */ fun updateMangaDownloadDir(mangaId: Int, newTitle: String): Boolean { val mangaEntry = transaction { MangaTable.select { MangaTable.id eq mangaId }.first() } - val source = GetHttpSource.getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = GetCatalogueSource.getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) val sourceDir = source.toString() val mangaDir = SafePath.buildValidFilename(mangaEntry[MangaTable.title]) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt similarity index 56% rename from server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt rename to server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt index be07223d..9d015daf 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/GetHttpSource.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt @@ -1,4 +1,4 @@ -package suwayomi.tachidesk.manga.impl.util +package suwayomi.tachidesk.manga.impl.util.source /* * Copyright (C) Contributors to the Suwayomi project @@ -11,66 +11,24 @@ import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.local.LocalSource -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.transactions.transaction import org.kodein.di.DI import org.kodein.di.conf.global import org.kodein.di.instance -import rx.Observable import suwayomi.tachidesk.manga.impl.util.PackageTools.loadExtensionSources import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable import suwayomi.tachidesk.server.ApplicationDirs import java.util.concurrent.ConcurrentHashMap -object GetHttpSource { +object GetCatalogueSource { private val sourceCache = ConcurrentHashMap( mapOf(LocalSource.ID to LocalSource()) ) private val applicationDirs by DI.global.instance() - class StubSource(override val id: Long) : CatalogueSource { - override val lang: String = "other" - override val supportsLatest: Boolean = false - override val name: String - get() = id.toString() - override fun fetchPopularManga(page: Int): Observable { - return Observable.error(getSourceNotInstalledException()) - } - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - return Observable.error(getSourceNotInstalledException()) - } - override fun fetchLatestUpdates(page: Int): Observable { - return Observable.error(getSourceNotInstalledException()) - } - override fun getFilterList(): FilterList { - return FilterList() - } - override fun fetchMangaDetails(manga: SManga): Observable { - return Observable.error(getSourceNotInstalledException()) - } - override fun fetchChapterList(manga: SManga): Observable> { - return Observable.error(getSourceNotInstalledException()) - } - override fun fetchPageList(chapter: SChapter): Observable> { - return Observable.error(getSourceNotInstalledException()) - } - override fun toString(): String { - return name - } - private fun getSourceNotInstalledException(): SourceNotInstalledException { - return SourceNotInstalledException(id) - } - inner class SourceNotInstalledException(val id: Long) : - Exception("Source not installed: $id") - } - fun getCatalogueSource(sourceId: Long): CatalogueSource? { val cachedResult: CatalogueSource? = sourceCache[sourceId] if (cachedResult != null) { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/StubSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/StubSource.kt new file mode 100644 index 00000000..fbe3cd4c --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/StubSource.kt @@ -0,0 +1,62 @@ +package suwayomi.tachidesk.manga.impl.util.source + +/* + * Copyright (C) Contributors to the Suwayomi project + * + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 eu.kanade.tachiyomi.source.CatalogueSource +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import rx.Observable + +class StubSource(override val id: Long) : CatalogueSource { + override val lang: String = "other" + override val supportsLatest: Boolean = false + override val name: String + get() = id.toString() + + override fun fetchPopularManga(page: Int): Observable { + return Observable.error(getSourceNotInstalledException()) + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return Observable.error(getSourceNotInstalledException()) + } + + override fun fetchLatestUpdates(page: Int): Observable { + return Observable.error(getSourceNotInstalledException()) + } + + override fun getFilterList(): FilterList { + return FilterList() + } + + override fun fetchMangaDetails(manga: SManga): Observable { + return Observable.error(getSourceNotInstalledException()) + } + + override fun fetchChapterList(manga: SManga): Observable> { + return Observable.error(getSourceNotInstalledException()) + } + + override fun fetchPageList(chapter: SChapter): Observable> { + return Observable.error(getSourceNotInstalledException()) + } + + override fun toString(): String { + return name + } + + private fun getSourceNotInstalledException(): SourceNotInstalledException { + return SourceNotInstalledException(id) + } + + inner class SourceNotInstalledException(val id: Long) : + Exception("Source not installed: $id") +} diff --git a/server/src/test/kotlin/suwayomi/TestExtensions.kt b/server/src/test/kotlin/suwayomi/TestExtensions.kt index 2c6c658c..18aaf2c2 100644 --- a/server/src/test/kotlin/suwayomi/TestExtensions.kt +++ b/server/src/test/kotlin/suwayomi/TestExtensions.kt @@ -26,8 +26,8 @@ import suwayomi.tachidesk.manga.impl.extension.Extension.installExtension import suwayomi.tachidesk.manga.impl.extension.Extension.uninstallExtension import suwayomi.tachidesk.manga.impl.extension.Extension.updateExtension import suwayomi.tachidesk.manga.impl.extension.ExtensionsList.getExtensionList -import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle +import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSource import suwayomi.tachidesk.manga.model.dataclass.ExtensionDataClass import suwayomi.tachidesk.server.applicationSetup import java.io.File @@ -69,7 +69,7 @@ class TestExtensions { } } } - sources = getSourceList().map { getHttpSource(it.id.toLong()) } + sources = getSourceList().map { getCatalogueSource(it.id.toLong())!! as HttpSource } } setLoggingEnabled(true) File("tmp/TestDesk/sources.txt").writeText(sources.joinToString("\n") { "${it.name} - ${it.lang.uppercase()} - ${it.id}" })