pull/32/head
kunfei 6 years ago
parent eea048dc70
commit 8dca2c885e
  1. 27
      app/src/main/java/io/legado/app/data/api/IHttpGetApi.java
  2. 29
      app/src/main/java/io/legado/app/data/api/IHttpGetApi.kt
  3. 32
      app/src/main/java/io/legado/app/data/api/IHttpPostApi.java
  4. 29
      app/src/main/java/io/legado/app/data/api/IHttpPostApi.kt
  5. 41
      app/src/main/java/io/legado/app/model/WebBook.kt
  6. 20
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  7. 6
      app/src/main/java/io/legado/app/model/book/All.kt
  8. 5
      app/src/main/java/io/legado/app/model/book/BookChapterList.kt
  9. 5
      app/src/main/java/io/legado/app/model/book/BookContent.kt
  10. 5
      app/src/main/java/io/legado/app/model/book/BookInfo.kt
  11. 5
      app/src/main/java/io/legado/app/model/webbook/BookChapterList.kt
  12. 5
      app/src/main/java/io/legado/app/model/webbook/BookContent.kt
  13. 5
      app/src/main/java/io/legado/app/model/webbook/BookInfo.kt
  14. 2
      app/src/main/java/io/legado/app/model/webbook/BookList.kt
  15. 2
      app/src/main/java/io/legado/app/ui/search/SearchViewModel.kt

@ -1,27 +0,0 @@
package io.legado.app.data.api;
import java.util.Map;
import kotlinx.coroutines.Deferred;
import retrofit2.Response;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
/**
* Created by GKF on 2018/1/21.
* get web content
*/
public interface IHttpGetApi {
@GET
Deferred<Response<String>> get(@Url String url,
@HeaderMap Map<String, String> headers);
@GET
Deferred<Response<String>> getMap(@Url String url,
@QueryMap(encoded = true) Map<String, String> queryMap,
@HeaderMap Map<String, String> headers);
}

@ -0,0 +1,29 @@
package io.legado.app.data.api
import kotlinx.coroutines.Deferred
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.HeaderMap
import retrofit2.http.QueryMap
import retrofit2.http.Url
/**
* Created by GKF on 2018/1/21.
* get web content
*/
interface IHttpGetApi {
@GET
operator fun get(
@Url url: String,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
@GET
fun getMap(
@Url url: String,
@QueryMap(encoded = true) queryMap: Map<String, String>,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
}

@ -1,32 +0,0 @@
package io.legado.app.data.api;
import java.util.Map;
import kotlinx.coroutines.Deferred;
import okhttp3.RequestBody;
import retrofit2.Response;
import retrofit2.http.Body;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.Url;
/**
* Created by GKF on 2018/1/29.
* post
*/
public interface IHttpPostApi {
@FormUrlEncoded
@POST
Deferred<Response<String>> postMap(@Url String url,
@FieldMap(encoded = true) Map<String, String> fieldMap,
@HeaderMap Map<String, String> headers);
@POST
Deferred<Response<String>> postBody(@Url String url,
@Body RequestBody body,
@HeaderMap Map<String, String> headers);
}

@ -0,0 +1,29 @@
package io.legado.app.data.api
import kotlinx.coroutines.Deferred
import okhttp3.RequestBody
import retrofit2.Response
import retrofit2.http.*
/**
* Created by GKF on 2018/1/29.
* post
*/
interface IHttpPostApi {
@FormUrlEncoded
@POST
fun postMap(
@Url url: String,
@FieldMap(encoded = true) fieldMap: Map<String, String>,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
@POST
fun postBody(
@Url url: String,
@Body body: RequestBody,
@HeaderMap headers: Map<String, String>
): Deferred<Response<String>>
}

@ -0,0 +1,41 @@
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.BookSource
import io.legado.app.help.http.HttpHelper
import io.legado.app.model.analyzeRule.AnalyzeUrl
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
class WebBook(val bookSource: BookSource) : CoroutineScope by MainScope() {
fun searchBook(key: String, page: Int?, success: (() -> Unit), error: (() -> Unit)) {
launch(IO) {
val searchRule = bookSource.getSearchRule()
searchRule?.searchUrl?.let { searchUrl ->
val analyzeUrl = AnalyzeUrl(searchUrl)
val res = 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()
}
}
}
}
}

@ -27,7 +27,7 @@ class AnalyzeUrl(
key: String? = null,
page: Int? = null,
headerMapF: Map<String, String>? = null,
var baseUrl: String? = null,
baseUrl: String? = null,
book: Book? = null
) {
companion object {
@ -35,19 +35,19 @@ class AnalyzeUrl(
private val jsonType = MediaType.parse("application/json; charset=utf-8")
}
lateinit var url: String
lateinit var baseUrl: String
private set
var host: String? = null
lateinit var url: String
private set
var path: String? = null
private set
var queryStr: String? = null
private set
private val fieldMap = LinkedHashMap<String, String>()
private val headerMap = HashMap<String, String>()
val fieldMap = LinkedHashMap<String, String>()
val headerMap = HashMap<String, String>()
private var charset: String? = null
private var bodyTxt: String? = null
var body: RequestBody? = null
lateinit var body: RequestBody
private set
var method = Method.GET
private set
@ -64,7 +64,9 @@ class AnalyzeUrl(
}
init {
baseUrl = baseUrl?.split(",\n*".toRegex(), 1)?.get(0)
baseUrl?.let {
this.baseUrl = it.split(",\n*".toRegex(), 1)[0]
}
headerMapF?.let { headerMap.putAll(it) }
//替换参数
replaceKeyPageJs(key, page, book)
@ -124,7 +126,9 @@ class AnalyzeUrl(
private fun initUrl() {
var urlArray = ruleUrl.split(",[^\\{]*".toRegex(), 2)
url = urlArray[0]
host = NetworkUtils.getBaseUrl(url)
NetworkUtils.getBaseUrl(url)?.let {
baseUrl = it
}
if (urlArray.size > 1) {
val options = GSON.fromJsonObject<Map<String, String>>(urlArray[1])
options?.let {

@ -1,6 +0,0 @@
package io.legado.app.model.book
class All {
}

@ -1,5 +0,0 @@
package io.legado.app.model.book
class BookChapterList {
}

@ -1,5 +0,0 @@
package io.legado.app.model.book
class BookContent {
}

@ -1,5 +0,0 @@
package io.legado.app.model.book
class BookInfo {
}

@ -0,0 +1,5 @@
package io.legado.app.model.webbook
class BookChapterList {
}

@ -0,0 +1,5 @@
package io.legado.app.model.webbook
class BookContent {
}

@ -0,0 +1,5 @@
package io.legado.app.model.webbook
class BookInfo {
}

@ -1,4 +1,4 @@
package io.legado.app.model.book
package io.legado.app.model.webbook
import io.legado.app.data.entities.SearchBook

@ -31,6 +31,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
.onErrorReturn { "error return" }
.onStart {
Log.e("TAG!", "start")
start
}
.onSuccess {
Log.e("TAG!", "success: $it")
@ -40,6 +41,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) {
}
.onFinally {
Log.e("TAG!", "finally")
finally
}
}

Loading…
Cancel
Save