From c3f277e3423424f54c043358181307ce4880f73d Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sat, 20 Jan 2024 10:58:23 +0000 Subject: [PATCH] Add mangabtt (#398) * add mangabtt * replace tab with spaces * minor cleanup --- src/en/mangabtt/AndroidManifest.xml | 2 + src/en/mangabtt/build.gradle | 8 + .../mangabtt/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4317 bytes .../mangabtt/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2362 bytes .../mangabtt/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5565 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10132 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14571 bytes .../extension/en/mangabtt/MangaBTT.kt | 263 ++++++++++++++++++ .../extension/en/mangabtt/MangaBTTFilters.kt | 76 +++++ 9 files changed, 349 insertions(+) create mode 100644 src/en/mangabtt/AndroidManifest.xml create mode 100644 src/en/mangabtt/build.gradle create mode 100644 src/en/mangabtt/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/mangabtt/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/mangabtt/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/mangabtt/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/mangabtt/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTT.kt create mode 100644 src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTTFilters.kt diff --git a/src/en/mangabtt/AndroidManifest.xml b/src/en/mangabtt/AndroidManifest.xml new file mode 100644 index 000000000..8072ee00d --- /dev/null +++ b/src/en/mangabtt/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/en/mangabtt/build.gradle b/src/en/mangabtt/build.gradle new file mode 100644 index 000000000..8f7233eb9 --- /dev/null +++ b/src/en/mangabtt/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'MangaBTT' + extClass = '.MangaBTT' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/mangabtt/res/mipmap-hdpi/ic_launcher.png b/src/en/mangabtt/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9b345a32ec3c27a6e81112e8b4fa1d125a551a GIT binary patch literal 4317 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 LNkvXXu0mjf_FUYK literal 0 HcmV?d00001 diff --git a/src/en/mangabtt/res/mipmap-mdpi/ic_launcher.png b/src/en/mangabtt/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..70fc06d951d9f81217406e14ed3bccdfeb2be6ee GIT binary patch literal 2362 zcmV-A3B~q_P)I!kL~rYch{S2l1-Y1ij+VL%}W)E5S1WmM1=aMR7eS;f7(LN?6jSX+#lfvTYTKwm=?AH+^jEWH)Qa_S&8q&bf1E=FWKR z9a~hWQk~3t=H5H^p6{IRJnprIkN8LXh|7G;Fd zmxs`^80m`Pwu>$)55ME~E9*G#@x0ocX&6sEF;jiu3Cvy%BZvZ!och#;pBUxpcUY)^ z@ZO}X4`S(DT!T|Vr;ON>< z%xI=L+9sSLm^*nl0KP#&7K;Gj0_mg_Th|wMROVMxKU=}GX%v9bqpR0m^68+cQKeFk z+Gplju7=|P2(87yZmpHa=xeSU0A8nXbmE$#s*%9Gr`G=H)287zrG)6C^xs;qET`Vf ztP7V$VGH;G6hS>}C=SfjNv}v^_0F`SkPubq(IUn+uUNQxzJZ59aUg*xe`v^j&_`=xU@p#}3N2l3tk@(W=A5ML^T^09$qv$F`NBvCpakvw;Y>sxa>F4}j{-ju#7muF_T7oWky(@slWo z#CrdJIfs|_W<4RZnvT(gj`g2xV#C9;vIKF)HWpHN`O9VKqAXEL2f0o-+s6m6d}UE& zPAP_}38@y;X}!|sGWn%T{#v0a6e7ABvj{eB*!;o!rHJ^d6PG zCcj`T3##jsJ^kIQH|-uDu93mEYgPKw4Mcir2<&`-fkFZ z{UeLY^GO_jl}d}^2e^i9s3bHsVDtxIY&;?ls9a|N9EFHNj|C|t>x1Cnz>`xdG^++4 zyT`_|>8qd}le0NrqS}pb0SO>Xe<6o#f>DUm??i=zl zt4<0ZG)#PS8=O`%C5C|!jYTmT&` zz$KRB1C+=ZfTKR~_sDZPe)-)h(!_PkHffwKwov2Q0X+U}21DxtTUwl^Og{5)P1(=~ zeZdvJHwuj`YmY+8kqA>>0ALFoqT0sYd{Eo;a|yh0e;tGFsfD4TwLXOn-%4QXcDWmK z0n50LVgCQLaetp84w(3QJqF*!4TtiJdO9MFKNA zsmP>ZLpPXazLmUv!KF0*{&fxI)APuy8lrc~ISQEm z0YpsB6uLNU;I@s0?!wbJW>TwZpEK=2Ze3AM_qJ6f_4)FmDj&!tu zi-iH4%Ve;A86Q_hoI)#ZVG)H)x+;_x-l#3$waO)2XEv~n!tW}I$?C~R2lj~O*Z`&o zfS*g%sOGC`krsZPHtlbv(%{_c2OK2;%PO-$wf+JLY_^(MLt{Tff`6L6$7l|{jeeaW z#0K!!9Q%L>3lVUVnmoYVB!E^s}}y0%b%tS zU_?x+E*?Irh!CvPL0B9CyN#h8L*=WD>N*<3zYlcG#0((+>rC#EwOZm%e?lpFr|LAS zJ(kw}(~P!boDiBB+kWbFjtf-#}+cX}w zTA!+Sc~5IrW?>)R*Q`Hy7I=rIle-^h;wS*z#z$+T1~5cNvhwt{Pf7ZHjTQ$jP9NTb z(gCWV4*jSQJa6k1$*6q`?PRCv@^<0<^TWy literal 0 HcmV?d00001 diff --git a/src/en/mangabtt/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangabtt/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..defd761e36fa6096e24922bb52c14a48597d2790 GIT binary patch literal 5565 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 LNkvXXu0mjftZ00T literal 0 HcmV?d00001 diff --git a/src/en/mangabtt/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangabtt/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..64e0b45e2097033b675b330abc13cb1aece8d2f5 GIT binary patch literal 10132 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 literal 0 HcmV?d00001 diff --git a/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTT.kt b/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTT.kt new file mode 100644 index 000000000..cf3ec31b1 --- /dev/null +++ b/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTT.kt @@ -0,0 +1,263 @@ +package eu.kanade.tachiyomi.extension.en.mangabtt + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.interceptor.rateLimit +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.online.ParsedHttpSource +import okhttp3.FormBody +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.util.Calendar + +class MangaBTT : ParsedHttpSource() { + + override val name = "MangaBTT" + + override val baseUrl = "https://mangabtt.com" + + override val lang = "en" + + override val supportsLatest = true + + override val client by lazy { + network.cloudflareClient.newBuilder() + .rateLimit(2) + .build() + } + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + // ============================== Popular =============================== + + override fun popularMangaRequest(page: Int): Request = searchMangaRequest( + page = page, + query = "", + filters = FilterList( + SortByFilter(default = 2), + StatusFilter(default = 1), + GenreFilter(default = 1), + ), + ) + + override fun popularMangaSelector(): String = + searchMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga = + searchMangaFromElement(element) + + override fun popularMangaNextPageSelector(): String = + searchMangaNextPageSelector() + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request = searchMangaRequest( + page = page, + query = "", + filters = FilterList( + SortByFilter(default = 8), + StatusFilter(default = 1), + GenreFilter(default = 1), + ), + ) + + override fun latestUpdatesSelector(): String = + searchMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = + searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector(): String = + searchMangaNextPageSelector() + + // =============================== Search =============================== + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/find-story".toHttpUrl().newBuilder().apply { + if (query.isNotBlank()) { + addQueryParameter("keyword", query) + } else { + val genre = filters.firstInstanceOrNull()?.selectedValue.orEmpty() + val status = filters.firstInstanceOrNull()?.selectedValue.orEmpty() + val sortBy = filters.firstInstanceOrNull()?.selectedValue.orEmpty() + + addQueryParameter("status", status) + addQueryParameter("sort", sortBy) + if (genre.isNotBlank()) { + addPathSegment(genre) + } + } + + addQueryParameter("page", page.toString()) + } + + return GET(url.build(), headers) + } + + override fun searchMangaSelector(): String = ".items > .row > .item" + + override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply { + thumbnail_url = element.selectFirst(".image img")?.imgAttr() + element.selectFirst("figcaption h3 a")!!.run { + title = text() + setUrlWithoutDomain(attr("abs:href")) + } + } + + override fun searchMangaNextPageSelector(): String = + "ul.pagination > li.active + li:not(.disabled)" + + // =============================== Filters ============================== + + override fun getFilterList(): FilterList = FilterList( + Filter.Header("Ignored when using text search"), + Filter.Separator(), + GenreFilter(), + StatusFilter(), + SortByFilter(), + ) + + // =========================== Manga Details ============================ + + override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { + title = document.selectFirst("h1.title-detail")!!.text() + description = document.selectFirst(".detail-content p")?.text() + ?.substringAfter("comic site. The Summary is ") + + document.selectFirst(".detail-info")?.run { + thumbnail_url = selectFirst("img")?.imgAttr() + status = selectFirst(".status p:not(.name)").parseStatus() + genre = select(".kind a").joinToString(", ") { it.text() } + author = selectFirst(".author p:not(.name)")?.text()?.takeUnless { + it.equals("updating", true) + } + } + } + + private fun Element?.parseStatus(): Int = with(this?.text()) { + return when { + equals("ongoing", true) -> SManga.ONGOING + equals("Đang cập nhật", true) -> SManga.ONGOING + equals("completed", true) -> SManga.COMPLETED + equals("on-hold", true) -> SManga.ON_HIATUS + equals("canceled", true) -> SManga.CANCELLED + else -> SManga.UNKNOWN + } + } + + // ============================== Chapters ============================== + + override fun chapterListRequest(manga: SManga): Request { + val postHeaders = headersBuilder().apply { + add("Accept", "*/*") + add("Host", baseUrl.toHttpUrl().host) + add("Origin", baseUrl) + set("Referer", baseUrl + manga) + add("X-Requested-With", "XMLHttpRequest") + }.build() + + val postBody = FormBody.Builder() + .add("StoryID", manga.url.substringAfterLast("-")) + .build() + + return POST("$baseUrl/Story/ListChapterByStoryID", postHeaders, postBody) + } + + override fun chapterListSelector() = "ul > li:not(.heading)" + + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + element.selectFirst(".col-xs-4")?.also { + date_upload = it.text().parseRelativeDate() + } + element.selectFirst("a")!!.run { + name = text() + setUrlWithoutDomain(attr("abs:href")) + } + } + + // From OppaiStream + private fun String.parseRelativeDate(): Long { + val now = Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + + var parsedDate = 0L + val relativeDate = this.split(" ").firstOrNull() + ?.replace("one", "1") + ?.replace("a", "1") + ?.toIntOrNull() + ?: return 0L + + when { + // parse: 30 seconds ago + "second" in this -> { + parsedDate = now.apply { add(Calendar.SECOND, -relativeDate) }.timeInMillis + } + // parses: "42 minutes ago" + "minute" in this -> { + parsedDate = now.apply { add(Calendar.MINUTE, -relativeDate) }.timeInMillis + } + // parses: "1 hour ago" and "2 hours ago" + "hour" in this -> { + parsedDate = now.apply { add(Calendar.HOUR, -relativeDate) }.timeInMillis + } + // parses: "2 days ago" + "day" in this -> { + parsedDate = now.apply { add(Calendar.DAY_OF_YEAR, -relativeDate) }.timeInMillis + } + // parses: "2 weeks ago" + "week" in this -> { + parsedDate = now.apply { add(Calendar.WEEK_OF_YEAR, -relativeDate) }.timeInMillis + } + // parses: "2 months ago" + "month" in this -> { + parsedDate = now.apply { add(Calendar.MONTH, -relativeDate) }.timeInMillis + } + // parse: "2 years ago" + "year" in this -> { + parsedDate = now.apply { add(Calendar.YEAR, -relativeDate) }.timeInMillis + } + } + return parsedDate + } + + // =============================== Pages ================================ + + override fun pageListParse(document: Document): List { + return document.select(".reading-detail > .page-chapter").map { page -> + val img = page.selectFirst("img[data-index]")!! + val index = img.attr("data-index").toInt() + val url = img.imgAttr() + Page(index, imageUrl = url) + }.sortedBy { it.index } + } + + override fun imageUrlParse(document: Document) = "" + + override fun imageRequest(page: Page): Request { + val imgHeaders = headersBuilder().apply { + add("Accept", "image/avif,image/webp,*/*") + add("Host", page.imageUrl!!.toHttpUrl().host) + }.build() + + return GET(page.imageUrl!!, imgHeaders) + } + + // ============================= Utilities ============================== + + private fun Element.imgAttr(): String = when { + hasAttr("data-lazy-src") -> attr("abs:data-lazy-src") + hasAttr("data-src") -> attr("abs:data-src") + else -> attr("abs:src") + } +} diff --git a/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTTFilters.kt b/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTTFilters.kt new file mode 100644 index 000000000..fbf85082f --- /dev/null +++ b/src/en/mangabtt/src/eu/kanade/tachiyomi/extension/en/mangabtt/MangaBTTFilters.kt @@ -0,0 +1,76 @@ +package eu.kanade.tachiyomi.extension.en.mangabtt + +import eu.kanade.tachiyomi.source.model.Filter + +data class FilterOption(val displayName: String, val value: String) + +inline fun List<*>.firstInstanceOrNull() = firstOrNull { it is T } as? T + +open class EnhancedSelect(name: String, private val _values: List, state: Int = 0) : + Filter.Select(name, _values.map { it.displayName }.toTypedArray(), state) { + + val selectedValue: String? + get() = _values.getOrNull(state)?.value +} + +class SortByFilter(default: Int = 1) : EnhancedSelect( + "Sort By", + listOf( + FilterOption("Top day", "13"), + FilterOption("Top week", "12"), + FilterOption("Top month", "11"), + FilterOption("Top All", "10"), + FilterOption("Comment", "25"), + FilterOption("New Manga", "15"), + FilterOption("Chapter", "30"), + FilterOption("Latest Updates", "0"), + ), + default - 1, +) + +class StatusFilter(default: Int = 1) : EnhancedSelect( + "Status", + listOf( + FilterOption("All", "-1"), + FilterOption("Completed", "2"), + FilterOption("Ongoing", "1"), + ), + default - 1, +) + +class GenreFilter(default: Int = 1) : EnhancedSelect( + "Genre", + listOf( + FilterOption("All", ""), + FilterOption("Action", "action"), + FilterOption("ADVENTURE", "adventure"), + FilterOption("Comedy", "comedy"), + FilterOption("Cooking", "cooking"), + FilterOption("Drama", "drama"), + FilterOption("Fantasy", "fantasy"), + FilterOption("Historical", "historical"), + FilterOption("Horror", "horror"), + FilterOption("Isekai", "isekai"), + FilterOption("Josei", "josei"), + FilterOption("Manhua", "manhua"), + FilterOption("Manhwa", "manhwa"), + FilterOption("Martial Arts", "martial-arts"), + FilterOption("Mecha", "mecha"), + FilterOption("MYSTERY", "mystery"), + FilterOption("PSYCHOLOGICAL", "psychological"), + FilterOption("Romance", "romance"), + FilterOption("School Life", "school-life"), + FilterOption("Sci fi", "sci-fi"), + FilterOption("Seinen", "seinen"), + FilterOption("Shoujo", "shoujo"), + FilterOption("Shounen", "shounen"), + FilterOption("SLICE OF LIF", "slice-of-lif"), + FilterOption("Slice of Life", "slice-of-life"), + FilterOption("Sports", "sports"), + FilterOption("SUGGESTIVE", "suggestive"), + FilterOption("SUPERNATURAL", "supernatural"), + FilterOption("TRAGEDY", "tragedy"), + FilterOption("Webtoons", "webtoons"), + ), + default - 1, +)