From bf539439848b1849f8f8842c18c982f62a8e7882 Mon Sep 17 00:00:00 2001
From: beerpsi <92439990+beerpiss@users.noreply.github.com>
Date: Sat, 17 Feb 2024 15:55:11 +0700
Subject: [PATCH] Add Manga Planet (#1319)

---
 src/en/mangaplanet/build.gradle               |  12 ++
 .../res/mipmap-hdpi/ic_launcher.png           | Bin 0 -> 2618 bytes
 .../res/mipmap-mdpi/ic_launcher.png           | Bin 0 -> 1338 bytes
 .../res/mipmap-xhdpi/ic_launcher.png          | Bin 0 -> 3423 bytes
 .../res/mipmap-xxhdpi/ic_launcher.png         | Bin 0 -> 6629 bytes
 .../res/mipmap-xxxhdpi/ic_launcher.png        | Bin 0 -> 9380 bytes
 .../en/mangaplanet/CookieInterceptor.kt       |  46 +++++
 .../extension/en/mangaplanet/Filters.kt       | 133 ++++++++++++
 .../extension/en/mangaplanet/MangaPlanet.kt   | 194 ++++++++++++++++++
 9 files changed, 385 insertions(+)
 create mode 100644 src/en/mangaplanet/build.gradle
 create mode 100644 src/en/mangaplanet/res/mipmap-hdpi/ic_launcher.png
 create mode 100644 src/en/mangaplanet/res/mipmap-mdpi/ic_launcher.png
 create mode 100644 src/en/mangaplanet/res/mipmap-xhdpi/ic_launcher.png
 create mode 100644 src/en/mangaplanet/res/mipmap-xxhdpi/ic_launcher.png
 create mode 100644 src/en/mangaplanet/res/mipmap-xxxhdpi/ic_launcher.png
 create mode 100644 src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/CookieInterceptor.kt
 create mode 100644 src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/Filters.kt
 create mode 100644 src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/MangaPlanet.kt

diff --git a/src/en/mangaplanet/build.gradle b/src/en/mangaplanet/build.gradle
new file mode 100644
index 000000000..6a8362cfe
--- /dev/null
+++ b/src/en/mangaplanet/build.gradle
@@ -0,0 +1,12 @@
+ext {
+    extName = "Manga Planet"
+    extClass = ".MangaPlanet"
+    extVersionCode = 1
+    isNsfw = true
+}
+
+apply from: "$rootDir/common.gradle"
+
+dependencies {
+    implementation(project(":lib:speedbinb"))
+}
diff --git a/src/en/mangaplanet/res/mipmap-hdpi/ic_launcher.png b/src/en/mangaplanet/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..815193d287930214beca629d8324bafbf7d0d619
GIT binary patch
literal 2618
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

literal 0
HcmV?d00001

diff --git a/src/en/mangaplanet/res/mipmap-mdpi/ic_launcher.png b/src/en/mangaplanet/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..dacc282b2cc1931de296527586b21a1097a85e6a
GIT binary patch
literal 1338
zcmV-A1;zS_P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000F6Nkl<Zc-rlk
z1CT697=-U(q_b_?wn8U_a1Q%~(6epZ=GwN=v$izqvGV?^-g%Y=7uOk)E6jZPS9W*R
zRkCEsI;+N#$B`9L_V`hj3)iw`%k*xydqFT596^*t3?^b(I%m!t-G%ax7e#RqVoVN)
zV+CK4^JolN@Avynh%ph9m9a6#^Y#9E#Hbh>V?1Ag8)G=YjdFl1EIEK2!0HXaX!HDc
z15B<R#`8(-5Uf%Ne=vwv(SsvhHmqqhaUbrmqJ@4>zl*H^0RlSME#jZ5K{)+Er1aVG
zMRphNIMfWoo(9~!uMyf^MrgOz<F@tH`0Pj{k~=K?|3YH_S8j5lc*KPgaw$1`&=J{d
zz~u4ckBR}@xW5UyJ&m}Yz#05wN1CDCVT5K|Jv8fUpk7*zYv*U+*NkRV5p>>=6J_+-
z8#sAoat58@4Zz-SYr7Q#E<a5$fM1IGa6Q2r2wu0l0k;smZl{sp1rC4XP60P=7oc8V
z0o9@+Xr{*FyQB4R`T{srY()x&!yLdz71-Y;QUD+32qU<9F9B0!7`%>E<^*`nR`M3|
z=31y%S3$M345}F^P*aGRg`GHY_G~56`t9smiA;r>MKA6<+=3g}#6$2qBzQedoWQx&
zn`*gLYo!3nx!F)oiNhTW)6ryhfyqsiPwjWG;e_`hX4C0)`oJ{3ZkS)J@29pyAA;X5
z!Cz0-Y_5~wH`YM4fgB33AfE?NOg@Uqd2M_p>B0?7KKucO+<rc(w^KX#)D2Q)2%fx+
zPyHl#HG`+SkZMg8lsrHIgXjKcZzZbCZn*qGR-wq<Mh7Xx1BaS<-*p6k%Wfm}{T%S?
zs-aw2AqAM92Q{t0hnw>8(&`)x(2DlcD%gC1$OY(f_;APmMm}{N`NkcrG7`L&;ICyD
ztpv`iqg+j1Ud{tNw7M7{Y+^M!iW_GoqSNMy_=Ail=EuDUnqVOK(9|`X>OxaL9e!0M
z3@gg<;r<5Pzc>TqsXolN&q+eR!wZWy0H;5K6{@#-@N#@B?x5;uPpi!7@GsNfy}nz3
zit3}_@RFZfnZ@^0e^(8n+UyR0fFQsh`|Wlw{;3!^sqfd&XWa${Uo{F}iAQ(T<HLiE
zxQ_a-SX=_d)P!U3<0c-)A1MNuhTZ<iR49AU3A5J^5}(*D)cw%Zub~jyb<*ADq3!i}
z_h1w5rk^R6lo5O>6w{NB!%sSj>!%+@)u25xo4Fu|cfjrooV2C*v$UTA9IwnHI|aOR
zs0j~ktAlb`xdgwk5Q=F@C&7=Oa0tI93#hfYvAWre2Ae0m0cgj_FSJv|R^zk8X1ub8
zCVrq1chSTpaGE%~-_J}V=(v;MS#>_$S_CuIW<#q5hP{p0-fj(VfZQP`PF1VuMbU^8
z)ilMQ66&C(+oEz>BJa6^phqv(li*bZ|Lxv#3^=?9DY?%c{tB@-DK$xZ_JU!)73L4K
zASAh|PaEq8@cim*=q4YAV&Wl;pL9erL2D)*#<MFkv7x4q?R%ngpt+C(mFNo~w@<{9
zvM&6UCU7q<?L=;m4Wc*jKRDFO0ptL306D-7ZnxWv7?a225gFV00*oPFBM8Dq#F&gm
z<2J^|8P6m20}nj#U{O)gc9Y2@+H5vN(~P0KynOdF&ph)mV<VqeETN8k2l-L*Q&IL~
w<U1Kts6H1OLP6G$bx}5BP;e$$vaY=T1vXmIcQ%_uBme*a07*qoM6N<$g0AF?YybcN

literal 0
HcmV?d00001

diff --git a/src/en/mangaplanet/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangaplanet/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..325c328028a84c1032b3baab661e24a6b534a6f9
GIT binary patch
literal 3423
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
BzE%JL

literal 0
HcmV?d00001

diff --git a/src/en/mangaplanet/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangaplanet/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ee8a6a3fab44e4688b6b21f15b27e4522ab5002
GIT binary patch
literal 6629
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

literal 0
HcmV?d00001

diff --git a/src/en/mangaplanet/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/mangaplanet/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e51aab2d2b7038950f2d33ee263db817dac8ac8
GIT binary patch
literal 9380
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
Cv^pOE

literal 0
HcmV?d00001

diff --git a/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/CookieInterceptor.kt b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/CookieInterceptor.kt
new file mode 100644
index 000000000..9511aff1a
--- /dev/null
+++ b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/CookieInterceptor.kt
@@ -0,0 +1,46 @@
+package eu.kanade.tachiyomi.extension.en.mangaplanet
+
+import android.util.Log
+import android.webkit.CookieManager
+import okhttp3.Interceptor
+import okhttp3.Response
+
+class CookieInterceptor(
+    private val domain: String,
+    private val key: String,
+    private val value: String,
+) : Interceptor {
+
+    init {
+        val url = "https://$domain/"
+        val cookie = "$key=$value; Domain=$domain; Path=/"
+        setCookie(url, cookie)
+    }
+
+    override fun intercept(chain: Interceptor.Chain): Response {
+        val request = chain.request()
+        if (!request.url.host.endsWith(domain)) return chain.proceed(request)
+
+        val cookie = "$key=$value"
+        val cookieList = request.header("Cookie")?.split("; ") ?: emptyList()
+        if (cookie in cookieList) return chain.proceed(request)
+
+        setCookie("https://$domain/", "$cookie; Domain=$domain; Path=/")
+        val prefix = "$key="
+        val newCookie = buildList(cookieList.size + 1) {
+            cookieList.filterNotTo(this) { it.startsWith(prefix) }
+            add(cookie)
+        }.joinToString("; ")
+        val newRequest = request.newBuilder().header("Cookie", newCookie).build()
+        return chain.proceed(newRequest)
+    }
+
+    private fun setCookie(url: String, value: String) {
+        try {
+            CookieManager.getInstance().setCookie(url, value)
+        } catch (e: Exception) {
+            // Probably running on Tachidesk
+            Log.e("MangaPlanet", "failed to set cookie", e)
+        }
+    }
+}
diff --git a/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/Filters.kt b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/Filters.kt
new file mode 100644
index 000000000..5ddcd19a6
--- /dev/null
+++ b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/Filters.kt
@@ -0,0 +1,133 @@
+package eu.kanade.tachiyomi.extension.en.mangaplanet
+
+import eu.kanade.tachiyomi.source.model.Filter
+import okhttp3.HttpUrl
+
+interface UrlFilter {
+    fun addToUrl(builder: HttpUrl.Builder)
+}
+
+class SortFilter : SelectFilter(
+    "Sort order",
+    "sort",
+    arrayOf(
+        Pair("Released last", ""),
+        Pair("Released first", "1"),
+        Pair("By A to Z", "2"),
+    ),
+)
+
+class CategoryFilter : MultiSelectFilter(
+    "Category",
+    "cat",
+    listOf(
+        MultiSelectOption("Shojo/Josei", "3"),
+        MultiSelectOption("Shonen/Seinen", "1"),
+        MultiSelectOption("BL(futekiya)", "2"),
+        MultiSelectOption("GL/Yuri", "4"),
+    ),
+)
+
+class SpicyLevelFilter : MultiSelectFilter(
+    "Spicy Level - BL(futekiya) only",
+    "hp",
+    listOf(
+        MultiSelectOption("🌶️🌶️🌶️🌶️🌶️", "5"),
+        MultiSelectOption("🌶️🌶️🌶️🌶️️", "4"),
+        MultiSelectOption("🌶️🌶️🌶️", "3"),
+        MultiSelectOption("🌶️🌶️", "2"),
+        MultiSelectOption("🌶️", "1"),
+    ),
+)
+
+class AccessTypeFilter : SelectFilter(
+    "Access Type",
+    "bt",
+    arrayOf(
+        Pair("All", ""),
+        Pair("Access for free", "1"),
+        Pair("Access via Points", "2"),
+        Pair("Access via Manga Planet Pass", "3"),
+    ),
+)
+
+class FormatFilter : MultiSelectFilter(
+    "Format",
+    "fmt",
+    listOf(
+        MultiSelectOption("Manga", "1"),
+        MultiSelectOption("TatéManga", "2"),
+        MultiSelectOption("Novel", "3"), // Novels are images with text
+    ),
+)
+
+class RatingFilter : MultiSelectFilter(
+    "Rating",
+    "rtg",
+    listOf(
+        MultiSelectOption("All Ages", "0"),
+        MultiSelectOption("R16+", "16"),
+        MultiSelectOption("R18+", "18"),
+    ),
+)
+
+class ReleaseStatusFilter : SelectFilter(
+    "Release status",
+    "comp",
+    arrayOf(
+        Pair("All", ""),
+        Pair("Ongoing", "progress"),
+        Pair("Completed", "comp"),
+    ),
+)
+
+class LetterFilter : SelectFilter(
+    "Display by First Letter",
+    "fl",
+    buildList {
+        add(Pair("All", ""))
+
+        for (letter in 'A'..'Z') {
+            add(Pair(letter.toString(), letter.toString()))
+        }
+
+        add(Pair("Other", "other"))
+    }
+        .toTypedArray(),
+)
+
+open class MultiSelectFilter(
+    name: String,
+    val queryParameter: String,
+    options: List<MultiSelectOption>,
+) : Filter.Group<MultiSelectOption>(name, options), UrlFilter {
+    override fun addToUrl(builder: HttpUrl.Builder) {
+        val enabled = state.filter { it.state }
+
+        if (enabled.isEmpty() || enabled.size == state.size) {
+            return
+        }
+
+        builder.addQueryParameter(
+            queryParameter,
+            enabled.joinToString(",") { it.value },
+        )
+    }
+}
+
+class MultiSelectOption(name: String, val value: String, state: Boolean = false) : Filter.CheckBox(name, state)
+
+open class SelectFilter(
+    name: String,
+    val queryParameter: String,
+    val vals: Array<Pair<String, String>>,
+    state: Int = 0,
+) : Filter.Select<String>(name, vals.map { it.first }.toTypedArray(), state), UrlFilter {
+    override fun addToUrl(builder: HttpUrl.Builder) {
+        if (state == 0) {
+            return
+        }
+
+        builder.addQueryParameter(queryParameter, vals[state].second)
+    }
+}
diff --git a/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/MangaPlanet.kt b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/MangaPlanet.kt
new file mode 100644
index 000000000..27be22be6
--- /dev/null
+++ b/src/en/mangaplanet/src/eu/kanade/tachiyomi/extension/en/mangaplanet/MangaPlanet.kt
@@ -0,0 +1,194 @@
+package eu.kanade.tachiyomi.extension.en.mangaplanet
+
+import eu.kanade.tachiyomi.lib.speedbinb.SpeedBinbInterceptor
+import eu.kanade.tachiyomi.lib.speedbinb.SpeedBinbReader
+import eu.kanade.tachiyomi.network.GET
+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 eu.kanade.tachiyomi.util.asJsoup
+import kotlinx.serialization.json.Json
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class MangaPlanet : ParsedHttpSource() {
+
+    override val name = "Manga Planet"
+
+    override val baseUrl = "https://mangaplanet.com"
+
+    override val lang = "en"
+
+    override val supportsLatest = false
+
+    // No need to be lazy if you're going to use it immediately below.
+    private val json = Injekt.get<Json>()
+
+    override val client = network.client.newBuilder()
+        .addInterceptor(SpeedBinbInterceptor(json))
+        .addInterceptor(CookieInterceptor(baseUrl.toHttpUrl().host, "mpaconf", "18"))
+        .build()
+
+    override fun headersBuilder() = super.headersBuilder()
+        .add("Referer", "$baseUrl/")
+
+    override fun popularMangaRequest(page: Int) = GET("$baseUrl/browse/title?ttlpage=$page", headers)
+
+    override fun popularMangaSelector() = ".book-list"
+
+    override fun popularMangaFromElement(element: Element) = SManga.create().apply {
+        setUrlWithoutDomain(element.selectFirst("a")!!.attr("href"))
+        title = element.selectFirst("h3")!!.text()
+        author = element.selectFirst("p:has(.fa-pen-nib)")?.text()
+        description = element.selectFirst("h3 + p")?.text()
+        thumbnail_url = element.selectFirst("img")?.absUrl("data-src")
+        status = when {
+            element.selectFirst(".fa-flag-alt") != null -> SManga.COMPLETED
+            element.selectFirst(".fa-arrow-right") != null -> SManga.ONGOING
+            else -> SManga.UNKNOWN
+        }
+    }
+
+    override fun popularMangaNextPageSelector() = "ul.pagination a.page-link[rel=next]"
+
+    override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException()
+
+    override fun latestUpdatesSelector() = throw UnsupportedOperationException()
+
+    override fun latestUpdatesFromElement(element: Element) = throw UnsupportedOperationException()
+
+    override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException()
+
+    override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+        val url = baseUrl.toHttpUrl().newBuilder().apply {
+            if (query.isNotEmpty()) {
+                addPathSegment("search")
+                addQueryParameter("keyword", query)
+            } else {
+                addPathSegments("browse/title")
+            }
+
+            filters.ifEmpty { getFilterList() }
+                .filterIsInstance<UrlFilter>()
+                .forEach { it.addToUrl(this) }
+
+            if (page > 1) {
+                addQueryParameter("ttlpage", page.toString())
+            }
+        }.build()
+
+        return GET(url, headers)
+    }
+
+    override fun searchMangaSelector() = popularMangaSelector()
+
+    override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
+
+    override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
+
+    override fun mangaDetailsParse(document: Document): SManga {
+        val alternativeTitles = document.selectFirst("h3#manga_title + p")!!
+            .textNodes()
+            .filterNot { it.text().isBlank() }
+            .joinToString { it.text() }
+
+        return SManga.create().apply {
+            title = document.selectFirst("h3#manga_title")!!.text()
+            author = document.select("h3:has(.fa-pen-nib) a").joinToString { it.text() }
+            description = buildString {
+                append("Alternative Titles: ")
+                appendLine(alternativeTitles)
+                appendLine()
+                appendLine(document.selectFirst("h3#manga_title ~ p:eq(2)")!!.text())
+            }
+            genre = buildList {
+                document.select("h3:has(.fa-layer-group) a")
+                    .map { it.text() }
+                    .let { addAll(it) }
+                document.select(".fa-pepper-hot").size
+                    .takeIf { it > 0 }
+                    ?.let { add("🌶️".repeat(it)) }
+                document.select(".tags-btn button")
+                    .map { it.text() }
+                    .let { addAll(it) }
+                document.selectFirst("span:has(.fa-book-spells, .fa-book)")?.let { add(it.text()) }
+                document.selectFirst("span:has(.fa-user-friends)")?.let { add(it.text()) }
+            }
+                .joinToString()
+            status = when {
+                document.selectFirst(".fa-flag-alt") != null -> SManga.COMPLETED
+                document.selectFirst(".fa-arrow-right") != null -> SManga.ONGOING
+                else -> SManga.UNKNOWN
+            }
+            thumbnail_url = document.selectFirst("img.img-thumbnail")?.absUrl("data-src")
+        }
+    }
+
+    override fun chapterListSelector() = "ul.ep_ul li.list-group-item"
+
+    override fun chapterFromElement(element: Element) = SChapter.create().apply {
+        element.selectFirst("h3 p")!!.let {
+            val id = it.id().substringAfter("epi_title_")
+
+            url = "/reader?cid=$id"
+            name = it.text()
+        }
+
+        date_upload = try {
+            val date = element.selectFirst("p")!!.ownText()
+
+            dateFormat.parse(date)!!.time
+        } catch (_: Exception) {
+            0L
+        }
+    }
+
+    override fun chapterListParse(response: Response): List<SChapter> {
+        val document = response.asJsoup()
+
+        return document.select(chapterListSelector())
+            .filter { e ->
+                e.selectFirst("p")?.ownText()?.contains("Arrives on") != true
+            }
+            .map { chapterFromElement(it) }
+            .reversed()
+    }
+
+    private val reader by lazy { SpeedBinbReader(client, headers, json) }
+
+    override fun pageListParse(document: Document): List<Page> {
+        if (document.selectFirst("a[href\$=account/sign-up]") != null) {
+            throw Exception("Sign up in WebView to read this chapter")
+        }
+
+        if (document.selectFirst("a:contains(UNLOCK NOW)") != null) {
+            throw Exception("Purchase this chapter in WebView")
+        }
+
+        return reader.pageListParse(document)
+    }
+
+    override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
+
+    override fun getFilterList() = FilterList(
+        SortFilter(),
+        AccessTypeFilter(),
+        ReleaseStatusFilter(),
+        LetterFilter(),
+        CategoryFilter(),
+        SpicyLevelFilter(),
+        FormatFilter(),
+        RatingFilter(),
+    )
+}
+
+private val dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH)