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 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)
}
}
} }

View File

@ -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),