From f9c1ba9dafe667901efc3c44bb1f9ccbc756007c Mon Sep 17 00:00:00 2001 From: bapeey <90949336+bapeey@users.noreply.github.com> Date: Fri, 27 Sep 2024 08:24:51 -0500 Subject: [PATCH] Move SenshiManga to multisrc and add Taikutsu (#5256) * lectormoe * lectorjpg * wrong branch This reverts commit b957d5d68827066b913704c5f6c73a5785f75d42. --- lib-multisrc/lectormoe/build.gradle.kts | 5 + .../tachiyomi/multisrc/lectormoe/LectorMoe.kt | 143 +++++++++++++++++ .../multisrc/lectormoe/LectorMoeDto.kt | 2 +- src/es/senshimanga/build.gradle | 4 +- .../extension/es/senshimanga/SenshiManga.kt | 148 +----------------- src/es/taikutsu/build.gradle | 10 ++ .../taikutsu/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4417 bytes .../taikutsu/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2582 bytes .../taikutsu/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6010 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10374 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13937 bytes .../extension/es/taikutsu/Taikutsu.kt | 9 ++ 12 files changed, 177 insertions(+), 144 deletions(-) create mode 100644 lib-multisrc/lectormoe/build.gradle.kts create mode 100644 lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoe.kt rename src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt => lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoeDto.kt (97%) create mode 100644 src/es/taikutsu/build.gradle create mode 100644 src/es/taikutsu/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/taikutsu/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/taikutsu/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/taikutsu/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/taikutsu/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/taikutsu/src/eu/kanade/tachiyomi/extension/es/taikutsu/Taikutsu.kt diff --git a/lib-multisrc/lectormoe/build.gradle.kts b/lib-multisrc/lectormoe/build.gradle.kts new file mode 100644 index 000000000..dc076cc37 --- /dev/null +++ b/lib-multisrc/lectormoe/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 1 diff --git a/lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoe.kt b/lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoe.kt new file mode 100644 index 000000000..ca9c6c70f --- /dev/null +++ b/lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoe.kt @@ -0,0 +1,143 @@ +package eu.kanade.tachiyomi.multisrc.lectormoe + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +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.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import uy.kohesive.injekt.injectLazy + +abstract class LectorMoe( + override val name: String, + override val baseUrl: String, + override val lang: String, + private val organizationDomain: String = baseUrl.substringAfter("://"), + private val apiBaseUrl: String = "https://api.lector.moe", +) : HttpSource() { + + override val supportsLatest = true + + private val json: Json by injectLazy() + + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .rateLimitHost(baseUrl.toHttpUrl(), 3) + .rateLimitHost(apiBaseUrl.toHttpUrl(), 3) + .build() + + final override fun headersBuilder(): Headers.Builder = super.headersBuilder() + .add("Referer", "$baseUrl/") + + private val apiHeaders: Headers = headersBuilder() + .add("Organization-Domain", organizationDomain) + .build() + + override fun popularMangaRequest(page: Int): Request = + GET("$apiBaseUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=popular", apiHeaders) + + override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) + + override fun latestUpdatesRequest(page: Int): Request = + GET("$apiBaseUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=latest", apiHeaders) + + override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$apiBaseUrl/api/manga-custom".toHttpUrl().newBuilder() + + url.setQueryParameter("page", page.toString()) + url.setQueryParameter("limit", PAGE_LIMIT.toString()) + + filters.forEach { filter -> + when (filter) { + is SortByFilter -> url.setQueryParameter("order", filter.toUriPart()) + else -> {} + } + } + + if (query.isNotBlank()) url.setQueryParameter("title", query) + + return GET(url.build(), apiHeaders) + } + + override fun searchMangaParse(response: Response): MangasPage { + val page = response.request.url.queryParameter("page")!!.toInt() + val result = json.decodeFromString>(response.body.string()) + + val mangas = result.data.series.map { it.toSManga() } + val hasNextPage = page < result.data.maxPage + + return MangasPage(mangas, hasNextPage) + } + + override fun getFilterList() = FilterList( + SortByFilter("Ordenar por", getSortList()), + ) + + private fun getSortList() = arrayOf( + Pair("Popularidad", "popular"), + Pair("Recientes", "latest"), + ) + + override fun getMangaUrl(manga: SManga): String = "$baseUrl/manga/${manga.url}" + + override fun mangaDetailsRequest(manga: SManga): Request = + GET("$apiBaseUrl/api/manga-custom/${manga.url}", apiHeaders) + + override fun mangaDetailsParse(response: Response): SManga { + val result = json.decodeFromString>(response.body.string()) + return result.data.toSMangaDetails() + } + + override fun getChapterUrl(chapter: SChapter): String { + val seriesSlug = chapter.url.substringBefore("/") + val chapterSlug = chapter.url.substringAfter("/") + + return "$baseUrl/manga/$seriesSlug/chapters/$chapterSlug" + } + + override fun chapterListRequest(manga: SManga): Request = mangaDetailsRequest(manga) + + override fun chapterListParse(response: Response): List { + val result = json.decodeFromString>(response.body.string()) + val seriesSlug = result.data.slug + return result.data.chapters?.map { it.toSChapter(seriesSlug) } ?: emptyList() + } + + override fun pageListRequest(chapter: SChapter): Request { + val seriesSlug = chapter.url.substringBefore("/") + val chapterSlug = chapter.url.substringAfter("/") + + return GET("$apiBaseUrl/api/manga-custom/$seriesSlug/chapter/$chapterSlug/pages", apiHeaders) + } + + override fun pageListParse(response: Response): List { + val result = json.decodeFromString>>(response.body.string()) + return result.data.mapIndexed { i, page -> + Page(i, imageUrl = page.imageUrl) + } + } + + override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() + + class SortByFilter(title: String, list: Array>) : UriPartFilter(title, list) + + open class UriPartFilter(displayName: String, val vals: Array>) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + companion object { + private const val PAGE_LIMIT = 36 + } +} diff --git a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt b/lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoeDto.kt similarity index 97% rename from src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt rename to lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoeDto.kt index 78f8e99df..b9ac22513 100644 --- a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiMangaDto.kt +++ b/lib-multisrc/lectormoe/src/eu/kanade/tachiyomi/multisrc/lectormoe/LectorMoeDto.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.extension.es.senshimanga +package eu.kanade.tachiyomi.multisrc.lectormoe import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga diff --git a/src/es/senshimanga/build.gradle b/src/es/senshimanga/build.gradle index c14ec1afb..b013159b1 100644 --- a/src/es/senshimanga/build.gradle +++ b/src/es/senshimanga/build.gradle @@ -1,7 +1,9 @@ ext { extName = 'Senshi Manga' extClass = '.SenshiManga' - extVersionCode = 5 + themePkg = 'lectormoe' + baseUrl = 'https://visorsenshi.com' + overrideVersionCode = 5 isNsfw = false } diff --git a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt index 5ec8a3a61..41c46a0a5 100644 --- a/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt +++ b/src/es/senshimanga/src/eu/kanade/tachiyomi/extension/es/senshimanga/SenshiManga.kt @@ -1,145 +1,9 @@ package eu.kanade.tachiyomi.extension.es.senshimanga -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.interceptor.rateLimitHost -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.HttpSource -import kotlinx.serialization.decodeFromString -import kotlinx.serialization.json.Json -import okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response -import uy.kohesive.injekt.injectLazy +import eu.kanade.tachiyomi.multisrc.lectormoe.LectorMoe -class SenshiManga : HttpSource() { - - override val name = "Senshi Manga" - - override val baseUrl = "https://visorsenshi.com" - - private val apiUrl = "https://api.visorsenshi.com" - - override val lang = "es" - - override val supportsLatest = true - - private val json: Json by injectLazy() - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .rateLimitHost(baseUrl.toHttpUrl(), 3) - .rateLimitHost(apiUrl.toHttpUrl(), 3) - .build() - - override fun headersBuilder(): Headers.Builder = super.headersBuilder() - .add("Referer", "$baseUrl/") - - private val apiHeaders: Headers = headersBuilder() - .add("Organization-Domain", "visorsenshi.com") - .build() - - override fun popularMangaRequest(page: Int): Request = - GET("$apiUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=popular", apiHeaders) - - override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) - - override fun latestUpdatesRequest(page: Int): Request = - GET("$apiUrl/api/manga-custom?page=$page&limit=$PAGE_LIMIT&order=latest", apiHeaders) - - override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$apiUrl/api/manga-custom".toHttpUrl().newBuilder() - - url.setQueryParameter("page", page.toString()) - url.setQueryParameter("limit", PAGE_LIMIT.toString()) - - filters.forEach { filter -> - when (filter) { - is SortByFilter -> url.setQueryParameter("order", filter.toUriPart()) - else -> {} - } - } - - if (query.isNotBlank()) url.setQueryParameter("title", query) - - return GET(url.build(), apiHeaders) - } - - override fun searchMangaParse(response: Response): MangasPage { - val page = response.request.url.queryParameter("page")!!.toInt() - val result = json.decodeFromString>(response.body.string()) - - val mangas = result.data.series.map { it.toSManga() } - val hasNextPage = page < result.data.maxPage - - return MangasPage(mangas, hasNextPage) - } - - override fun getFilterList() = FilterList( - SortByFilter("Ordenar por", getSortList()), - ) - - private fun getSortList() = arrayOf( - Pair("Popularidad", "popular"), - Pair("Recientes", "latest"), - ) - - override fun getMangaUrl(manga: SManga): String = "$baseUrl/manga/${manga.url}" - - override fun mangaDetailsRequest(manga: SManga): Request = - GET("$apiUrl/api/manga-custom/${manga.url}", apiHeaders) - - override fun mangaDetailsParse(response: Response): SManga { - val result = json.decodeFromString>(response.body.string()) - return result.data.toSMangaDetails() - } - - override fun getChapterUrl(chapter: SChapter): String { - val seriesSlug = chapter.url.substringBefore("/") - val chapterSlug = chapter.url.substringAfter("/") - - return "$baseUrl/manga/$seriesSlug/chapters/$chapterSlug" - } - - override fun chapterListRequest(manga: SManga): Request = mangaDetailsRequest(manga) - - override fun chapterListParse(response: Response): List { - val result = json.decodeFromString>(response.body.string()) - val seriesSlug = result.data.slug - return result.data.chapters?.map { it.toSChapter(seriesSlug) } ?: emptyList() - } - - override fun pageListRequest(chapter: SChapter): Request { - val seriesSlug = chapter.url.substringBefore("/") - val chapterSlug = chapter.url.substringAfter("/") - - return GET("$apiUrl/api/manga-custom/$seriesSlug/chapter/$chapterSlug/pages", apiHeaders) - } - - override fun pageListParse(response: Response): List { - val result = json.decodeFromString>>(response.body.string()) - return result.data.mapIndexed { i, page -> - Page(i, imageUrl = page.imageUrl) - } - } - - override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() - - class SortByFilter(title: String, list: Array>) : UriPartFilter(title, list) - - open class UriPartFilter(displayName: String, val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } - - companion object { - private const val PAGE_LIMIT = 36 - } -} +class SenshiManga : LectorMoe( + "Senshi Manga", + "https://visorsenshi.com", + "es", +) diff --git a/src/es/taikutsu/build.gradle b/src/es/taikutsu/build.gradle new file mode 100644 index 000000000..44db1a484 --- /dev/null +++ b/src/es/taikutsu/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'Taikutsu' + extClass = '.Taikutsu' + themePkg = 'lectormoe' + baseUrl = 'https://taikutsutl.lector.moe' + overrideVersionCode = 0 + isNsfw = false +} + +apply from: "$rootDir/common.gradle" diff --git a/src/es/taikutsu/res/mipmap-hdpi/ic_launcher.png b/src/es/taikutsu/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..582cdbd298fbdedb5ce83ca2c2702884227ee5dc GIT binary patch literal 4417 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 Hu0mjf*?Lzk literal 0 HcmV?d00001 diff --git a/src/es/taikutsu/res/mipmap-mdpi/ic_launcher.png b/src/es/taikutsu/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0a262b5d11070203a89989226560065f0a35f506 GIT binary patch literal 2582 zcmV+x3hDKUP)Px;&`Cr=RA@uBSqo59*BSoqKG_A9-DQ0&k;fvnnW=r)Nf<>V{GLVBc(a0ozkH5+n%#yYRB@E2n0st%x+SZJ*jFt(sONflr2`1hZwzw~8 zv6m0PkXj%{Gr$39?lh~-W;+xJ1d2nUkc}7;4u|QV_?v$77xZ2z90nIA_he(_?`XJY z*Wtj8Bv=yOn4X@l9vT`NmpesCLI#h=b98)se7D?SiSZf?kpm}S2|Vfy2E5c@-Wh_Y z5DJB
    yX@sW{{3INmc#3R49y4~*HU@&MGA4GYcE())WBf_4=_uAdm*Y$I4000J*liT&`g?Dg&C>h@)@$9AZE##~SZMD$OVcIKj=cEKmlV zPN$cxPvQjHWHlSy@eGRhT+W7O2@wF)SRwd$E%7;CO-`ES#nuY7;8uy3H~=C(cRCyn z3P6&Hn5r4=Ig&Y~F~epLEtyLT8wiJGL98Sp4o-)i2f#{)*hd&4YGkv7cwfm#ZHDvo z@@vJGUpNYY=r%S6I5_Po1OQ(F#e@~{5N{QIL!PH4jLk8SRl!ONpSCn=x7#BUlCU6S zMYHY&WbAn2f_u`^(AU=&UBT63g90F!#6qA{iJf-4!z)%qo&r)KXLko|a4Tjgrl_ek zc@~QWufF;#T>j`I96fSWIzJo4b76o3Z77{7DJc>L*sfP=N);u+Hf^j-Dk{ox_Uv0& zvSbOCE&CRlo6n%Px0hjqjg3e=YLk%7X7d`2Myy=55|6H5k6X8HQ67v21A^0hGdOSF zJOly(jE;=ZXY=RJ!==s-F)=ZLoF!jDR%Rx~#>Q}GbQIm)J@9xuShVOK`22n^Y+Kv=2nGUVooE2EJq0afHd~4})#*Ux zPb=~Ai4!mxO{5Cq=FOYP&d$cvB6{ju@-*dCO+H;D!y4QfkkiKaVY2woouWpC9Mm zI)|d7?JyV(*uSqD>(;HsFJ5{HYu2oR!){0Mj$(9ocT>Z%JXzSdaU)VwQz_`e!a|gm zlu*XfGtz0_|M>SFM_+$0g25oF_g5n?FAtrUF5yh`83q71%)~G_B?gj{X92Xfw4(aJ zegpzRG#zTfp{7O*4GqC+wW7a&05dZ)Sh0LLwrwlKsnfruED>FIbabGstPCsjR$=}6 z?_&Of`8fI7uhG%jj@?h~#)S)iLQ884%FD~~z^YZ0#oxdEHr_n@CW?!9P^RLWP29liLFmy_38)E^5+&B;1mFd=x$Vr0RlkG7<;Ss!fv-? z%0G$co_`)6w7*X&P0z@{bT9~=UWeTKbFqE zXm9UC#|Q0bJ|i%oDToCCV!p4c+Kbm;{|!h`=jE-y#~=R<1+2R$Zq_!&=ExpfAAZhd%gQD+~uqWp{ z{GLN?eg!RQYbDGkGtU4c4<%jGd$ipR(cQ90XH>^3%oDGZl^ZOpQObo(DGQm+0s!G* zdfLah$zj= zQeiA9%|SNoP+A8h`vIjOHW&o3L1n$8P}G z4dB1A0FY_S0GIK3gH;P)1Arv4V6l0XKR1$gB1#gY2B}#UmFN`*k_PE_pD*?tIP@aS zO|e}9V?pF)^20(lHUN?V7-lWyTLAV{EPneU@~BXjlsprmosK8dlXILgK{|eUd6IAH zMb63FdU6yb{IB>6knmkj!C?kr3Svg7wkk0YbEP;E7SFEdZmkxXDa^_+Ae|w;p=vhX s{hP5+$HFI7ofhAHIX1>vS$)C(0pj2RoeSoME&u=k07*qoM6N<$f}=08NB{r; literal 0 HcmV?d00001 diff --git a/src/es/taikutsu/res/mipmap-xhdpi/ic_launcher.png b/src/es/taikutsu/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a69b61143f42fe63cc35c1ffcc045c0d7373f913 GIT binary patch literal 6010 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 literal 0 HcmV?d00001 diff --git a/src/es/taikutsu/res/mipmap-xxhdpi/ic_launcher.png b/src/es/taikutsu/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ca9233ad1f2f140e4f551e9bd230b92a2a3a5460 GIT binary patch literal 10374 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 VYY3a+f6f8`X$b}KGEu{T{{b%Ao}~Z) literal 0 HcmV?d00001 diff --git a/src/es/taikutsu/src/eu/kanade/tachiyomi/extension/es/taikutsu/Taikutsu.kt b/src/es/taikutsu/src/eu/kanade/tachiyomi/extension/es/taikutsu/Taikutsu.kt new file mode 100644 index 000000000..21a97bb7e --- /dev/null +++ b/src/es/taikutsu/src/eu/kanade/tachiyomi/extension/es/taikutsu/Taikutsu.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.es.taikutsu + +import eu.kanade.tachiyomi.multisrc.lectormoe.LectorMoe + +class Taikutsu : LectorMoe( + "Taikutsu", + "https://taikutsutl.lector.moe", + "es", +)