From dfaecc08c5dcd14386171211bf3de0349d9c9374 Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Thu, 26 Aug 2021 22:11:51 +0430 Subject: [PATCH] add realUrl to Manga, reperesents open in WebView URL --- .../suwayomi/tachidesk/manga/impl/Manga.kt | 25 +++++++++++-------- .../tachidesk/manga/impl/MangaList.kt | 12 +++++++-- .../manga/impl/extension/Extension.kt | 2 +- .../manga/model/dataclass/MangaDataClass.kt | 6 ++++- .../tachidesk/manga/model/table/MangaTable.kt | 8 ++++-- ..._SourceIsNsfw.kt => M0013_MangaRealUrl.kt} | 10 ++++---- 6 files changed, 41 insertions(+), 22 deletions(-) rename server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/{M0011_SourceIsNsfw.kt => M0013_MangaRealUrl.kt} (79%) 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 e2139b40..c59114c3 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Manga.kt @@ -9,7 +9,6 @@ package suwayomi.tachidesk.manga.impl import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.SManga -import org.jetbrains.exposed.dao.id.EntityID import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.select @@ -61,17 +60,17 @@ object Manga { MangaStatus.valueOf(mangaEntry[MangaTable.status]).name, mangaEntry[MangaTable.inLibrary], getSource(mangaEntry[MangaTable.sourceReference]), - getMangaMetaMap(mangaEntry[MangaTable.id]), + getMangaMetaMap(mangaId), + mangaEntry[MangaTable.realUrl], false ) } else { // initialize manga val source = getHttpSource(mangaEntry[MangaTable.sourceReference]) - val fetchedManga = source.fetchMangaDetails( - SManga.create().apply { - url = mangaEntry[MangaTable.url] - title = mangaEntry[MangaTable.title] - } - ).awaitSingle() + val sManga = SManga.create().apply { + url = mangaEntry[MangaTable.url] + title = mangaEntry[MangaTable.title] + } + val fetchedManga = source.fetchMangaDetails(sManga).awaitSingle() transaction { MangaTable.update({ MangaTable.id eq mangaId }) { @@ -85,6 +84,8 @@ object Manga { it[MangaTable.status] = fetchedManga.status if (fetchedManga.thumbnail_url != null && fetchedManga.thumbnail_url.orEmpty().isNotEmpty()) it[MangaTable.thumbnail_url] = fetchedManga.thumbnail_url + + it[MangaTable.realUrl] = source.mangaDetailsRequest(sManga).url.toString() } } @@ -109,13 +110,14 @@ object Manga { MangaStatus.valueOf(fetchedManga.status).name, mangaEntry[MangaTable.inLibrary], getSource(mangaEntry[MangaTable.sourceReference]), - getMangaMetaMap(mangaEntry[MangaTable.id]), + getMangaMetaMap(mangaId), + mangaEntry[MangaTable.realUrl], true ) } } - fun getMangaMetaMap(manga: EntityID): Map { + fun getMangaMetaMap(manga: Int): Map { return transaction { MangaMetaTable.select { MangaMetaTable.ref eq manga } .associate { it[MangaMetaTable.key] to it[MangaMetaTable.value] } @@ -126,7 +128,8 @@ object Manga { transaction { val manga = MangaMetaTable.select { (MangaTable.id eq mangaId) } .first()[MangaTable.id] - val meta = transaction { MangaMetaTable.select { (MangaMetaTable.ref eq manga) and (MangaMetaTable.key eq key) } }.firstOrNull() + val meta = + transaction { MangaMetaTable.select { (MangaMetaTable.ref eq manga) and (MangaMetaTable.key eq key) } }.firstOrNull() if (meta == null) { MangaMetaTable.insert { it[MangaMetaTable.key] = key 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 9ffa3e10..16b837d1 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/MangaList.kt @@ -57,6 +57,8 @@ object MangaList { it[sourceReference] = sourceId }.value + val mangaEntry = MangaTable.select { MangaTable.url eq manga.url }.first() + MangaDataClass( mangaId, sourceId.toString(), @@ -71,7 +73,11 @@ object MangaList { manga.author, manga.description, manga.genre, - MangaStatus.valueOf(manga.status).name + MangaStatus.valueOf(manga.status).name, + false, // It's a new manga entry + meta = getMangaMetaMap(mangaId), + realUrl = mangaEntry[MangaTable.realUrl], + freshData = true ) } else { val mangaId = mangaEntry[MangaTable.id].value @@ -91,7 +97,9 @@ object MangaList { mangaEntry[MangaTable.genre], MangaStatus.valueOf(mangaEntry[MangaTable.status]).name, mangaEntry[MangaTable.inLibrary], - meta = getMangaMetaMap(mangaEntry[MangaTable.id]) + meta = getMangaMetaMap(mangaId), + realUrl = mangaEntry[MangaTable.realUrl], + freshData = false ) } } 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 18cdfd4a..87c0ac26 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 @@ -97,7 +97,7 @@ object Extension { if (libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) { throw Exception( "Lib version is $libVersion, while only versions " + - "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" + "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed" ) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt index ee3d0547..1c1bff59 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/dataclass/MangaDataClass.kt @@ -26,9 +26,13 @@ data class MangaDataClass( val status: String = MangaStatus.UNKNOWN.name, val inLibrary: Boolean = false, val source: SourceDataClass? = null, + + /** meta data for clients */ val meta: Map = emptyMap(), - val freshData: Boolean = false + val realUrl: String? = null, + + val freshData: Boolean = false, ) data class PagedMangaListDataClass( diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt index 738c8be3..13050194 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/MangaTable.kt @@ -31,8 +31,11 @@ object MangaTable : IntIdTable() { val inLibrary = bool("in_library").default(false) val defaultCategory = bool("default_category").default(true) - // source is used by some ancestor of IntIdTable + // the [source] field name is used by some ancestor of IntIdTable val sourceReference = long("source") + + /** the real url of a manga used for the "open in WebView" feature */ + val realUrl = varchar("real_url", 2048).nullable() } fun MangaTable.toDataClass(mangaEntry: ResultRow) = @@ -52,7 +55,8 @@ fun MangaTable.toDataClass(mangaEntry: ResultRow) = mangaEntry[genre], Companion.valueOf(mangaEntry[status]).name, mangaEntry[inLibrary], - meta = getMangaMetaMap(mangaEntry[id]) + meta = getMangaMetaMap(mangaEntry[id].value), + realUrl = mangaEntry[realUrl], ) enum class MangaStatus(val value: Int) { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0011_SourceIsNsfw.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0013_MangaRealUrl.kt similarity index 79% rename from server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0011_SourceIsNsfw.kt rename to server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0013_MangaRealUrl.kt index 6faed982..bf9d50ba 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0011_SourceIsNsfw.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0013_MangaRealUrl.kt @@ -10,9 +10,9 @@ package suwayomi.tachidesk.server.database.migration import de.neonew.exposed.migrations.helpers.AddColumnMigration @Suppress("ClassName", "unused") -class M0011_SourceIsNsfw : AddColumnMigration( - "Source", - "is_nsfw", - "BOOLEAN", - "FALSE" +class M0013_MangaRealUrl : AddColumnMigration( + "Manga", + "real_url", + "VARCHAR(2048)", + "NULL" )