From 1c8211937ff584269226fbcbede4601c9f2bce2b Mon Sep 17 00:00:00 2001 From: nzoba <55888232+nzoba@users.noreply.github.com> Date: Tue, 26 Sep 2023 01:32:26 +0200 Subject: [PATCH] MangaThemesia: AsuraScansEn search and ManhwaFreak dates (#18158) * ManhwaFreak: Fix relative date * AsuraScans: Add dropped status and fix search * AsuraScans: override series and author selector --- .../asurascans/src/AsuraScansEn.kt | 19 ++++++++++++ .../manhwafreak/src/ManhwaFreak.kt | 30 +++++++++++++++++-- .../multisrc/mangathemesia/MangaThemesia.kt | 2 +- .../mangathemesia/MangaThemesiaGenerator.kt | 4 +-- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/multisrc/overrides/mangathemesia/asurascans/src/AsuraScansEn.kt b/multisrc/overrides/mangathemesia/asurascans/src/AsuraScansEn.kt index a92a2ccd1..47fc9002c 100644 --- a/multisrc/overrides/mangathemesia/asurascans/src/AsuraScansEn.kt +++ b/multisrc/overrides/mangathemesia/asurascans/src/AsuraScansEn.kt @@ -15,6 +15,7 @@ import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import okhttp3.Interceptor import okhttp3.OkHttpClient +import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element @@ -41,6 +42,8 @@ class AsuraScansEn : MangaThemesia( .build() override val seriesDescriptionSelector = "div.desc p, div.entry-content p, div[itemprop=description]:not(:has(p))" + override val seriesArtistSelector = ".fmed b:contains(artist)+span, .infox span:contains(artist)" + override val seriesAuthorSelector = ".fmed b:contains(author)+span, .infox span:contains(author)" override val pageSelector = "div.rdminimal > img, div.rdminimal > p > img, div.rdminimal > a > img, div.rdminimal > p > a > img, " + "div.rdminimal > noscript > img, div.rdminimal > p > noscript > img, div.rdminimal > a > noscript > img, div.rdminimal > p > a > noscript > img" @@ -58,6 +61,22 @@ class AsuraScansEn : MangaThemesia( return super.fetchSearchManga(page, query, filters).tempUrlToPermIfNeeded() } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val request = super.searchMangaRequest(page, query, filters) + if (query.isBlank()) return request + + val url = request.url.newBuilder() + .addPathSegment("page/$page/") + .removeAllQueryParameters("page") + .removeAllQueryParameters("title") + .addQueryParameter("s", query) + .build() + + return request.newBuilder() + .url(url) + .build() + } + // Temp Url for manga/chapter override fun fetchChapterList(manga: SManga): Observable> { val newManga = manga.titleToUrlFrag() diff --git a/multisrc/overrides/mangathemesia/manhwafreak/src/ManhwaFreak.kt b/multisrc/overrides/mangathemesia/manhwafreak/src/ManhwaFreak.kt index e01785e6b..8dab850ba 100644 --- a/multisrc/overrides/mangathemesia/manhwafreak/src/ManhwaFreak.kt +++ b/multisrc/overrides/mangathemesia/manhwafreak/src/ManhwaFreak.kt @@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import okhttp3.Request import org.jsoup.nodes.Element +import java.util.Calendar class ManhwaFreak : MangaThemesia("Manhwa Freak", "https://manhwa-freak.com", "en") { @@ -51,9 +52,34 @@ class ManhwaFreak : MangaThemesia("Manhwa Freak", "https://manhwa-freak.com", "e override fun chapterFromElement(element: Element) = SChapter.create().apply { val urlElements = element.select("a") setUrlWithoutDomain(urlElements.attr("href")) - name = element.select(".chapter-info p:nth-child(1)").text().ifBlank { urlElements.first()!!.text() } - date_upload = element.selectFirst(".chapter-info p:nth-child(2)")?.text().parseChapterDate() + val chapterElements = element.select(".chapter-info") + name = chapterElements.select("p:nth-child(1)").text().ifBlank { urlElements.first()!!.text() } + date_upload = getChapterDate(chapterElements.first()) } override fun getFilterList() = FilterList() + + private fun getChapterDate(element: Element?): Long { + element ?: return 0 + val chapterDate = element.select("p:nth-child(2)").text() + + return when { + element.select("p.new").isNotEmpty() -> getToday() + chapterDate.contains(Regex("day(s)* ago$")) -> { + val number = Regex("""(\d+)""").find(chapterDate)?.value?.toIntOrNull() ?: return 0 + Calendar.getInstance().apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis + } + + else -> chapterDate.parseChapterDate() + } + } + + private fun getToday(): Long { + return Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesia.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesia.kt index b57b844d0..8052fa663 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesia.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesia.kt @@ -35,7 +35,6 @@ import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy -import java.lang.IllegalArgumentException import java.text.SimpleDateFormat import java.util.Locale import java.util.concurrent.TimeUnit @@ -215,6 +214,7 @@ abstract class MangaThemesia( listOf("ongoing", "publishing").any { this.contains(it, ignoreCase = true) } -> SManga.ONGOING this.contains("hiatus", ignoreCase = true) -> SManga.ON_HIATUS this.contains("completed", ignoreCase = true) -> SManga.COMPLETED + listOf("dropped", "cancelled").any { this.contains(it, ignoreCase = true) } -> SManga.CANCELLED else -> SManga.UNKNOWN } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt index 4644ede75..ea94aa32b 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt @@ -14,7 +14,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { override val baseVersionCode: Int = 26 override val sources = listOf( - MultiLang("Asura Scans", "https://asuracomics.gg", listOf("en", "tr"), className = "AsuraScansFactory", pkgName = "asurascans", overrideVersionCode = 27), + MultiLang("Asura Scans", "https://asuracomics.gg", listOf("en", "tr"), className = "AsuraScansFactory", pkgName = "asurascans", overrideVersionCode = 28), MultiLang("Flame Scans", "https://flamescans.org", listOf("en"), className = "FlameScansFactory", pkgName = "flamescans", overrideVersionCode = 4), MultiLang("Miau Scan", "https://miauscans.com", listOf("es", "pt-BR"), overrideVersionCode = 1), SingleLang("Animated Glitched Scans", "https://anigliscans.xyz", "en", overrideVersionCode = 1), @@ -82,7 +82,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator { SingleLang("MangaSwat", "https://swatmanga.co", "ar", overrideVersionCode = 13), SingleLang("MangKomik", "https://mangkomik.net", "id", overrideVersionCode = 1), SingleLang("Mangás Chan", "https://mangaschan.net", "pt-BR", className = "MangasChan", overrideVersionCode = 1), - SingleLang("Manhwa Freak", "https://manhwa-freak.com", "en", overrideVersionCode = 2), + SingleLang("Manhwa Freak", "https://manhwa-freak.com", "en", overrideVersionCode = 3), SingleLang("ManhwaFreak", "https://manhwafreak.fr", "fr", className = "ManhwaFreakFR"), SingleLang("ManhwaDesu", "https://manhwadesu.one", "id", isNsfw = true, overrideVersionCode = 4), SingleLang("ManhwaIndo", "https://manhwaindo.id", "id", isNsfw = true, overrideVersionCode = 3),