From b0717b38b138e4ec7eb85bde0e377e2bfba47f67 Mon Sep 17 00:00:00 2001 From: GG Bond Date: Tue, 5 Dec 2023 15:51:43 +0800 Subject: [PATCH] Cleanup okhttp urlbuilder usage --- .../com/hippo/ehviewer/client/EhEngine.kt | 5 +- .../kotlin/com/hippo/ehviewer/client/EhUrl.kt | 48 ++++++++----------- .../ehviewer/client/data/ListUrlBuilder.kt | 6 +-- 3 files changed, 25 insertions(+), 34 deletions(-) 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 a26ad230f..699cbb38d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt @@ -332,12 +332,11 @@ object EhEngine { }.parseString(HomeParser::parseResetLimits) suspend fun modifyFavorites(gidArray: LongArray, srcCat: Int, dstCat: Int): FavoritesParser.Result { - val url = ehUrl { - addPathSegments(EhUrl.FAV_PATH) + val url = ehUrl(EhUrl.FAV_PATH) { if (FavListUrlBuilder.isValidFavCat(srcCat)) { addQueryParameter("favcat", srcCat.toString()) } - }.toString() + }.buildString() val catStr: String = when (dstCat) { -1 -> "delete" in 0..9 -> "fav$dstCat" 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 b97c67328..57044c4b1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt @@ -20,7 +20,6 @@ import io.ktor.http.Parameters import io.ktor.http.ParametersBuilder import io.ktor.http.URLBuilder import io.ktor.http.URLProtocol -import okhttp3.HttpUrl object EhUrl { const val SITE_E = 0 @@ -124,38 +123,37 @@ object EhUrl { return getGalleryDetailUrl(gid, token, 0, false) } - fun getGalleryDetailUrl(gid: Long, token: String?, index: Int, allComment: Boolean) = ehUrl { - addPathSegments("g/$gid/$token/") + 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") - }.toString() + }.buildString() - fun getGalleryMultiPageViewerUrl(gid: Long, token: String) = ehUrl { - addPathSegments("mpv/$gid/$token/") - }.toString() + fun getGalleryMultiPageViewerUrl(gid: Long, token: String) = ehUrl(listOf("mpv", gid.toString(), token)).buildString() - fun getPageUrl(gid: Long, index: Int, pToken: String): String { - return host + "s/" + pToken + '/' + gid + '-' + (index + 1) - } + fun getPageUrl(gid: Long, index: Int, pToken: String) = host + "s/" + pToken + '/' + gid + '-' + (index + 1) - fun getAddFavorites(gid: Long, token: String?): String { - return host + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav" - } + fun getAddFavorites(gid: Long, token: String?) = host + "gallerypopups.php?gid=" + gid + "&t=" + token + "&act=addfav" - fun getDownloadArchive(gid: Long, token: String?, or: String): String { - return host + "archiver.php?gid=" + gid + "&token=" + token + "&or=" + or - } + fun getDownloadArchive(gid: Long, token: String?, or: String) = host + "archiver.php?gid=" + gid + "&token=" + token + "&or=" + or - fun getTagDefinitionUrl(tag: String): String { - return "https://ehwiki.org/wiki/" + tag.replace(' ', '_') - } + fun getTagDefinitionUrl(tag: String) = "https://ehwiki.org/wiki/" + tag.replace(' ', '_') } -inline fun ehUrl(path: String, builder: ParametersBuilder.() -> Unit) = URLBuilder( +inline fun ehUrl(path: String?, builder: ParametersBuilder.() -> Unit) = ehUrl( + path = if (path.isNullOrBlank()) emptyList() else listOf(path), + parameters = Parameters.build(builder), +) + +inline fun ehUrl(path: List, builder: ParametersBuilder.() -> Unit) = ehUrl( + path = path, + parameters = Parameters.build(builder), +) + +fun ehUrl(path: List, parameters: Parameters = Parameters.Empty) = URLBuilder( protocol = URLProtocol.HTTPS, host = EhUrl.domain, - pathSegments = listOf(path), - parameters = Parameters.build(builder), + pathSegments = path, + parameters = parameters, ) fun ParametersBuilder.addQueryParameterIfNotBlank(name: String, value: String?) = apply { @@ -163,9 +161,3 @@ fun ParametersBuilder.addQueryParameterIfNotBlank(name: String, value: String?) } fun ParametersBuilder.addQueryParameter(name: String, value: String) = append(name, value) - -inline fun httpsUrl(builder: HttpUrl.Builder.() -> Unit) = HttpUrl.Builder().apply(builder).scheme("https").build() -inline fun ehUrl(builder: HttpUrl.Builder.() -> Unit) = httpsUrl { apply(builder).host(EhUrl.domain) } -fun HttpUrl.Builder.addQueryParameterIfNotBlank(name: String, value: String?) = apply { - if (!value.isNullOrBlank()) addQueryParameter(name, value) -} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt index d95cbe327..2b2310839 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/ListUrlBuilder.kt @@ -20,6 +20,7 @@ import androidx.annotation.IntDef import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils +import com.hippo.ehviewer.client.addQueryParameter import com.hippo.ehviewer.client.addQueryParameterIfNotBlank import com.hippo.ehviewer.client.ehUrl import com.hippo.ehviewer.dao.QuickSearch @@ -254,10 +255,9 @@ data class ListUrlBuilder( fun build(): String { return when (mode) { - MODE_NORMAL, MODE_SUBSCRIPTION -> ehUrl { - if (mode == MODE_SUBSCRIPTION) addPathSegment(EhUrl.WATCHED_PATH) + MODE_NORMAL, MODE_SUBSCRIPTION -> ehUrl(EhUrl.WATCHED_PATH.takeIf { mode == MODE_SUBSCRIPTION }) { if (category > 0) { - addEncodedQueryParameter("f_cats", (category.inv() and EhUtils.ALL_CATEGORY).toString()) + addQueryParameter("f_cats", (category.inv() and EhUtils.ALL_CATEGORY).toString()) } val query = mKeyword?.let { val index = Settings.languageFilter.value