Cleanup Okhttp API usage

This commit is contained in:
tarsin committed 2023-04-25 14:29:23 +08:00
1 parent ed673b5bc1
commit 5f14919755
4 files changed
+46 -104

No files matched your search

@@ -125,8 +125,8 @@ private fun rethrowExactly(code: Int, headers: Headers, body: String, e: Throwab
throw e
}
private suspend inline fun <T> Request.Builder.executeAndParsingWith(block: String.() -> T): T {
return okHttpClient.newCall(this.build()).executeAsync().use { response ->
private suspend inline fun <T> Request.executeAndParsingWith(block: String.() -> T): T {
return okHttpClient.newCall(this).executeAsync().use { response ->
val body = response.body.string()
runCatching {
block(body)
@@ -149,8 +149,7 @@ object EhEngine {
val url = EhUrl.API_SIGN_IN
val origin = "https://forums.e-hentai.org"
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(builder.build())
return ehRequest(url, referer, origin) { post(builder.build()) }
.executeAndParsingWith(SignInParser::parse)
}
@@ -196,7 +195,7 @@ object EhEngine {
suspend fun getGalleryList(url: String): GalleryListParser.Result {
val referer = EhUrl.referer
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith(GalleryListParser::parse)
return ehRequest(url, referer).executeAndParsingWith(GalleryListParser::parse)
.apply { fillGalleryList(galleryInfoList, url, true) }
}
@@ -240,17 +239,14 @@ object EhEngine {
val url = EhUrl.apiUrl
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(json.toString().toRequestBody(MEDIA_TYPE_JSON))
.executeAndParsingWith {
GalleryApiParser.parse(this, galleryInfoList)
}
return ehRequest(url, referer, origin) { post(json.toString().toRequestBody(MEDIA_TYPE_JSON)) }
.executeAndParsingWith { GalleryApiParser.parse(this, galleryInfoList) }
}
suspend fun getGalleryDetail(url: String): GalleryDetail {
val referer = EhUrl.referer
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith {
return ehRequest(url, referer).executeAndParsingWith {
EventPaneParser.parse(this)?.let {
Settings.lastDawnDay = today
showEventNotification(it)
@@ -262,7 +258,7 @@ object EhEngine {
suspend fun getPreviewList(url: String): Pair<List<GalleryPreview>, Int> {
val referer = EhUrl.referer
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith {
return ehRequest(url, referer).executeAndParsingWith {
GalleryDetailParser.parsePreviewList(this) to
GalleryDetailParser.parsePreviewPages(this)
}
@@ -288,8 +284,7 @@ object EhEngine {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(requestBody)
return ehRequest(url, referer, origin) { post(requestBody) }
.executeAndParsingWith(RateGalleryParser::parse)
}
@@ -307,8 +302,7 @@ object EhEngine {
}
val origin = EhUrl.origin
Log.d(TAG, url!!)
return EhRequestBuilder(url, url, origin)
.post(builder.build())
return ehRequest(url, url, origin) { post(builder.build()) }
.executeAndParsingWith {
val document = Jsoup.parse(this)
val elements = document.select("#chd + p")
@@ -337,8 +331,7 @@ object EhEngine {
val referer = EhUrl.referer
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(requestBody)
return ehRequest(url, referer, origin) { post(requestBody) }
.executeAndParsingWith(GalleryTokenApiParser::parse)
}
@@ -347,7 +340,7 @@ object EhEngine {
): FavoritesParser.Result {
val referer = EhUrl.referer
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith(FavoritesParser::parse)
return ehRequest(url, referer).executeAndParsingWith(FavoritesParser::parse)
.apply { fillGalleryList(galleryInfoList, url, false) }
}
@@ -383,8 +376,7 @@ object EhEngine {
val url = EhUrl.getAddFavorites(gid, token)
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, url, origin)
.post(builder.build())
return ehRequest(url, url, origin) { post(builder.build()) }
.executeAndParsingWith { }
}
@@ -429,8 +421,7 @@ object EhEngine {
builder.add("apply", "Apply")
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, url, origin)
.post(builder.build())
return ehRequest(url, url, origin) { post(builder.build()) }
.executeAndParsingWith(FavoritesParser::parse)
.apply { fillGalleryList(galleryInfoList, url, false) }
}
@@ -442,7 +433,7 @@ object EhEngine {
): List<TorrentParser.Result> {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith(TorrentParser::parse)
return ehRequest(url, referer).executeAndParsingWith(TorrentParser::parse)
}
suspend fun getArchiveList(
@@ -452,7 +443,7 @@ object EhEngine {
): ArchiveParser.Result {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith(ArchiveParser::parse)!!
return ehRequest(url, referer).executeAndParsingWith(ArchiveParser::parse)!!
.apply { funds = funds ?: getFunds() }
}
@@ -484,8 +475,7 @@ object EhEngine {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
val origin = EhUrl.origin
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer, origin)
.post(builder.build())
val request = ehRequest(url, referer, origin) { builder.build() }
var result = request.executeAndParsingWith(ArchiveParser::parseArchiveUrl)
if (!isHAtH) {
if (result == null) {
@@ -504,13 +494,13 @@ object EhEngine {
private suspend fun getFunds(): HomeParser.Funds {
val url = EhUrl.URL_FUNDS
Log.d(TAG, url)
return EhRequestBuilder(url).executeAndParsingWith(HomeParser::parseFunds)
return ehRequest(url).executeAndParsingWith(HomeParser::parseFunds)
}
private suspend fun getImageLimitsInternal(): HomeParser.Limits {
val url = EhUrl.URL_HOME
Log.d(TAG, url)
return EhRequestBuilder(url).executeAndParsingWith(HomeParser::parse)
return ehRequest(url).executeAndParsingWith(HomeParser::parse)
}
suspend fun getImageLimits(): HomeParser.Result = coroutineScope {
@@ -529,8 +519,7 @@ object EhEngine {
.add("reset", "Reset Limit")
val url = EhUrl.URL_HOME
Log.d(TAG, url)
return EhRequestBuilder(url)
.post(builder.build())
return ehRequest(url) { post(builder.build()) }
.executeAndParsingWith(HomeParser::parseResetLimits)
}
@@ -538,7 +527,7 @@ object EhEngine {
val url = EhUrl.URL_NEWS
val referer = EhUrl.REFERER_E
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith {
return ehRequest(url, referer).executeAndParsingWith {
if (parse) EventPaneParser.parse(this) else null
}
}
@@ -548,21 +537,21 @@ object EhEngine {
referer: String,
): ProfileParser.Result {
Log.d(TAG, url)
return EhRequestBuilder(url, referer).executeAndParsingWith(ProfileParser::parse)
return ehRequest(url, referer).executeAndParsingWith(ProfileParser::parse)
}
suspend fun getProfile(): ProfileParser.Result {
val url = EhUrl.URL_FORUMS
Log.d(TAG, url)
return getProfileInternal(
EhRequestBuilder(url).executeAndParsingWith(ForumsParser::parse),
ehRequest(url).executeAndParsingWith(ForumsParser::parse),
url,
)
}
private suspend fun getUConfigInternal(url: String) {
Log.d(TAG, url)
EhRequestBuilder(url).executeAndParsingWith {
ehRequest(url).executeAndParsingWith {
check(contains(U_CONFIG_TEXT)) { "U_CONFIG_TEXT not found!" }
}
}
@@ -602,11 +591,8 @@ object EhEngine {
val referer = EhUrl.referer
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(requestBody)
.executeAndParsingWith {
VoteCommentParser.parse(this, commentVote)
}
return ehRequest(url, referer, origin) { post(requestBody) }
.executeAndParsingWith { VoteCommentParser.parse(this, commentVote) }
}
suspend fun voteTag(
@@ -630,8 +616,7 @@ object EhEngine {
val referer = EhUrl.referer
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(requestBody)
return ehRequest(url, referer, origin) { post(requestBody) }
.executeAndParsingWith(VoteTagParser::parse)
}
@@ -679,8 +664,7 @@ object EhEngine {
val referer = EhUrl.referer
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(builder.build())
return ehRequest(url, referer, origin) { builder.build() }
.executeAndParsingWith(GalleryListParser::parse)
.apply { fillGalleryList(galleryInfoList, url, true) }
}
@@ -692,7 +676,7 @@ object EhEngine {
): GalleryPageParser.Result {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
Log.d(TAG, url!!)
return EhRequestBuilder(url, referer).executeAndParsingWith(GalleryPageParser::parse)
return ehRequest(url, referer).executeAndParsingWith(GalleryPageParser::parse)
}
suspend fun getGalleryPageApi(
@@ -716,8 +700,7 @@ object EhEngine {
}
val origin = EhUrl.origin
Log.d(TAG, url)
return EhRequestBuilder(url, referer, origin)
.post(requestBody)
return ehRequest(url, referer, origin) { post(requestBody) }
.executeAndParsingWith(GalleryPageApiParser::parse)
}
}
@@ -15,16 +15,18 @@
*/
package com.hippo.ehviewer.client
import com.hippo.okhttp.ChromeRequestBuilder
import io.ktor.http.HttpMessageBuilder
import okhttp3.Request
inline fun ehRequest(url: String, referer: String? = null, origin: String? = null, builder: Request.Builder.() -> Unit = {}) = Request.Builder().url(url).apply {
addHeader("User-Agent", CHROME_USER_AGENT)
addHeader("Accept", CHROME_ACCEPT)
addHeader("Accept-Language", CHROME_ACCEPT_LANGUAGE)
referer?.let { addHeader("Referer", it) }
origin?.let { addHeader("Origin", it) }
}.apply(builder).build()
class EhRequestBuilder(url: String, referer: String? = null, origin: String? = null) :
ChromeRequestBuilder(url) {
init {
referer?.let { addHeader("Referer", it) }
origin?.let { addHeader("Origin", it) }
}
}
fun HttpMessageBuilder.referer(value: String?): Unit = value?.let { headers.append("Referer", it) } ?: Unit
fun HttpMessageBuilder.referer(value: String?): Unit =
value?.let { headers.append("Referer", it) } ?: Unit
const val CHROME_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
const val CHROME_ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
const val CHROME_ACCEPT_LANGUAGE = "en-US,en;q=0.5"
@@ -24,12 +24,12 @@ import com.hippo.ehviewer.GetText
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.EhRequestBuilder
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.EhUrl.getGalleryDetailUrl
import com.hippo.ehviewer.client.EhUrl.getGalleryMultiPageViewerUrl
import com.hippo.ehviewer.client.EhUrl.referer
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.client.ehRequest
import com.hippo.ehviewer.client.exception.ParseException
import com.hippo.ehviewer.client.parser.GalleryDetailParser.parsePages
import com.hippo.ehviewer.client.parser.GalleryDetailParser.parsePreviewList
@@ -360,15 +360,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
}
private suspend fun readSpiderInfoFromInternet(): SpiderInfo? {
val request = EhRequestBuilder(
getGalleryDetailUrl(
galleryInfo.gid,
galleryInfo.token,
0,
false,
),
referer,
).build()
val request = ehRequest(getGalleryDetailUrl(galleryInfo.gid, galleryInfo.token, 0, false), referer)
return runSuspendCatching {
plainTextOkHttpClient.newCall(request).executeAsync().use { response ->
val body = response.body.string()
@@ -390,7 +382,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
galleryInfo.token!!,
)
val referer = referer
val request = EhRequestBuilder(url, referer).build()
val request = ehRequest(url, referer)
try {
plainTextOkHttpClient.newCall(request).executeAsync().use { response ->
val body = response.body.string()
@@ -426,7 +418,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
false,
)
val referer = referer
val request = EhRequestBuilder(url, referer).build()
val request = ehRequest(url, referer)
try {
plainTextOkHttpClient.newCall(request).executeAsync().use { response ->
val body = response.body.string()
@@ -1,35 +0,0 @@
/*
* Copyright 2016 Hippo Seven
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hippo.okhttp
import okhttp3.Request
open class ChromeRequestBuilder(url: String) : Request.Builder() {
companion object {
private const val CHROME_USER_AGENT =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
private const val CHROME_ACCEPT =
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
private const val CHROME_ACCEPT_LANGUAGE = "en-US,en;q=0.5"
}
init {
this.url(url)
this.addHeader("User-Agent", CHROME_USER_AGENT)
this.addHeader("Accept", CHROME_ACCEPT)
this.addHeader("Accept-Language", CHROME_ACCEPT_LANGUAGE)
}
}