Migrating 2 sources to kotlinx.serialization (#8439)

* BainianManga: Fix image scraping and migration from gson

* MangaDenizi: Migration from org.json
This commit is contained in:
Arraiment 2021-08-07 23:58:30 +08:00 committed by GitHub
parent 18f3f9412f
commit cbd3f96907
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 33 deletions

View File

@ -1,11 +1,12 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext { ext {
extName = 'MangaDenizi' extName = 'MangaDenizi'
pkgNameSuffix = 'tr.mangadenizi' pkgNameSuffix = 'tr.mangadenizi'
extClass = '.MangaDenizi' extClass = '.MangaDenizi'
extVersionCode = 3 extVersionCode = 4
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -8,8 +8,10 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.Response import okhttp3.Response
import org.json.JSONObject
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
@ -70,25 +72,14 @@ class MangaDenizi : ParsedHttpSource() {
override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException("Unused") override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException("Unused")
override fun searchMangaParse(response: Response): MangasPage { override fun searchMangaParse(response: Response): MangasPage {
val res = response.body!!.string() val mangaListJson = Json.decodeFromString<SearchMangaJson>(response.body!!.string())
return getMangasPage(res) val mangaList = mangaListJson.suggestions.map {
SManga.create().apply {
title = it.value
url = "/manga/${it.data}"
} }
private fun getMangasPage(json: String): MangasPage {
val response = JSONObject(json)
val results = response.getJSONArray("suggestions")
val mangas = ArrayList<SManga>()
// No thumbnail here either
for (i in 0 until results.length()) {
val obj = results.getJSONObject(i)
val manga = SManga.create()
manga.title = obj.getString("value")
manga.url = "/manga/${obj.getString("data")}"
mangas.add(manga)
} }
return MangasPage(mangaList, false)
return MangasPage(mangas, false)
} }
override fun mangaDetailsParse(document: Document) = SManga.create().apply { override fun mangaDetailsParse(document: Document) = SManga.create().apply {
@ -132,4 +123,14 @@ class MangaDenizi : ParsedHttpSource() {
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used") override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used")
override fun getFilterList() = FilterList() override fun getFilterList() = FilterList()
@Serializable
data class SearchMangaJson(
val suggestions: List<MangaJson>
)
@Serializable
data class MangaJson(
val value: String,
val data: String,
)
} }

View File

@ -1,11 +1,12 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext { ext {
extName = 'BainianManga' extName = 'BainianManga'
pkgNameSuffix = 'zh.bainianmanga' pkgNameSuffix = 'zh.bainianmanga'
extClass = '.BainianManga' extClass = '.BainianManga'
extVersionCode = 2 extVersionCode = 3
libVersion = '1.2' libVersion = '1.2'
} }

View File

@ -1,7 +1,5 @@
package eu.kanade.tachiyomi.extension.zh.bainianmanga package eu.kanade.tachiyomi.extension.zh.bainianmanga
import com.github.salomonbrys.kotson.fromJson
import com.google.gson.Gson
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
@ -9,6 +7,8 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
@ -80,19 +80,16 @@ class BainianManga : ParsedHttpSource() {
return super.chapterListParse(response).asReversed() return super.chapterListParse(response).asReversed()
} }
private val gson = Gson()
override fun pageListParse(document: Document): List<Page> { override fun pageListParse(document: Document): List<Page> {
val html = document.html() val html = document.html()
val baseURLRe = Regex("var z_yurl='(.*?)';") val baseImgUrl = "https://img.hltongchen.com/"
val baseImageUrl = baseURLRe.find(html)?.groups?.get(1)?.value
val re = Regex("var z_img='(.*?)';") val imgUrlRegex = Regex("var z_img='(.*?)';")
val imgCode = re.find(html)?.groups?.get(1)?.value val imgUrlArray = imgUrlRegex.find(html)?.groups?.get(1)?.value
if (imgCode != null) { if (imgUrlArray != null) {
val anotherStr = gson.fromJson<List<String>>(imgCode) val imgUrlList = Json.decodeFromString<List<String>>(imgUrlArray)
return anotherStr.mapIndexed { i, imgStr -> return imgUrlList.mapIndexed { i, imgUrl ->
Page(i, "", "$baseImageUrl$imgStr") Page(i, "", "$baseImgUrl$imgUrl")
} }
} }
return listOf() return listOf()