From 6935c22ba4a9219b33fd527fab7fa9b12e9df281 Mon Sep 17 00:00:00 2001 From: Arraiment <76941874+Arraiment@users.noreply.github.com> Date: Sun, 5 Sep 2021 01:59:37 +0800 Subject: [PATCH] Zbulu multisrc fixes (#8949) * Fix chapter date parsing * Fix search request building --- .../kanade/tachiyomi/multisrc/zbulu/Zbulu.kt | 91 +++++++++++-------- .../multisrc/zbulu/ZbuluGenerator.kt | 2 +- 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/Zbulu.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/Zbulu.kt index 3893ad4b2..0de26cbca 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/Zbulu.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/Zbulu.kt @@ -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" - } - } - 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" - } - } - } + 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" } - ret + else -> "$baseUrl/manga-list/page-$page/" } + 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(displayName, vals.map { it.first }.toTypedArray()) { fun toUriPart() = vals[state].second } + + companion object { + val dateFormat by lazy { + SimpleDateFormat("MM/dd/yyyy", Locale.US) + } + } } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/ZbuluGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/ZbuluGenerator.kt index 69631710e..67831aa5d 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/ZbuluGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zbulu/ZbuluGenerator.kt @@ -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),