diff --git a/multisrc/overrides/madara/goodgirlsscan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..9411becc2 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..16f7e03e4 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..b62027ea0 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..6ebc4a684 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..1de17cb30 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/res/web_hi_res_512.png b/multisrc/overrides/madara/goodgirlsscan/res/web_hi_res_512.png new file mode 100644 index 000000000..f5ea283b4 Binary files /dev/null and b/multisrc/overrides/madara/goodgirlsscan/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/madara/goodgirlsscan/src/GoodGirlsScan.kt b/multisrc/overrides/madara/goodgirlsscan/src/GoodGirlsScan.kt new file mode 100644 index 000000000..0ec7c82bf --- /dev/null +++ b/multisrc/overrides/madara/goodgirlsscan/src/GoodGirlsScan.kt @@ -0,0 +1,89 @@ +package eu.kanade.tachiyomi.extension.en.goodgirlsscan + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.SManga +import okhttp3.FormBody +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Element + +class GoodGirlsScan : Madara("Good Girls Scan", "https://goodgirls.moe", "en") { + + override val fetchGenres = false + override fun popularMangaNextPageSelector() = "body:not(:has(.no-posts))" + override fun searchMangaSelector() = "article.wp-manga" + override fun searchMangaNextPageSelector() = "div.paginator .nav-next" + override val mangaDetailsSelectorStatus = "div.summary-heading:contains(Status) + div.summary-content" + override val mangaDetailsSelectorDescription = "div.summary-specialfields" + override fun chapterListSelector() = "li.wp-manga-chapter:not(.vip-permission)" + + private fun madaraLoadMoreRequest(page: Int, metaKey: String): Request { + val formBody = FormBody.Builder().apply { + add("action", "madara_load_more") + add("page", page.toString()) + add("template", "madara-core/content/content-archive") + add("vars[paged]", "1") + add("vars[orderby]", "meta_value_num") + add("vars[template]", "archive") + add("vars[sidebar]", "right") + add("vars[post_type]", "wp-manga") + add("vars[post_status]", "publish") + add("vars[meta_key]", metaKey) + add("vars[meta_query][0][paged]", "1") + add("vars[meta_query][0][orderby]", "meta_value_num") + add("vars[meta_query][0][template]", "archive") + add("vars[meta_query][0][sidebar]", "right") + add("vars[meta_query][0][post_type]", "wp-manga") + add("vars[meta_query][0][post_status]", "publish") + add("vars[meta_query][0][meta_key]", metaKey) + add("vars[meta_query][relation]", "AND") + add("vars[manga_archives_item_layout]", "default") + }.build() + + val xhrHeaders = headersBuilder() + .add("Content-Length", formBody.contentLength().toString()) + .add("Content-Type", formBody.contentType().toString()) + .add("X-Requested-With", "XMLHttpRequest") + .build() + + return POST("$baseUrl/wp-admin/admin-ajax.php", xhrHeaders, formBody) + } + + override fun popularMangaRequest(page: Int): Request { + return madaraLoadMoreRequest(page - 1, "_wp_manga_views") + } + + override fun latestUpdatesRequest(page: Int): Request { + return madaraLoadMoreRequest(page - 1, "_latest_update") + } + + override fun searchPage(page: Int): String { + return if (page > 1) { + "page/$page/" + } else { + "" + } + } + + // heavily modified madara theme, throws 5xx errors on any search filter + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/${searchPage(page)}".toHttpUrl().newBuilder().apply { + addQueryParameter("s", query.trim()) + }.build() + + return GET(url, headers) + } + + override fun getFilterList() = FilterList() + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + element.select(".entry-title a").let { + setUrlWithoutDomain(it.attr("href")) + title = it.text() + } + thumbnail_url = element.selectFirst(".post-thumbnail img")?.let(::imageFromElement) + } +} 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 daec87eb6..1178d559b 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 @@ -132,6 +132,7 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Gekkou Scans", "https://gekkou.com.br", "pt-BR", isNsfw = true, pkgName = "gekkouscan"), SingleLang("Girls Love Manga!", "https://glmanga.com", "en", isNsfw = true, className = "GirlsLoveManga"), 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("Grabber Zone", "https://grabber.zone", "all"), SingleLang("GuncelManga", "https://guncelmanga.com", "tr", overrideVersionCode = 1),