From a48d4b1e7625851e940b9a4df977efa8f5264ce7 Mon Sep 17 00:00:00 2001 From: Mike <51273546+SnakeDoc83@users.noreply.github.com> Date: Sat, 7 Dec 2019 14:21:10 -0500 Subject: [PATCH] Tapastic - chapter lock icon (#1853) --- src/en/tapastic/build.gradle | 4 +- .../extension/en/tapastic/Tapastic.kt | 62 +++++++------------ 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/src/en/tapastic/build.gradle b/src/en/tapastic/build.gradle index a3083ac04..2990834a0 100644 --- a/src/en/tapastic/build.gradle +++ b/src/en/tapastic/build.gradle @@ -2,10 +2,10 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' ext { - appName = 'Tachiyomi: Tapastic' + appName = 'Tachiyomi: Tapas' pkgNameSuffix = 'en.tapastic' extClass = '.Tapastic' - extVersionCode = 3 + extVersionCode = 4 libVersion = '1.2' } diff --git a/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt b/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt index 9c836cbe6..1a3478e60 100644 --- a/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt +++ b/src/en/tapastic/src/eu/kanade/tachiyomi/extension/en/tapastic/Tapastic.kt @@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.extension.en.tapastic import android.net.Uri import com.github.salomonbrys.kotson.* -import com.google.gson.JsonParser +import com.google.gson.Gson +import com.google.gson.JsonArray import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource @@ -21,7 +22,7 @@ class Tapastic : ParsedHttpSource() { private val browseMangaSelector = ".content-item" private val nextPageSelector = "a.paging-btn.next" - private val jsonParser by lazy { JsonParser() } + private val gson by lazy { Gson() } override fun popularMangaSelector() = browseMangaSelector @@ -82,52 +83,35 @@ class Tapastic : ParsedHttpSource() { description = document.getElementById("series-desc-body").text().trim() - genre = document.getElementsByClass("genre").text() + genre = document.getElementsByClass("genre").joinToString { it.text() } status = SManga.UNKNOWN } override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/comics?pageNumber=$page&browse=FRESH") - override fun chapterListParse(response: Response) - //Chapters are stored in JavaScript as JSON! - = response.asJsoup().getElementsByTag("script").filter { - it.data().trim().startsWith("var _data") - }.flatMap { - val text = it.data() - val episodeVar = text.indexOf("episodeList") - if (episodeVar == -1) - return@flatMap emptyList() + override fun chapterListParse(response: Response): List { + //Chapters are stored in JavaScript as JSON! + return response.asJsoup().select("script:containsData(_data)").first()?.data().let { script -> + if (script.isNullOrEmpty() || !script.contains("episodeList : [")) { + emptyList() + } else { + gson.fromJson(script.substringAfter("episodeList : ").substringBefore(",\n")) + //Ensure that the chapter is published (source allows scheduling chapters) + .filter { it["orgScene"].int != 0 } + .map { json -> + SChapter.create().apply { + url = "/episode/${json["id"].string}" - val episodeLeftBracket = text.indexOf('[', startIndex = episodeVar) - if (episodeLeftBracket == -1) - return@flatMap emptyList() + name = (if (json["locked"].asBoolean) "\uD83D\uDD12" else "") + json["title"].string - val endOfLine = text.indexOf('\n', startIndex = episodeLeftBracket) - if (endOfLine == -1) - return@flatMap emptyList() + date_upload = json["publishDate"].long - val episodeRightBracket = text.lastIndexOf(']', startIndex = endOfLine) - if (episodeRightBracket == -1) - return@flatMap emptyList() - - val episodeListText = text.substring(episodeLeftBracket..episodeRightBracket) - - jsonParser.parse(episodeListText).array.map { - val json = it.asJsonObject - //Ensure that the chapter is published (tapastic allows scheduling chapters) - if (json["orgScene"].int != 0) - SChapter.create().apply { - url = "/episode/${json["id"].string}" - - name = json["title"].string - - date_upload = json["publishDate"].long - - chapter_number = json["scene"].float - } - else null - }.filterNotNull().sortedByDescending(SChapter::chapter_number) + chapter_number = json["scene"].float + } + }.reversed() + } + } } override fun chapterListSelector()