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