From a385977aca93fbe70c01bac3de949c7e65552c04 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 19 Jul 2019 21:52:35 +0800 Subject: [PATCH] up --- .../io/legado/app/data/api/IHttpGetApi.kt | 4 +-- .../io/legado/app/data/api/IHttpPostApi.kt | 4 +-- .../main/java/io/legado/app/model/WebBook.kt | 29 +++++++------------ .../app/model/analyzeRule/AnalyzeUrl.kt | 22 ++++++++++++++ .../io/legado/app/model/webbook/BookInfo.kt | 3 +- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt b/app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt index f1f01b8a3..774cf6c89 100644 --- a/app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt +++ b/app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt @@ -14,13 +14,13 @@ import retrofit2.http.Url interface IHttpGetApi { @GET - operator fun get( + fun getAsync( @Url url: String, @HeaderMap headers: Map ): Deferred> @GET - fun getMap( + fun getMapAsync( @Url url: String, @QueryMap(encoded = true) queryMap: Map, @HeaderMap headers: Map diff --git a/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt b/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt index 2cfb5927b..166f7bfcc 100644 --- a/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt +++ b/app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt @@ -14,14 +14,14 @@ interface IHttpPostApi { @FormUrlEncoded @POST - fun postMap( + fun postMapAsync( @Url url: String, @FieldMap(encoded = true) fieldMap: Map, @HeaderMap headers: Map ): Deferred> @POST - fun postBody( + fun postBodyAsync( @Url url: String, @Body body: RequestBody, @HeaderMap headers: Map diff --git a/app/src/main/java/io/legado/app/model/WebBook.kt b/app/src/main/java/io/legado/app/model/WebBook.kt index d5c22f700..5bd022814 100644 --- a/app/src/main/java/io/legado/app/model/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/WebBook.kt @@ -1,12 +1,11 @@ package io.legado.app.model -import io.legado.app.data.api.IHttpGetApi -import io.legado.app.data.api.IHttpPostApi +import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.SearchBook import io.legado.app.help.coroutine.Coroutine -import io.legado.app.help.http.HttpHelper import io.legado.app.model.analyzeRule.AnalyzeUrl +import io.legado.app.model.webbook.BookInfo import io.legado.app.model.webbook.BookList class WebBook(private val bookSource: BookSource) { @@ -15,25 +14,19 @@ class WebBook(private val bookSource: BookSource) { return Coroutine.async { bookSource.getSearchRule().searchUrl?.let { searchUrl -> val analyzeUrl = AnalyzeUrl(searchUrl, key, page) - val response = when { - analyzeUrl.method == AnalyzeUrl.Method.POST -> HttpHelper.getApiService( - analyzeUrl.baseUrl - ).postBody( - analyzeUrl.url, - analyzeUrl.body, - analyzeUrl.headerMap - ).await() - analyzeUrl.fieldMap.isEmpty() -> HttpHelper.getApiService( - analyzeUrl.baseUrl - )[analyzeUrl.url, analyzeUrl.headerMap].await() - else -> HttpHelper.getApiService(analyzeUrl.baseUrl) - .getMap(analyzeUrl.url, analyzeUrl.fieldMap, analyzeUrl.headerMap).await() - } + val response = analyzeUrl.getResponseAsync().await() return@async BookList.analyzeBookList(response, bookSource, analyzeUrl) } return@async arrayListOf() } } - + fun getBookInfo(book: Book): Coroutine { + return Coroutine.async { + val analyzeUrl = AnalyzeUrl(book = book, ruleUrl = book.bookUrl) + val response = analyzeUrl.getResponseAsync().await() + BookInfo.analyzeBookInfo(book, response.body(), bookSource, analyzeUrl) + return@async book + } + } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 8f7c02698..f3967e29c 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -5,11 +5,16 @@ import android.text.TextUtils import androidx.annotation.Keep import io.legado.app.constant.AppConst.SCRIPT_ENGINE import io.legado.app.constant.Pattern.EXP_PATTERN +import io.legado.app.data.api.IHttpGetApi +import io.legado.app.data.api.IHttpPostApi import io.legado.app.data.entities.Book +import io.legado.app.help.http.HttpHelper import io.legado.app.utils.* +import kotlinx.coroutines.Deferred import okhttp3.FormBody import okhttp3.MediaType import okhttp3.RequestBody +import retrofit2.Response import java.net.URLEncoder import java.util.* import java.util.regex.Pattern @@ -204,4 +209,21 @@ class AnalyzeUrl( enum class Method { GET, POST } + + fun getResponseAsync(): Deferred> { + return when { + method == AnalyzeUrl.Method.POST -> HttpHelper.getApiService( + baseUrl + ).postBodyAsync( + url, + body, + headerMap + ) + fieldMap.isEmpty() -> HttpHelper.getApiService( + baseUrl + ).getAsync(url, headerMap) + else -> HttpHelper.getApiService(baseUrl) + .getMapAsync(url, fieldMap, headerMap) + } + } } diff --git a/app/src/main/java/io/legado/app/model/webbook/BookInfo.kt b/app/src/main/java/io/legado/app/model/webbook/BookInfo.kt index 3d9f39e38..2b53eaedb 100644 --- a/app/src/main/java/io/legado/app/model/webbook/BookInfo.kt +++ b/app/src/main/java/io/legado/app/model/webbook/BookInfo.kt @@ -14,8 +14,7 @@ object BookInfo { book: Book, body: String?, bookSource: BookSource, - analyzeUrl: AnalyzeUrl, - isSearch: Boolean = true + analyzeUrl: AnalyzeUrl ) { val baseUrl = analyzeUrl.url body ?: throw Exception(