diff --git a/app/schemas/com.hippo.ehviewer.dao.EhDatabase/18.json b/app/schemas/com.hippo.ehviewer.dao.EhDatabase/18.json new file mode 100644 index 000000000..c84e520dd --- /dev/null +++ b/app/schemas/com.hippo.ehviewer.dao.EhDatabase/18.json @@ -0,0 +1,471 @@ +{ + "formatVersion": 1, + "database": { + "version": 18, + "identityHash": "bc90acf4ffb4e7cce9a16cd5a0f662f3", + "entities": [ + { + "tableName": "GALLERIES", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `TOKEN` TEXT NOT NULL, `TITLE` TEXT, `TITLE_JPN` TEXT, `THUMB` TEXT, `CATEGORY` INTEGER NOT NULL, `POSTED` TEXT, `UPLOADER` TEXT, `RATING` REAL NOT NULL, `SIMPLE_LANGUAGE` TEXT, `FAVORITE_SLOT` INTEGER NOT NULL, PRIMARY KEY(`GID`))", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "TOKEN", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "TITLE", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "titleJpn", + "columnName": "TITLE_JPN", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbKey", + "columnName": "THUMB", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "category", + "columnName": "CATEGORY", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "posted", + "columnName": "POSTED", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uploader", + "columnName": "UPLOADER", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "rating", + "columnName": "RATING", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "simpleLanguage", + "columnName": "SIMPLE_LANGUAGE", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "favoriteSlot", + "columnName": "FAVORITE_SLOT", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "DOWNLOAD_LABELS", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`LABEL` TEXT NOT NULL, `POSITION` INTEGER NOT NULL, `_id` INTEGER, PRIMARY KEY(`_id`))", + "fields": [ + { + "fieldPath": "label", + "columnName": "LABEL", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "POSITION", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "_id" + ] + }, + "indices": [ + { + "name": "index_DOWNLOAD_LABELS_LABEL", + "unique": true, + "columnNames": [ + "LABEL" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_DOWNLOAD_LABELS_LABEL` ON `${TABLE_NAME}` (`LABEL`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "DOWNLOADS", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `STATE` INTEGER NOT NULL, `LEGACY` INTEGER NOT NULL, `TIME` INTEGER NOT NULL, `LABEL` TEXT, `POSITION` INTEGER NOT NULL, PRIMARY KEY(`GID`), FOREIGN KEY(`GID`) REFERENCES `GALLERIES`(`GID`) ON UPDATE NO ACTION ON DELETE NO ACTION , FOREIGN KEY(`LABEL`) REFERENCES `DOWNLOAD_LABELS`(`LABEL`) ON UPDATE CASCADE ON DELETE SET NULL )", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "state", + "columnName": "STATE", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "legacy", + "columnName": "LEGACY", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "time", + "columnName": "TIME", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "label", + "columnName": "LABEL", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "position", + "columnName": "POSITION", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [ + { + "name": "index_DOWNLOADS_LABEL", + "unique": false, + "columnNames": [ + "LABEL" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_DOWNLOADS_LABEL` ON `${TABLE_NAME}` (`LABEL`)" + } + ], + "foreignKeys": [ + { + "table": "GALLERIES", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "GID" + ], + "referencedColumns": [ + "GID" + ] + }, + { + "table": "DOWNLOAD_LABELS", + "onDelete": "SET NULL", + "onUpdate": "CASCADE", + "columns": [ + "LABEL" + ], + "referencedColumns": [ + "LABEL" + ] + } + ] + }, + { + "tableName": "DOWNLOAD_DIRNAME", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `DIRNAME` TEXT NOT NULL, PRIMARY KEY(`GID`))", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "dirname", + "columnName": "DIRNAME", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "FILTER", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`MODE` INTEGER NOT NULL, `TEXT` TEXT NOT NULL, `ENABLE` INTEGER NOT NULL, `_id` INTEGER, PRIMARY KEY(`_id`))", + "fields": [ + { + "fieldPath": "mode", + "columnName": "MODE", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "text", + "columnName": "TEXT", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "enable", + "columnName": "ENABLE", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "HISTORY", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `TIME` INTEGER NOT NULL, PRIMARY KEY(`GID`), FOREIGN KEY(`GID`) REFERENCES `GALLERIES`(`GID`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "time", + "columnName": "TIME", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "GALLERIES", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "GID" + ], + "referencedColumns": [ + "GID" + ] + } + ] + }, + { + "tableName": "LOCAL_FAVORITES", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `TIME` INTEGER NOT NULL, PRIMARY KEY(`GID`), FOREIGN KEY(`GID`) REFERENCES `GALLERIES`(`GID`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "time", + "columnName": "TIME", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "GALLERIES", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "GID" + ], + "referencedColumns": [ + "GID" + ] + } + ] + }, + { + "tableName": "PROGRESS", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`GID` INTEGER NOT NULL, `PAGE` INTEGER NOT NULL, PRIMARY KEY(`GID`), FOREIGN KEY(`GID`) REFERENCES `GALLERIES`(`GID`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "gid", + "columnName": "GID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "page", + "columnName": "PAGE", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "GID" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "GALLERIES", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "GID" + ], + "referencedColumns": [ + "GID" + ] + } + ] + }, + { + "tableName": "QUICK_SEARCH", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER, `NAME` TEXT NOT NULL, `MODE` INTEGER NOT NULL, `CATEGORY` INTEGER NOT NULL, `KEYWORD` TEXT, `ADVANCE_SEARCH` INTEGER NOT NULL, `MIN_RATING` INTEGER NOT NULL, `PAGE_FROM` INTEGER NOT NULL, `PAGE_TO` INTEGER NOT NULL, `POSITION` INTEGER NOT NULL, PRIMARY KEY(`_id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "NAME", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "mode", + "columnName": "MODE", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "category", + "columnName": "CATEGORY", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "keyword", + "columnName": "KEYWORD", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "advanceSearch", + "columnName": "ADVANCE_SEARCH", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "minRating", + "columnName": "MIN_RATING", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "pageFrom", + "columnName": "PAGE_FROM", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "pageTo", + "columnName": "PAGE_TO", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "POSITION", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "_id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'bc90acf4ffb4e7cce9a16cd5a0f662f3')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt index 6b4229af0..37b55dbe4 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt @@ -212,7 +212,7 @@ object EhEngine { } } - suspend fun getGalleryPage(url: String, gid: Long, token: String?): GalleryPageParser.Result { + suspend fun getGalleryPage(url: String, gid: Long, token: String): GalleryPageParser.Result { val referer = EhUrl.getGalleryDetailUrl(gid, token) return ehRequest(url, referer).fetchUsingAsText(GalleryPageParser::parse) } @@ -276,7 +276,7 @@ object EhEngine { } } - suspend fun modifyFavorites(gid: Long, token: String?, dstCat: Int = -1, note: String = "") { + suspend fun modifyFavorites(gid: Long, token: String, dstCat: Int = -1, note: String = "") { val catStr: String = when (dstCat) { -1 -> "favdel" in 0..9 -> dstCat.toString() @@ -360,11 +360,11 @@ object EhEngine { }.fetchUsingAsText { GalleryPageParser.parse(filterNot { it == '\\' }) } } - suspend fun rateGallery(apiUid: Long, apiKey: String?, gid: Long, token: String?, rating: Float): RateGalleryResult = ehRequest(EhUrl.apiUrl, EhUrl.getGalleryDetailUrl(gid, token), EhUrl.origin) { + suspend fun rateGallery(apiUid: Long, apiKey: String?, gid: Long, token: String, rating: Float): RateGalleryResult = ehRequest(EhUrl.apiUrl, EhUrl.getGalleryDetailUrl(gid, token), EhUrl.origin) { jsonBody { put("method", "rategallery") put("apiuid", apiUid) - put("apikey", apiKey) + put("apikey", requireNotNull(apiKey)) put("gid", gid) put("token", token) put("rating", ceil((rating * 2).toDouble()).toInt()) @@ -394,12 +394,12 @@ object EhEngine { } } - suspend fun voteComment(apiUid: Long, apiKey: String?, gid: Long, token: String?, commentId: Long, commentVote: Int): VoteCommentResult = + suspend fun voteComment(apiUid: Long, apiKey: String?, gid: Long, token: String, commentId: Long, commentVote: Int): VoteCommentResult = ehRequest(EhUrl.apiUrl, EhUrl.referer, EhUrl.origin) { jsonBody { put("method", "votecomment") put("apiuid", apiUid) - put("apikey", apiKey) + put("apikey", requireNotNull(apiKey)) put("gid", gid) put("token", token) put("comment_id", commentId) @@ -407,12 +407,12 @@ object EhEngine { } }.fetchUsingAsText(String::parseAs) - suspend fun voteTag(apiUid: Long, apiKey: String?, gid: Long, token: String?, tags: String?, vote: Int) = + suspend fun voteTag(apiUid: Long, apiKey: String?, gid: Long, token: String, tags: String, vote: Int) = ehRequest(EhUrl.apiUrl, EhUrl.referer, EhUrl.origin) { jsonBody { put("method", "taggallery") put("apiuid", apiUid) - put("apikey", apiKey) + put("apikey", requireNotNull(apiKey)) put("gid", gid) put("token", token) put("tags", tags) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt index 46673168f..cad8a8ac1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt @@ -52,18 +52,11 @@ object EhUrl { const val REFERER_E = "https://$DOMAIN_E" const val ORIGIN_E = REFERER_E - val host: String - get() = when (Settings.gallerySite) { - SITE_E -> HOST_E - SITE_EX -> HOST_EX - else -> HOST_E - } - val domain: String get() = when (Settings.gallerySite) { SITE_E -> DOMAIN_E SITE_EX -> DOMAIN_EX - else -> HOST_E + else -> DOMAIN_E } val apiUrl: String @@ -119,22 +112,29 @@ object EhUrl { else -> URL_IMAGE_SEARCH_E } - fun getGalleryDetailUrl(gid: Long, token: String?): String { - return getGalleryDetailUrl(gid, token, 0, false) - } + fun getGalleryDetailUrl(gid: Long, token: String, index: Int = 0, allComment: Boolean = false) = + ehUrl(listOf("g", "$gid", token)) { + if (index != 0) addQueryParameter("p", "$index") + if (allComment) addQueryParameter("hc", "1") + }.buildString() - fun getGalleryDetailUrl(gid: Long, token: String?, index: Int, allComment: Boolean) = ehUrl(listOf("g", gid.toString(), token.orEmpty())) { - if (index != 0) addQueryParameter("p", "$index") - if (allComment) addQueryParameter("hc", "1") + fun getGalleryMultiPageViewerUrl(gid: Long, token: String) = ehUrl(listOf("mpv", "$gid", token)).buildString() + + fun getPageUrl(gid: Long, index: Int, pToken: String, nl: String? = null) = ehUrl(listOf("s", pToken, "$gid-${index + 1}")) { + addQueryParameterIfNotBlank("nl", nl) }.buildString() - fun getGalleryMultiPageViewerUrl(gid: Long, token: String) = ehUrl(listOf("mpv", gid.toString(), token)).buildString() + fun getAddFavorites(gid: Long, token: String) = ehUrl("gallerypopups.php") { + addQueryParameter("gid", "$gid") + addQueryParameter("t", token) + addQueryParameter("act", "addfav") + }.buildString() - fun getPageUrl(gid: Long, index: Int, pToken: String) = host + "s/" + pToken + '/' + gid + '-' + (index + 1) - - fun getAddFavorites(gid: Long, token: String?) = host + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav" - - fun getDownloadArchive(gid: Long, token: String, or: String) = host + "archiver.php?gid=" + gid + "&token=" + token + "&or=" + or + fun getDownloadArchive(gid: Long, token: String, or: String) = ehUrl("archiver.php") { + addQueryParameter("gid", "$gid") + addQueryParameter("token", token) + addQueryParameter("or", or) + }.buildString() fun getTagDefinitionUrl(tag: String) = "https://ehwiki.org/wiki/" + tag.replace(' ', '_') } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt index 63ba2c4e8..067f0f74a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt @@ -30,10 +30,10 @@ import kotlinx.serialization.Serializable data class BaseGalleryInfo( @PrimaryKey @ColumnInfo(name = "GID") - override var gid: Long = 0, + override var gid: Long, @ColumnInfo(name = "TOKEN") - override var token: String? = null, + override var token: String, @ColumnInfo(name = "TITLE") override var title: String? = null, @@ -86,5 +86,5 @@ data class BaseGalleryInfo( @Ignore override var favoriteNote: String? = null, ) : GalleryInfo, Parcelable { - constructor() : this(0) + constructor() : this(0, "") } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt index 6b8acf2ab..c31ac39e6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryInfo.kt @@ -20,7 +20,7 @@ import moe.tarsin.kt.unreachable interface GalleryInfo { var gid: Long - var token: String? + var token: String var title: String? var titleJpn: String? var thumbKey: String? diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt index 8b78a70ca..949e401ad 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryDetailParser.kt @@ -221,13 +221,14 @@ object GalleryDetailParser { d.getElementById("gnd")?.run { val dates = PATTERN_NEWER_DATE.findAll(body).map { it.groupValues[1] }.toList() select("a").forEachIndexed { index, element -> - val gi = BaseGalleryInfo() val result = GalleryDetailUrlParser.parse(element.attr("href")) if (result != null) { - gi.gid = result.gid - gi.token = result.token - gi.title = element.text().trim() - gi.posted = dates[index] + val gi = BaseGalleryInfo( + result.gid, + result.token, + element.text().trim(), + posted = dates[index], + ) gd.newerVersions.add(gi) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt b/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt index 893d1de27..16106c05b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/dao/Database.kt @@ -112,7 +112,7 @@ class ThumbKeyMigration : AutoMigrationSpec { BaseGalleryInfo::class, DownloadLabel::class, DownloadEntity::class, DownloadDirname::class, Filter::class, HistoryInfo::class, LocalFavoriteInfo::class, ProgressInfo::class, QuickSearch::class, ], - version = 17, + version = 18, exportSchema = true, autoMigrations = [ AutoMigration( @@ -174,6 +174,10 @@ class ThumbKeyMigration : AutoMigrationSpec { from = 16, to = 17, ), + AutoMigration( + from = 17, + to = 18, + ), ], ) @TypeConverters(FilterModeConverter::class) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt index 6d510777e..63485b8b5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -347,7 +347,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS referer, ).fetchUsingAsText { val pages = parsePages(this) - val spiderInfo = SpiderInfo(galleryInfo.gid, galleryInfo.token!!, pages) + val spiderInfo = SpiderInfo(galleryInfo.gid, galleryInfo.token, pages) readPreviews(this, 0, spiderInfo) spiderInfo } @@ -360,7 +360,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS val spiderInfo = mSpiderInfo val url = getGalleryMultiPageViewerUrl( galleryInfo.gid, - galleryInfo.token!!, + galleryInfo.token, ) return runSuspendCatching { ehRequest(url, referer).fetchUsingAsText { @@ -619,11 +619,8 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS showKeyLock.withLock { localShowKey = showKey if (localShowKey == null || forceHtml) { - var pageUrl = EhUrl.getPageUrl(galleryInfo.gid, index, pToken) // Skipping H@H costs 50 points, only use it as last resort - if (skipHathKey != null) { - pageUrl += "?nl=$skipHathKey" - } + val pageUrl = EhUrl.getPageUrl(galleryInfo.gid, index, pToken, skipHathKey) EhEngine.getGalleryPage(pageUrl, galleryInfo.gid, galleryInfo.token) .let { result -> check509(result.imageUrl) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index 353a0678d..5c5799ef8 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -402,7 +402,7 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { runSuspendCatching { if (srcCat == FavListUrlBuilder.FAV_CAT_LOCAL) { // Move from local to cloud - val galleryList = info.map { it.gid to it.token!! } + val galleryList = info.map { it.gid to it.token } EhEngine.addFavorites(galleryList, dstCat) EhDB.removeLocalFavorites(info) } else if (dstCat == FavListUrlBuilder.FAV_CAT_LOCAL) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt index 0bfe612de..2f1ae09b6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt @@ -222,7 +222,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: DestinationsNa } val (gid, token) = remember { when (args) { - is GalleryInfoArgs -> args.galleryInfo.run { gid to token!! } + is GalleryInfoArgs -> args.galleryInfo.run { gid to token } is TokenArgs -> args.gid to args.token } } @@ -492,7 +492,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: DestinationsNa val info = galleryDetail.newerVersions[selected] withUIContext { // Can't use GalleryInfoArgs as thumbKey is null - navigator.navigate(info.gid asDstWith info.token!!) + navigator.navigate(info.gid asDstWith info.token) } } Spacer(modifier = Modifier.size(dimensionResource(id = R.dimen.keyline_margin))) diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index be539f2e8..94291b8cb 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -152,17 +152,7 @@ class ReaderActivity : EhActivity() { } private val galleryDetailUrl: String? - get() { - val gid: Long - val token: String - if (mGalleryInfo != null) { - gid = mGalleryInfo!!.gid - token = mGalleryInfo!!.token!! - } else { - return null - } - return EhUrl.getGalleryDetailUrl(gid, token, 0, false) - } + get() = mGalleryInfo?.run { EhUrl.getGalleryDetailUrl(gid, token) } private suspend fun buildProvider(replace: Boolean = false): PageLoader2? { mGalleryProvider?.let {