diff --git a/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt b/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt index 0d007f5b1..f1dc93157 100644 --- a/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt +++ b/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt @@ -1,7 +1,95 @@ package eu.kanade.tachiyomi.extension.id.pojokmanga import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import okhttp3.Request import java.text.SimpleDateFormat import java.util.Locale -class PojokManga : Madara("Pojok Manga", "https://pojokmanga.com", "id", SimpleDateFormat("MMM dd, yyyy", Locale.US)) +class PojokManga : Madara("Pojok Manga", "https://pojokmanga.com", "id", SimpleDateFormat("MMM dd, yyyy", Locale.US)) { + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + var url = "$baseUrl/${searchPage(page)}".toHttpUrlOrNull()!!.newBuilder() + url.addQueryParameter("s", query) + url.addQueryParameter("post_type", "wp-manga") + filters.forEach { filter -> + when (filter) { + is AuthorFilter -> { + if (filter.state.isNotBlank()) { + url.addQueryParameter("author", filter.state) + } + } + is ArtistFilter -> { + if (filter.state.isNotBlank()) { + url.addQueryParameter("artist", filter.state) + } + } + is YearFilter -> { + if (filter.state.isNotBlank()) { + url.addQueryParameter("release", filter.state) + } + } + is StatusFilter -> { + filter.state.forEach { + if (it.state) { + url.addQueryParameter("status[]", it.id) + } + } + } + is OrderByFilter -> { + if (filter.state != 0) { + url.addQueryParameter("m_orderby", filter.toUriPart()) + } + } + is AdultContentFilter -> { + url.addQueryParameter("adult", filter.toUriPart()) + } + is GenreConditionFilter -> { + url.addQueryParameter("op", filter.toUriPart()) + } + is GenreList -> { + filter.state + .filter { it.state } + .let { list -> + if (list.isNotEmpty()) { list.forEach { genre -> url.addQueryParameter("genre[]", genre.id) } } + } + } + is ProjectFilter -> { + if (filter.toUriPart() == "project-filter-on") { + url = "$baseUrl/project/page/$page".toHttpUrlOrNull()!!.newBuilder() + } + } + } + } + return GET(url.toString(), headers) + } + + override fun searchMangaSelector() = "div.c-tabs-item__content, div.page-item-detail" + + protected class ProjectFilter : UriPartFilter( + "Filter Project", + arrayOf( + Pair("Show all manga", ""), + Pair("Show only project manga", "project-filter-on") + ) + ) + + override fun getFilterList() = FilterList( + AuthorFilter(), + ArtistFilter(), + YearFilter(), + StatusFilter(getStatusList()), + OrderByFilter(), + AdultContentFilter(), + Filter.Separator(), + Filter.Header("Genres may not work for all sources"), + GenreConditionFilter(), + GenreList(getGenreList()), + Filter.Separator(), + Filter.Header("NOTE: cant be used with other filter!"), + Filter.Header("$name Project List page"), + ProjectFilter(), + ) +} diff --git a/multisrc/overrides/wpmangareader/kiryuu/src/Kiryuu.kt b/multisrc/overrides/wpmangareader/kiryuu/src/Kiryuu.kt index 02a0e95d7..40d13d8fa 100644 --- a/multisrc/overrides/wpmangareader/kiryuu/src/Kiryuu.kt +++ b/multisrc/overrides/wpmangareader/kiryuu/src/Kiryuu.kt @@ -16,4 +16,6 @@ class Kiryuu : WPMangaReader("Kiryuu", "https://kiryuu.id", "id") { .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangareader/mangakita/src/MangaKita.kt b/multisrc/overrides/wpmangareader/mangakita/src/MangaKita.kt new file mode 100644 index 000000000..3224b3921 --- /dev/null +++ b/multisrc/overrides/wpmangareader/mangakita/src/MangaKita.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.id.mangakita + +import eu.kanade.tachiyomi.multisrc.wpmangareader.WPMangaReader + +class MangaKita : WPMangaReader("MangaKita", "https://mangakita.net", "id") { + override val hasProjectPage = true +} diff --git a/multisrc/overrides/wpmangareader/ngomik/src/Ngomik.kt b/multisrc/overrides/wpmangareader/ngomik/src/Ngomik.kt index 106ee33d5..87d911b7d 100644 --- a/multisrc/overrides/wpmangareader/ngomik/src/Ngomik.kt +++ b/multisrc/overrides/wpmangareader/ngomik/src/Ngomik.kt @@ -9,4 +9,8 @@ class Ngomik : WPMangaReader("Ngomik", "https://ngomik.net", "id", "/all-komik") override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", userAgent) .add("Referer", baseUrl) + + override val projectPageString = "/pj" + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/boosei/src/Boosei.kt b/multisrc/overrides/wpmangastream/boosei/src/Boosei.kt index cd058d935..82539966b 100644 --- a/multisrc/overrides/wpmangastream/boosei/src/Boosei.kt +++ b/multisrc/overrides/wpmangastream/boosei/src/Boosei.kt @@ -13,4 +13,6 @@ class Boosei : WPMangaStream("Boosei", "https://boosei.com", "id") { .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/kaisarkomik/src/KaisarKomik.kt b/multisrc/overrides/wpmangastream/kaisarkomik/src/KaisarKomik.kt index efd4dceb6..ba41edb0a 100644 --- a/multisrc/overrides/wpmangastream/kaisarkomik/src/KaisarKomik.kt +++ b/multisrc/overrides/wpmangastream/kaisarkomik/src/KaisarKomik.kt @@ -13,4 +13,6 @@ class KaisarKomik : WPMangaStream("Kaisar Komik", "https://kaisarkomik.com", "id .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/klankomik/src/KlanKomik.kt b/multisrc/overrides/wpmangastream/klankomik/src/KlanKomik.kt index 3f0754bc6..ad4cff295 100644 --- a/multisrc/overrides/wpmangastream/klankomik/src/KlanKomik.kt +++ b/multisrc/overrides/wpmangastream/klankomik/src/KlanKomik.kt @@ -13,4 +13,6 @@ class KlanKomik : WPMangaStream("KlanKomik", "https://klankomik.com", "id") { .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/komikav/src/KomikAV.kt b/multisrc/overrides/wpmangastream/komikav/src/KomikAV.kt index d094c8699..f49528f70 100644 --- a/multisrc/overrides/wpmangastream/komikav/src/KomikAV.kt +++ b/multisrc/overrides/wpmangastream/komikav/src/KomikAV.kt @@ -30,4 +30,6 @@ class KomikAV : WPMangaStream( override fun imageRequest(page: Page): Request { return GET(page.imageUrl!!, headers) } + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/komikcast/src/KomikCast.kt b/multisrc/overrides/wpmangastream/komikcast/src/KomikCast.kt index bc4e3f07b..8d9d308db 100644 --- a/multisrc/overrides/wpmangastream/komikcast/src/KomikCast.kt +++ b/multisrc/overrides/wpmangastream/komikcast/src/KomikCast.kt @@ -63,7 +63,7 @@ class KomikCast : WPMangaStream("Komik Cast", "https://komikcast.com", "id") { } url.toString() } else { - val url = "$baseUrl/daftar-komik/page/$page".toHttpUrlOrNull()!!.newBuilder() + var url = "$baseUrl/daftar-komik/page/$page".toHttpUrlOrNull()!!.newBuilder() var orderBy: String (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> when (filter) { @@ -85,6 +85,11 @@ class KomikCast : WPMangaStream("Komik Cast", "https://komikcast.com", "id") { orderBy = filter.toUriPart() url.addQueryParameter("order", orderBy) } + is ProjectFilter -> { + if (filter.toUriPart() == "project-filter-on") { + url = "$baseUrl/project-list/page/$page".toHttpUrlOrNull()!!.newBuilder() + } + } } } url.toString() @@ -158,6 +163,9 @@ class KomikCast : WPMangaStream("Komik Cast", "https://komikcast.com", "id") { Filter.Separator(), StatusFilter(), Filter.Separator(), - GenreListFilter(getGenreList()) + GenreListFilter(getGenreList()), + Filter.Header("NOTE: cant be used with other filter!"), + Filter.Header("$name Project List page"), + ProjectFilter() ) } diff --git a/multisrc/overrides/wpmangastream/komikindoco/src/KomikindoCo.kt b/multisrc/overrides/wpmangastream/komikindoco/src/KomikindoCo.kt index 84746032e..df688f9af 100644 --- a/multisrc/overrides/wpmangastream/komikindoco/src/KomikindoCo.kt +++ b/multisrc/overrides/wpmangastream/komikindoco/src/KomikindoCo.kt @@ -16,4 +16,6 @@ class KomikindoCo : WPMangaStream("KomikIndo.co", "https://komikindo.co", "id") .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/komikstation/src/KomikStation.kt b/multisrc/overrides/wpmangastream/komikstation/src/KomikStation.kt index c6f922ba7..7d131f1b7 100644 --- a/multisrc/overrides/wpmangastream/komikstation/src/KomikStation.kt +++ b/multisrc/overrides/wpmangastream/komikstation/src/KomikStation.kt @@ -46,4 +46,8 @@ class KomikStation : WPMangaStream("Komik Station", "https://komikstation.com", return pages } + + override val projectPageString = "/project-list" + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/kumascans/src/KumaScans.kt b/multisrc/overrides/wpmangastream/kumascans/src/KumaScans.kt index a1d743cef..5630d2c2f 100644 --- a/multisrc/overrides/wpmangastream/kumascans/src/KumaScans.kt +++ b/multisrc/overrides/wpmangastream/kumascans/src/KumaScans.kt @@ -13,4 +13,6 @@ class KumaScans : WPMangaStream("Kuma Scans (Kuma Translation)", "https://kumasc .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/masterkomik/src/MasterKomik.kt b/multisrc/overrides/wpmangastream/masterkomik/src/MasterKomik.kt index 51115d0b8..014567de0 100644 --- a/multisrc/overrides/wpmangastream/masterkomik/src/MasterKomik.kt +++ b/multisrc/overrides/wpmangastream/masterkomik/src/MasterKomik.kt @@ -13,4 +13,8 @@ class MasterKomik : WPMangaStream("MasterKomik", "https://masterkomik.com", "id" .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val projectPageString = "/project-list" + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/readkomik/src/ReadKomik.kt b/multisrc/overrides/wpmangastream/readkomik/src/ReadKomik.kt index 61d0c26d9..364896a5e 100644 --- a/multisrc/overrides/wpmangastream/readkomik/src/ReadKomik.kt +++ b/multisrc/overrides/wpmangastream/readkomik/src/ReadKomik.kt @@ -13,4 +13,6 @@ class ReadKomik : WPMangaStream("Readkomik", "https://readkomik.com", "en") { .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/sektekomik/src/SekteKomik.kt b/multisrc/overrides/wpmangastream/sektekomik/src/SekteKomik.kt index 6d8e1d832..fa989681d 100644 --- a/multisrc/overrides/wpmangastream/sektekomik/src/SekteKomik.kt +++ b/multisrc/overrides/wpmangastream/sektekomik/src/SekteKomik.kt @@ -34,4 +34,6 @@ class SekteKomik : WPMangaStream("Sekte Komik", "https://sektekomik.com", "id") return GET(page.imageUrl!!, newHeaders) } + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/sheamanga/src/SheaManga.kt b/multisrc/overrides/wpmangastream/sheamanga/src/SheaManga.kt index 5b73d5e0f..b79604e84 100644 --- a/multisrc/overrides/wpmangastream/sheamanga/src/SheaManga.kt +++ b/multisrc/overrides/wpmangastream/sheamanga/src/SheaManga.kt @@ -21,4 +21,5 @@ class SheaManga : WPMangaStream( .addNetworkInterceptor(rateLimitInterceptor) .build() + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/westmanga/src/WestManga.kt b/multisrc/overrides/wpmangastream/westmanga/src/WestManga.kt index d9c36f325..0175e6f27 100644 --- a/multisrc/overrides/wpmangastream/westmanga/src/WestManga.kt +++ b/multisrc/overrides/wpmangastream/westmanga/src/WestManga.kt @@ -119,4 +119,6 @@ class WestManga : WPMangaStream("West Manga", "https://westmanga.info", "id") { Genre("Yaoi", "yaoi"), Genre("Zombies", "377") ) + + override val hasProjectPage = true } diff --git a/multisrc/overrides/wpmangastream/worldromancetranslation/src/WorldRomanceTranslation.kt b/multisrc/overrides/wpmangastream/worldromancetranslation/src/WorldRomanceTranslation.kt index 0dd1292e1..d242db1d0 100644 --- a/multisrc/overrides/wpmangastream/worldromancetranslation/src/WorldRomanceTranslation.kt +++ b/multisrc/overrides/wpmangastream/worldromancetranslation/src/WorldRomanceTranslation.kt @@ -4,4 +4,8 @@ import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream import java.text.SimpleDateFormat import java.util.Locale -class WorldRomanceTranslation : WPMangaStream("World Romance Translation", "https://wrt.my.id/", "id", SimpleDateFormat("MMMM dd, yyyy", Locale("id"))) +class WorldRomanceTranslation : WPMangaStream("World Romance Translation", "https://wrt.my.id/", "id", SimpleDateFormat("MMMM dd, yyyy", Locale("id"))) { + override val projectPageString = "/project-wrt" + + override val hasProjectPage = true +} diff --git a/multisrc/overrides/wpmangastream/xcalibrscans/src/xCaliBRScans.kt b/multisrc/overrides/wpmangastream/xcalibrscans/src/xCaliBRScans.kt index 078aa6a2c..5ced48d89 100644 --- a/multisrc/overrides/wpmangastream/xcalibrscans/src/xCaliBRScans.kt +++ b/multisrc/overrides/wpmangastream/xcalibrscans/src/xCaliBRScans.kt @@ -16,4 +16,5 @@ class xCaliBRScans : WPMangaStream("xCaliBR Scans", "https://xcalibrscans.com", .addNetworkInterceptor(rateLimitInterceptor) .build() + override val hasProjectPage = true } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/Madara.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/Madara.kt index 53d15e1e8..63db0d52d 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/Madara.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/Madara.kt @@ -188,12 +188,12 @@ abstract class Madara( return GET(url.toString(), headers) } - private class AuthorFilter : Filter.Text("Author") - private class ArtistFilter : Filter.Text("Artist") - private class YearFilter : Filter.Text("Year of Released") - private class StatusFilter(status: List) : Filter.Group("Status", status) + protected class AuthorFilter : Filter.Text("Author") + protected class ArtistFilter : Filter.Text("Artist") + protected class YearFilter : Filter.Text("Year of Released") + protected class StatusFilter(status: List) : Filter.Group("Status", status) - private class OrderByFilter : UriPartFilter( + protected class OrderByFilter : UriPartFilter( "Order By", arrayOf( Pair("