From fad76bc4b2639c7c53a20db9c7e36c71d0f144e3 Mon Sep 17 00:00:00 2001 From: marioplus Date: Mon, 31 Mar 2025 23:07:53 +0800 Subject: [PATCH] feat(BoaBua): add source BaoBua (#8253) * feat(buondua): add source BaoBua Refs: #1104 * fix(buondua/search): resolve pagination param forwarding chore(buondua/search): clean up URL format and flag * Fix: - Add missing pagination parameter propagation * Maintenance: - Remove redundant trailing "/" in pagination URLs - Set `supportsLatest` to false (default behavior) Closes: #1104 * chore(buondua): remove redundant trim() calls Closes: #1104 * refactor(BaoBua): standardize chapter names and URL handling - Replace date-based chapter names with static "Gallery" value - Remove baseUrl from category URLs (construct dynamically when used) Closes: #1104 * chore(BaoBua): remove unused Closes: #1104 * chore(BaoBua): revert settings.gradle.kts Closes: #1104 * chore(BaoBua): remove unused import Closes: #1104 * chore(BaoBua): remove needless blank line Closes: #1104 * fix(BaoBua): add unselected Category Closes: #1104 * refactor(BaoBua): optimize manga details parsing - Set update_strategy = UpdateStrategy.ONLY_FETCH_ONCE - Remove unused randomua dependency Closes: #1104 --- src/all/baobua/build.gradle | 8 ++ .../baobua/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4619 bytes .../baobua/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2527 bytes .../baobua/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6440 bytes .../baobua/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11665 bytes .../baobua/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16116 bytes .../tachiyomi/extension/all/baobua/BaoBua.kt | 109 ++++++++++++++++++ .../all/baobua/SimpleParsedHttpSource.kt | 44 +++++++ .../all/baobua/SourceCategorySelector.kt | 50 ++++++++ 9 files changed, 211 insertions(+) create mode 100644 src/all/baobua/build.gradle create mode 100644 src/all/baobua/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/baobua/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/baobua/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/baobua/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/baobua/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/BaoBua.kt create mode 100644 src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SimpleParsedHttpSource.kt create mode 100644 src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SourceCategorySelector.kt diff --git a/src/all/baobua/build.gradle b/src/all/baobua/build.gradle new file mode 100644 index 000000000..302f91502 --- /dev/null +++ b/src/all/baobua/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'BaoBua' + extClass = '.BaoBua' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/baobua/res/mipmap-hdpi/ic_launcher.png b/src/all/baobua/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fb7f7ece81337c150e97092390372f4cb6cb02 GIT binary patch literal 4619 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 T(fm)x*nzk5%5vp0rh)$hw)fqN literal 0 HcmV?d00001 diff --git a/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/BaoBua.kt b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/BaoBua.kt new file mode 100644 index 000000000..0e5dd2683 --- /dev/null +++ b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/BaoBua.kt @@ -0,0 +1,109 @@ +package eu.kanade.tachiyomi.extension.all.baobua + +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.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.UpdateStrategy +import eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.firstInstance +import keiyoushi.utils.tryParse +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class BaoBua() : SimpleParsedHttpSource() { + + override val baseUrl = "https://www.baobua.net" + override val lang = "all" + override val name = "BaoBua" + override val supportsLatest = false + + override fun simpleMangaSelector() = "article.post" + + override fun simpleMangaFromElement(element: Element) = SManga.create().apply { + setUrlWithoutDomain(element.selectFirst("a.popunder")!!.absUrl("href")) + title = element.selectFirst("div.read-title")!!.text() + thumbnail_url = element.selectFirst("img")?.absUrl("src") + update_strategy = UpdateStrategy.ONLY_FETCH_ONCE + } + + override fun simpleNextPageSelector(): String = "nav.pagination a.next" + + // region popular + override fun popularMangaRequest(page: Int) = GET("$baseUrl?page=$page", headers) + // endregion + + // region latest + override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException() + // endregion + + // region Search + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val filter = filters.firstInstance() + return filter.selectedCategory?.let { + GET(it.buildUrl(baseUrl), headers) + } ?: run { + baseUrl.toHttpUrl().newBuilder() + .addEncodedQueryParameter("q", query) + .addEncodedQueryParameter("page", page.toString()) + .build() + .let { GET(it, headers) } + } + } + + // region Details + override fun mangaDetailsParse(document: Document): SManga { + val trailItemsEl = document.selectFirst("div.breadcrumb-trail > ul.trail-items")!! + return SManga.create().apply { + title = trailItemsEl.selectFirst("li.trail-end")!!.text() + genre = trailItemsEl.select("li:not(.trail-end):not(.trail-begin)").joinToString { it.text() } + } + } + + override fun chapterListSelector() = "html" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + chapter_number = 0F + setUrlWithoutDomain(element.selectFirst("div.breadcrumb-trail li.trail-end > a")!!.absUrl("href")) + date_upload = POST_DATE_FORMAT.tryParse(element.selectFirst("span.item-metadata.posts-date")?.text()) + name = "Gallery" + } + // endregion + + // region Pages + override fun pageListParse(document: Document): List { + val basePageUrl = document.selectFirst("div.breadcrumb-trail li.trail-end > a")!!.absUrl("href") + + val maxPage: Int = document.selectFirst("div.nav-links > a.next.page-numbers")?.text()?.toInt() ?: 1 + + var pageIndex = 0 + return (1..maxPage).flatMap { pageNum -> + val doc = if (pageNum == 1) { + document + } else { + client.newCall(GET("$basePageUrl?p=$pageNum", headers)).execute().asJsoup() + } + + doc.select("div.entry-content.read-details img.wp-image") + .map { Page(pageIndex++, imageUrl = it.absUrl("src")) } + } + } + // endregion + + override fun getFilterList(): FilterList = FilterList( + Filter.Header("NOTE: Unable to further search in the category!"), + Filter.Separator(), + SourceCategorySelector.create(baseUrl), + ) + + companion object { + + private val POST_DATE_FORMAT = SimpleDateFormat("EEE MMM dd yyyy", Locale.US) + } +} diff --git a/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SimpleParsedHttpSource.kt b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SimpleParsedHttpSource.kt new file mode 100644 index 000000000..43cd69aa5 --- /dev/null +++ b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SimpleParsedHttpSource.kt @@ -0,0 +1,44 @@ +package eu.kanade.tachiyomi.extension.all.baobua + +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +abstract class SimpleParsedHttpSource : ParsedHttpSource() { + + abstract fun simpleMangaSelector(): String + + abstract fun simpleMangaFromElement(element: Element): SManga + + abstract fun simpleNextPageSelector(): String? + + // region popular + override fun popularMangaSelector() = simpleMangaSelector() + override fun popularMangaNextPageSelector() = simpleNextPageSelector() + override fun popularMangaFromElement(element: Element) = simpleMangaFromElement(element) + // endregion + + // region last + override fun latestUpdatesSelector() = + if (supportsLatest) simpleMangaSelector() else throw throw UnsupportedOperationException() + + override fun latestUpdatesFromElement(element: Element) = + if (supportsLatest) simpleMangaFromElement(element) else throw throw UnsupportedOperationException() + + override fun latestUpdatesNextPageSelector() = + if (supportsLatest) simpleNextPageSelector() else throw throw UnsupportedOperationException() + // endregion + + // region search + override fun searchMangaSelector() = simpleMangaSelector() + override fun searchMangaFromElement(element: Element) = simpleMangaFromElement(element) + override fun searchMangaNextPageSelector() = simpleNextPageSelector() + // endregion + + override fun chapterListSelector() = simpleMangaSelector() + override fun imageUrlParse(document: Document): String { + throw UnsupportedOperationException() + } + // endregion +} diff --git a/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SourceCategorySelector.kt b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SourceCategorySelector.kt new file mode 100644 index 000000000..7e8b505da --- /dev/null +++ b/src/all/baobua/src/eu/kanade/tachiyomi/extension/all/baobua/SourceCategorySelector.kt @@ -0,0 +1,50 @@ +package eu.kanade.tachiyomi.extension.all.baobua + +import eu.kanade.tachiyomi.source.model.Filter +import okhttp3.HttpUrl.Companion.toHttpUrl + +data class SourceCategory(private val name: String, var cat: String) { + override fun toString() = this.name + + fun buildUrl(baseUrl: String): String { + return "$baseUrl/".toHttpUrl().newBuilder() + .addEncodedQueryParameter("cat", this.cat) + .build() + .toString() + } +} + +class SourceCategorySelector( + name: String, + categories: List, +) : Filter.Select(name, categories.toTypedArray()) { + + val selectedCategory: SourceCategory? + get() = if (state > 0) values[state] else null + + companion object { + + fun create(baseUrl: String): SourceCategorySelector { + val options = listOf( + SourceCategory("unselected", ""), + SourceCategory("大胸美女", "YmpydEtkNzV5NHJKcDJYVGtOVW0yZz09"), + SourceCategory("巨乳美女", "Q09EdlMvMHgweERrUitScTFTaDM4Zz09"), + SourceCategory("全裸写真", "eXZzejJPNFRVNzJqKzFDUmNzZEU2QT09"), + SourceCategory("chinese", "bG9LamJsWWdSbGcyY0FEZytldkhTZz09"), + SourceCategory("chinese models", "OCtTSEI2YzRTcWMvWUsyeDM0aHdzdUIwWDlHMERZUEZaVHUwUEVUVWo3QT0"), + SourceCategory("korean", "Tm1ydGlaZ1A2YWM3a3BvYWh6L3dIdz09"), + SourceCategory("korea", "bzRjeWR0akQrRWpxRE1xOGF6TW5Tdz09"), + SourceCategory("korean models", "TGZTVGtwOCtxTW1TQU1KYWhUb01DQT09"), + SourceCategory("big boobs", "UmFLQVkvVndGNlpPckwvZkpVaEE4UT09"), + SourceCategory("adult", "b2RFSnlwdWxyREMxVmRpcThKVXRLUT09"), + SourceCategory("nude-art", "djFqa293VmFZMEJLdDlUWndsMGtldz09"), + SourceCategory("Asian adult photo", "SHBGZHFueTVNeUlxVHRLaU53RjU2NS9VcjNxRVg3VnhqTGJoK25YaVQ1UT0"), + SourceCategory("cosplay", "OEI2c000ZDBxakwydjZIUVJaRnlMQT09"), + SourceCategory("hot", "c3VRb3RJZ2wrU2tTYmpGSUVqMnFndz09"), + SourceCategory("big breast", "dkQ3b0RiK0xpZDRlMVNSY3lUNkJXQT09"), + ) + + return SourceCategorySelector("Category", options) + } + } +}