From 35b48114c61cc89700194781e344059d468ad935 Mon Sep 17 00:00:00 2001 From: Mitchell Syer Date: Sun, 28 Jun 2026 14:25:37 -0400 Subject: [PATCH] Use Plain Source over CatalogueSource (#2141) --- .../kanade/tachiyomi/network/NetworkHelper.kt | 4 +-- .../tachiyomi/source/local/LocalSource.kt | 4 +-- .../graphql/mutations/SourceMutation.kt | 4 +-- .../tachidesk/graphql/types/SourceType.kt | 26 +++++++++---------- .../suwayomi/tachidesk/manga/impl/Chapter.kt | 8 +++--- .../suwayomi/tachidesk/manga/impl/Manga.kt | 16 ++++++------ .../tachidesk/manga/impl/MangaList.kt | 4 +-- .../suwayomi/tachidesk/manga/impl/Page.kt | 4 +-- .../suwayomi/tachidesk/manga/impl/Search.kt | 16 ++++++------ .../suwayomi/tachidesk/manga/impl/Source.kt | 14 +++++----- .../manga/impl/chapter/ChapterForDownload.kt | 4 +-- .../manga/impl/extension/Extension.kt | 9 +++---- .../tachidesk/manga/impl/util/DirName.kt | 4 +-- .../{GetCatalogueSource.kt => GetSource.kt} | 21 +++++++-------- .../opds/repository/MangaRepository.kt | 4 +-- .../test/kotlin/masstest/CloudFlareTest.kt | 4 +-- .../masstest/TestExtensionCompatibility.kt | 4 +-- .../tachidesk/manga/impl/SearchTest.kt | 12 ++++----- 18 files changed, 80 insertions(+), 82 deletions(-) rename server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/{GetCatalogueSource.kt => GetSource.kt} (79%) diff --git a/server/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt b/server/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt index 9b6b19bce..0d0fb65bf 100644 --- a/server/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/server/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.onEach import okhttp3.Cache import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource import java.net.CookieHandler import java.net.CookieManager import java.net.CookiePolicy @@ -62,7 +62,7 @@ class NetworkHelper( userAgent .drop(1) .onEach { - GetCatalogueSource.unregisterAllCatalogueSources() // need to reset the headers + GetSource.unregisterAllSources() // need to reset the headers }.launchIn(GlobalScope) } diff --git a/server/src/main/kotlin/eu/kanade/tachiyomi/source/local/LocalSource.kt b/server/src/main/kotlin/eu/kanade/tachiyomi/source/local/LocalSource.kt index 0dc2b986a..fc2a4fc28 100644 --- a/server/src/main/kotlin/eu/kanade/tachiyomi/source/local/LocalSource.kt +++ b/server/src/main/kotlin/eu/kanade/tachiyomi/source/local/LocalSource.kt @@ -44,7 +44,7 @@ import org.jetbrains.exposed.v1.jdbc.insert import org.jetbrains.exposed.v1.jdbc.insertAndGetId import org.jetbrains.exposed.v1.jdbc.selectAll import org.jetbrains.exposed.v1.jdbc.transactions.transaction -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.registerCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource.registerSource import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable @@ -497,7 +497,7 @@ class LocalSource( } val fs = LocalSourceFileSystem(applicationDirs) - registerCatalogueSource(ID to LocalSource(fs, LocalCoverManager(fs))) + registerSource(ID to LocalSource(fs, LocalCoverManager(fs))) } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SourceMutation.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SourceMutation.kt index 54bbfcb31..dcf255695 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SourceMutation.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SourceMutation.kt @@ -28,7 +28,7 @@ import suwayomi.tachidesk.graphql.types.preferenceOf import suwayomi.tachidesk.graphql.types.updateFilterList import suwayomi.tachidesk.manga.impl.MangaList.insertOrUpdate import suwayomi.tachidesk.manga.impl.Source -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.manga.model.table.SourceMetaTable import suwayomi.tachidesk.manga.model.table.SourceTable @@ -256,7 +256,7 @@ class SourceMutation { val (clientMutationId, sourceId, type, page, query, filters) = input return future { - val source = GetCatalogueSource.getCatalogueSourceOrNull(sourceId)!! + val source = GetSource.getSourceOrNull(sourceId)!! val mangasPage = when (type) { FetchSourceMangaType.SEARCH -> { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SourceType.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SourceType.kt index 94d41b58e..f35f2b042 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SourceType.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SourceType.kt @@ -9,8 +9,8 @@ package suwayomi.tachidesk.graphql.types import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated import com.expediagroup.graphql.server.extensions.getValueFromDataLoader -import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.ConfigurableSource +import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.online.HttpSource import graphql.schema.DataFetchingEnvironment @@ -24,8 +24,8 @@ import suwayomi.tachidesk.graphql.server.primitives.NodeList import suwayomi.tachidesk.graphql.server.primitives.PageInfo import suwayomi.tachidesk.manga.impl.Source.getSourcePreferencesRaw import suwayomi.tachidesk.manga.impl.extension.Extension -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.ContentWarning import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable @@ -53,18 +53,18 @@ class SourceType( @GraphQLDeprecated("", ReplaceWith("homeUrl")) val baseUrl: String?, ) : Node { - constructor(row: ResultRow, sourceExtension: ResultRow, catalogueSource: CatalogueSource) : this( + constructor(row: ResultRow, sourceExtension: ResultRow, source: Source) : this( id = row[SourceTable.id].value, name = row[SourceTable.name], lang = row[SourceTable.lang], contentWarning = ContentWarning.valueOf(row[SourceTable.contentWarning]), iconUrl = Extension.proxyExtensionIconUrl(sourceExtension[ExtensionTable.pkgName]), - supportsLatest = catalogueSource.supportsLatest, - isConfigurable = catalogueSource is ConfigurableSource, + supportsLatest = source.supportsLatest, + isConfigurable = source is ConfigurableSource, isNsfw = row[SourceTable.contentWarning] >= ContentWarning.MIXED.ordinal, - displayName = catalogueSource.toString(), - homeUrl = runCatching { (catalogueSource as? HttpSource)?.getHomeUrl() }.getOrNull(), - baseUrl = runCatching { (catalogueSource as? HttpSource)?.baseUrl }.getOrNull(), + displayName = source.toString(), + homeUrl = runCatching { (source as? HttpSource)?.getHomeUrl() }.getOrNull(), + baseUrl = runCatching { (source as? HttpSource)?.baseUrl }.getOrNull(), ) fun manga(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture = @@ -75,7 +75,7 @@ class SourceType( fun preferences(): List = getSourcePreferencesRaw(id).map { preferenceOf(it) } - fun filters(): List = getCatalogueSourceOrStub(id).getFilterList().map { filterOf(it) } + fun filters(): List = getSourceOrStub(id).getFilterList().map { filterOf(it) } fun meta(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture> = dataFetchingEnvironment.getValueFromDataLoader>("SourceMetaDataLoader", id) @@ -84,8 +84,8 @@ class SourceType( @Suppress("ktlint:standard:function-naming") fun SourceType(row: ResultRow): SourceType? { val catalogueSource = - GetCatalogueSource - .getCatalogueSourceOrNull(row[SourceTable.id].value) + GetSource + .getSourceOrNull(row[SourceTable.id].value) ?: return null val sourceExtension = if (row.hasValue(ExtensionTable.id)) { @@ -296,7 +296,7 @@ data class FilterChange( ) fun updateFilterList( - source: CatalogueSource, + source: Source, changes: List?, ): FilterList { val filterList = source.getFilterList() 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 d2758c324..1985447e6 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt @@ -7,7 +7,7 @@ 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 eu.kanade.tachiyomi.source.CatalogueSource +import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.UpdateStrategy @@ -38,7 +38,7 @@ import org.jetbrains.exposed.v1.jdbc.update import suwayomi.tachidesk.manga.impl.download.DownloadManager import suwayomi.tachidesk.manga.impl.download.DownloadManager.EnqueueInput import suwayomi.tachidesk.manga.impl.track.Track -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass import suwayomi.tachidesk.manga.model.dataclass.MangaChapterDataClass import suwayomi.tachidesk.manga.model.dataclass.PaginatedList @@ -119,7 +119,7 @@ object Chapter { transaction { MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() } - val source = getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = getSourceOrStub(mangaEntry[MangaTable.sourceReference]) val chapters = Manga @@ -139,7 +139,7 @@ object Chapter { fun updateChapterListDatabase( mangaEntry: ResultRow, chapters: List, - source: CatalogueSource, + source: Source, ): List { val currentLatestChapterNumber = Manga.getLatestChapter(mangaEntry[MangaTable.id].value)?.chapterNumber ?: 0f val numberOfCurrentChapters = getCountOfMangaChapters(mangaEntry[MangaTable.id].value) 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 9d31f7fa2..64e7aaefc 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt @@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.awaitSuccess -import eu.kanade.tachiyomi.source.CatalogueSource +import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.local.LocalSource import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga @@ -41,8 +41,8 @@ import org.jetbrains.exposed.v1.jdbc.transactions.transaction import org.jetbrains.exposed.v1.jdbc.update import suwayomi.tachidesk.manga.impl.download.fileProvider.impl.MissingThumbnailException import suwayomi.tachidesk.manga.impl.util.network.await -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrNull -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrNull +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.impl.util.source.StubSource import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.clearCachedImage import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse @@ -91,7 +91,7 @@ object Manga { suspend fun fetchMangaAndChapters( mangaEntry: ResultRow, - source: CatalogueSource, + source: Source, fetchDetails: Boolean, fetchChapters: Boolean, ): SMangaUpdate { @@ -139,7 +139,7 @@ object Manga { return mangaInfoMutex.get(mangaId) { Mutex() }.withLock { val mangaEntry = transaction { MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() } - val source = getCatalogueSourceOrNull(mangaEntry[MangaTable.sourceReference]) ?: return null + val source = getSourceOrNull(mangaEntry[MangaTable.sourceReference]) ?: return null val sManga = fetchMangaAndChapters( mangaEntry, @@ -161,7 +161,7 @@ object Manga { var mangaEntry = transaction { MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() } val source = - getCatalogueSourceOrNull(mangaEntry[MangaTable.sourceReference]) + getSourceOrNull(mangaEntry[MangaTable.sourceReference]) ?: throw NullPointerException("Missing source ${mangaEntry[MangaTable.sourceReference]}") val mangaUpdate = fetchMangaAndChapters( @@ -186,7 +186,7 @@ object Manga { fun updateMangaDatabase( mangaEntry: ResultRow, - source: CatalogueSource, + source: Source, sManga: SManga, ): SManga { transaction { @@ -412,7 +412,7 @@ object Manga { val mangaEntry = transaction { MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() } val sourceId = mangaEntry[MangaTable.sourceReference] - return when (val source = getCatalogueSourceOrStub(sourceId)) { + return when (val source = getSourceOrStub(sourceId)) { is HttpSource -> { getImageResponse(cacheSaveDir, fileName) { fetchHttpSourceMangaThumbnail(source, mangaEntry) 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 b7d888ec3..4a8753e04 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt @@ -19,7 +19,7 @@ import org.jetbrains.exposed.v1.jdbc.batchInsert import org.jetbrains.exposed.v1.jdbc.selectAll import org.jetbrains.exposed.v1.jdbc.statements.toExecutable import org.jetbrains.exposed.v1.jdbc.transactions.transaction -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.manga.model.table.toDataClass @@ -36,7 +36,7 @@ object MangaList { require(pageNum > 0) { "pageNum = $pageNum is not in valid range" } - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) val mangasPage = if (popular) { source.getPopularManga(pageNum) 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 7addcb920..10f9fe03f 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Page.kt @@ -21,7 +21,7 @@ import org.jetbrains.exposed.v1.jdbc.transactions.transaction import org.jetbrains.exposed.v1.jdbc.update import suwayomi.tachidesk.graphql.types.DownloadConversion import suwayomi.tachidesk.manga.impl.util.getChapterCachePath -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.impl.util.storage.ImageResponse.getImageResponse import suwayomi.tachidesk.manga.impl.util.storage.ImageUtil import suwayomi.tachidesk.manga.model.table.ChapterTable @@ -118,7 +118,7 @@ object Page { return imageFile.inputStream() to (ImageUtil.findImageType { imageFile.inputStream() }?.mime ?: "image/jpeg") } - val source = getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = getSourceOrStub(mangaEntry[MangaTable.sourceReference]) source as HttpSource if (pageEntry[PageTable.imageUrl] == null) { 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 9c3182f2f..ae7c5e799 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Search.kt @@ -7,14 +7,14 @@ 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 eu.kanade.tachiyomi.source.CatalogueSource +import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import io.javalin.json.JsonMapper import io.javalin.json.fromJsonString import kotlinx.serialization.Serializable import suwayomi.tachidesk.manga.impl.MangaList.processEntries -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.PagedMangaListDataClass import uy.kohesive.injekt.injectLazy @@ -24,7 +24,7 @@ object Search { searchTerm: String, pageNum: Int, ): PagedMangaListDataClass { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) val searchManga = source.getSearchManga(pageNum, searchTerm, getFilterListOf(source)) return searchManga.processEntries(sourceId) } @@ -34,7 +34,7 @@ object Search { pageNum: Int, filter: FilterData, ): PagedMangaListDataClass { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) val filterList = if (filter.filter != null) buildFilterList(sourceId, filter.filter) else source.getFilterList() val searchManga = source.getSearchManga(pageNum, filter.searchTerm ?: "", filterList) return searchManga.processEntries(sourceId) @@ -43,7 +43,7 @@ object Search { private val filterListCache = mutableMapOf() private fun getFilterListOf( - source: CatalogueSource, + source: Source, reset: Boolean = false, ): FilterList { if (reset || !filterListCache.containsKey(source.id)) { @@ -56,7 +56,7 @@ object Search { sourceId: Long, reset: Boolean, ): List { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) return getFilterListOf(source, reset).list.map { FilterObject( @@ -111,7 +111,7 @@ object Search { sourceId: Long, changes: List, ) { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) val filterList = getFilterListOf(source, false) updateFilterList(filterList, changes) } @@ -169,7 +169,7 @@ object Search { sourceId: Long, changes: List, ): FilterList { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) val filterList = source.getFilterList() return updateFilterList(filterList, changes) } 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 87db6f6d2..c6b65cead 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Source.kt @@ -26,9 +26,9 @@ import org.jetbrains.exposed.v1.jdbc.statements.toExecutable import org.jetbrains.exposed.v1.jdbc.transactions.transaction import suwayomi.tachidesk.manga.impl.Source.preferenceScreenMap import suwayomi.tachidesk.manga.impl.extension.Extension.proxyExtensionIconUrl -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrNull -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.unregisterCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrNull +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.unregisterSource import suwayomi.tachidesk.manga.model.dataclass.ContentWarning import suwayomi.tachidesk.manga.model.dataclass.SourceDataClass import suwayomi.tachidesk.manga.model.table.ExtensionTable @@ -43,7 +43,7 @@ object Source { fun getSourceList(): List { return transaction { SourceTable.selectAll().mapNotNull { - val catalogueSource = getCatalogueSourceOrNull(it[SourceTable.id].value) ?: return@mapNotNull null + val catalogueSource = getSourceOrNull(it[SourceTable.id].value) ?: return@mapNotNull null val sourceExtension = ExtensionTable.selectAll().where { ExtensionTable.id eq it[SourceTable.extension] }.first() SourceDataClass( @@ -64,7 +64,7 @@ object Source { fun getSource(sourceId: Long): SourceDataClass? { // all the data extracted fresh form the source instance return transaction { val source = SourceTable.selectAll().where { SourceTable.id eq sourceId }.firstOrNull() ?: return@transaction null - val catalogueSource = getCatalogueSourceOrNull(sourceId) ?: return@transaction null + val catalogueSource = getSourceOrNull(sourceId) ?: return@transaction null val extension = ExtensionTable.selectAll().where { ExtensionTable.id eq source[SourceTable.extension] }.first() SourceDataClass( @@ -107,7 +107,7 @@ object Source { } fun getSourcePreferencesRaw(sourceId: Long): List { - val source = getCatalogueSourceOrStub(sourceId) + val source = getSourceOrStub(sourceId) if (source is ConfigurableSource) { val sourceShardPreferences = source.sourcePreferences() @@ -157,7 +157,7 @@ object Source { pref.callChangeListener(newValue) // must reload the source because a preference was changed - unregisterCatalogueSource(sourceId) + unregisterSource(sourceId) } fun getSourcesMetaMaps(ids: List): Map> = diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/chapter/ChapterForDownload.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/chapter/ChapterForDownload.kt index 405002a01..0672371ed 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/chapter/ChapterForDownload.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/chapter/ChapterForDownload.kt @@ -23,7 +23,7 @@ import org.jetbrains.exposed.v1.jdbc.selectAll import org.jetbrains.exposed.v1.jdbc.transactions.transaction import org.jetbrains.exposed.v1.jdbc.update import suwayomi.tachidesk.manga.impl.ChapterDownloadHelper -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.getCatalogueSourceOrStub +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrStub import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.manga.model.table.MangaTable @@ -77,7 +77,7 @@ suspend fun refreshChapterPageList( return mutex.withLock { val chapterEntry = existingChapterEntry ?: transaction { ChapterTable.selectAll().where { ChapterTable.id eq chapterId }.first() } val mangaEntry = transaction { MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() } - val source = getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = getSourceOrStub(mangaEntry[MangaTable.sourceReference]) val pageList = source 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 70c255e4d..76f3ba19c 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 @@ -10,7 +10,6 @@ package suwayomi.tachidesk.manga.impl.extension import android.net.Uri import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper -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 @@ -41,7 +40,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.source.GetSource 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.ImageResponse.saveImage @@ -182,12 +181,12 @@ object Extension { try { // collect sources from the extension val extensionMainClassInstance = loadExtensionSources(jarFilePath, className) - val sources: List = + val sources: List = when (extensionMainClassInstance) { is Source -> listOf(extensionMainClassInstance) is SourceFactory -> extensionMainClassInstance.createSources() else -> throw RuntimeException("Unknown source class type! ${extensionMainClassInstance.javaClass}") - }.map { it as CatalogueSource } + } val langs = sources.map { it.lang }.toSet() val extensionLang = @@ -398,7 +397,7 @@ object Extension { PackageTools.jarLoaderMap.remove(jarPath)?.close() // clear all loaded sources - sources.forEach { GetCatalogueSource.unregisterCatalogueSource(it) } + sources.forEach { GetSource.unregisterSource(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 07a5d5d3f..a0ee4394b 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 @@ -11,7 +11,7 @@ import io.github.oshai.kotlinlogging.KotlinLogging import org.jetbrains.exposed.v1.core.eq import org.jetbrains.exposed.v1.jdbc.selectAll import org.jetbrains.exposed.v1.jdbc.transactions.transaction -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.server.ApplicationDirs @@ -37,7 +37,7 @@ private fun getMangaDir( private fun getMangaDir(mangaId: Int): String = transaction { val mangaEntry = MangaTable.selectAll().where { MangaTable.id eq mangaId }.first() - val source = GetCatalogueSource.getCatalogueSourceOrStub(mangaEntry[MangaTable.sourceReference]) + val source = GetSource.getSourceOrStub(mangaEntry[MangaTable.sourceReference]) getMangaDir(mangaEntry[MangaTable.title], source.toString()) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetSource.kt similarity index 79% rename from server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt rename to server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetSource.kt index 2de64c464..3909a0ac6 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetCatalogueSource.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/util/source/GetSource.kt @@ -7,7 +7,6 @@ package suwayomi.tachidesk.manga.impl.util.source * 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.Source import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.online.HttpSource @@ -22,14 +21,14 @@ import suwayomi.tachidesk.server.ApplicationDirs import uy.kohesive.injekt.injectLazy import java.util.concurrent.ConcurrentHashMap -object GetCatalogueSource { +object GetSource { private val logger = KotlinLogging.logger { } - private val sourceCache = ConcurrentHashMap() + private val sourceCache = ConcurrentHashMap() private val applicationDirs: ApplicationDirs by injectLazy() - private fun getCatalogueSource(sourceId: Long): CatalogueSource? { - val cachedResult: CatalogueSource? = sourceCache[sourceId] + private fun getSource(sourceId: Long): Source? { + val cachedResult: Source? = sourceCache[sourceId] if (cachedResult != null) { return cachedResult } @@ -62,25 +61,25 @@ object GetCatalogueSource { return sourceCache[sourceId]!! } - fun getCatalogueSourceOrNull(sourceId: Long): CatalogueSource? = + fun getSourceOrNull(sourceId: Long): Source? = try { - getCatalogueSource(sourceId) + getSource(sourceId) } catch (e: Exception) { logger.warn(e) { "getCatalogueSource($sourceId) failed" } null } - fun getCatalogueSourceOrStub(sourceId: Long): CatalogueSource = getCatalogueSourceOrNull(sourceId) ?: StubSource(sourceId) + fun getSourceOrStub(sourceId: Long): Source = getSourceOrNull(sourceId) ?: StubSource(sourceId) - fun registerCatalogueSource(sourcePair: Pair) { + fun registerSource(sourcePair: Pair) { sourceCache += sourcePair } - fun unregisterCatalogueSource(sourceId: Long) { + fun unregisterSource(sourceId: Long) { sourceCache.remove(sourceId) } - fun unregisterAllCatalogueSources() { + fun unregisterAllSources() { (sourceCache - 0L).forEach { (id, _) -> sourceCache.remove(id) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/opds/repository/MangaRepository.kt b/server/src/main/kotlin/suwayomi/tachidesk/opds/repository/MangaRepository.kt index e3656f1ff..922a6d443 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/opds/repository/MangaRepository.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/opds/repository/MangaRepository.kt @@ -22,7 +22,7 @@ import org.jetbrains.exposed.v1.jdbc.andWhere import org.jetbrains.exposed.v1.jdbc.select import org.jetbrains.exposed.v1.jdbc.transactions.transaction import suwayomi.tachidesk.manga.impl.MangaList.insertOrUpdate -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource import suwayomi.tachidesk.manga.model.dataclass.toGenreList import suwayomi.tachidesk.manga.model.table.CategoryMangaTable import suwayomi.tachidesk.manga.model.table.CategoryTable @@ -231,7 +231,7 @@ object MangaRepository { pageNum: Int, sort: String, ): Pair, Boolean> { - val source = GetCatalogueSource.getCatalogueSourceOrStub(sourceId) + val source = GetSource.getSourceOrStub(sourceId) val mangasPage: MangasPage = if (sort == "latest" && source.supportsLatest) { source.getLatestUpdates(pageNum) diff --git a/server/src/test/kotlin/masstest/CloudFlareTest.kt b/server/src/test/kotlin/masstest/CloudFlareTest.kt index fd9f1cb0a..c343ba742 100644 --- a/server/src/test/kotlin/masstest/CloudFlareTest.kt +++ b/server/src/test/kotlin/masstest/CloudFlareTest.kt @@ -14,7 +14,7 @@ import org.koin.core.context.stopKoin import suwayomi.tachidesk.manga.impl.Source import suwayomi.tachidesk.manga.impl.extension.Extension import suwayomi.tachidesk.manga.impl.extension.ExtensionsList -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource import suwayomi.tachidesk.server.applicationSetup import suwayomi.tachidesk.server.settings.SettingsRegistry import suwayomi.tachidesk.test.BASE_PATH @@ -51,7 +51,7 @@ class CloudFlareTest { Source .getSourceList() .firstNotNullOf { it.id.toLong().takeIf { it == 3122156392225024195L } } - .let(GetCatalogueSource::getCatalogueSourceOrNull) as HttpSource + .let(GetSource::getSourceOrNull) as HttpSource } setLoggingEnabled(true) } diff --git a/server/src/test/kotlin/masstest/TestExtensionCompatibility.kt b/server/src/test/kotlin/masstest/TestExtensionCompatibility.kt index 185fc7c68..f4af9e897 100644 --- a/server/src/test/kotlin/masstest/TestExtensionCompatibility.kt +++ b/server/src/test/kotlin/masstest/TestExtensionCompatibility.kt @@ -28,7 +28,7 @@ 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.source.GetCatalogueSource.getCatalogueSourceOrNull +import suwayomi.tachidesk.manga.impl.util.source.GetSource.getSourceOrNull import suwayomi.tachidesk.manga.model.dataclass.ExtensionDataClass import suwayomi.tachidesk.server.applicationSetup import suwayomi.tachidesk.server.settings.SettingsRegistry @@ -82,7 +82,7 @@ class TestExtensionCompatibility { .filter { // filter local source it.id.toLong() != 0L - }.map { getCatalogueSourceOrNull(it.id.toLong())!! as HttpSource } + }.map { getSourceOrNull(it.id.toLong())!! as HttpSource } } setLoggingEnabled(true) File("$BASE_PATH/sources.txt").writeText(sources.joinToString("\n") { "${it.name} - ${it.lang.uppercase()} - ${it.id}" }) diff --git a/server/src/test/kotlin/suwayomi/tachidesk/manga/impl/SearchTest.kt b/server/src/test/kotlin/suwayomi/tachidesk/manga/impl/SearchTest.kt index cbf6a2942..47009a67a 100644 --- a/server/src/test/kotlin/suwayomi/tachidesk/manga/impl/SearchTest.kt +++ b/server/src/test/kotlin/suwayomi/tachidesk/manga/impl/SearchTest.kt @@ -24,8 +24,8 @@ import suwayomi.tachidesk.manga.impl.Search.SerializableGroup import suwayomi.tachidesk.manga.impl.Search.getFilterList import suwayomi.tachidesk.manga.impl.Search.setFilter import suwayomi.tachidesk.manga.impl.Search.sourceSearch -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.registerCatalogueSource -import suwayomi.tachidesk.manga.impl.util.source.GetCatalogueSource.unregisterCatalogueSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource.registerSource +import suwayomi.tachidesk.manga.impl.util.source.GetSource.unregisterSource import suwayomi.tachidesk.manga.impl.util.source.StubSource import suwayomi.tachidesk.test.ApplicationTest import suwayomi.tachidesk.test.createSMangas @@ -53,7 +53,7 @@ class SearchTest : ApplicationTest() { @BeforeAll fun setup() { - registerCatalogueSource(sourceId to source) + registerSource(sourceId to source) this.source.mangas = createSMangas(mangasCount) } @@ -70,7 +70,7 @@ class SearchTest : ApplicationTest() { @AfterAll fun teardown() { - unregisterCatalogueSource(this.sourceId) + unregisterSource(this.sourceId) } } @@ -347,7 +347,7 @@ class FilterListTest : ApplicationTest() { private fun registerSource(sourceClass: KClass<*>): EmptyFilterListSource = synchronized(sourceClass) { val source = sourceClass.primaryConstructor!!.call(sourceCount) as EmptyFilterListSource - registerCatalogueSource(sourceCount to source) + registerSource(sourceCount to source) sourceCount++ source } @@ -355,7 +355,7 @@ class FilterListTest : ApplicationTest() { @AfterAll @JvmStatic fun teardown() { - (0 until sourceCount).forEach { unregisterCatalogueSource(it) } + (0 until sourceCount).forEach { unregisterSource(it) } } } }