Cubari: implement client side search (#15803)
This commit is contained in:
parent
1b4ccdf0d8
commit
45553c5331
|
@ -6,7 +6,7 @@ ext {
|
||||||
extName = 'Cubari'
|
extName = 'Cubari'
|
||||||
pkgNameSuffix = "all.cubari"
|
pkgNameSuffix = "all.cubari"
|
||||||
extClass = '.CubariFactory'
|
extClass = '.CubariFactory'
|
||||||
extVersionCode = 18
|
extVersionCode = 19
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
|
|
@ -224,17 +224,34 @@ open class Cubari(override val lang: String) : HttpSource() {
|
||||||
client.newBuilder()
|
client.newBuilder()
|
||||||
.addInterceptor(RemoteStorageUtils.TagInterceptor())
|
.addInterceptor(RemoteStorageUtils.TagInterceptor())
|
||||||
.build()
|
.build()
|
||||||
.newCall(searchMangaRequest(page, trimmedQuery, filters))
|
.newCall(proxySearchRequest(trimmedQuery))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
.map { response ->
|
.map { response ->
|
||||||
searchMangaParse(response, trimmedQuery)
|
proxySearchParse(response, trimmedQuery)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
client.newBuilder()
|
||||||
|
.addInterceptor(RemoteStorageUtils.HomeInterceptor())
|
||||||
|
.build()
|
||||||
|
.newCall(searchMangaRequest(page, query, filters))
|
||||||
|
.asObservableSuccess()
|
||||||
|
.map { response ->
|
||||||
|
searchMangaParse(response, query)
|
||||||
|
}
|
||||||
|
.map { mangasPage ->
|
||||||
|
require(mangasPage.mangas.isNotEmpty()) { SEARCH_FALLBACK_MSG }
|
||||||
|
mangasPage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> throw Exception(SEARCH_FALLBACK_MSG)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
|
return GET("$baseUrl/", headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun proxySearchRequest(query: String): Request {
|
||||||
try {
|
try {
|
||||||
val queryFragments = query.split("/")
|
val queryFragments = query.split("/")
|
||||||
val source = queryFragments[0]
|
val source = queryFragments[0]
|
||||||
|
@ -251,6 +268,17 @@ open class Cubari(override val lang: String) : HttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun searchMangaParse(response: Response, query: String): MangasPage {
|
private fun searchMangaParse(response: Response, query: String): MangasPage {
|
||||||
|
val result = json.parseToJsonElement(response.body.string()).jsonArray
|
||||||
|
|
||||||
|
val filterList = result.asSequence()
|
||||||
|
.map { it as JsonObject }
|
||||||
|
.filter { it["title"].toString().contains(query.trim(), true) }
|
||||||
|
.toList()
|
||||||
|
|
||||||
|
return parseMangaList(JsonArray(filterList), SortType.ALL)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun proxySearchParse(response: Response, query: String): MangasPage {
|
||||||
val result = json.parseToJsonElement(response.body.string()).jsonObject
|
val result = json.parseToJsonElement(response.body.string()).jsonObject
|
||||||
return parseSearchList(result, query)
|
return parseSearchList(result, query)
|
||||||
}
|
}
|
||||||
|
@ -328,6 +356,8 @@ open class Cubari(override val lang: String) : HttpSource() {
|
||||||
parseManga(jsonObj)
|
parseManga(jsonObj)
|
||||||
} else if (sortType == SortType.UNPINNED && !pinned) {
|
} else if (sortType == SortType.UNPINNED && !pinned) {
|
||||||
parseManga(jsonObj)
|
parseManga(jsonObj)
|
||||||
|
} else if (sortType == SortType.ALL) {
|
||||||
|
parseManga(jsonObj)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
@ -383,6 +413,7 @@ open class Cubari(override val lang: String) : HttpSource() {
|
||||||
enum class SortType {
|
enum class SortType {
|
||||||
PINNED,
|
PINNED,
|
||||||
UNPINNED,
|
UNPINNED,
|
||||||
|
ALL,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue