From 4050e42337d7c5a27a898fa61a451f8e33c9366c Mon Sep 17 00:00:00 2001 From: Chopper <156493704+choppeh@users.noreply.github.com> Date: Tue, 8 Jul 2025 14:28:27 -0300 Subject: [PATCH] Add new multi-src: zerotheme (#9544) --- lib-multisrc/zerotheme/build.gradle.kts | 5 + .../tachiyomi/multisrc/zerotheme/ZeroTheme.kt | 83 +++++++++++ .../multisrc/zerotheme/ZeroThemeDto.kt | 139 ++++++++++++++++++ src/pt/egotoons/build.gradle | 4 +- .../extension/pt/egotoons/EgoToons.kt | 10 +- src/pt/lertoons/build.gradle | 10 ++ .../lertoons/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2808 bytes .../lertoons/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1626 bytes .../lertoons/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3599 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6240 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8550 bytes .../extension/pt/lertoons/LerToons.kt | 16 ++ 12 files changed, 260 insertions(+), 7 deletions(-) create mode 100644 lib-multisrc/zerotheme/build.gradle.kts create mode 100644 lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroTheme.kt create mode 100644 lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroThemeDto.kt create mode 100644 src/pt/lertoons/build.gradle create mode 100644 src/pt/lertoons/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/lertoons/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/lertoons/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/lertoons/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/lertoons/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/lertoons/src/eu/kanade/tachiyomi/extension/pt/lertoons/LerToons.kt diff --git a/lib-multisrc/zerotheme/build.gradle.kts b/lib-multisrc/zerotheme/build.gradle.kts new file mode 100644 index 000000000..dc076cc37 --- /dev/null +++ b/lib-multisrc/zerotheme/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 diff --git a/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroTheme.kt b/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroTheme.kt new file mode 100644 index 000000000..12c160572 --- /dev/null +++ b/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroTheme.kt @@ -0,0 +1,83 @@ +package eu.kanade.tachiyomi.multisrc.zerotheme + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimit +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.online.HttpSource +import eu.kanade.tachiyomi.util.asJsoup +import keiyoushi.utils.parseAs +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response + +abstract class ZeroTheme( + override val name: String, + override val baseUrl: String, + override val lang: String, +) : HttpSource() { + + override val supportsLatest: Boolean = true + + override val client = network.cloudflareClient.newBuilder() + .rateLimit(2) + .build() + + open val cdnUrl: String = "https://cdn.${baseUrl.substringAfterLast("/")}" + + open val imageLocation: String = "images" + + private val sourceLocation: String get() = "$cdnUrl/$imageLocation" + + // =========================== Popular ================================ + + override fun popularMangaRequest(page: Int) = searchMangaRequest(page, "", FilterList()) + + override fun popularMangaParse(response: Response) = searchMangaParse(response) + + // =========================== Latest =================================== + + override fun latestUpdatesRequest(page: Int) = GET(baseUrl, headers) + + override fun latestUpdatesParse(response: Response): MangasPage = + MangasPage(response.toDto().toSMangaList(sourceLocation), hasNextPage = false) + + // =========================== Search ================================= + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/api/search".toHttpUrl().newBuilder() + .addQueryParameter("q", query) + .addQueryParameter("page", page.toString()) + .build() + return GET(url, headers) + } + + override fun searchMangaParse(response: Response): MangasPage { + val dto = response.parseAs() + val mangas = dto.mangas.map { it.toSManga(sourceLocation) } + return MangasPage(mangas, hasNextPage = dto.hasNextPage()) + } + + // =========================== Details ================================= + + override fun mangaDetailsParse(response: Response) = response.toDto().toSManga(sourceLocation) + + // =========================== Chapter ================================= + + override fun chapterListParse(response: Response) = response.toDto().toSChapterList() + + // =========================== Pages =================================== + + override fun pageListParse(response: Response): List = + response.toDto().toPageList(sourceLocation) + + override fun imageUrlParse(response: Response) = "" + + // =========================== Utilities =============================== + + inline fun Response.toDto(): T { + val jsonString = asJsoup().selectFirst("[data-page]")!!.attr("data-page") + return jsonString.parseAs() + } +} diff --git a/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroThemeDto.kt b/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroThemeDto.kt new file mode 100644 index 000000000..f3eaa893a --- /dev/null +++ b/lib-multisrc/zerotheme/src/eu/kanade/tachiyomi/multisrc/zerotheme/ZeroThemeDto.kt @@ -0,0 +1,139 @@ +package eu.kanade.tachiyomi.multisrc.zerotheme + +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import keiyoushi.utils.tryParse +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames +import org.jsoup.Jsoup +import java.text.SimpleDateFormat +import java.util.Locale + +@Serializable +class Props( + @JsonNames("comic_infos", "chapter", "new_chapters") + val content: T, +) + +@Serializable +class LatestDto( + private val props: Props>, +) { + fun toSMangaList(srcPath: String) = props.content.map { it.comic.toSManga(srcPath) } + + @Serializable + class Comic( + val comic: MangaDto, + ) +} + +@Serializable +class MangaDetailsDto( + private val props: Props, +) { + fun toSManga(srcPath: String) = props.content.toSManga(srcPath) + fun toSChapterList() = props.content.chapters!!.map { it.toSChapter() } +} + +@Serializable +class PageDto( + val props: Props, +) { + fun toPageList(srcPath: String): List { + return props.content.chapter.pages + .filter { it.pathSegment.contains("xml").not() } + .mapIndexed { index, path -> + Page(index, imageUrl = "$srcPath/${path.pathSegment}") + } + } + + @Serializable + class ChapterWrapper( + val chapter: Chapter, + ) + + @Serializable + class Chapter( + val pages: List, + ) + + @Serializable + class Image( + @SerialName("page_path") + val pathSegment: String, + ) +} + +@Serializable +class SearchDto( + @SerialName("comics") + private val page: PageDto, +) { + + val mangas: List get() = page.data + + fun hasNextPage() = page.currentPage < page.lastPage + + @Serializable + class PageDto( + val `data`: List, + @SerialName("last_page") + val lastPage: Int = 0, + @SerialName("current_page") + val currentPage: Int = 0, + ) +} + +@Serializable +class MangaDto( + val title: String, + val description: String?, + @SerialName("cover") + val thumbnailUrl: String?, + val slug: String, + val status: List? = emptyList(), + val genres: List? = emptyList(), + val chapters: List? = emptyList(), +) { + + fun toSManga(srcPath: String) = SManga.create().apply { + title = this@MangaDto.title + description = this@MangaDto.description?.let { Jsoup.parseBodyFragment(it).text() } + this.thumbnail_url = thumbnailUrl?.let { "$srcPath/$it" } + + status = when (this@MangaDto.status?.firstOrNull()?.name?.lowercase()) { + "em andamento" -> SManga.ONGOING + else -> SManga.UNKNOWN + } + genre = genres?.joinToString { it.name } + url = "/comic/$slug" + } + + @Serializable + class ValueDto( + val name: String, + ) +} + +@Serializable +class ChapterDto( + @SerialName("chapter_number") + val number: Float, + @SerialName("chapter_path") + val path: String, + @SerialName("created_at") + val createdAt: String, +) { + fun toSChapter() = SChapter.create().apply { + name = number.toString() + chapter_number = number + date_upload = dateFormat.tryParse(createdAt) + url = "/chapter/$path" + } + + companion object { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT) + } +} diff --git a/src/pt/egotoons/build.gradle b/src/pt/egotoons/build.gradle index 0e78513da..c28e8e1fd 100644 --- a/src/pt/egotoons/build.gradle +++ b/src/pt/egotoons/build.gradle @@ -1,9 +1,9 @@ ext { extName = 'Ego Toons' extClass = '.EgoToons' - themePkg = 'yuyu' + themePkg = 'zerotheme' baseUrl = 'https://egotoons.com' - overrideVersionCode = 1 + overrideVersionCode = 2 isNsfw = true } diff --git a/src/pt/egotoons/src/eu/kanade/tachiyomi/extension/pt/egotoons/EgoToons.kt b/src/pt/egotoons/src/eu/kanade/tachiyomi/extension/pt/egotoons/EgoToons.kt index 859425ebf..ce38c2398 100644 --- a/src/pt/egotoons/src/eu/kanade/tachiyomi/extension/pt/egotoons/EgoToons.kt +++ b/src/pt/egotoons/src/eu/kanade/tachiyomi/extension/pt/egotoons/EgoToons.kt @@ -1,18 +1,18 @@ package eu.kanade.tachiyomi.extension.pt.egotoons -import eu.kanade.tachiyomi.multisrc.yuyu.YuYu +import eu.kanade.tachiyomi.multisrc.zerotheme.ZeroTheme import eu.kanade.tachiyomi.network.interceptor.rateLimit -class EgoToons : YuYu( +class EgoToons : ZeroTheme( "Ego Toons", "https://egotoons.com", "pt-BR", ) { - - override fun headersBuilder() = super.headersBuilder() - .set("Accept-Encoding", "") + override val versionId = 2 override val client = super.client.newBuilder() .rateLimit(2) .build() + + override val imageLocation = "image-db" } diff --git a/src/pt/lertoons/build.gradle b/src/pt/lertoons/build.gradle new file mode 100644 index 000000000..17a9d9f8d --- /dev/null +++ b/src/pt/lertoons/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'Ler Toons' + extClass = '.LerToons' + themePkg = 'zerotheme' + baseUrl = 'https://lertoons.com' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/lertoons/res/mipmap-hdpi/ic_launcher.png b/src/pt/lertoons/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd0ddd91ed85e1774e2c0540502bf07d5b38ce3 GIT binary patch literal 2808 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 KMNUMnLSTY)m zqQ1F+PdC3eYnv?DwtG4Pv;y?RV@Y3C_#Q%hAKb&MG>#v2kZf8%tEx=2Fhm6`>E-o&= z9~~W);f=5yuH2uzP!Bjkh8ow0I2~Mo(pSPSy>%_{P^)({GL?!>aeFo$YL;2T_nj7vc+sQ@E@ZP!o% zDezhd$q{gMb%o&IU|3pOf)5`)=n{m~c+CWiRe^^X0k5sCg}l5xz$^nZGc%BokiZDY zk>w_UDO9I`l3N%XMUWFa-l078VAZo15k%pr(M5rRkZqwKX_9JHyGz ziOxOf|N8oRXliPL!^1;ZTwK(Vh>wqFN|>yGySuxp0#e{{(}B3SI7m-Vhp4D1W?@T9 zOF-%2{rmT@u&@AqeSI)7F#(vS+1T;%aUFq>kPxPToMDg{Ul0of#0sdn(z9pJpsubC zA|fJmfaE@`t*t>xNeNU|RzhN8A{%ygb_SUJ;M1qi`;?Rl+yva*++-Dyn!K>E5MIB2 z&8*Ga1c0O(wXv}=NJ~po%tD$8@F-ARTnw*Xy`nPqpVa`R;C7?p7SYyCqGpM zl9Q96tEUpLA6)6>(Cl$69QPn+QA=qSX-#=^?Vie$;EnShk_1F)=VWILOXSqyh!Alsjo6;OOY6n1yIEav@YoGYL8uQ3jiu znu6%)Xc!q80dh$!+Sz>3|1q|&CThZT6cGMAt)#a@G3_yfF(`VW{ zmY0`-ig}^6w6rkrRGo1)J_XRf6%}Y`XkdXzrDH`!1yom8Gv5{(?WVNLlHUvD`}_Nu z%Tc2vL{(K4w70kOT3(piI09k?2q1uSQ_ zk>kdvfS7>Vh9+J~3lSr%&mRL=q$?_5xVRE<8f&7}HOGJl64=1E+>{npDmR4{%?O;P z{1=)tzQrBs8KWI-bgq36YX z?6i^S+=r%>14iEyaJq6MLib640MlWKi0E8Lun8|P-f_m;TKdg9fDMP;7cjFCeeeYS Y1N;CneArN>6951J07*qoM6N<$g2$r|@Bjb+ literal 0 HcmV?d00001 diff --git a/src/pt/lertoons/res/mipmap-xhdpi/ic_launcher.png b/src/pt/lertoons/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2391dab561c805eb54ddea557f5158e6c8d4508d GIT binary patch literal 3599 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 Vj|S$zV?_V}002ovPDHLkV1j|zoJ{}# literal 0 HcmV?d00001 diff --git a/src/pt/lertoons/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/lertoons/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3934f99901ae4e5ff754d3554ddf657658d6f4 GIT binary patch literal 6240 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 KMNUMnLSTY5!Tu2d literal 0 HcmV?d00001 diff --git a/src/pt/lertoons/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/lertoons/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e874f9f19901c98624b66303cc019cde28b12a1f GIT binary patch literal 8550 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 CQFM<0 literal 0 HcmV?d00001 diff --git a/src/pt/lertoons/src/eu/kanade/tachiyomi/extension/pt/lertoons/LerToons.kt b/src/pt/lertoons/src/eu/kanade/tachiyomi/extension/pt/lertoons/LerToons.kt new file mode 100644 index 000000000..da6c72424 --- /dev/null +++ b/src/pt/lertoons/src/eu/kanade/tachiyomi/extension/pt/lertoons/LerToons.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.pt.lertoons + +import eu.kanade.tachiyomi.multisrc.zerotheme.ZeroTheme +import eu.kanade.tachiyomi.network.interceptor.rateLimit + +class LerToons : ZeroTheme( + "Ler Toons", + "https://lertoons.com", + "pt-BR", +) { + override val versionId = 3 + + override val client = network.cloudflareClient.newBuilder() + .rateLimit(2) + .build() +}