diff --git a/multisrc/overrides/madara/gourmetscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/gourmetscans/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..549caa699 Binary files /dev/null and b/multisrc/overrides/madara/gourmetscans/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/gourmetscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/gourmetscans/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..a56769686 Binary files /dev/null and b/multisrc/overrides/madara/gourmetscans/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/gourmetscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/gourmetscans/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..70bdb8b28 Binary files /dev/null and b/multisrc/overrides/madara/gourmetscans/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/gourmetscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/gourmetscans/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..e93145e2e Binary files /dev/null and b/multisrc/overrides/madara/gourmetscans/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/gourmetscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/gourmetscans/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..a241bba02 Binary files /dev/null and b/multisrc/overrides/madara/gourmetscans/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/gourmetscans/src/GourmetScans.kt b/multisrc/overrides/madara/gourmetscans/src/GourmetScans.kt new file mode 100644 index 000000000..1821a4130 --- /dev/null +++ b/multisrc/overrides/madara/gourmetscans/src/GourmetScans.kt @@ -0,0 +1,112 @@ +package eu.kanade.tachiyomi.extension.en.gourmetscans + +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 eu.kanade.tachiyomi.source.model.SChapter +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class GourmetScans : Madara( + "Gourmet Scans", + "https://gourmetsupremacy.com", + "en", +) { + override val mangaSubString = "project" + + override val useNewChapterEndpoint = false + + // Search + + override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/" + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = baseUrl.toHttpUrl().newBuilder() + + val filterList = if (filters.isEmpty()) getFilterList() else filters + val yearFilter = filterList.find { it is YearFilter } as YearFilter + val orderByFilter = filterList.find { it is OrderByFilter } as OrderByFilter + val genreFilter = filterList.find { it is GenreFilter } as? GenreFilter + + when { + yearFilter.state.isNotBlank() -> { + url.addPathSegment("release-year") + url.addPathSegment(yearFilter.state) + } + genreFilter?.state?.equals(0)?.not() ?: false -> { + url.addPathSegment("genre") + url.addPathSegment(genreFilter!!.toUriPart()) + } + else -> { + url.addPathSegment(mangaSubString) + } + } + + if (orderByFilter.toUriPart().isNotBlank()) { + url.addQueryParameter("m_orderby", orderByFilter.toUriPart()) + } + + url.addPathSegments(searchPage(page)) + + return GET(url.build(), headers) + } + + override fun searchMangaSelector(): String = ".page-listing-item .page-item-detail" + + override fun searchMangaNextPageSelector(): String = ".navigation-ajax > #navigation-ajax" + + // Filters + + override fun genresRequest(): Request = GET("$baseUrl/$mangaSubString", headers) + + override fun parseGenres(document: Document): List<Genre> { + genresList = document.select("div.row.genres ul li a") + .orEmpty() + .map { li -> + Pair( + li.text(), + li.attr("href").split("/").last { it.isNotBlank() }, + ) + } + + return emptyList() + } + + private var genresList: List<Pair<String, String>> = emptyList() + + class GenreFilter(val vals: List<Pair<String, String>>) : + UriPartFilter("Genre", vals.toTypedArray()) + + override fun getFilterList(): FilterList { + val filters = buildList(4) { + add(YearFilter(yearFilterTitle)) + add( + OrderByFilter( + title = orderByFilterTitle, + options = orderByFilterOptions.zip(orderByFilterOptionsValues), + state = 0, + ), + ) + add(Filter.Separator()) + + if (genresList.isEmpty()) { + add(Filter.Header(genresMissingWarning)) + } else { + add(GenreFilter(listOf(Pair("<select>", "")) + genresList)) + } + } + + return FilterList(filters) + } + + // Chapters + + override fun chapterFromElement(element: Element): SChapter { + return super.chapterFromElement(element).apply { + url = this.url.substringBefore("?style=list") + } + } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt index 9c8ec33f2..28bd1729c 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt @@ -119,6 +119,7 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Glory Manga", "https://glorymanga.com", "tr"), SingleLang("Good Girls Scan", "https://goodgirls.moe", "en", isNsfw = true), SingleLang("Goof Fansub", "https://gooffansub.com", "pt-BR", isNsfw = true), + SingleLang("Gourmet Scans", "https://gourmetsupremacy.com", "en", isNsfw = true), SingleLang("Grabber Zone", "https://grabber.zone", "all"), SingleLang("Gri Melek", "https://grimelek.net", "tr", isNsfw = true, className = "Siyahmelek", overrideVersionCode = 4), SingleLang("GuncelManga", "https://guncelmanga.com", "tr", overrideVersionCode = 1),