Zbulu multisrc fixes (#8949)

* Fix chapter date parsing

* Fix search request building
This commit is contained in:
Arraiment 2021-09-05 01:59:37 +08:00 committed by GitHub
parent 47f5ac549f
commit 6935c22ba4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 37 deletions

View File

@ -14,8 +14,8 @@ import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import java.util.concurrent.TimeUnit
@ -75,28 +75,20 @@ abstract class Zbulu(
// Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = if (query.isNotBlank()) {
"$baseUrl/?s=$query"
} else {
lateinit var ret: String
lateinit var genre: String
filters.forEach { filter ->
when (filter) {
is AuthorField -> {
if (filter.state.isNotBlank()) {
ret = "$baseUrl/author/${filter.state.replace(" ", "-")}/page-$page"
val filterList = if (filters.isEmpty()) getFilterList() else filters
val authorFilter = filterList.find { it is AuthorFilter } as AuthorFilter
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
val url = when {
query.isNotBlank() -> "$baseUrl/?s=$query"
authorFilter.state.isNotBlank() -> "$baseUrl/author/${authorFilter.state.replace(" ", "-")}/page-$page"
genreFilter.state != 0 -> {
val genre = genreFilter.toUriPart().let { if (it == "completed") "completed" else "genre/$it" }
"$baseUrl/$genre/page-$page"
}
else -> "$baseUrl/manga-list/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
}
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 {
return if (this.isNullOrEmpty()) {
0
if (this.isNullOrEmpty()) return 0L
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 {
// In the event site displays invalid date
try {
dateFormat.parse(this)?.time ?: 0
} catch (_: ParseException) {
0
dateFormat.parse(date)?.time ?: 0
} catch (_: Exception) {
0L
}
}
}
@ -187,13 +200,13 @@ abstract class Zbulu(
// Filters
private class AuthorField : Filter.Text("Author")
private class AuthorFilter : Filter.Text("Author")
override fun getFilterList() = FilterList(
Filter.Header("Cannot combine search types!"),
Filter.Header("Author name must be exact."),
Filter.Separator("-----------------"),
AuthorField(),
Filter.Separator(),
AuthorFilter(),
GenreFilter()
)
@ -257,4 +270,10 @@ abstract class Zbulu(
Filter.Select<String>(displayName, vals.map { it.first }.toTypedArray()) {
fun toUriPart() = vals[state].second
}
companion object {
val dateFormat by lazy {
SimpleDateFormat("MM/dd/yyyy", Locale.US)
}
}
}

View File

@ -9,7 +9,7 @@ class ZbuluGenerator : ThemeSourceGenerator {
override val themeClass = "Zbulu"
override val baseVersionCode: Int = 2
override val baseVersionCode: Int = 3
override val sources = listOf(
SingleLang("HolyManga", "https://w15.holymanga.net", "en", overrideVersionCode = 1),