Fix GreenShit (#9005)
* Fix greenshit * Add applyIf * Fix mediocre * Remove applyIf
This commit is contained in:
parent
ab711b37ed
commit
abe89d454c
@ -2,4 +2,4 @@ plugins {
|
||||
id("lib-multisrc")
|
||||
}
|
||||
|
||||
baseVersionCode = 2
|
||||
baseVersionCode = 3
|
||||
|
@ -84,14 +84,33 @@ abstract class GreenShit(
|
||||
}
|
||||
}
|
||||
|
||||
open val targetAudience: TargetAudience = TargetAudience.All
|
||||
|
||||
open val contentOrigin: ContentOrigin = ContentOrigin.Web
|
||||
|
||||
override fun headersBuilder() = super.headersBuilder()
|
||||
.set("scan-id", scanId.toString())
|
||||
|
||||
// ============================= Popular ==================================
|
||||
|
||||
override fun popularMangaRequest(page: Int) = GET(baseUrl, headers)
|
||||
override fun popularMangaRequest(page: Int) =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> GET("$apiUrl/obras/top5", headers)
|
||||
else -> GET(baseUrl, headers)
|
||||
}
|
||||
|
||||
override fun popularMangaParse(response: Response): MangasPage {
|
||||
override fun popularMangaParse(response: Response): MangasPage =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> popularMangaParseMobile(response)
|
||||
else -> popularMangaParseWeb(response)
|
||||
}
|
||||
|
||||
private fun popularMangaParseMobile(response: Response): MangasPage {
|
||||
val mangas = response.parseAs<ResultDto<List<MangaDto>>>().toSMangaList()
|
||||
return MangasPage(mangas, hasNextPage = false)
|
||||
}
|
||||
|
||||
private fun popularMangaParseWeb(response: Response): MangasPage {
|
||||
val json = response.parseScriptToJson().let(POPULAR_JSON_REGEX::find)
|
||||
?.groups?.get(1)?.value
|
||||
?: return MangasPage(emptyList(), false)
|
||||
@ -105,11 +124,16 @@ abstract class GreenShit(
|
||||
val url = "$apiUrl/obras/novos-capitulos".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("pagina", page.toString())
|
||||
.addQueryParameter("limite", "24")
|
||||
.addQueryParameter("gen_id", "4")
|
||||
.addQueryParameterIf(targetAudience != TargetAudience.All, "gen_id", targetAudience.toString())
|
||||
.build()
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
||||
private fun HttpUrl.Builder.addQueryParameterIf(predicate: Boolean, name: String, value: String): HttpUrl.Builder {
|
||||
if (predicate) addQueryParameter(name, value)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||
val dto = response.parseAs<ResultDto<List<MangaDto>>>()
|
||||
val mangas = dto.toSMangaList()
|
||||
@ -134,8 +158,29 @@ abstract class GreenShit(
|
||||
}
|
||||
|
||||
// ============================= Details ==================================
|
||||
override fun getMangaUrl(manga: SManga) = when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> "$baseUrl${manga.url}"
|
||||
else -> super.getMangaUrl(manga)
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(response: Response): SManga {
|
||||
override fun mangaDetailsRequest(manga: SManga): Request =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> mangaDetailsRequestMobile(manga)
|
||||
else -> super.mangaDetailsRequest(manga)
|
||||
}
|
||||
|
||||
private fun mangaDetailsRequestMobile(manga: SManga): Request {
|
||||
val pathSegment = manga.url.substringBeforeLast("/").replace("obra", "obras")
|
||||
return GET("$apiUrl$pathSegment", headers)
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(response: Response) =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> response.parseAs<ResultDto<MangaDto>>().results.toSManga()
|
||||
else -> mangaDetailsParseWeb(response)
|
||||
}
|
||||
|
||||
private fun mangaDetailsParseWeb(response: Response): SManga {
|
||||
val json = response.parseScriptToJson().let(DETAILS_CHAPTER_REGEX::find)
|
||||
?.groups?.get(0)?.value
|
||||
?: throw IOException("Details do mangá não foi encontrado")
|
||||
@ -143,8 +188,27 @@ abstract class GreenShit(
|
||||
}
|
||||
|
||||
// ============================= Chapters =================================
|
||||
override fun getChapterUrl(chapter: SChapter) = when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> "$baseUrl${chapter.url}"
|
||||
else -> super.getChapterUrl(chapter)
|
||||
}
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
override fun chapterListRequest(manga: SManga) =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> mangaDetailsRequest(manga)
|
||||
else -> super.chapterListRequest(manga)
|
||||
}
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> chapterListParseMobile(response)
|
||||
else -> chapterListParseWeb(response)
|
||||
}
|
||||
|
||||
private fun chapterListParseMobile(response: Response): List<SChapter> =
|
||||
response.parseAs<ResultDto<WrapperChapterDto>>().toSChapterList()
|
||||
|
||||
private fun chapterListParseWeb(response: Response): List<SChapter> {
|
||||
val json = response.parseScriptToJson().let(DETAILS_CHAPTER_REGEX::find)
|
||||
?.groups?.get(0)?.value
|
||||
?: return emptyList()
|
||||
@ -155,7 +219,27 @@ abstract class GreenShit(
|
||||
|
||||
private val pageUrlSelector = "img.chakra-image"
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
override fun pageListRequest(chapter: SChapter): Request =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> pageListRequestMobile(chapter)
|
||||
else -> super.pageListRequest(chapter)
|
||||
}
|
||||
|
||||
private fun pageListRequestMobile(chapter: SChapter): Request {
|
||||
val pathSegment = chapter.url.replace("capitulo", "capitulo-app")
|
||||
return GET("$apiUrl$pathSegment", headers)
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> =
|
||||
when (contentOrigin) {
|
||||
ContentOrigin.Mobile -> pageListParseMobile(response)
|
||||
else -> pageListParseWeb(response)
|
||||
}
|
||||
|
||||
private fun pageListParseMobile(response: Response): List<Page> =
|
||||
response.parseAs<ResultDto<ChapterPageDto>>().toPageList()
|
||||
|
||||
private fun pageListParseWeb(response: Response): List<Page> {
|
||||
val document = response.asJsoup()
|
||||
|
||||
pageListParse(document).takeIf(List<Page>::isNotEmpty)?.let { return it }
|
||||
@ -299,6 +383,20 @@ abstract class GreenShit(
|
||||
return this
|
||||
}
|
||||
|
||||
enum class TargetAudience(val value: Int) {
|
||||
All(1),
|
||||
Shoujo(4),
|
||||
Yaoi(7),
|
||||
;
|
||||
|
||||
override fun toString() = value.toString()
|
||||
}
|
||||
|
||||
enum class ContentOrigin {
|
||||
Mobile,
|
||||
Web,
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val CDN_URL = "https://cdn.sussytoons.site"
|
||||
|
||||
|
@ -9,6 +9,8 @@ class AuroraScan : GreenShit(
|
||||
"pt-BR",
|
||||
scanId = 4,
|
||||
) {
|
||||
override val targetAudience = TargetAudience.Shoujo
|
||||
|
||||
override val client = super.client.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
||||
|
@ -10,6 +10,8 @@ class MaidScan : GreenShit(
|
||||
"pt-BR",
|
||||
scanId = 3,
|
||||
) {
|
||||
override val targetAudience = TargetAudience.Shoujo
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
||||
|
@ -9,6 +9,10 @@ class MediocreToons : GreenShit(
|
||||
"pt-BR",
|
||||
scanId = 2,
|
||||
) {
|
||||
override val targetAudience = TargetAudience.Shoujo
|
||||
|
||||
override val contentOrigin = ContentOrigin.Mobile
|
||||
|
||||
override val client = super.client.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
@ -1,20 +1,8 @@
|
||||
package eu.kanade.tachiyomi.extension.pt.sussyscan
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.greenshit.ChapterPageDto
|
||||
import eu.kanade.tachiyomi.multisrc.greenshit.GreenShit
|
||||
import eu.kanade.tachiyomi.multisrc.greenshit.MangaDto
|
||||
import eu.kanade.tachiyomi.multisrc.greenshit.ResultDto
|
||||
import eu.kanade.tachiyomi.multisrc.greenshit.WrapperChapterDto
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
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 keiyoushi.utils.parseAs
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
|
||||
class SussyToons : GreenShit(
|
||||
"Sussy Toons",
|
||||
@ -25,40 +13,9 @@ class SussyToons : GreenShit(
|
||||
|
||||
override val versionId = 2
|
||||
|
||||
override val contentOrigin: ContentOrigin = ContentOrigin.Mobile
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.rateLimit(2)
|
||||
.build()
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request =
|
||||
GET("$apiUrl/obras/top5", headers)
|
||||
|
||||
override fun popularMangaParse(response: Response): MangasPage {
|
||||
val mangas = response.parseAs<ResultDto<List<MangaDto>>>().toSMangaList()
|
||||
return MangasPage(mangas, hasNextPage = false)
|
||||
}
|
||||
|
||||
override fun getMangaUrl(manga: SManga) = "$baseUrl${manga.url}"
|
||||
|
||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||
val pathSegment = manga.url.substringBeforeLast("/").replace("obra", "obras")
|
||||
return GET("$apiUrl$pathSegment", headers)
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(response: Response) =
|
||||
response.parseAs<ResultDto<MangaDto>>().results.toSManga()
|
||||
|
||||
override fun getChapterUrl(chapter: SChapter) = "$baseUrl${chapter.url}"
|
||||
|
||||
override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga)
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> =
|
||||
response.parseAs<ResultDto<WrapperChapterDto>>().toSChapterList()
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request {
|
||||
val pathSegment = chapter.url.replace("capitulo", "capitulo-app")
|
||||
return GET("$apiUrl$pathSegment", headers)
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> =
|
||||
response.parseAs<ResultDto<ChapterPageDto>>().toPageList()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user