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: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext {
extName = 'MangaDenizi'
pkgNameSuffix = 'tr.mangadenizi'
extClass = '.MangaDenizi'
extVersionCode = 3
extVersionCode = 4
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.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.Response
import org.json.JSONObject
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
@ -70,25 +72,14 @@ class MangaDenizi : ParsedHttpSource() {
override fun searchMangaFromElement(element: Element) = throw UnsupportedOperationException("Unused")
override fun searchMangaParse(response: Response): MangasPage {
val res = response.body!!.string()
return getMangasPage(res)
}
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)
val mangaListJson = Json.decodeFromString<SearchMangaJson>(response.body!!.string())
val mangaList = mangaListJson.suggestions.map {
SManga.create().apply {
title = it.value
url = "/manga/${it.data}"
}
}
return MangasPage(mangas, false)
return MangasPage(mangaList, false)
}
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 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: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext {
extName = 'BainianManga'
pkgNameSuffix = 'zh.bainianmanga'
extClass = '.BainianManga'
extVersionCode = 2
extVersionCode = 3
libVersion = '1.2'
}

View File

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