pull/32/head
kunfei 6 years ago
parent 10e88b592c
commit a385977aca
  1. 4
      app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt
  2. 4
      app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt
  3. 29
      app/src/main/java/io/legado/app/model/WebBook.kt
  4. 22
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  5. 3
      app/src/main/java/io/legado/app/model/webbook/BookInfo.kt

@ -14,13 +14,13 @@ import retrofit2.http.Url
interface IHttpGetApi {
@GET
operator fun get(
fun getAsync(
@Url url: String,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
@GET
fun getMap(
fun getMapAsync(
@Url url: String,
@QueryMap(encoded = true) queryMap: Map<String, String>,
@HeaderMap headers: Map<String, String>

@ -14,14 +14,14 @@ interface IHttpPostApi {
@FormUrlEncoded
@POST
fun postMap(
fun postMapAsync(
@Url url: String,
@FieldMap(encoded = true) fieldMap: Map<String, String>,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
@POST
fun postBody(
fun postBodyAsync(
@Url url: String,
@Body body: RequestBody,
@HeaderMap headers: Map<String, String>

@ -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<IHttpPostApi>(
analyzeUrl.baseUrl
).postBody(
analyzeUrl.url,
analyzeUrl.body,
analyzeUrl.headerMap
).await()
analyzeUrl.fieldMap.isEmpty() -> HttpHelper.getApiService<IHttpGetApi>(
analyzeUrl.baseUrl
)[analyzeUrl.url, analyzeUrl.headerMap].await()
else -> HttpHelper.getApiService<IHttpGetApi>(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<SearchBook>()
}
}
fun getBookInfo(book: Book): Coroutine<Book> {
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
}
}
}

@ -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<Response<String>> {
return when {
method == AnalyzeUrl.Method.POST -> HttpHelper.getApiService<IHttpPostApi>(
baseUrl
).postBodyAsync(
url,
body,
headerMap
)
fieldMap.isEmpty() -> HttpHelper.getApiService<IHttpGetApi>(
baseUrl
).getAsync(url, headerMap)
else -> HttpHelper.getApiService<IHttpGetApi>(baseUrl)
.getMapAsync(url, fieldMap, headerMap)
}
}
}

@ -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(

Loading…
Cancel
Save