Continue to cleanup EhEngine

This commit is contained in:
tarsin committed 2023-03-09 11:00:38 +08:00
1 parent 7c41b5d4ed
commit 8b8d845068
2 files changed
+44 -311

No files matched your search

@@ -101,7 +101,7 @@ object EhClient {
)
METHOD_GET_TORRENT_LIST -> EhEngine.getTorrentList(
params[0] as String?,
params[0] as String,
params[1] as Long,
params[2] as String?
)
@@ -123,7 +123,7 @@ object EhClient {
)
METHOD_ARCHIVE_LIST -> EhEngine.getArchiveList(
params[0] as String?,
params[0] as String,
params[1] as Long,
params[2] as String?
)
@@ -50,7 +50,6 @@ import com.hippo.ehviewer.client.parser.VoteTagParser
import com.hippo.ehviewer.dailycheck.showEventNotification
import com.hippo.ehviewer.dailycheck.today
import com.hippo.network.StatusCodeException
import com.hippo.util.ExceptionUtils
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
@@ -123,21 +122,14 @@ object EhEngine {
e?.let { throw it }
}
@Suppress("NOTHING_TO_INLINE")
private inline fun <T> Result<T>.getOrThrowExactly(response: Response?, body: String?): T {
return runCatching {
getOrThrow()
}.onFailure {
rethrowExactly(response?.code ?: -1, response?.headers, body, it)
}.getOrThrow()
}
private inline fun <T> Response.parsingWith(block: String.() -> T): T {
return use {
return use { response ->
val body = body.string()
runCatching {
block(body)
}.getOrThrowExactly(this, body)
}.onFailure {
rethrowExactly(response.code, response.headers, body, it)
}.getOrThrow()
}
}
@@ -279,15 +271,12 @@ object EhEngine {
val referer = EhUrl.referer
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
return okHttpClient.newCall(request).executeAsync().use { response ->
val body = response.body.string()
runCatching {
EventPaneParser.parse(body)?.let {
Settings.lastDawnDay = today
showEventNotification(it)
}
GalleryDetailParser.parse(body)
}.getOrThrowExactly(response, body)
return okHttpClient.newCall(request).executeAsync().parsingWith {
EventPaneParser.parse(this)?.let {
Settings.lastDawnDay = today
showEventNotification(it)
}
GalleryDetailParser.parse(this)
}
}
@@ -326,7 +315,6 @@ object EhEngine {
return okHttpClient.newCall(request).executeAsync().parsingWith(RateGalleryParser::parse)
}
@Throws(Throwable::class)
suspend fun commentGallery(
url: String?, comment: String, id: String?
): GalleryCommentList {
@@ -342,31 +330,16 @@ object EhEngine {
val request = EhRequestBuilder(url, url, origin)
.post(builder.build())
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
val document = Jsoup.parse(body!!)
val elements = document.select("#chd + p")
if (elements.size > 0) {
throw EhException(elements[0].text())
}
return GalleryDetailParser.parseComments(document)
return okHttpClient.newCall(request).executeAsync().parsingWith {
val document = Jsoup.parse(this)
val elements = document.select("#chd + p")
if (elements.size > 0) {
throw EhException(elements[0].text())
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
GalleryDetailParser.parseComments(document)
}
}
@Throws(Throwable::class)
suspend fun getGalleryToken(
gid: Long,
gtoken: String?, page: Int
@@ -386,62 +359,28 @@ object EhEngine {
val request = EhRequestBuilder(url, referer, origin)
.post(requestBody)
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return GalleryTokenApiParser.parse(body)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return okHttpClient.newCall(request).executeAsync()
.parsingWith(GalleryTokenApiParser::parse)
}
@Throws(Throwable::class)
suspend fun getFavorites(
url: String
): FavoritesParser.Result {
val referer = EhUrl.referer
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var result: FavoritesParser.Result
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
result = FavoritesParser.parse(body)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
fillGalleryList(result.galleryInfoList, url, false)
return result
return okHttpClient.newCall(request).executeAsync().parsingWith(FavoritesParser::parse)
.apply { fillGalleryList(galleryInfoList, url, false) }
}
/**
* @param dstCat -1 for delete, 0 - 9 for cloud favorite, others throw Exception
* @param note max 250 characters
*/
@Throws(Throwable::class)
suspend fun addFavorites(
gid: Long,
token: String?, dstCat: Int, note: String?
): Void? {
) {
val catStr: String = when (dstCat) {
-1 -> {
"favdel"
@@ -467,23 +406,7 @@ object EhEngine {
val request = EhRequestBuilder(url, url, origin)
.post(builder.build())
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
rethrowExactly(code, headers, body, null)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return null
return okHttpClient.newCall(request).executeAsync().parsingWith {}
}
@Throws(Throwable::class)
@@ -501,7 +424,6 @@ object EhEngine {
return null
}
@Throws(Throwable::class)
suspend fun modifyFavorites(
url: String,
gidArray: LongArray, dstCat: Int
@@ -530,91 +452,29 @@ object EhEngine {
val request = EhRequestBuilder(url, url, origin)
.post(builder.build())
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var result: FavoritesParser.Result
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
result = FavoritesParser.parse(body)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
fillGalleryList(result.galleryInfoList, url, false)
return result
return okHttpClient.newCall(request).executeAsync().parsingWith(FavoritesParser::parse)
.apply { fillGalleryList(galleryInfoList, url, false) }
}
@Throws(Throwable::class)
suspend fun getTorrentList(
url: String?,
gid: Long, token: String?
url: String, gid: Long, token: String?
): List<TorrentParser.Result> {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
Log.d(TAG, url!!)
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var result: List<TorrentParser.Result>
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
result = TorrentParser.parse(body)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return result
return okHttpClient.newCall(request).executeAsync().parsingWith(TorrentParser::parse)
}
@Throws(Throwable::class)
suspend fun getArchiveList(
url: String?,
gid: Long, token: String?
url: String, gid: Long, token: String?
): ArchiveParser.Result {
val referer = EhUrl.getGalleryDetailUrl(gid, token)
Log.d(TAG, url!!)
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var result: ArchiveParser.Result
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
result = ArchiveParser.parse(body!!)!!
if (result.funds == null) {
try {
result.funds = getFunds()
} catch (e: Throwable) {
e.printStackTrace()
}
}
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return result
return okHttpClient.newCall(request).executeAsync().parsingWith(ArchiveParser::parse)!!
.apply { funds = funds ?: getFunds() }
}
@Throws(Throwable::class)
suspend fun downloadArchive(
gid: Long,
token: String?, or: String?, res: String?, isHAtH: Boolean
@@ -644,40 +504,12 @@ object EhEngine {
.post(builder.build())
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var result: String?
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
rethrowExactly(code, headers, body, null)
result = ArchiveParser.parseArchiveUrl(body!!)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
var result = call.executeAsync().parsingWith(ArchiveParser::parseArchiveUrl)
if (!isHAtH) {
if (result == null) {
// Wait for the server to prepare archives
delay(1000)
try {
call.clone().executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
rethrowExactly(code, headers, body, null)
result = ArchiveParser.parseArchiveUrl(body!!)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
result = call.clone().executeAsync().parsingWith(ArchiveParser::parseArchiveUrl)
if (result == null) {
throw EhException("Archive unavailable")
}
@@ -687,53 +519,20 @@ object EhEngine {
return null
}
@Throws(Throwable::class)
suspend fun getFunds(): HomeParser.Funds {
val url = EhUrl.URL_FUNDS
Log.d(TAG, url)
val request = EhRequestBuilder(url).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return HomeParser.parseFunds(body!!)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return okHttpClient.newCall(request).executeAsync().parsingWith(HomeParser::parseFunds)
}
@Throws(Throwable::class)
private suspend fun getImageLimitsInternal(): HomeParser.Limits {
val url = EhUrl.URL_HOME
Log.d(TAG, url)
val request = EhRequestBuilder(url).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return HomeParser.parse(body!!)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return okHttpClient.newCall(request).executeAsync().parsingWith(HomeParser::parse)
}
@Throws(Throwable::class)
suspend fun getImageLimits(): HomeParser.Result = coroutineScope {
val limitsDeferred = async {
getImageLimitsInternal()
@@ -744,7 +543,6 @@ object EhEngine {
HomeParser.Result(limitsDeferred.await(), fundsDeferred.await())
}
@Throws(Throwable::class)
suspend fun resetImageLimits(): HomeParser.Limits? {
val builder = FormBody.Builder()
.add("act", "limits")
@@ -754,92 +552,34 @@ object EhEngine {
val request = EhRequestBuilder(url)
.post(builder.build())
.build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return HomeParser.parseResetLimits(body!!)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return okHttpClient.newCall(request).executeAsync()
.parsingWith(HomeParser::parseResetLimits)
}
@Throws(Throwable::class)
suspend fun getNews(parse: Boolean): String? {
val url = EhUrl.URL_NEWS
val referer = EhUrl.REFERER_E
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return if (parse) EventPaneParser.parse(body!!) else null
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
return okHttpClient.newCall(request).executeAsync().parsingWith {
if (parse) EventPaneParser.parse(this) else null
}
}
@Throws(Throwable::class)
private suspend fun getProfileInternal(
url: String, referer: String
): ProfileParser.Result {
Log.d(TAG, url)
val request = EhRequestBuilder(url, referer).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return ProfileParser.parse(body)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
}
return okHttpClient.newCall(request).executeAsync().parsingWith(ProfileParser::parse)
}
@Throws(Throwable::class)
suspend fun getProfile(): ProfileParser.Result {
val url = EhUrl.URL_FORUMS
Log.d(TAG, url)
val request = EhRequestBuilder(url).build()
val call = okHttpClient.newCall(request)
var body: String? = null
var headers: Headers? = null
var code = -1
try {
call.executeAsync().use { response ->
code = response.code
headers = response.headers
body = response.body.string()
return getProfileInternal(ForumsParser.parse(body), url)
}
} catch (e: Throwable) {
ExceptionUtils.throwIfFatal(e)
rethrowExactly(code, headers, body, e)
throw e
return okHttpClient.newCall(request).executeAsync().parsingWith(ForumsParser::parse).let {
getProfileInternal(it, url)
}
}
@@ -865,7 +605,6 @@ object EhEngine {
}
}
@Throws(Throwable::class)
suspend fun voteComment(
apiUid: Long,
apiKey: String?, gid: Long, token: String?, commentId: Long, commentVote: Int
@@ -891,7 +630,6 @@ object EhEngine {
}
}
@Throws(Throwable::class)
suspend fun voteTag(
apiUid: Long,
apiKey: String?, gid: Long, token: String?, tags: String?, vote: Int
@@ -918,7 +656,6 @@ object EhEngine {
/**
* @param image Must be jpeg
*/
@Throws(Throwable::class)
suspend fun imageSearch(
image: File,
uss: Boolean, osc: Boolean, se: Boolean
@@ -965,8 +702,6 @@ object EhEngine {
.apply { fillGalleryList(galleryInfoList, url, true) }
}
@JvmStatic
@Throws(Throwable::class)
suspend fun getGalleryPage(
url: String?,
gid: Long,
@@ -978,8 +713,6 @@ object EhEngine {
return okHttpClient.newCall(request).executeAsync().parsingWith(GalleryPageParser::parse)
}
@JvmStatic
@Throws(Throwable::class)
suspend fun getGalleryPageApi(
gid: Long,
index: Int,