From 5858835f7836458d09a4e95748d55544681ee8f4 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 26 Dec 2023 08:30:42 -0300 Subject: [PATCH] feat(src/en): New source: CloudRecess (#19432) * feat(src/en): Create CloudRecess base * feat: Implement popular manga page * feat: Implement latest updates page * feat: Implement (basic) search manga page * feat: Implement search filters * feat: Implement manga details * feat: Implement chapter list page * feat: Show page list * chore: Add source icons --- src/en/cloudrecess/AndroidManifest.xml | 22 +++ src/en/cloudrecess/build.gradle | 12 ++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5741 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3179 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8743 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16283 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 25519 bytes .../extension/en/cloudrecess/CloudRecess.kt | 154 +++++++++++++++++ .../en/cloudrecess/CloudRecessFilters.kt | 163 ++++++++++++++++++ .../en/cloudrecess/CloudRecessUrlActivity.kt | 41 +++++ 10 files changed, 392 insertions(+) create mode 100644 src/en/cloudrecess/AndroidManifest.xml create mode 100644 src/en/cloudrecess/build.gradle create mode 100644 src/en/cloudrecess/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/cloudrecess/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/cloudrecess/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/cloudrecess/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/cloudrecess/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecess.kt create mode 100644 src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessFilters.kt create mode 100644 src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessUrlActivity.kt diff --git a/src/en/cloudrecess/AndroidManifest.xml b/src/en/cloudrecess/AndroidManifest.xml new file mode 100644 index 000000000..a4e695313 --- /dev/null +++ b/src/en/cloudrecess/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/en/cloudrecess/build.gradle b/src/en/cloudrecess/build.gradle new file mode 100644 index 000000000..50cb3333c --- /dev/null +++ b/src/en/cloudrecess/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + extName = 'CloudRecess' + pkgNameSuffix = 'en.cloudrecess' + extClass = '.CloudRecess' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/cloudrecess/res/mipmap-hdpi/ic_launcher.png b/src/en/cloudrecess/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7c811df20ae288a82d36e4b94d7785533e49617c GIT binary patch literal 5741 zcmV-z7Lw_SP)?T8mi}%{nMa0%gb)%!5~eU|m_bB*@EpJfr{@w{MNwPP#dEE(R-gU*yRWbFnx;AAIDa;qOs2yP z4Gp=4g@yIJL8p`O#|HhRNt5D(f`V4C!)%Ac5yjoWy=~wfefFGLAnpD2)7|s#>pZTv z5~TXb$jCiSO-)OVA3t8fvD!LX>COPs5)%_+Q&Uq{)z{bmPCD>4Na;Y}@;uiY-~|kB~)c*q_-Ki#h^Gjt6IDW&Mer{3~r&9D+}?@}59%47@W?d@;2vAbVXe zruFjKvu9uD&lZ<4w8N<*fOKpXnwgpTlF?{!Ae&K{Fba6VR+SILxiE zwus-n8n{4wqCcSB=X-}iUMuTuQvUpbZ$F^H5ETP0E)iOvSRf=AnqCKGkyN}6iv^BL zb+Da33u{d^99G||I#3`wVrP#4N>5LhDAwkrI|8ON)9^eeR%F*SXrW;+3`qwP2f?m4 zz#%6zz0-=@Ow7TwfQK!u&}wR6Id&M<+8PC(zXkCJn&+6VIY9m#c)RmD9rOc}prvIH zqzL*Qf+Cb55)L{c&+O6R`b~3?IdY=41@<#1VL5ezlFq5=`~h**dBK*8;d%U;0^|=I z?@1Vv2LYK`G^a3V4*Hok{~`k9N}<3Fj?4SFavA=xnPE6zjFy4}{Cp)M`va;oFs}(f zT?Ix4Xh<9gN7guKrVzy#yGN$(v?@110*}h>T#-|j+zFM9*Jy049X|@o(Zfz(6+qPM ztPO=?_oJ9EAJh&U55eW>pS%IoM@B(EZZaIvQLrnMk~s@!oUz?wjxKPVe#R3x>C??D z2hGiqp9gz+nF}DNnCcE#y$Vnu%<-nPu*H-<92hbTb_0Em&czNz3;G=o$J53f7iGKw zaxa3NCv@jaU^%dta^Omi`M&~?5{f=HUtlS4l(k6s;Z8rH8BGYvo&;M=f7t1yq4Q>k z+tXYr^tJC>m~mwQ?sNL)7Fc%Y!d6?|cCvGToOJhY(_;pC1LPAJ3EjceF)`FLVG+RN zEfbOHLoqly9JTZpryE;f6B?;}PP9+^+PN=tYBOConOrQ=F7h6^n-xHkrUY>}Q*qlY zR>}a`{Y!yf2S}|B8K95t18u};r&*CP!VVRJUC~*qtb}FXZVVWig}WEbM@B*-s#=@z zmyN%oywyqtEzr0!RM*5i0>>9X(pJ|{2P*+GBn(2|!6}$GbrKGqIE8|9=V4)*Vy-NM zy|M~+rY%>n^;!^y`BG=OqwCqcH-p+7WOxL__ITK1`Z>*sn;RerQsfV`>I%i6X*b=B zMSu7MPL~uTG_F5Z*H730EH8AJqz?3l(6DCi`l37!6 z^1=mtvNI1C%+0WwTc9f~hwV@yY%Q04`YI8M6%`fT2gut=YfKMj3F# zQu^$Puu0Sc2Ot8?CH%y3>R2yQ0hOhSkfR6j{L{lTXJ#i(j^82E|dsU z*-K8ta2b$H@4%q0h_&@XTII(L~o5U$y=^rmST z8yAn77Bg1R&mC!OgjIphoKF^xPTRIO57u)f?M$sl0P&ev`zXecZkRa>7KU@9T5YEf z;WJBwaI8sD;fM_hLM>PE44vdaI^yLE7tl$Xv9ItT>Wm>+d!&fK=yCbHD4x8!(FH4-*g6UT(tH!-ue|=rkq| zPeWK}FmetbMFlg7Al@V**o3;vW-?P$A}}y01epnOhzbpdh0b_lS{f3gBG72H7FUFpP4j`ze#dooC9svkHA+KrRs`L4IS7HFJgy#hv5F(2J2v z48tX7OJF7_tG8~$!kJSrxPJmRA3cG!`}bpNdMYLm{M7{bcvUU>1sU-0wCPBVi9~rr zGb)&FjA76)nKU%9zWraDwxWRTgonZWeNaMw9HH#cGy`mf2UrOxykf5esIeNr;C8z!~^Bm;;bQV-lP9urvWIapSTm3ez{iFF%2eNl3#3Crg%Krq4lc2^$O zpDE@_>M=mC;juZhF(@(;R{Dm9rpu@-FGp10XyoP}!0ZVV(1$6@zKVZFFckWe9cXH7!jrenL5R_T%DOuI`Nu72p+8(Ydj>}I?}K_S z%m*8`k}(%CEUq6WXAH&Pw(mr(fFn+u6-itEuHFDBHY_zY`XvF#Ef5XSG0@GJ&1j=@ zhIig3h5#)UfM{0RPMpTK`+tMoYGKGt!<3A4^b0Y-M3dNkvKU|N*+ZWZf<;rOAw4!) z)uH#DI)$%y9Kg7tNf=3BcJKZT_spG%aLS19cju#|vKotSo(3b$=d<-2kv)>4FeOm{IB=(KPLpM!DLRbjd>%fPI0wnZ} zLiUgpG%!DU=j-n=By|Wz4o*N+h!F`feQ>V23ZMVH6*py%#l^Y?96M2h2Y+`f`bS6L zP{~=P(8atiTbr?Ce*sbkB_lo}60s2xD5|W%XB&RSl(8ci4a1O`n80?xC%TOWfoJ0Wzy-IPps3jDlxKjQlI!(6In5rId~RiL!79wofj zBXj3)R90-I9~_W47`u+2z}^eY37xB{qN;WKR@fLkdKDng@_`{T8bK4L!^Xn9g$hr{ zh(_y1YIrC{#3gZf4z7F|&YLfj)}Wtp;Eqw5m^CbeH5>yr9Xf)a6a};y4lvqYQ z`l~|vqLNEZY;9!Nw;?{r2m|FreTxl=v{>aP8#&f^=Jdp%82)w0Pf-H9TY$so@PoG>VaQLMN-$*M3&uh+M) zC`t)6V>ldqbmQO(yG590u@fi`hLf_9S*q?MQiDH3?N*GXW(lV9E+{QSjS9fda+#ia zn>^08bA>e#EJ_GE1)jW$ZtWZ7|9QK&tjaVD!nU&{DXEN4W}M&J0S< z%j0`@|R;p$z zFO+1(SvhdtOyzOBagfZO?Ih!pYJo!lDKBMsKMEU_y7$&?fY_08(!wC0WmZ`=DSN~X zfG#=~HY4S&lnrJ5RaW4lkUPP2qS2ufQShTUM2W5b@wvv?v0>jAaYwHm}$;rv>qL{B6Fv=l_A-RRwJF9c5 ziIEHo2?L|YOus?qvPMtWZ)VTDQHF`8g3?Bx*(t^BQyHG<#?Nyg+ zH;ro!(AY6!@cY|-kK@OSuwlb5EH3IXpZQk;L++_lXRvwGM$DNr7x4q)QBJk|{deEt z5?3^YFDooyB0F=|EY#IrL^UgaIXOAlv2!Ou(PQL@5tu$>h5~;#k8Rt&T^*k^bqemj zXCa~^!cjya8B3|~!3Q6pw5$w^|9LScPnd|hx{F{D41Bc?Uw-vBwJ3bYK>h4h6AOev z)2B_tLk~Z!Sg~r=D)7x%#K*^D^XAP+V3{=~WiZB#8;7-P*JAqg>G<%&4{_wk5sV-J ze|&B^!dTaS=bd+9lBXV&2wS#n0V|n!;)y5Fw@)7w6ciwsY<%st*AN#Mhvm=x5geCF zP2PU{Z7f=}7;D$8C2Ng%>Zzw7jNZO|8+Pv8g-H`9;-eKS5Y8w#h^))c&sX>G+ zQY>4x3==tlX36*o2H#m$?WCV2OO{|NtB{SX=?JR?^w(d19T`kmpMCaO^dWGZ7*?)a zi5kB7ag>#VxpU`Y!GZ-UvdOV`-+fmxMpz{M{qVyNIC=7<4+dFSa;@xM$<>oV9X%)% zc0BpylZfCdi4T$$f8&ie)CA_un}-J;cz`~nRk23Ed-c^8GDUUUL?+9yMx|G9@`D zRr_8>Z@dzRizYX3xfLx8JTF--J;F%69D7F}(l&`|7hW zL4X$E3&d9(IB-CX!_6Sc*?wI2Bfk9dOErO+GiRzOGkNl4TxQhz#~22N2OoS;`6Su)PyoL7-g{~xq}??7MFCu* z<_9$CUumWtZN0)Ed0C)?GP*K_<;$02B(rR>`Bz?fMfn8Tgk3MZ@PZ2Y;!94PIH3UA zxN)QUEX+wrNPvaFUS#BviEP=l8B-Xk?!EV3rJ2@zzlKgW9DJ!=MJr*Dj-mdpyY5nE zCHEJ9CkrFKM*_q%&pgB6kfKa><>xE0Ztc2j15i>@Qb0OLR!w|^u;JyGUuJker3NHa zznvy?=bd+|Nr^)ipw_Khr#=gSV`vt_$lvHQPMEe6Rz5w#&tc3+KP?^kz4I9*i+?&Q^EQxhzi9B*#z_T%rQi9mE`RY?vU;LDSERjgq z;ch2R`st^iMs9AdGAVwo2_Jv_u>x!kqnXHr6J*u>_usGlmzdx+F)=ql9Yrwjn>sw+ zclI@)j{5O+-20g4?-HrRe~EdCGZ!Cq=FAy&%fW*OD{~aa@+(}}v15k{5Z4SKe^E?s z><_@60Mil6MDI8s9<+bwN7{FG&Ksy6IcZ^#H$eWt@CR6LfYl)#{GCwG)!H}e5kOS1 zex0=E?K%Zd9)h-eV%oV63S=St;StFBe+WSSCeszx_+wxollIxhBUSP|-(7%oNJDsH zbK;+9V)CUrRjKJ52xl$GU%Re?)onlmxR7J9Q#QQDbmuiT@6y+y)EDZgRPUuC{SSWT zGaCO}rvR!Vn&(Riots$OSs#AG|40IB!SOaxZ7-vK5}_p7a=_mgQ}rx@GblDTb_K)g zw2p4+&%C)eU4^qFKV^7U(Cg9O+M;U}Pk+-9wC|c8^qX)c8Q_G~O z1@l+{=H|SEKk)pW@7eS_yqcMlqnY3wCpiB?21yM>iq&2EQm^zbW+s5}TPKKPQaYWg zb_hWV$9xTqse-`Xx4+iYc=2Q^y_@~bY=J3$N$%f`kh#BHMkCtA0)2> fbRD3c8QcE=3DE@`J2XD~00000NkvXXu0mjf=Dz0B literal 0 HcmV?d00001 diff --git a/src/en/cloudrecess/res/mipmap-mdpi/ic_launcher.png b/src/en/cloudrecess/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a18641d7bbdbe2386b0d2d0af53754eb5f0da7 GIT binary patch literal 3179 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
VBwV8U0x>QwOc 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 { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/manga/$id")) + .asObservableSuccess() + .map(::searchMangaByIdParse) + } else { + super.fetchSearchManga(page, query, filters) + } + } + + private fun searchMangaByIdParse(response: Response): MangasPage { + val details = mangaDetailsParse(response.use { it.asJsoup() }) + return MangasPage(listOf(details), false) + } + + override fun getFilterList() = CloudRecessFilters.FILTER_LIST + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/manga?title=$query&page=$page".toHttpUrl().newBuilder().apply { + val params = CloudRecessFilters.getSearchParameters(filters) + if (params.type.isNotEmpty()) addQueryParameter("type", params.type) + if (params.status.isNotEmpty()) addQueryParameter("status", params.status) + params.genres.forEach { addQueryParameter("genre[]", it) } + }.build() + return GET(url, headers) + } + + override fun searchMangaSelector() = "main div#card-real > a" + + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector() + + // =========================== Manga Details ============================ + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + // Absolutely required element, so throwing a NPE when it's not present + // seems reasonable. + with(document.selectFirst("main > section > div")!!) { + thumbnail_url = selectFirst("div.relative img")?.absUrl("src") + title = selectFirst("div.flex > h2")?.ownText() ?: "No name" + genre = select("div.flex > a.inline-block").eachText().joinToString() + description = selectFirst("div.comicInfoExtend__synopsis")?.text() + } + + document.selectFirst("div#buttons + div.hidden")?.run { + status = when (getInfo("Status").orEmpty()) { + "Cancelled" -> SManga.CANCELLED + "Completed" -> SManga.COMPLETED + "Hiatus" -> SManga.ON_HIATUS + "Ongoing" -> SManga.ONGOING + else -> SManga.UNKNOWN + } + + artist = getInfo("Artist") + author = getInfo("Author") + } + } + + private fun Element.getInfo(text: String): String? = + selectFirst("p:has(span:containsOwn($text)) span.capitalize") + ?.ownText() + ?.trim() + + // ============================== Chapters ============================== + override fun chapterListSelector() = "div#chapters-list > a[href]" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + setUrlWithoutDomain(element.attr("href")) + name = element.selectFirst("span")?.ownText() ?: "Chapter" + } + + // =============================== Pages ================================ + override fun pageListParse(document: Document): List { + return document.select("div#chapter-container > img").map { element -> + val id = element.attr("data-id").toIntOrNull() ?: 0 + val url = element.run { + absUrl("data-src").ifEmpty { absUrl("src") } + } + Page(id, "", url) + } + } + + override fun imageUrlParse(document: Document): String { + throw UnsupportedOperationException("Not used.") + } + + companion object { + const val PREFIX_SEARCH = "id:" + } +} diff --git a/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessFilters.kt b/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessFilters.kt new file mode 100644 index 000000000..d0c78dcbf --- /dev/null +++ b/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessFilters.kt @@ -0,0 +1,163 @@ +package eu.kanade.tachiyomi.extension.en.cloudrecess + +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList + +object CloudRecessFilters { + open class QueryPartFilter( + displayName: String, + val vals: Array>, + ) : Filter.Select( + displayName, + vals.map { it.first }.toTypedArray(), + ) { + fun toQueryPart() = vals[state].second + } + + private inline fun FilterList.asQueryPart(): String { + return (first { it is R } as QueryPartFilter).toQueryPart() + } + + open class CheckBoxFilterList(name: String, val items: List) : + Filter.Group(name, items.map(::CheckBoxVal)) + + private class CheckBoxVal(name: String) : Filter.CheckBox(name, false) + + private inline fun FilterList.checkedItems(): List { + return (first { it is R } as CheckBoxFilterList).state + .filter { it.state } + .map { it.name } + } + + internal class TypeFilter : QueryPartFilter("Type", FiltersData.TYPE_LIST) + internal class StatusFilter : QueryPartFilter("Status", FiltersData.STATUS_LIST) + + internal class GenresFilter : CheckBoxFilterList("Genres", FiltersData.GENRES_LIST) + + val FILTER_LIST get() = FilterList( + TypeFilter(), + StatusFilter(), + GenresFilter(), + ) + + data class FilterSearchParams( + val type: String = "", + val status: String = "", + val genres: List = emptyList(), + ) + + internal fun getSearchParameters(filters: FilterList): FilterSearchParams { + if (filters.isEmpty()) return FilterSearchParams() + + return FilterSearchParams( + filters.asQueryPart(), + filters.asQueryPart(), + filters.checkedItems(), + ) + } + + private object FiltersData { + val TYPE_LIST = arrayOf( + Pair("All Types", ""), + Pair("Manga", "manga"), + Pair("Manhwa", "manhwa"), + Pair("OEL/Original", "oel"), + Pair("One Shot", "one-shot"), + Pair("Webtoon", "webtoon"), + ) + + val STATUS_LIST = arrayOf( + Pair("All Status", ""), + Pair("Cancelled", "cancelled"), + Pair("Completed", "completed"), + Pair("Hiatus", "hiatus"), + Pair("Ongoing", "ongoing"), + Pair("Pending", "pending"), + ) + + val GENRES_LIST = listOf( + "3P Relationship/s", + "Action", + "Adventure", + "Age Gap", + "Amnesia/Memory Loss", + "Art/s or Creative/s", + "BL", + "Bloody", + "Boss/Employee", + "Childhood Friend/s", + "Comedy", + "Coming of Age", + "Contractual Relationship", + "Crime", + "Cross Dressing", + "Crush", + "Depraved", + "Drama", + "Enemies to Lovers", + "Family Life", + "Fantasy", + "Fetish", + "First Love", + "Food", + "Friends to Lovers", + "Fxckbuddy", + "GL", + "Games", + "Guideverse", + "Hardcore", + "Harem", + "Historical", + "Horror", + "Idols/Celeb/Showbiz", + "Infidelity", + "Intense", + "Isekai", + "Josei", + "Light Hearted", + "Living Together", + "Love Triangle", + "Love/Hate", + "Manipulative", + "Master/Servant", + "Mature", + "Military", + "Music", + "Mystery", + "Nameverse", + "Obsessive", + "Omegaverse", + "On Campus/College Life", + "One Sided Love", + "Part Timer", + "Photography", + "Psychological", + "Rebirth/Reincarnation", + "Red Light", + "Retro", + "Revenge", + "Rich Kids", + "Romance", + "Royalty/Nobility/Gentry", + "SM/BDSM/SUB-DOM", + "School Life", + "Sci-Fi", + "Self-Discovery", + "Shounen Ai", + "Slice of Life", + "Smut", + "Sports", + "Step Family", + "Supernatural", + "Teacher/Student", + "Thriller", + "Tragedy", + "Tsundere", + "Uncensored", + "Violence", + "Voyeur", + "Work Place/Office Workers", + "Yakuza/Gangsters", + ) + } +} diff --git a/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessUrlActivity.kt b/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessUrlActivity.kt new file mode 100644 index 000000000..ea9194f49 --- /dev/null +++ b/src/en/cloudrecess/src/eu/kanade/tachiyomi/extension/en/cloudrecess/CloudRecessUrlActivity.kt @@ -0,0 +1,41 @@ +package eu.kanade.tachiyomi.extension.en.cloudrecess + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +/** + * Springboard that accepts https://cloudrecess.io/manga/ intents + * and redirects them to the main Tachiyomi process. + */ +class CloudRecessUrlActivity : Activity() { + + private val tag = javaClass.simpleName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val item = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${CloudRecess.PREFIX_SEARCH}$item") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(tag, e.toString()) + } + } else { + Log.e(tag, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}