Zbulu multisrc fixes (#8949)
* Fix chapter date parsing * Fix search request building
This commit is contained in:
parent
47f5ac549f
commit
6935c22ba4
|
@ -14,8 +14,8 @@ import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
import java.text.ParseException
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Calendar
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
@ -75,28 +75,20 @@ abstract class Zbulu(
|
||||||
// Search
|
// Search
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
val url = if (query.isNotBlank()) {
|
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||||
"$baseUrl/?s=$query"
|
val authorFilter = filterList.find { it is AuthorFilter } as AuthorFilter
|
||||||
} else {
|
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
|
||||||
lateinit var ret: String
|
|
||||||
lateinit var genre: String
|
val url = when {
|
||||||
filters.forEach { filter ->
|
query.isNotBlank() -> "$baseUrl/?s=$query"
|
||||||
when (filter) {
|
authorFilter.state.isNotBlank() -> "$baseUrl/author/${authorFilter.state.replace(" ", "-")}/page-$page"
|
||||||
is AuthorField -> {
|
genreFilter.state != 0 -> {
|
||||||
if (filter.state.isNotBlank()) {
|
val genre = genreFilter.toUriPart().let { if (it == "completed") "completed" else "genre/$it" }
|
||||||
ret = "$baseUrl/author/${filter.state.replace(" ", "-")}/page-$page"
|
"$baseUrl/$genre/page-$page"
|
||||||
}
|
|
||||||
}
|
|
||||||
is GenreFilter -> {
|
|
||||||
if (filter.toUriPart().isNotBlank() && filter.state != 0) {
|
|
||||||
filter.toUriPart().let { genre = if (it == "completed") "completed" else "genre/$it" }
|
|
||||||
ret = "$baseUrl/$genre/page-$page"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ret
|
else -> "$baseUrl/manga-list/page-$page/"
|
||||||
}
|
}
|
||||||
|
|
||||||
return GET(url, headers)
|
return GET(url, headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,21 +148,42 @@ abstract class Zbulu(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
val dateFormat by lazy {
|
|
||||||
SimpleDateFormat("MM/dd/yyyy", Locale.US)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun String?.toDate(): Long {
|
private fun String?.toDate(): Long {
|
||||||
return if (this.isNullOrEmpty()) {
|
if (this.isNullOrEmpty()) return 0L
|
||||||
0
|
val date = this
|
||||||
|
return if (date.contains("ago")) {
|
||||||
|
val value = date.split(' ')[0].toInt()
|
||||||
|
when {
|
||||||
|
"second" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.SECOND, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"minute" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.MINUTE, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"hour" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.HOUR_OF_DAY, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"day" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.DATE, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"week" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.DATE, value * 7 * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"month" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.MONTH, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
"year" in date -> Calendar.getInstance().apply {
|
||||||
|
add(Calendar.YEAR, value * -1)
|
||||||
|
}.timeInMillis
|
||||||
|
else -> {
|
||||||
|
0L
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// In the event site displays invalid date
|
|
||||||
try {
|
try {
|
||||||
dateFormat.parse(this)?.time ?: 0
|
dateFormat.parse(date)?.time ?: 0
|
||||||
} catch (_: ParseException) {
|
} catch (_: Exception) {
|
||||||
0
|
0L
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,13 +200,13 @@ abstract class Zbulu(
|
||||||
|
|
||||||
// Filters
|
// Filters
|
||||||
|
|
||||||
private class AuthorField : Filter.Text("Author")
|
private class AuthorFilter : Filter.Text("Author")
|
||||||
|
|
||||||
override fun getFilterList() = FilterList(
|
override fun getFilterList() = FilterList(
|
||||||
Filter.Header("Cannot combine search types!"),
|
Filter.Header("Cannot combine search types!"),
|
||||||
Filter.Header("Author name must be exact."),
|
Filter.Header("Author name must be exact."),
|
||||||
Filter.Separator("-----------------"),
|
Filter.Separator(),
|
||||||
AuthorField(),
|
AuthorFilter(),
|
||||||
GenreFilter()
|
GenreFilter()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -257,4 +270,10 @@ abstract class Zbulu(
|
||||||
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
|
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
|
||||||
fun toUriPart() = vals[state].second
|
fun toUriPart() = vals[state].second
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val dateFormat by lazy {
|
||||||
|
SimpleDateFormat("MM/dd/yyyy", Locale.US)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ class ZbuluGenerator : ThemeSourceGenerator {
|
||||||
|
|
||||||
override val themeClass = "Zbulu"
|
override val themeClass = "Zbulu"
|
||||||
|
|
||||||
override val baseVersionCode: Int = 2
|
override val baseVersionCode: Int = 3
|
||||||
|
|
||||||
override val sources = listOf(
|
override val sources = listOf(
|
||||||
SingleLang("HolyManga", "https://w15.holymanga.net", "en", overrideVersionCode = 1),
|
SingleLang("HolyManga", "https://w15.holymanga.net", "en", overrideVersionCode = 1),
|
||||||
|
|
Loading…
Reference in New Issue