Guya: remove proxy support and updates for extensions-lib 1.4 (#15384)
* Guya: remove proxy support and updates for extensions-lib 1.4 * use `mangaDetailsRequest` in `fetchMangaDetails` Co-authored-by: ObserverOfTime <chronobserver@disroot.org> * simplify chapter url * chapter url again --------- Co-authored-by: ObserverOfTime <chronobserver@disroot.org>
This commit is contained in:
parent
65c74aa8a9
commit
18a29b81c9
multisrc
overrides/guya/magicaltranslators/src
src/main/java/eu/kanade/tachiyomi/multisrc/guya
@ -24,9 +24,6 @@ abstract class MagicalTranslatorsCommon(lang: String) :
|
|||||||
override fun latestUpdatesParse(response: Response): MangasPage =
|
override fun latestUpdatesParse(response: Response): MangasPage =
|
||||||
filterMangasPage(super.latestUpdatesParse(response))
|
filterMangasPage(super.latestUpdatesParse(response))
|
||||||
|
|
||||||
override fun proxySearchMangaParse(response: Response, query: String): MangasPage =
|
|
||||||
filterMangasPage(super.proxySearchMangaParse(response, query))
|
|
||||||
|
|
||||||
override fun searchMangaParseWithSlug(response: Response, slug: String): MangasPage =
|
override fun searchMangaParseWithSlug(response: Response, slug: String): MangasPage =
|
||||||
filterMangasPage(super.searchMangaParseWithSlug(response, slug))
|
filterMangasPage(super.searchMangaParseWithSlug(response, slug))
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ abstract class Guya(
|
|||||||
for (series in payload.keys()) {
|
for (series in payload.keys()) {
|
||||||
val json = payload.getJSONObject(series)
|
val json = payload.getJSONObject(series)
|
||||||
val timestamp = json.getLong("last_updated")
|
val timestamp = json.getLong("last_updated")
|
||||||
mangas[timestamp] = parseMangaFromJson(json, "", series)
|
mangas[timestamp] = parseMangaFromJson(json, series)
|
||||||
}
|
}
|
||||||
|
|
||||||
return MangasPage(mangas.values.reversed(), false)
|
return MangasPage(mangas.values.reversed(), false)
|
||||||
@ -82,54 +82,32 @@ abstract class Guya(
|
|||||||
|
|
||||||
// Overridden to use our overload
|
// Overridden to use our overload
|
||||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
||||||
return when {
|
return client.newCall(mangaDetailsRequest(manga))
|
||||||
manga.url.startsWith(PROXY_PREFIX) -> {
|
.asObservableSuccess()
|
||||||
client.newCall(proxyChapterListRequest(manga))
|
.map { response ->
|
||||||
.asObservableSuccess()
|
mangaDetailsParse(response, manga)
|
||||||
.map { response ->
|
|
||||||
proxyMangaDetailsParse(response, manga)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else -> {
|
|
||||||
client.newCall(chapterListRequest(manga))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
mangaDetailsParse(response, manga)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called when the series is loaded, or when opening in browser
|
|
||||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||||
return when {
|
return GET("$baseUrl/api/series/${manga.url}/", headers)
|
||||||
manga.url.startsWith(PROXY_PREFIX) -> proxySeriesRequest(manga.url, false)
|
|
||||||
else -> GET("$baseUrl/reader/series/${manga.url}/", headers)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mangaDetailsParse(response: Response, manga: SManga): SManga {
|
private fun mangaDetailsParse(response: Response, manga: SManga): SManga {
|
||||||
val res = response.body.string()
|
val res = response.body.string()
|
||||||
return parseMangaFromJson(JSONObject(res), "", manga.title)
|
return parseMangaFromJson(JSONObject(res), manga.title)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getMangaUrl(manga: SManga): String {
|
||||||
|
return "$baseUrl/reader/series/${manga.url}/"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
||||||
return when {
|
return client.newCall(chapterListRequest(manga))
|
||||||
manga.url.startsWith(PROXY_PREFIX) -> {
|
.asObservableSuccess()
|
||||||
client.newCall(proxyChapterListRequest(manga))
|
.map { response ->
|
||||||
.asObservableSuccess()
|
chapterListParse(response, manga)
|
||||||
.map { response ->
|
|
||||||
proxyChapterListParse(response, manga)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else -> {
|
|
||||||
client.newCall(chapterListRequest(manga))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
chapterListParse(response, manga)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the chapter list based on the series being viewed
|
// Gets the chapter list based on the series being viewed
|
||||||
@ -142,24 +120,17 @@ abstract class Guya(
|
|||||||
return parseChapterList(response.body.string(), manga)
|
return parseChapterList(response.body.string(), manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getChapterUrl(chapter: SChapter): String {
|
||||||
|
return "$baseUrl/read/manga/${chapter.url.replace('.', '-')}/1/"
|
||||||
|
}
|
||||||
|
|
||||||
// Overridden fetch so that we use our overloaded method instead
|
// Overridden fetch so that we use our overloaded method instead
|
||||||
override fun fetchPageList(chapter: SChapter): Observable<List<Page>> {
|
override fun fetchPageList(chapter: SChapter): Observable<List<Page>> {
|
||||||
return when {
|
return client.newCall(pageListRequest(chapter))
|
||||||
chapter.url.startsWith(PROXY_PREFIX) -> {
|
.asObservableSuccess()
|
||||||
client.newCall(proxyPageListRequest(chapter))
|
.map { response ->
|
||||||
.asObservableSuccess()
|
pageListParse(response, chapter)
|
||||||
.map { response ->
|
|
||||||
proxyPageListParse(response, chapter)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else -> {
|
|
||||||
client.newCall(pageListRequest(chapter))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
pageListParse(response, chapter)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun pageListRequest(chapter: SChapter): Request {
|
override fun pageListRequest(chapter: SChapter): Request {
|
||||||
@ -199,13 +170,6 @@ abstract class Guya(
|
|||||||
searchMangaParseWithSlug(response, slug)
|
searchMangaParseWithSlug(response, slug)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
query.startsWith(PROXY_PREFIX) && query.contains("/") -> {
|
|
||||||
client.newCall(proxySearchMangaRequest(query))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
proxySearchMangaParse(response, query)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> {
|
else -> {
|
||||||
client.newCall(searchMangaRequest(page, query, filters))
|
client.newCall(searchMangaRequest(page, query, filters))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
@ -273,75 +237,6 @@ abstract class Guya(
|
|||||||
screen.addPreference(preference)
|
screen.addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------- Proxy methods ------------------
|
|
||||||
|
|
||||||
private fun proxySeriesRequest(query: String, api: Boolean = true): Request {
|
|
||||||
val res = query.removePrefix(PROXY_PREFIX)
|
|
||||||
val options = res.split("/")
|
|
||||||
val proxyType = options[0]
|
|
||||||
val slug = options[1]
|
|
||||||
return if (api) {
|
|
||||||
GET("$baseUrl/proxy/api/$proxyType/series/$slug/", headers)
|
|
||||||
} else {
|
|
||||||
GET("$baseUrl/proxy/$proxyType/$slug/", headers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxyMangaDetailsParse(response: Response, manga: SManga): SManga {
|
|
||||||
return mangaDetailsParse(response, manga)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxyChapterListRequest(manga: SManga): Request {
|
|
||||||
return proxySeriesRequest(manga.url)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxyChapterListParse(response: Response, manga: SManga): List<SChapter> {
|
|
||||||
return chapterListParse(response, manga)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxyPageListRequest(chapter: SChapter): Request {
|
|
||||||
val proxyUrl = chapter.url.removePrefix(PROXY_PREFIX)
|
|
||||||
return when {
|
|
||||||
proxyUrl.startsWith(NESTED_PROXY_API_PREFIX) -> {
|
|
||||||
GET("$baseUrl$proxyUrl", headers)
|
|
||||||
}
|
|
||||||
else -> proxySeriesRequest(chapter.url)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxyPageListParse(response: Response, chapter: SChapter): List<Page> {
|
|
||||||
val res = response.body.string()
|
|
||||||
val pages = if (chapter.url.removePrefix(PROXY_PREFIX).startsWith(NESTED_PROXY_API_PREFIX)) {
|
|
||||||
JSONArray(res)
|
|
||||||
} else {
|
|
||||||
val json = JSONObject(res)
|
|
||||||
val metadata = chapter.url.split("/").takeLast(2)
|
|
||||||
val chapterNum = metadata[0]
|
|
||||||
val groupNum = metadata[1]
|
|
||||||
json.getJSONObject("chapters")
|
|
||||||
.getJSONObject(chapterNum)
|
|
||||||
.getJSONObject("groups")
|
|
||||||
.getJSONArray(groupNum)
|
|
||||||
}
|
|
||||||
return List(pages.length()) {
|
|
||||||
Page(
|
|
||||||
it + 1,
|
|
||||||
"",
|
|
||||||
pages.optJSONObject(it)?.getString("src")
|
|
||||||
?: pages[it].toString(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun proxySearchMangaRequest(query: String): Request {
|
|
||||||
return proxySeriesRequest(query)
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun proxySearchMangaParse(response: Response, query: String): MangasPage {
|
|
||||||
val json = JSONObject(response.body.string())
|
|
||||||
return MangasPage(listOf(parseMangaFromJson(json, query)), false)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------- Helpers and whatnot ---------------
|
// ------------- Helpers and whatnot ---------------
|
||||||
|
|
||||||
private fun parseChapterList(payload: String, manga: SManga): List<SChapter> {
|
private fun parseChapterList(payload: String, manga: SManga): List<SChapter> {
|
||||||
@ -393,12 +288,7 @@ abstract class Guya(
|
|||||||
}
|
}
|
||||||
chapter.name = chapterNum + " - " + chapterObj.getString("title")
|
chapter.name = chapterNum + " - " + chapterObj.getString("title")
|
||||||
chapter.chapter_number = chapterNum.toFloat()
|
chapter.chapter_number = chapterNum.toFloat()
|
||||||
chapter.url =
|
chapter.url = "${manga.url}/$chapterNum"
|
||||||
if (groups.optJSONArray(groupNum) != null) {
|
|
||||||
"${manga.url}/$chapterNum/$groupNum"
|
|
||||||
} else {
|
|
||||||
"$PROXY_PREFIX${groups.getString(groupNum)}"
|
|
||||||
}
|
|
||||||
chapterList.add(chapter)
|
chapterList.add(chapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -414,14 +304,14 @@ abstract class Guya(
|
|||||||
|
|
||||||
for (series in payload.keys()) {
|
for (series in payload.keys()) {
|
||||||
val json = payload.getJSONObject(series)
|
val json = payload.getJSONObject(series)
|
||||||
mangas += parseMangaFromJson(json, "", series)
|
mangas += parseMangaFromJson(json, series)
|
||||||
}
|
}
|
||||||
|
|
||||||
return MangasPage(mangas, false)
|
return MangasPage(mangas, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Takes a json of the manga to parse
|
// Takes a json of the manga to parse
|
||||||
private fun parseMangaFromJson(json: JSONObject, slug: String, title: String = ""): SManga {
|
private fun parseMangaFromJson(json: JSONObject, title: String = ""): SManga {
|
||||||
val manga = SManga.create()
|
val manga = SManga.create()
|
||||||
manga.title = title.ifEmpty { json.getString("title") }
|
manga.title = title.ifEmpty { json.getString("title") }
|
||||||
manga.artist = json.optString("artist")
|
manga.artist = json.optString("artist")
|
||||||
@ -433,7 +323,7 @@ abstract class Guya(
|
|||||||
text()
|
text()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
manga.url = if (slug.startsWith(PROXY_PREFIX)) slug else json.getString("slug")
|
manga.url = json.getString("slug")
|
||||||
|
|
||||||
val cover = json.optString("cover")
|
val cover = json.optString("cover")
|
||||||
manga.thumbnail_url = when {
|
manga.thumbnail_url = when {
|
||||||
@ -454,7 +344,7 @@ abstract class Guya(
|
|||||||
chapter.date_upload = json.getJSONObject("release_date").getLong(firstGroupId) * 1000
|
chapter.date_upload = json.getJSONObject("release_date").getLong(firstGroupId) * 1000
|
||||||
chapter.name = num + " - " + json.getString("title")
|
chapter.name = num + " - " + json.getString("title")
|
||||||
chapter.chapter_number = num.toFloat()
|
chapter.chapter_number = num.toFloat()
|
||||||
chapter.url = "$slug/$num/$firstGroupId"
|
chapter.url = "$slug/$num"
|
||||||
|
|
||||||
return chapter
|
return chapter
|
||||||
}
|
}
|
||||||
@ -586,9 +476,6 @@ abstract class Guya(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val SLUG_PREFIX = "slug:"
|
const val SLUG_PREFIX = "slug:"
|
||||||
const val PROXY_PREFIX = "proxy:"
|
|
||||||
const val NESTED_PROXY_API_PREFIX = "/proxy/api/"
|
|
||||||
|
|
||||||
private const val scanlatorPreference = "SCANLATOR_PREFERENCE"
|
private const val scanlatorPreference = "SCANLATOR_PREFERENCE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,10 +10,10 @@ class GuyaGenerator : ThemeSourceGenerator {
|
|||||||
|
|
||||||
override val themeClass = "Guya"
|
override val themeClass = "Guya"
|
||||||
|
|
||||||
override val baseVersionCode = 4
|
override val baseVersionCode = 5
|
||||||
|
|
||||||
override val sources = listOf(
|
override val sources = listOf(
|
||||||
SingleLang("Guya", "https://guya.moe", "en", overrideVersionCode = 18),
|
SingleLang("Guya", "https://guya.cubari.moe", "en", overrideVersionCode = 18),
|
||||||
SingleLang("Danke fürs Lesen", "https://danke.moe", "en", className = "DankeFursLesen"),
|
SingleLang("Danke fürs Lesen", "https://danke.moe", "en", className = "DankeFursLesen"),
|
||||||
SingleLang("Hachirumi", "https://hachirumi.com", "en", isNsfw = true),
|
SingleLang("Hachirumi", "https://hachirumi.com", "en", isNsfw = true),
|
||||||
MultiLang("Magical Translators", "https://mahoushoujobu.com", listOf("en", "es", "pl"), overrideVersionCode = 1),
|
MultiLang("Magical Translators", "https://mahoushoujobu.com", listOf("en", "es", "pl"), overrideVersionCode = 1),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user