From 158e5ce4e26d43f57c0f070e174645b26f9bf406 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Tue, 9 Apr 2024 02:29:29 +0000 Subject: [PATCH] Add comicfans (#2299) * add comicfans * use api calls * suggestions --- src/en/comicfans/build.gradle | 7 + .../comicfans/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5165 bytes .../comicfans/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2498 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8080 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 15615 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 24275 bytes .../extension/en/comicfans/ComicFans.kt | 205 ++++++++++++++++++ .../tachiyomi/extension/en/comicfans/Dto.kt | 89 ++++++++ .../extension/en/comicfans/Filters.kt | 64 ++++++ 9 files changed, 365 insertions(+) create mode 100644 src/en/comicfans/build.gradle create mode 100644 src/en/comicfans/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/comicfans/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/comicfans/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/comicfans/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/comicfans/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/ComicFans.kt create mode 100644 src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Dto.kt create mode 100644 src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Filters.kt diff --git a/src/en/comicfans/build.gradle b/src/en/comicfans/build.gradle new file mode 100644 index 000000000..67db0ffdc --- /dev/null +++ b/src/en/comicfans/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = 'Comic Fans' + extClass = '.ComicFans' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/comicfans/res/mipmap-hdpi/ic_launcher.png b/src/en/comicfans/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..28a5a3586762457ce23860f9cd3bc27c21569765 GIT binary patch literal 5165 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 bGx`4l*qoNob+Y`Y literal 0 HcmV?d00001 diff --git a/src/en/comicfans/res/mipmap-mdpi/ic_launcher.png b/src/en/comicfans/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..405cb2ca8544bf49c85d9281c60099b4387d9bea GIT binary patch literal 2498 zcmV;z2|f0SP)IX{nWE=6AcnAh{1Ugy=Te&>9@-_QA8&i8x13cTh+;Wd|^{{wi{ z8hnxlq;HD%=c|&l?mpvM@mrdYjd}sBT)9%y*VlKRs;a8Df`WqXtCC*gTUS?iv$C=> zDl9B4Fd!hH^if&r1E75S_U&bwnwtJEOK|C!pXQ8ZWo2J$XlP6nORFE0>(PDE-|E%X z)wxPaN;)qKKx6pS)YOzHD=V9bwUQS8Fs;XcO8|6)+KL)ORGw=ZqXl8k%>~b!PXZu0 zt*!uY?IGbBLtUO|8lWWr=!;J`9(3qOO{jhVFG0A*uz0Zmq#!53e}Uu00+5^F4cqHW z2T)m6&6VpnsH(1^iA)s(-DW5&D^Xl>hjlxDqC;DA`Z{)c3iQ7Ky%YesSFW=)_7GWl zc_=DW(n3cAnM{Q{rR7{HD#f;4dor{0ap`5oxTP_yn>i83PS#}RU!}IT4vUtC2tn%w z^+ExZ-Yq92atAkVT%pffR%8|waXF_5bxj@qIl&7hMFlFV?{e~N9>Ht2(bQarT{{!8 zGjEBxX>(c|X;M>LOYW5lR?YE8Q@zP!Af6e(ll<~-MI}d1r*pgXE?sQf@UOL7@f>I; z5*9UnK75Wry&XAz<|0`IzcY2Dn*gB5xVg*eVrRm}A5RcDe*^;qB59{3V_WEGl$xlZ zs-(!s#W7fE>JjAc_51+p(_>kA1!0?Fxbk}*Z(5t8qN2?5ok#HO<3v_|0hLvi80)t{ zOH%_?#bVmDYQcusGiYh3<1@q#BU61QeHlaOr$gvEdL;?Vyg4gO%XjuB)YN2L&AH0p zw;kBLrn-#^J`*1)3xZrv_r@}gDv4|k-4wF%cstBB7pW_r+OrVQwWuSa)eswyP@ zc9~&QB1qUY1*=y2Y>7Kgd3hBdxjT|kT+X7^aeOvr072n#Y@X?c)A-dKOFT#4?)IoR zQRRz?Uf5W)lD`K0f>tuwt1D{4G5wc+&#!`Mb!8QEeEQ%$tOrXs9K_nF86#Y}Fly0G zf_!??Oh+3nnX)jgIub8mM_HV5)Ye0c^z21=PJ+os{ zS?Fd@Qo${D?MlMM;~nB-ljuLB2Om#bMaufgA{DI@0CKQx-Gi1pgewqFrJ!XD~ zM)6JZZ{B5aXEW?woya_V5<|xhOdB6Y`_=}$@7WU-4H>aX7fINDh;c&)5EA&Yd;v^c z5YEzR{Yfh<<{kG1Oc?1(c3vSF*?IiBc`9ic1?)R=9?!v!EIn07OxO-mq62W4x`B%H z9L!7%g<~sFpxun>3z-yD*I`&w!$dDDIr|F^IrJXA zf_3wTlPgn0xA+zVoIB9A-%Ls?s-)6U_?J8HId?%%IKEvQGx=&jq81#nosey@sOV~= zr=r9pR|h)Vw!+ffkiGdOjQL~*$JY9zCcd{&Q>OofZ>cCLl>O^+%b##IVt9m4s zRAO-R7GwY6M41piEAKjfA-fsx=E8yGROb16)4Z9M`~gU(wEJK(UvK#VV_g~FE*MV8 zfi#i(949M17jq3&5~2c_@m&&2hIM5@TDCoV2Y0oXEJ!s`dMs{HYuMLDB3D_C{N?38OY1=GUm7>D{#r<>DR* z{(Kl8Z9U4-^>JkHi$p`*74?nhzKP34{xc|`=tB6V;M+D7j2^Js}o^1_dEI3=P@@|kQ5 z)RY+Vjt%p^`kprLc4Pe5Fgm_rLN^B!qK{=#l9`XDadS#x0&8-V0f>CF6UEf+;(xtf;6`bE?3m5hr-p<->;lCYU$g|n*P6TVLTs0j_! zO6go}8JT&PSrV}y8%s0%K6F7@>A!#)Gvo$9V)k=l3M)6qU}I&*KgW6A1F$q=2bXdS zakRI>&PrFra_xI2a<%9tDQ7b{b~+DT9eu`r;EI{4L1ScoXpLL}G{jvhc#>1kbLv7C zrJ`DsMpJD~kt$o_U}K4ja^uY9g@n;(KC(t^sJCow;AQ3cHSmg`7@r?NBTiJ_OCHqF zYYE`N1Nol-AU%ocmRFQ#$W&#`rPfy zR-BKI&#ctc)Eu$5{2{-nhnNIPO-!jrCY43?7pTu7#q+JL65H?GHy!C_e5l>pP;*fF zzjS3v^98ppo{CNqSn5nl^H0-xk_kPP;@@e()7rCtCt2&2<+TU!A1F~KZREvCGXMYp M07*qoM6N<$f)IetdjJ3c literal 0 HcmV?d00001 diff --git a/src/en/comicfans/res/mipmap-xhdpi/ic_launcher.png b/src/en/comicfans/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..49715919107a8e4f3d9a0706c761a249dfe7fa9d GIT binary patch literal 8080 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

71ZORsvHMhBnbNPrN5kBAS*;gpWDV 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�JC7oqv2VQrg%TANHZ(Ym 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.data + val hasNextPage = response.request.url.fragment!!.toInt() < data.totalPages + + return MangasPage(data.list.map { it.toSManga(cdnUrl) }, hasNextPage) + } + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request = GET(baseUrl, headers) + + override fun latestUpdatesParse(response: Response): MangasPage { + val document = response.asJsoup() + + val mangaList = document.select( + "div:has(>.block-title-bar > .title:contains(New Updates))" + + "> .book-container > .book", + ).map { element -> + SManga.create().apply { + thumbnail_url = element.selectFirst("img")!!.attr("abs:src") + with(element.selectFirst(".book-name > a")!!) { + title = text() + setUrlWithoutDomain(attr("abs:href")) + } + } + } + + return MangasPage(mangaList, false) + } + // =============================== Search =============================== + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$apiUrl/books".toHttpUrl().newBuilder().apply { + addQueryParameter("pageNumber", page.toString()) + addQueryParameter("pageSize", "20") + fragment(page.toString()) + + if (query.isNotBlank()) { + addPathSegment("search") + addQueryParameter("keyWord", query) + } else { + filters.getUriPart()?.let { + addQueryParameter("genre", it) + } + filters.getUriPart()?.let { + addQueryParameter("withinDay", it) + } + filters.getUriPart()?.let { + addQueryParameter("status", it) + } + } + }.build() + + return GET(url, apiHeaders) + } + + override fun searchMangaParse(response: Response): MangasPage = + popularMangaParse(response) + + // =============================== Filters ============================== + + override fun getFilterList(): FilterList = FilterList( + Filter.Header("Text search ignores filters"), + Filter.Separator(), + GenreFilter(), + LastUpdateFilter(), + StatusFilter(), + ) + + // =========================== Manga Details ============================ + + override fun getMangaUrl(manga: SManga): String = baseUrl + manga.url + + override fun mangaDetailsRequest(manga: SManga): Request { + val bookId = manga.url.substringAfter("/comic/") + .substringBefore("-") + + return GET("$apiUrl/books/$bookId", apiHeaders) + } + + override fun mangaDetailsParse(response: Response): SManga { + return response.parseAs>().data.toSManga(cdnUrl) + } + + // ============================== Chapters ============================== + + override fun getChapterUrl(chapter: SChapter): String = baseUrl + chapter.url + + override fun chapterListRequest(manga: SManga): Request { + val bookId = manga.url.substringAfter("/comic/") + .substringBefore("-") + + return GET("$apiUrl/chapters/page?sortDirection=ASC&bookId=$bookId&pageNumber=1&pageSize=9999", apiHeaders) + } + + override fun chapterListParse(response: Response): List { + return response.parseAs>().data.list.mapIndexed { index, chapterDto -> + chapterDto.toSChapter(index + 1) + }.reversed() + } + + // =============================== Pages ================================ + + override fun pageListRequest(chapter: SChapter): Request { + val chapterId = chapter.url.substringAfter("/episode/") + .substringBefore("-") + + return GET("$apiUrl/chapters/$chapterId", apiHeaders) + } + + override fun pageListParse(response: Response): List { + return response.parseAs>().data.comicImageList.map { + Page(it.sortNum, imageUrl = "$cdnUrl/${it.imageUrl}") + } + } + + 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) + } + + override fun imageUrlParse(response: Response): String = + throw UnsupportedOperationException() + + // ============================= Utilities ============================== + + private inline fun Response.parseAs(): T { + return json.decodeFromString(body.string()) + } +} diff --git a/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Dto.kt b/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Dto.kt new file mode 100644 index 000000000..2e56b702f --- /dev/null +++ b/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Dto.kt @@ -0,0 +1,89 @@ +package eu.kanade.tachiyomi.extension.en.comicfans + +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import kotlinx.serialization.Serializable + +typealias ListDataDto = DataDto> + +@Serializable +class ListDto( + val totalPages: Int, + val list: List, +) + +@Serializable +class DataDto( + val data: T, +) + +@Serializable +class MangaDto( + val id: Int, + val title: String, + val coverImgUrl: String, + val status: Int, + val authorPseudonym: String? = null, + val synopsis: String? = null, +) { + fun toSManga(cdnUrl: String): SManga = SManga.create().apply { + title = this@MangaDto.title + thumbnail_url = "$cdnUrl/$coverImgUrl" + author = authorPseudonym + + url = buildString { + append("/comic/") + append(slugify(id, title)) + } + description = synopsis + status = when (this@MangaDto.status) { + 0 -> SManga.ONGOING + 1 -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + initialized = true + } +} + +@Serializable +class ChapterDto( + val id: Int, + val title: String, + val updateTime: Long? = null, +) { + fun toSChapter(index: Int): SChapter = SChapter.create().apply { + name = "Ch. $index - $title" + chapter_number = index.toFloat() + date_upload = updateTime ?: 0L + url = buildString { + append("/episode/") + append(slugify(id, title)) + } + } +} + +@Serializable +class PageDataDto( + val comicImageList: List, +) { + @Serializable + class PageDto( + val imageUrl: String, + val sortNum: Int, + ) +} + +private val symbolsRegex = Regex("\\W") +private val hyphenRegex = Regex("-{2,}") + +private fun slugify(id: Int, title: String): String = buildString { + append(id) + append("-") + append( + title.lowercase() + .replace(symbolsRegex, "-") + .replace(hyphenRegex, "-") + .removeSuffix("-") + .removePrefix("-"), + ) +} diff --git a/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Filters.kt b/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Filters.kt new file mode 100644 index 000000000..04616ee26 --- /dev/null +++ b/src/en/comicfans/src/eu/kanade/tachiyomi/extension/en/comicfans/Filters.kt @@ -0,0 +1,64 @@ +package eu.kanade.tachiyomi.extension.en.comicfans + +import eu.kanade.tachiyomi.source.model.Filter + +open class UriPartFilter(displayName: String, val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second +} + +inline fun List<*>.getUriPart(): String? = + (filterIsInstance().first() as UriPartFilter).toUriPart().takeIf { it.isNotEmpty() } + +class GenreFilter : UriPartFilter( + "Genre", + arrayOf( + Pair("All", ""), + Pair("BL", "1001"), + Pair("Fantasy", "1002"), + Pair("GL", "1003"), + Pair("CEO", "1004"), + Pair("Romance", "1005"), + Pair("Harem", "1006"), + Pair("Action", "1007"), + Pair("Teen", "1008"), + Pair("Adventure", "1009"), + Pair("Eastern", "1010"), + Pair("Comedy", "1011"), + Pair("Esports", "1012"), + Pair("Historical", "1013"), + Pair("Mystery", "1014"), + Pair("Modern", "1015"), + Pair("Urban", "1016"), + Pair("Wuxia", "1017"), + Pair("Suspense", "1018"), + Pair("Female Lead", "1019"), + Pair("Western Fantasy", "1020"), + Pair("Horror", "1022"), + Pair("Realistic Fiction", "1023"), + Pair("Cute", "1024"), + Pair("Campus", "1025"), + Pair("Sci-fi", "1026"), + Pair("History", "1027"), + ), +) + +class LastUpdateFilter : UriPartFilter( + "Last Update", + arrayOf( + Pair("All", ""), + Pair("Within 3 Days", "3"), + Pair("Within 7 Days", "7"), + Pair("Within 15 Days", "15"), + Pair("Within 30 Days", "30"), + ), +) + +class StatusFilter : UriPartFilter( + "Status", + arrayOf( + Pair("All", ""), + Pair("Ongoing", "0"), + Pair("Completed", "1"), + ), +)