From dc905e5f6d965d0ee2005b9229f1cb9daf023807 Mon Sep 17 00:00:00 2001 From: Emanuel Nibizi Date: Thu, 5 Dec 2024 21:47:01 +0100 Subject: [PATCH] Add Manhwalike (#6405) * Cloudflare fix * Fix searchMangaParse * Added requested changes * Fix requested changes * Fixed incorrect use of toString() --- src/en/manhwalike/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3915 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2349 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5102 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9025 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13207 bytes .../extension/en/manhwalike/Manhwalike.kt | 218 ++++++++++++++++++ .../en/manhwalike/ManhwalikeHelper.kt | 49 ++++ 8 files changed, 275 insertions(+) create mode 100644 src/en/manhwalike/build.gradle create mode 100644 src/en/manhwalike/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/manhwalike/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/manhwalike/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/manhwalike/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/manhwalike/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/manhwalike/src/eu/kanade/tachiyomi/extension/en/manhwalike/Manhwalike.kt create mode 100644 src/en/manhwalike/src/eu/kanade/tachiyomi/extension/en/manhwalike/ManhwalikeHelper.kt diff --git a/src/en/manhwalike/build.gradle b/src/en/manhwalike/build.gradle new file mode 100644 index 000000000..721cd1be6 --- /dev/null +++ b/src/en/manhwalike/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Manhwalike' + extClass = '.Manhwalike' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/manhwalike/res/mipmap-hdpi/ic_launcher.png b/src/en/manhwalike/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..02f2e6113c0176ac3dbd6664f1ba76dfdc870e96 GIT binary patch literal 3915 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 Ze*sEgLGDec;fDYK002ovPDHLkV1jHWY99aq literal 0 HcmV?d00001 diff --git a/src/en/manhwalike/res/mipmap-mdpi/ic_launcher.png b/src/en/manhwalike/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8963b70c4217c4deee1efa8cc96a2410a5c879f3 GIT binary patch literal 2349 zcmV+|3DWk7P)Px-=Sf6CRA@uRT6>IKRUQ7$oyX3r`2&&s&1Q3}>$)pwi01_%?YX2u@m<~L-{cs&XN*_(wK3{l|9w7& z{;*(9@m@KdP9Mx>vpbF*J5~vsYXgv+oSZyRsZ_pTPA*?1;}}373;>$(;rlcXV-dr` zhFZTX8&(twkGysI^mYKPaDE7X&#zgt=1i;ADyRoxAkpu{aJ+%t&l7bDXW9c2i9}_7 zetrZ%RhLtk0s1~LF)?vASX4JosIoI4(-4*A+P!CETbCkzE|<%L0On%=aO3E&;>5(n zoL%4KWdfvWKO`Mr+tPD(N5sD$0V(H^0EPf|&JQ+3gO~$Yy?QkVU<7YO_a++@z;Ur5 z^zXtWDmY*U*K-9ih69LQb6x#;xm+Fsa8AuaBW)7$0Vw@NvXH(gm#A1ZnP6~T7fY_Z zr}ZLS4q6s+DX?__T4u9nD4<*^55dE^PBBm%A0PJ_5Wy*AW0Q`$*PCH@=9UJ|*BNg9 zSrY%cAYz4kpE4GAn~Dvcji{XXSOP@jHRc5aHVFkKl}ktg&~tg+MiaR2g)H{Z0L@m^xHzqIM@c!+bR;#!a-~w?G0-&tJqCj8BD)GX@n}E8OJA#F zAipFeBbM_eH+v$5olm84{EWi`6hT7zN#Oa?!Ck)hFwuOo56t0dHcfuIf$02LO|I0(FZRJ=%SX36%h4*ohM(SO*S_*%I2+NsKYlrba}|cEEj5!ZDV4jQ&*8pb#P>;E16a9oWm^WG zyS0fc-qqk$)~B6PnD`PK&@;z+uy&+{v3_FCOqY}h?m3*rJ%=<=hGJmZ0E{{y)6#}< zh8K2JMA7oYQ+*6}RcFqpFw(au+X?Y}X$eR;YD^UDz0(3sJ8_t#Zm?n4PLi2}u9@)mOv_U2n`KvF+h3j_kUiwHM+n!LJ!128iSv~z~8ee%l zg+JZ3i1GeLjMM_aN{TQ2HH~ZcC4;!~R}hIr0qD3NAO^zupXS=R*~QndQW?ZQL(qT- zqi#Ex!(&Gn9>1xDkFQ@a0MNW=D?J!0G(_VfawQ*g^vx7DeJ^Efj1)K>K>KEnp*TD= zY>k1DK1zWtd}6~Q@;yspZmB`h`-@vw?#<)%e|XsbA%;EIl>PfO#&sFKKb^Q47gC-KaeYZ?PQ^7(q}zg57=IdzU@*7=&O#2qCxG&E!| zz_)*TJ(I>#!h6pcuzAwO$0l2N@Ax84olW8cd(v>J$6>(iR0HoGZu$W4csh%}oOW>N zs{u3mf!NlE^1R*PJF(E7H$IJqc4UKt#W}tD8lRPHHEz{@x76#Pm~(ObOu)$9*DT@I zkJPy}t_!TctAM^NaO9g8LWNJf^X=!d_`$TO1>vjfIxsjmC>W3~um!ZQU%86jx9HC{ zzLVj_+sj;Lub%9|hwn}D&Hs&?fZj|C3r&XV0&u?WVXorf&wm%6y8{q&tWqoz1NO@X zrrn-_^8RmjEn;%Ci3fg}!PK+TyXur8bnY6rF5T~%0TY0JDq*TJ&TutKJ^%bB;Qp-@ zY<(z)!>{fdD|9{;h_~7QnV0O(($j!?yRj1F;MV_4oH12U|f~Axvwh`ED4o8XTvd zh=lY)W*jXBy-*l{eln*oz8oMb)rNOa-FjaS;@Co_j#c{l`l4A#JF5vV8V|(In3ka< z_S=bwYvy9oXkTCNDGw}f?5;v>MZ0twiGjBAFgP`8ud$i+ylSmhoA7@hkc&k3#0)D6 z`N9FmaXuUC>5xI{L{5Zg=rEY>w9k%WnGPUb*L|X1uWtufS>LzXB-sPt9l2a?kK;I3 z1IXERYOfDIGnPhhIeOQ|);!NUT(8%612{$fqCSre0No>_2LRA7l&R${Y_VLU+ukIo z74+YL`Af8gYrzBc-t^NFZAOeKGyulJ^d%vUw|7>ZP+cSgel85mq{>If81g8?T=>7p zYL~#mc(Ow7(JAcmmwLN-rWP&|LMQI@({ibo_?2QL^glDLv+*L4MgFZ%oJIcu`on#b TSuCYu00000NkvXXu0mjft$cc| literal 0 HcmV?d00001 diff --git a/src/en/manhwalike/res/mipmap-xhdpi/ic_launcher.png b/src/en/manhwalike/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..78f7e01e6fe6b7f46f6fdf861e02cefe0d3ec7c1 GIT binary patch literal 5102 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 QLI3~&07*qoM6N<$f^98{Jpcdz literal 0 HcmV?d00001 diff --git a/src/en/manhwalike/res/mipmap-xxhdpi/ic_launcher.png b/src/en/manhwalike/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4509609ff6a84700715fc531f2b9eeb864dbef82 GIT binary patch literal 9025 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 + when (filter) { + is GenreFilter -> filter.toUriPart().also { url.addPathSegment(it) } + else -> {} + } + } + url.addQueryParameter("page", page.toString()) + return GET(url.build(), headers) + } + } + + override fun searchMangaSelector() = "ul.normal li" + + override fun searchMangaNextPageSelector() = "ul.pagination li:last-child a" + + override fun searchMangaParse(response: Response): MangasPage { + val document = response.asJsoup() + val mangas = when { + document.select(searchMangaSelector()).isEmpty() -> document.select("ul li").map { element -> + searchMangaFromElement(element) + } + else -> document.select(searchMangaSelector()).map { element -> + searchMangaFromElement(element) + } + } + val hasNextPage = searchMangaNextPageSelector().let { selector -> + document.selectFirst(selector) + } != null + return MangasPage(mangas, hasNextPage) + } + + override fun searchMangaFromElement(element: Element): SManga { + return SManga.create().apply { + element.selectFirst("img")?.attr("alt")?.also { title = it } + element.selectFirst("img")?.toOriginal()?.also { thumbnail_url = it } + element.selectFirst("a")?.absUrl("href")?.also { setUrlWithoutDomain(it) } + } + } + + // details + override fun mangaDetailsParse(document: Document): SManga { + return SManga.create().apply { + author = document.selectFirst("div.author a")?.text() + status = document.selectFirst("small:contains(Status) + strong")?.text().toStatus() + genre = document.select("div.categories a").joinToString { it.text() } + description = document.selectFirst("div.summary-block p.about")?.text() + thumbnail_url = document.selectFirst("div.fixed-img img")?.absUrl("src") + } + } + + // chapters + override fun chapterListSelector() = "ul.chapter-list li" + override fun chapterFromElement(element: Element): SChapter { + return SChapter.create().apply { + element.selectFirst("a")?.absUrl("href")?.also { setUrlWithoutDomain(it) } + element.selectFirst("a")?.text()?.also { name = it } + element.selectFirst(".time")?.text().toDate().also { date_upload = it } + } + } + + // pages + override fun pageListParse(document: Document): List { + return document.select(".chapter-content .page-chapter img").mapIndexed { i, img -> + Page(i, imageUrl = img.absUrl("src")) + } + } + + override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException() + + // filters + override fun getFilterList() = FilterList( + Filter.Header("NOTE: Ignored if using text search!"), + Filter.Separator(), + GenreFilter(), + ) + + // the list can be updated via copy($$("#glo_gnb .sub-menu a").map(el => `Pair("${el.innerText.trim()}", "${el.pathname.substr(1)}"),`).join("\n")) + private class GenreFilter : UriPartFilter( + "Genre", + arrayOf( + Pair("Action", "manga-genre-action"), + Pair("Adaptation", "manga-genre-adaptation"), + Pair("Adult", "manga-genre-adult"), + Pair("Adventure", "manga-genre-adventure"), + Pair("Boy love", "manga-genre-boy-love"), + Pair("Comedy", "manga-genre-comedy"), + Pair("Comic", "manga-genre-comic"), + Pair("Cooking", "manga-genre-cooking"), + Pair("Crime", "manga-genre-crime"), + Pair("Doujinshi", "manga-genre-doujinshi"), + Pair("Drama", "manga-genre-drama"), + Pair("Ecchi", "manga-genre-ecchi"), + Pair("Fantasy", "manga-genre-fantasy"), + Pair("Full Color", "manga-genre-full-color"), + Pair("Game", "manga-genre-game"), + Pair("Gender Bender", "manga-genre-gender-bender"), + Pair("Harem", "manga-genre-harem"), + Pair("Historical", "manga-genre-historical"), + Pair("Horror", "manga-genre-horror"), + Pair("Isekai", "manga-genre-isekai"), + Pair("Josei", "manga-genre-josei"), + Pair("Magic", "manga-genre-magic"), + Pair("Manga", "manga-genre-manga"), + Pair("Manhua", "manga-genre-manhua"), + Pair("Manhwa", "manga-genre-manhwa"), + Pair("Martial Arts", "manga-genre-martial-arts"), + Pair("Mature", "manga-genre-mature"), + Pair("Mecha", "manga-genre-mecha"), + Pair("Medical", "manga-genre-medical"), + Pair("Mystery", "manga-genre-mystery"), + Pair("NTR", "manga-genre-ntr"), + Pair("Oneshot", "manga-genre-oneshot"), + Pair("Psychological", "manga-genre-psychological"), + Pair("Reincarnation", "manga-genre-reincarnation"), + Pair("Romance", "manga-genre-romance"), + Pair("School life", "manga-genre-school-life"), + Pair("Sci-fi", "manga-genre-sci-fi"), + Pair("Seinen", "manga-genre-seinen"), + Pair("Shoujo", "manga-genre-shoujo"), + Pair("Shoujo ai", "manga-genre-shoujo-ai"), + Pair("Shounen", "manga-genre-shounen"), + Pair("Shounen ai", "manga-genre-shounen-ai"), + Pair("Slice Of Life", "manga-genre-slice-of-life"), + Pair("Smut", "manga-genre-smut"), + Pair("Soft Yaoi", "manga-genre-soft-yaoi"), + Pair("Soft Yuri", "manga-genre-soft-yuri"), + Pair("Sports", "manga-genre-sports"), + Pair("Super Power", "manga-genre-super-power"), + Pair("Supernatural", "manga-genre-supernatural"), + Pair("SURVIVAL", "manga-genre-survival"), + Pair("Time travel", "manga-genre-time-travel"), + Pair("Tragedy", "manga-genre-tragedy"), + Pair("Villainess", "manga-genre-villainess"), + Pair("Webtoon", "manga-genre-webtoon"), + Pair("Webtoons", "manga-genre-webtoons"), + Pair("Yaoi", "manga-genre-yaoi"), + ), + ) + + private open class UriPartFilter(displayName: String, private val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } +} diff --git a/src/en/manhwalike/src/eu/kanade/tachiyomi/extension/en/manhwalike/ManhwalikeHelper.kt b/src/en/manhwalike/src/eu/kanade/tachiyomi/extension/en/manhwalike/ManhwalikeHelper.kt new file mode 100644 index 000000000..4a37b05e4 --- /dev/null +++ b/src/en/manhwalike/src/eu/kanade/tachiyomi/extension/en/manhwalike/ManhwalikeHelper.kt @@ -0,0 +1,49 @@ +package eu.kanade.tachiyomi.extension.en.manhwalike + +import eu.kanade.tachiyomi.source.model.SManga +import okhttp3.FormBody +import okhttp3.Headers +import okhttp3.RequestBody +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone + +object ManhwalikeHelper { + private val dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).apply { timeZone = TimeZone.getTimeZone("America/New_York") } + + fun Headers.Builder.buildApiHeaders(requestBody: RequestBody) = this + .add("Content-Length", requestBody.contentLength().toString()) + .add("Content-Type", requestBody.contentType().toString()) + .add("Accept", "text/html") + .add("X-Requested-With", "XMLHttpRequest") + .build() + + inline fun T.toFormRequestBody(): RequestBody { + return FormBody.Builder() + .add("keyword", this.toString()) + .build() + } + + fun String?.toStatus(): Int { + return when { + this == null -> SManga.UNKNOWN + this.contains("Ongoing", true) -> SManga.ONGOING + this.contains("Finish", true) -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + } + + fun String?.toDate(): Long { + return try { + dateFormat.parse(this).time + } catch (_: Exception) { + 0L + } + } + + fun Element.toOriginal(): String = when { + hasAttr("data-original") -> absUrl("data-original") + else -> absUrl("src") + } +}