diff --git a/lib/lycoris-extractor/src/main/java/eu/kanade/tachiyomi/lib/lycorisextractor/LycorisExtractor.kt b/lib/lycoris-extractor/src/main/java/eu/kanade/tachiyomi/lib/lycorisextractor/LycorisExtractor.kt index 36e8609c..f28484d2 100644 --- a/lib/lycoris-extractor/src/main/java/eu/kanade/tachiyomi/lib/lycorisextractor/LycorisExtractor.kt +++ b/lib/lycoris-extractor/src/main/java/eu/kanade/tachiyomi/lib/lycorisextractor/LycorisExtractor.kt @@ -5,13 +5,11 @@ import eu.kanade.tachiyomi.network.GET import android.util.Base64 import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.parseAs -import kotlinx.serialization.json.Json import kotlinx.serialization.Serializable import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient -import uy.kohesive.injekt.injectLazy import java.nio.charset.Charset class LycorisCafeExtractor(private val client: OkHttpClient) { @@ -20,8 +18,6 @@ class LycorisCafeExtractor(private val client: OkHttpClient) { private val GETLNKURL = "https://www.lycoris.cafe/api/watch/getLink" - private val json: Json by injectLazy() - // Credit: https://github.com/skoruppa/docchi-stremio-addon/blob/main/app/players/lycoris.py fun getVideosFromUrl(url: String, headers: Headers, prefix: String): List<Video> { @@ -34,17 +30,25 @@ class LycorisCafeExtractor(private val client: OkHttpClient) { GET(url, headers = embedHeaders), ).execute().asJsoup() - val script = document.select("script[type='application/json']").first()?.data()?.toString() ?: return emptyList() + val script = document.selectFirst("script[type='application/json']")?.data() ?: return emptyList() val scriptData = script.parseAs<ScriptBody>() val data = scriptData.body.parseAs<ScriptEpisode>() - val linkList: String? = fetchAndDecodeVideo(client, data.episodeInfo.id.toString(), isSecondary = false) + val linkList = data.episodeInfo.id?.let { + fetchAndDecodeVideo(client, data.episodeInfo.id.toString(), isSecondary = false) + } - val fhdLink = fetchAndDecodeVideo(client, data.episodeInfo.FHD.toString(), isSecondary = true) - val sdLink = fetchAndDecodeVideo(client, data.episodeInfo.SD.toString(), isSecondary = true) - val hdLink = fetchAndDecodeVideo(client, data.episodeInfo.HD.toString(), isSecondary = true) + val fhdLink = data.episodeInfo.FHD?.let { + fetchAndDecodeVideo(client, data.episodeInfo.FHD, isSecondary = true) + } + val sdLink = data.episodeInfo.SD?.let { + fetchAndDecodeVideo(client, data.episodeInfo.SD, isSecondary = true) + } + val hdLink = data.episodeInfo.HD?.let { + fetchAndDecodeVideo(client, data.episodeInfo.HD, isSecondary = true) + } if (linkList.isNullOrBlank() || linkList == "{}") { if (!fhdLink.isNullOrBlank()) { @@ -56,25 +60,24 @@ class LycorisCafeExtractor(private val client: OkHttpClient) { if (!sdLink.isNullOrBlank()) { videos.add(Video(sdLink, "${prefix}lycoris.cafe - 480p", sdLink)) } - } else { val videoLinks = linkList.parseAs<VideoLinksApi>() videoLinks.FHD?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 1080p", it)) - }?: fhdLink?.takeIf { it.contains("https://") }?.let { + } ?: fhdLink?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 1080p", it)) } videoLinks.HD?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 720p", it)) - }?: hdLink?.takeIf { it.contains("https://") }?.let { + } ?: hdLink?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 720p", it)) } videoLinks.SD?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 480p", it)) - }?: sdLink?.takeIf { it.contains("https://") }?.let { + } ?: sdLink?.takeIf { checkLinks(client, it) }?.let { videos.add(Video(it, "${prefix}lycoris.cafe - 480p", it)) } } @@ -125,7 +128,7 @@ class LycorisCafeExtractor(private val client: OkHttpClient) { client.newCall(GET(url)) .execute() .use { response -> - val data = response.body.string() ?: "" + val data = response.body.string() return decodeVideoLinks(data) } } @@ -142,6 +145,7 @@ class LycorisCafeExtractor(private val client: OkHttpClient) { // 1. Obsługa kontynuacji linii (backslash + newline) val withoutLineContinuation = text.replace("\\\n", "") + // 2. Regex do wykrywania wszystkich sekwencji escape val regex = Regex( """\\U([0-9a-fA-F]{8})|""" + // \UXXXXXXXX diff --git a/src/pl/docchi/build.gradle b/src/pl/docchi/build.gradle index 79a34009..02e2d766 100644 --- a/src/pl/docchi/build.gradle +++ b/src/pl/docchi/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Docchi' extClass = '.Docchi' - extVersionCode = 2 + extVersionCode = 3 isNsfw = true }