From 34b4284d7cb928fc09c25fad237c9794a7afc60f Mon Sep 17 00:00:00 2001 From: Chopper <156493704+choppeh@users.noreply.github.com> Date: Sat, 15 Mar 2025 03:29:01 -0300 Subject: [PATCH] Add YuYu multsrc (#8080) --- .../yuyu}/AndroidManifest.xml | 9 +- lib-multisrc/yuyu/build.gradle.kts | 5 + .../eu/kanade/tachiyomi/multisrc/yuyu/YuYu.kt | 206 +++++++++++ .../multisrc/yuyu/YuYuUrlActivity.kt | 6 +- src/pt/egotoons/build.gradle | 10 + .../egotoons/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5527 bytes .../egotoons/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2722 bytes .../egotoons/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8403 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17055 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 26346 bytes .../extension/pt/egotoons/EgoToons.kt | 15 + src/pt/galinhasamuraiscan/build.gradle | 4 +- .../galinhasamuraiscan/GalinhaSamuraiScan.kt | 16 +- src/pt/nekotoons/build.gradle | 10 + .../nekotoons/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3373 bytes .../nekotoons/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1938 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4530 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8121 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11467 bytes .../extension/pt/nekotoons/NekoToons.kt | 15 + src/pt/plumacomics/build.gradle | 6 +- .../extension/pt/plumacomics/PlumaComics.kt | 19 +- src/pt/spectralscan/build.gradle | 4 +- .../extension/pt/spectralscan/SpectralScan.kt | 17 +- src/pt/yushukemangas/build.gradle | 5 +- .../pt/yushukemangas/YushukeMangas.kt | 324 +----------------- 26 files changed, 314 insertions(+), 357 deletions(-) rename {src/pt/yushukemangas => lib-multisrc/yuyu}/AndroidManifest.xml (73%) create mode 100644 lib-multisrc/yuyu/build.gradle.kts create mode 100644 lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYu.kt rename src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangasUrlActivity.kt => lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYuUrlActivity.kt (83%) create mode 100644 src/pt/egotoons/build.gradle create mode 100644 src/pt/egotoons/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/egotoons/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/egotoons/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/egotoons/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/egotoons/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/egotoons/src/eu/kanade/tachiyomi/extension/pt/egotoons/EgoToons.kt create mode 100644 src/pt/nekotoons/build.gradle create mode 100644 src/pt/nekotoons/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/nekotoons/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/nekotoons/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/nekotoons/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/nekotoons/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/nekotoons/src/eu/kanade/tachiyomi/extension/pt/nekotoons/NekoToons.kt diff --git a/src/pt/yushukemangas/AndroidManifest.xml b/lib-multisrc/yuyu/AndroidManifest.xml similarity index 73% rename from src/pt/yushukemangas/AndroidManifest.xml rename to lib-multisrc/yuyu/AndroidManifest.xml index eee4b4423..fd06f4b58 100644 --- a/src/pt/yushukemangas/AndroidManifest.xml +++ b/lib-multisrc/yuyu/AndroidManifest.xml @@ -2,7 +2,7 @@ @@ -11,11 +11,10 @@ - + android:host="${SOURCEHOST}" + android:pathPattern="/..*" + android:scheme="${SOURCESCHEME}" /> diff --git a/lib-multisrc/yuyu/build.gradle.kts b/lib-multisrc/yuyu/build.gradle.kts new file mode 100644 index 000000000..dc076cc37 --- /dev/null +++ b/lib-multisrc/yuyu/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 diff --git a/lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYu.kt b/lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYu.kt new file mode 100644 index 000000000..1e4c24c49 --- /dev/null +++ b/lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYu.kt @@ -0,0 +1,206 @@ +package eu.kanade.tachiyomi.multisrc.yuyu + +import android.net.Uri +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +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 keiyoushi.utils.parseAs +import kotlinx.serialization.Serializable +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import java.net.URLEncoder + +abstract class YuYu( + override val name: String, + override val baseUrl: String, + override val lang: String, +) : ParsedHttpSource() { + + override val client = network.cloudflareClient + + override val supportsLatest = true + + // ============================== Popular =============================== + + override fun popularMangaRequest(page: Int) = GET(baseUrl, headers) + + override fun popularMangaSelector() = ".top10-section .top10-item a" + + override fun popularMangaFromElement(element: Element) = SManga.create().apply { + title = element.selectFirst("h3")!!.text() + thumbnail_url = element.selectFirst("img")?.absUrl("src") + setUrlWithoutDomain(element.absUrl("href")) + } + + override fun popularMangaNextPageSelector() = null + + // ============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request { + val url = baseUrl.toHttpUrl().newBuilder() + .addQueryParameter("pagina", page.toString()) + .build() + return GET(url, headers) + } + + override fun latestUpdatesSelector() = ".manga-list .manga-card" + + override fun latestUpdatesNextPageSelector() = "a.page-link:contains(>)" + + override fun latestUpdatesFromElement(element: Element) = SManga.create().apply { + val url = element.selectFirst("a.manga-cover")!!.absUrl("href") + val uri = Uri.parse(url) + val pathSegments = uri.pathSegments + val lastSegment = URLEncoder.encode(pathSegments.last(), "UTF-8") + val encodedUrl = uri.buildUpon() + .path(pathSegments.dropLast(1).joinToString("/") + "/$lastSegment") + .toString() + + title = element.selectFirst("a.manga-title")!!.text() + thumbnail_url = element.selectFirst("a.manga-cover img")?.absUrl("data-src") + setUrlWithoutDomain(encodedUrl) + } + + override fun latestUpdatesParse(response: Response): MangasPage { + val document = response.asJsoup() + val mangas = document.select(latestUpdatesSelector()).map(::latestUpdatesFromElement) + return MangasPage(mangas, document.hasNextPage()) + } + + private fun Document.hasNextPage() = + selectFirst(latestUpdatesNextPageSelector())?.absUrl("href")?.let { + selectFirst("a.page-link.active") + ?.absUrl("href") + .equals(it, ignoreCase = true).not() + } ?: false + + // ============================== Search =============================== + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = baseUrl.toHttpUrl().newBuilder() + .addQueryParameter("search", query) + return GET(url.build(), headers) + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + if (query.startsWith(PREFIX_SEARCH)) { + val slug = query.substringAfter(PREFIX_SEARCH) + return client.newCall(GET("$baseUrl/manga/$slug", headers)) + .asObservableSuccess() + .map { + val manga = mangaDetailsParse(it.asJsoup()) + MangasPage(listOf(manga), false) + } + } + return super.fetchSearchManga(page, query, filters) + } + + override fun searchMangaSelector() = ".search-result-item" + + override fun searchMangaFromElement(element: Element) = SManga.create().apply { + title = element.selectFirst(".search-result-title")!!.text() + thumbnail_url = element.selectFirst("img")?.absUrl("src") + setUrlWithoutDomain( + element.attr("onclick").let { + SEARCH_URL_REGEX.find(it)?.groups?.get(1)?.value!! + }, + ) + } + + override fun searchMangaNextPageSelector() = null + + // ============================== Manga Details ========================= + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + val details = document.selectFirst(".manga-banner .container")!! + title = details.selectFirst("h1")!!.text() + thumbnail_url = details.selectFirst("img")?.absUrl("src") + genre = details.select(".genre-tag").joinToString { it.text() } + description = details.selectFirst(".sinopse p")?.text() + details.selectFirst(".manga-meta > div")?.ownText()?.let { + status = when (it.lowercase()) { + "em andamento" -> SManga.ONGOING + "completo" -> SManga.COMPLETED + "cancelado" -> SManga.CANCELLED + "hiato" -> SManga.ON_HIATUS + else -> SManga.UNKNOWN + } + } + setUrlWithoutDomain(document.location()) + } + + private fun SManga.fetchMangaId(): String { + val document = client.newCall(mangaDetailsRequest(this)).execute().asJsoup() + return document.select("script") + .map(Element::data) + .firstOrNull(MANGA_ID_REGEX::containsMatchIn) + ?.let { MANGA_ID_REGEX.find(it)?.groups?.get(1)?.value } + ?: throw Exception("Manga ID não encontrado") + } + + // ============================== Chapters =============================== + + override fun chapterListSelector() = "a.chapter-item" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + name = element.selectFirst(".capitulo-numero")!!.ownText() + setUrlWithoutDomain(element.absUrl("href")) + } + + override fun fetchChapterList(manga: SManga): Observable> { + val mangaId = manga.fetchMangaId() + val chapters = mutableListOf() + var page = 1 + do { + val dto = fetchChapterListPage(mangaId, page++).parseAs() + val document = Jsoup.parseBodyFragment(dto.chapters, baseUrl) + chapters += document.select(chapterListSelector()).map(::chapterFromElement) + } while (dto.hasNext()) + return Observable.just(chapters) + } + + private fun fetchChapterListPage(mangaId: String, page: Int): Response { + val url = "$baseUrl/ajax/lzmvke.php?order=DESC".toHttpUrl().newBuilder() + .addQueryParameter("manga_id", mangaId) + .addQueryParameter("page", page.toString()) + .build() + + return client + .newCall(GET(url, headers)) + .execute() + } + + // ============================== Pages =============================== + + override fun pageListParse(document: Document): List { + return document.select("picture img").mapIndexed { idx, element -> + Page(idx, imageUrl = element.absUrl("src")) + } + } + + override fun imageUrlParse(document: Document) = "" + + // ============================== Utilities =========================== + + @Serializable + class ChaptersDto(val chapters: String, private val remaining: Int) { + fun hasNext() = remaining > 0 + } + + companion object { + const val PREFIX_SEARCH = "id:" + val SEARCH_URL_REGEX = "'([^']+)".toRegex() + val MANGA_ID_REGEX = """obra_id:\s+(\d+)""".toRegex() + } +} diff --git a/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangasUrlActivity.kt b/lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYuUrlActivity.kt similarity index 83% rename from src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangasUrlActivity.kt rename to lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYuUrlActivity.kt index 20d6940cf..a9025a243 100644 --- a/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangasUrlActivity.kt +++ b/lib-multisrc/yuyu/src/eu/kanade/tachiyomi/multisrc/yuyu/YuYuUrlActivity.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.extension.pt.yushukemangas +package eu.kanade.tachiyomi.multisrc.yuyu import android.app.Activity import android.content.ActivityNotFoundException @@ -7,7 +7,7 @@ import android.os.Bundle import android.util.Log import kotlin.system.exitProcess -class YushukeMangasUrlActivity : Activity() { +class YuYuUrlActivity : Activity() { private val tag = javaClass.simpleName @@ -17,7 +17,7 @@ class YushukeMangasUrlActivity : Activity() { if (pathSegment != null && pathSegment.size > 1) { val mainIntent = Intent().apply { action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", "${YushukeMangas.PREFIX_SEARCH}${pathSegment[1]}") + putExtra("query", "${YuYu.PREFIX_SEARCH}${pathSegment[1]}") putExtra("filter", packageName) } diff --git a/src/pt/egotoons/build.gradle b/src/pt/egotoons/build.gradle new file mode 100644 index 000000000..003ce072e --- /dev/null +++ b/src/pt/egotoons/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'Ego Toons' + extClass = '.EgoToons' + themePkg = 'yuyu' + baseUrl = 'https://egotoons.com' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/egotoons/res/mipmap-hdpi/ic_launcher.png b/src/pt/egotoons/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7f9136bb7820f863c54376e15438d1710f884f5b GIT binary patch literal 5527 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 Ze*rVHSl>bVxA*`6002ovPDHLkV1mT#ql5qe literal 0 HcmV?d00001 diff --git a/src/pt/egotoons/res/mipmap-mdpi/ic_launcher.png b/src/pt/egotoons/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d2cc62f67999fb9e137cdd8a6d96375023234c GIT binary patch literal 2722 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

F;p&CmB*|D}9mX=oV_xG1fkpRHhKo`}Ws-YB{ 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 literal 0 HcmV?d00001 diff --git a/src/pt/egotoons/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/egotoons/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8693728bb62909daa153f0947702e6ace07cebec GIT binary patch literal 17055 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 D2BcU< literal 0 HcmV?d00001 diff --git a/src/pt/nekotoons/res/mipmap-mdpi/ic_launcher.png b/src/pt/nekotoons/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..11b9e0e69b78051be42b945e79cd68bb9d840a38 GIT binary patch literal 1938 zcmV;D2W|L?P)mX7{aZLrgl!%g(;{=Dq*>zyF#y zZg{~jw-;P~{12e98MMa$jWuDdv018NGFa-GjlNWc3keC)2L=YtH=E7lEEY?!_*6{| ztp$j`(tG6?&woej(YTwNTZxyKSLU;4&ps_KE;cC%-3LuqO03^wnn6oeW8LuhE|jq2*^KrPL?LLf&1i{s*6O`0?*tE#GsVEx2GttqJ3 zHvuvR1qI#zugu1g;P#Zm%sGfX|G*vqcQ)9J0Vq(BbWWsT;+TcEH*w7`}gjI#bPU1%NF72*0mQRTD67FLx%$gcj2!~d74V$ z2Ean7l>wz$Oq?_wQ>V`o2@*CtdHg6Ae=`>a*RBZtkx`ux9TSHhJ^LbcNeZr9&X;Lb zuQwp3e>~c^>queJD)7yle`DMBjjjWr#z6YY&FIx9+6q9tsi=5@)Wu(7-!D6`K64Lz zef^R4-PhQ*WrIwhu$B=RIwToBK6;rF=udU^Q=~2XR@02Q888}+nhfkcbQVFuAvOT0 zgKdCI`RCEOOLyd7Jcl_SPeuReSYd8?xd{&*l%PXYXLx#g*$6LotX`WY_=1`bus%K~ z76C{Z5KZaCnd{Jbda44bkIpriJ#z|zjll>o)}@oW$gQ@fbg_(0D^XPRPs0EN1O#X@ zkaM~KUS3UY0a#N@jiBwZqvDY?e01$RPT^_lnsw@YTXJRr?XixRjrVY447~xUrK| zon6b33kt4cM^>im04O)2mFK1`Me@jTb%NE~kJOS_C5s`k-7$nQU^F(9yNg2eN?YHM zu>!><_f$b}GvMp%D`P<1gtF$L?EE^R)P)zNU7ofWM}FOlxY$G?+p0OOTHmpp!#H^= z+cf}`476_B9@}>vvuaf4zY1e1H?dIqdICCi=z_?|msJ6%FpnI6mP zD{cl127`=&@o!JTOA)Qntw(P}u{uZ4oT_!pJINQ`n>-r5dqpF%eMg%o)O>;Zs;Vk+ zDmO=HiaC5vOaP=0hJ?1n%vtj=;MD|{h3m@z4h*<>;ZMw%@+Lx>w?MzX1L5uMW0#G} zN;3rq@>pN%E^@Bz^4^)d$B-Q5w`EEqFqr(p2VWFEO?bBbAMuwdS7WFI+*C}vJk zk)046915LIC-V6FX(V-y zLt&PLynFW+OphOf81@e^A~ZA%pL{qOM-T7UTACk#T7;lgS8dpdp1t}xExWa#v-9Mw z!W$Sguq%5XsBRblZ*OnSOx&k$43@9n%Cts@cAS@3joO(`3j1u<`|Jg1y}d>G7--tG zsg3tYSDpV&8eU7TE0yhSCyBL=!tTjGe#blGldP4f#FJOGaYKsXNh8N# z+6QwG64FBGcBJ)(Wu;iYYzZ>fE@O$Sl2dkJn)3j(!l|;KP8xeMGo3X8qWOh}CeyK77z2^Q zev??MKZTVb;$ffxrXqdx3H!5ywJ%tsRBe_Hs(mA)j~w1)LaZ5B)3MfApIS-NbWBIz z#mZQ#keUwx(GraMNpKI=2vB1JAbY3!nt<5kNM6Bs=efvgtjjn`>W!vZmjP`o&AJT0 YzbPXieCK%5xc~qF07*qoM6N<$f}PHkIsgCw literal 0 HcmV?d00001 diff --git a/src/pt/nekotoons/res/mipmap-xhdpi/ic_launcher.png b/src/pt/nekotoons/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..548e13c5d7bff0d6de90aff87482b0e6fbef4424 GIT binary patch literal 4530 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 Q6951J07*qoM6N<$f~?wt3IG5A literal 0 HcmV?d00001 diff --git a/src/pt/nekotoons/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/nekotoons/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e2860733fe519de86f73bcab89fe16836c3de7ec GIT binary patch literal 8121 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 Se~m|yGN7WMAzvYD9`rwK3atJB literal 0 HcmV?d00001 diff --git a/src/pt/nekotoons/src/eu/kanade/tachiyomi/extension/pt/nekotoons/NekoToons.kt b/src/pt/nekotoons/src/eu/kanade/tachiyomi/extension/pt/nekotoons/NekoToons.kt new file mode 100644 index 000000000..f6d64c58f --- /dev/null +++ b/src/pt/nekotoons/src/eu/kanade/tachiyomi/extension/pt/nekotoons/NekoToons.kt @@ -0,0 +1,15 @@ +package eu.kanade.tachiyomi.extension.pt.nekotoons + +import eu.kanade.tachiyomi.multisrc.yuyu.YuYu +import eu.kanade.tachiyomi.network.interceptor.rateLimit + +class NekoToons : YuYu( + "Neko Toons", + "https://nekotoons.site", + "pt-BR", +) { + + override val client = super.client.newBuilder() + .rateLimit(2) + .build() +} diff --git a/src/pt/plumacomics/build.gradle b/src/pt/plumacomics/build.gradle index 7777c6885..fb1cae056 100644 --- a/src/pt/plumacomics/build.gradle +++ b/src/pt/plumacomics/build.gradle @@ -1,9 +1,9 @@ ext { extName = 'Pluma Comics' extClass = '.PlumaComics' - themePkg = 'madara' - baseUrl = 'https://plumacomics.cloud' - overrideVersionCode = 0 + themePkg = 'yuyu' + baseUrl = 'https://new.plumacomics.cloud' + overrideVersionCode = 41 isNsfw = false } diff --git a/src/pt/plumacomics/src/eu/kanade/tachiyomi/extension/pt/plumacomics/PlumaComics.kt b/src/pt/plumacomics/src/eu/kanade/tachiyomi/extension/pt/plumacomics/PlumaComics.kt index 24cea3448..3d255bd48 100644 --- a/src/pt/plumacomics/src/eu/kanade/tachiyomi/extension/pt/plumacomics/PlumaComics.kt +++ b/src/pt/plumacomics/src/eu/kanade/tachiyomi/extension/pt/plumacomics/PlumaComics.kt @@ -1,18 +1,17 @@ package eu.kanade.tachiyomi.extension.pt.plumacomics -import eu.kanade.tachiyomi.multisrc.madara.Madara -import okhttp3.Response -import java.text.SimpleDateFormat -import java.util.Locale +import eu.kanade.tachiyomi.multisrc.yuyu.YuYu +import eu.kanade.tachiyomi.network.interceptor.rateLimit -class PlumaComics : Madara( +class PlumaComics : YuYu( "Pluma Comics", - "https://plumacomics.cloud", + "https://new.plumacomics.cloud", "pt-BR", - SimpleDateFormat("dd 'de' MMM 'de' yyyy", Locale("pt", "BR")), ) { - override val useNewChapterEndpoint = true + override val client = super.client.newBuilder() + .rateLimit(2) + .build() - override fun chapterListParse(response: Response) = - super.chapterListParse(response).reversed() + // Moved from Madara to YuYu + override val versionId = 3 } diff --git a/src/pt/spectralscan/build.gradle b/src/pt/spectralscan/build.gradle index 064146b8b..2b1f16de4 100644 --- a/src/pt/spectralscan/build.gradle +++ b/src/pt/spectralscan/build.gradle @@ -1,9 +1,9 @@ ext { extName = 'Spectral Scan' extClass = '.SpectralScan' - themePkg = 'madara' + themePkg = 'yuyu' baseUrl = 'https://spectralscan.xyz' - overrideVersionCode = 0 + overrideVersionCode = 41 isNsfw = false } diff --git a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt index 35a5b97e8..451487ba9 100644 --- a/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt +++ b/src/pt/spectralscan/src/eu/kanade/tachiyomi/extension/pt/spectralscan/SpectralScan.kt @@ -1,16 +1,17 @@ package eu.kanade.tachiyomi.extension.pt.spectralscan -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale +import eu.kanade.tachiyomi.multisrc.yuyu.YuYu +import eu.kanade.tachiyomi.network.interceptor.rateLimit -class SpectralScan : Madara( +class SpectralScan : YuYu( "Spectral Scan", "https://spectralscan.xyz", "pt-BR", - dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("pt", "BR")), ) { - override val useLoadMoreRequest = LoadMoreStrategy.Never - override val useNewChapterEndpoint = true - override val mangaDetailsSelectorStatus = "div.post-content_item:contains(Estado) > div.summary-content" + override val client = super.client.newBuilder() + .rateLimit(2) + .build() + + // Moved from Madara to YuYu + override val versionId = 2 } diff --git a/src/pt/yushukemangas/build.gradle b/src/pt/yushukemangas/build.gradle index 45e2d8769..415561c46 100644 --- a/src/pt/yushukemangas/build.gradle +++ b/src/pt/yushukemangas/build.gradle @@ -1,7 +1,10 @@ ext { extName = 'Yushuke Mangas' extClass = '.YushukeMangas' - extVersionCode = 6 + themePkg = 'yuyu' + baseUrl = 'https://new.yushukemangas.com' + overrideVersionCode = 6 + isNsfw = false } apply from: "$rootDir/common.gradle" diff --git a/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangas.kt b/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangas.kt index 46bc13cd1..f1582e5ef 100644 --- a/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangas.kt +++ b/src/pt/yushukemangas/src/eu/kanade/tachiyomi/extension/pt/yushukemangas/YushukeMangas.kt @@ -1,325 +1,17 @@ package eu.kanade.tachiyomi.extension.pt.yushukemangas -import android.net.Uri -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.multisrc.yuyu.YuYu 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.MangasPage -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.Serializable -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.decodeFromStream -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.Request -import okhttp3.Response -import org.jsoup.Jsoup -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import uy.kohesive.injekt.injectLazy -import java.net.URLEncoder -class YushukeMangas : ParsedHttpSource() { +class YushukeMangas : YuYu( + "Yushuke Mangas", + "https://new.yushukemangas.com", + "pt-BR", +) { - override val name = "Yushuke Mangas" - - override val baseUrl = "https://new.yushukemangas.com" - - override val lang = "pt-BR" - - override val supportsLatest = true - - private var nextHash: String? = null - - override val versionId = 2 - - override val client = network.cloudflareClient.newBuilder() + override val client = super.client.newBuilder() .rateLimit(1, 2) .build() - private val json: Json by injectLazy() - - // ============================== Popular =============================== - - override fun popularMangaRequest(page: Int) = GET(baseUrl, headers) - - override fun popularMangaSelector() = ".top10-section .top10-item a" - - override fun popularMangaFromElement(element: Element) = SManga.create().apply { - title = element.selectFirst("h3")!!.text() - thumbnail_url = element.selectFirst("img")?.absUrl("src") - setUrlWithoutDomain(element.absUrl("href")) - } - - override fun popularMangaNextPageSelector() = null - - // ============================== Latest =============================== - - override fun latestUpdatesRequest(page: Int): Request { - val url = baseUrl.toHttpUrl().newBuilder() - .addQueryParameter("pagina", page.toString()) - .build() - return GET(url, headers) - } - - override fun latestUpdatesSelector() = ".manga-list .manga-card" - - override fun latestUpdatesNextPageSelector() = "a.page-link:contains(>)" - - override fun latestUpdatesFromElement(element: Element) = SManga.create().apply { - val url = element.selectFirst("a.manga-cover")!!.absUrl("href") - val uri = Uri.parse(url) - val pathSegments = uri.pathSegments - val lastSegment = URLEncoder.encode(pathSegments.last(), "UTF-8") - val encodedUrl = uri.buildUpon() - .path(pathSegments.dropLast(1).joinToString("/") + "/$lastSegment") - .toString() - - title = element.selectFirst("a.manga-title")!!.text() - thumbnail_url = element.selectFirst("a.manga-cover img")?.absUrl("data-src") - setUrlWithoutDomain(encodedUrl) - } - - override fun latestUpdatesParse(response: Response): MangasPage { - val document = response.asJsoup() - val mangas = document.select(latestUpdatesSelector()).map { element -> - latestUpdatesFromElement(element) - } - val nextUrl = document.selectFirst(latestUpdatesNextPageSelector())?.attr("href") - val baseNextUrl = baseUrl + nextUrl - nextHash = baseNextUrl?.toHttpUrlOrNull()?.queryParameter("pagina") - - return MangasPage(mangas, !nextHash.isNullOrEmpty()) - } - - // ============================== Search =============================== - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val urlFilterBuilder = filters.fold(baseUrl.toHttpUrl().newBuilder()) { urlBuilder, filter -> - when (filter) { - is RadioFilter -> { - val selected = filter.selected() - if (selected == all) return@fold urlBuilder - urlBuilder.addQueryParameter(filter.query, selected) - } - is GenreFilter -> { - filter.state - .filter(GenreCheckBox::state) - .fold(urlBuilder) { builder, genre -> - builder.addQueryParameter(filter.query, genre.id) - } - } - else -> urlBuilder - } - } - - val url = when { - query.isBlank() -> urlFilterBuilder - else -> baseUrl.toHttpUrl().newBuilder().addQueryParameter("search", query) - } - - return GET(url.build(), headers) - } - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - if (query.startsWith(PREFIX_SEARCH)) { - val slug = query.substringAfter(PREFIX_SEARCH) - return client.newCall(GET("$baseUrl/manga/$slug", headers)) - .asObservableSuccess() - .map { - val manga = mangaDetailsParse(it.asJsoup()) - MangasPage(listOf(manga), false) - } - } - return super.fetchSearchManga(page, query, filters) - } - - override fun searchMangaSelector() = ".search-result-item" - - override fun searchMangaParse(response: Response): MangasPage { - return if (response.request.url.queryParameter("search").isNullOrBlank()) { - latestUpdatesParse(response) - } else { - super.searchMangaParse(response) - } - } - - override fun searchMangaFromElement(element: Element) = SManga.create().apply { - title = element.selectFirst(".search-result-title")!!.text() - thumbnail_url = element.selectFirst("img")?.absUrl("src") - setUrlWithoutDomain( - element.attr("onclick").let { - SEARCH_URL_REGEX.find(it)?.groups?.get(1)?.value!! - }, - ) - } - - override fun searchMangaNextPageSelector() = null - - // ============================== Manga Details ========================= - - override fun mangaDetailsParse(document: Document) = SManga.create().apply { - val details = document.selectFirst(".manga-banner .container")!! - title = details.selectFirst("h1")!!.text() - thumbnail_url = details.selectFirst("img")?.absUrl("src") - genre = details.select(".genre-tag").joinToString { it.text() } - description = details.selectFirst(".sinopse p")?.text() - details.selectFirst(".manga-meta > div")?.ownText()?.let { - status = when (it.lowercase()) { - "em andamento" -> SManga.ONGOING - "completo" -> SManga.COMPLETED - "cancelado" -> SManga.CANCELLED - "hiato" -> SManga.ON_HIATUS - else -> SManga.UNKNOWN - } - } - setUrlWithoutDomain(document.location()) - } - - private fun SManga.fetchMangaId(): String { - val document = client.newCall(mangaDetailsRequest(this)).execute().asJsoup() - return document.select("script") - .map(Element::data) - .firstOrNull(MANGA_ID_REGEX::containsMatchIn) - ?.let { MANGA_ID_REGEX.find(it)?.groups?.get(1)?.value } - ?: throw Exception("Manga ID não encontrado") - } - - // ============================== Chapters =============================== - - override fun chapterListSelector() = "a.chapter-item" - - override fun chapterFromElement(element: Element) = SChapter.create().apply { - val capituloTexto = element.select(".capitulo-numero") - .textNodes() - .joinToString(" ") { it.text().trim() } - .split(" ") - .take(2) - .joinToString(" ") - - name = capituloTexto - setUrlWithoutDomain(element.absUrl("href")) - } - - override fun fetchChapterList(manga: SManga): Observable> { - val mangaId = manga.fetchMangaId() - val chapters = mutableListOf() - var page = 1 - do { - val dto = fetchChapterListPage(mangaId, page++).parseAs() - val document = Jsoup.parseBodyFragment(dto.chapters, baseUrl) - chapters += document.select(chapterListSelector()).map(::chapterFromElement) - } while (dto.hasNext()) - return Observable.just(chapters) - } - - private fun fetchChapterListPage(mangaId: String, page: Int): Response { - val url = "$baseUrl/ajax/lzmvke.php?order=DESC".toHttpUrl().newBuilder() - .addQueryParameter("manga_id", mangaId) - .addQueryParameter("page", page.toString()) - .build() - - return client - .newCall(GET(url, headers)) - .execute() - } - - // ============================== Pages =============================== - - override fun pageListParse(document: Document): List { - return document.select("div.select-nav + * picture") - .mapIndexedNotNull { index, pictureElement -> - val imgElement = pictureElement.selectFirst("img") - val imageUrl = imgElement?.attr("src")?.takeIf { it.isNotBlank() } ?: return@mapIndexedNotNull null - Page(index, imageUrl = "$baseUrl$imageUrl") - } - } - - override fun imageUrlParse(document: Document) = "" - - // ============================== Filters ============================= - - override fun getFilterList(): FilterList { - return FilterList( - RadioFilter("Status", "status", statusList), - RadioFilter("Tipo", "tipo", typeList), - GenreFilter("Gêneros", "tags[]", genresList), - ) - } - - class RadioFilter( - displayName: String, - val query: String, - private val vals: Array, - state: Int = 0, - ) : Filter.Select(displayName, vals, state) { - fun selected() = vals[state] - } - - protected class GenreFilter( - title: String, - val query: String, - genres: List, - ) : Filter.Group(title, genres.map { GenreCheckBox(it) }) - - class GenreCheckBox(name: String, val id: String = name) : Filter.CheckBox(name) - - private val all = "Todos" - - private val statusList = arrayOf( - all, - "Em andamento", - "Completo", - "Cancelado", - "Hiato", - ) - - private val typeList = arrayOf( - all, - "Mangá", - "Manhwa", - "Manhua", - "Comics", - ) - - private var genresList: List = listOf( - "Ação", "Artes Marciais", "Aventura", - "Comédia", - "Drama", - "Escolar", - "Esporte", - "Fantasia", - "Harém", "Histórico", - "Isekai", - "Josei", - "Mistério", - "Reencarnação", "Regressão", "Romance", - "Sci-fi", "Seinen", "Shoujo", "Shounen", "Slice of Life", "Sobrenatural", "Super Poderes", - "Terror", - "Vingança", - ) - - // ============================== Utilities =========================== - - private inline fun Response.parseAs(): T { - return json.decodeFromStream(body.byteStream()) - } - - @Serializable - class ChaptersDto(val chapters: String, private val remaining: Int) { - fun hasNext() = remaining > 0 - } - - companion object { - const val PREFIX_SEARCH = "id:" - val SEARCH_URL_REGEX = "'([^']+)".toRegex() - val MANGA_ID_REGEX = """obra_id:\s+(\d+)""".toRegex() - } + override val versionId = 2 }