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
@ -24,9 +24,6 @@ abstract class MagicalTranslatorsCommon(lang: String) :
|
||||
override fun latestUpdatesParse(response: Response): MangasPage =
|
||||
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 =
|
||||
filterMangasPage(super.searchMangaParseWithSlug(response, slug))
|
||||
|
||||
|
@ -74,7 +74,7 @@ abstract class Guya(
|
||||
for (series in payload.keys()) {
|
||||
val json = payload.getJSONObject(series)
|
||||
val timestamp = json.getLong("last_updated")
|
||||
mangas[timestamp] = parseMangaFromJson(json, "", series)
|
||||
mangas[timestamp] = parseMangaFromJson(json, series)
|
||||
}
|
||||
|
||||
return MangasPage(mangas.values.reversed(), false)
|
||||
@ -82,54 +82,32 @@ abstract class Guya(
|
||||
|
||||
// Overridden to use our overload
|
||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
||||
return when {
|
||||
manga.url.startsWith(PROXY_PREFIX) -> {
|
||||
client.newCall(proxyChapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
proxyMangaDetailsParse(response, manga)
|
||||
}
|
||||
return client.newCall(mangaDetailsRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
mangaDetailsParse(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 {
|
||||
return when {
|
||||
manga.url.startsWith(PROXY_PREFIX) -> proxySeriesRequest(manga.url, false)
|
||||
else -> GET("$baseUrl/reader/series/${manga.url}/", headers)
|
||||
}
|
||||
return GET("$baseUrl/api/series/${manga.url}/", headers)
|
||||
}
|
||||
|
||||
private fun mangaDetailsParse(response: Response, manga: SManga): SManga {
|
||||
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>> {
|
||||
return when {
|
||||
manga.url.startsWith(PROXY_PREFIX) -> {
|
||||
client.newCall(proxyChapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
proxyChapterListParse(response, manga)
|
||||
}
|
||||
return client.newCall(chapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
chapterListParse(response, manga)
|
||||
}
|
||||
else -> {
|
||||
client.newCall(chapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
chapterListParse(response, manga)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Gets the chapter list based on the series being viewed
|
||||
@ -142,24 +120,17 @@ abstract class Guya(
|
||||
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
|
||||
override fun fetchPageList(chapter: SChapter): Observable<List<Page>> {
|
||||
return when {
|
||||
chapter.url.startsWith(PROXY_PREFIX) -> {
|
||||
client.newCall(proxyPageListRequest(chapter))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
proxyPageListParse(response, chapter)
|
||||
}
|
||||
return client.newCall(pageListRequest(chapter))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
pageListParse(response, chapter)
|
||||
}
|
||||
else -> {
|
||||
client.newCall(pageListRequest(chapter))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
pageListParse(response, chapter)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request {
|
||||
@ -199,13 +170,6 @@ abstract class Guya(
|
||||
searchMangaParseWithSlug(response, slug)
|
||||
}
|
||||
}
|
||||
query.startsWith(PROXY_PREFIX) && query.contains("/") -> {
|
||||
client.newCall(proxySearchMangaRequest(query))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
proxySearchMangaParse(response, query)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
client.newCall(searchMangaRequest(page, query, filters))
|
||||
.asObservableSuccess()
|
||||
@ -273,75 +237,6 @@ abstract class Guya(
|
||||
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 ---------------
|
||||
|
||||
private fun parseChapterList(payload: String, manga: SManga): List<SChapter> {
|
||||
@ -393,12 +288,7 @@ abstract class Guya(
|
||||
}
|
||||
chapter.name = chapterNum + " - " + chapterObj.getString("title")
|
||||
chapter.chapter_number = chapterNum.toFloat()
|
||||
chapter.url =
|
||||
if (groups.optJSONArray(groupNum) != null) {
|
||||
"${manga.url}/$chapterNum/$groupNum"
|
||||
} else {
|
||||
"$PROXY_PREFIX${groups.getString(groupNum)}"
|
||||
}
|
||||
chapter.url = "${manga.url}/$chapterNum"
|
||||
chapterList.add(chapter)
|
||||
}
|
||||
}
|
||||
@ -414,14 +304,14 @@ abstract class Guya(
|
||||
|
||||
for (series in payload.keys()) {
|
||||
val json = payload.getJSONObject(series)
|
||||
mangas += parseMangaFromJson(json, "", series)
|
||||
mangas += parseMangaFromJson(json, series)
|
||||
}
|
||||
|
||||
return MangasPage(mangas, false)
|
||||
}
|
||||
|
||||
// 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()
|
||||
manga.title = title.ifEmpty { json.getString("title") }
|
||||
manga.artist = json.optString("artist")
|
||||
@ -433,7 +323,7 @@ abstract class Guya(
|
||||
text()
|
||||
}
|
||||
}
|
||||
manga.url = if (slug.startsWith(PROXY_PREFIX)) slug else json.getString("slug")
|
||||
manga.url = json.getString("slug")
|
||||
|
||||
val cover = json.optString("cover")
|
||||
manga.thumbnail_url = when {
|
||||
@ -454,7 +344,7 @@ abstract class Guya(
|
||||
chapter.date_upload = json.getJSONObject("release_date").getLong(firstGroupId) * 1000
|
||||
chapter.name = num + " - " + json.getString("title")
|
||||
chapter.chapter_number = num.toFloat()
|
||||
chapter.url = "$slug/$num/$firstGroupId"
|
||||
chapter.url = "$slug/$num"
|
||||
|
||||
return chapter
|
||||
}
|
||||
@ -586,9 +476,6 @@ abstract class Guya(
|
||||
|
||||
companion object {
|
||||
const val SLUG_PREFIX = "slug:"
|
||||
const val PROXY_PREFIX = "proxy:"
|
||||
const val NESTED_PROXY_API_PREFIX = "/proxy/api/"
|
||||
|
||||
private const val scanlatorPreference = "SCANLATOR_PREFERENCE"
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,10 @@ class GuyaGenerator : ThemeSourceGenerator {
|
||||
|
||||
override val themeClass = "Guya"
|
||||
|
||||
override val baseVersionCode = 4
|
||||
override val baseVersionCode = 5
|
||||
|
||||
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("Hachirumi", "https://hachirumi.com", "en", isNsfw = true),
|
||||
MultiLang("Magical Translators", "https://mahoushoujobu.com", listOf("en", "es", "pl"), overrideVersionCode = 1),
|
||||
|
Loading…
x
Reference in New Issue
Block a user