From 8b11adcfadbbcb91c9d644468d31520db8c76c53 Mon Sep 17 00:00:00 2001 From: Dark25 Date: Wed, 18 Sep 2024 20:56:29 +0200 Subject: [PATCH] Feat(lib/ChillxExtractor): Update extractor and add extractor to Hikari --- .../lib/chillxextractor/ChillxExtractor.kt | 33 +++++++++++-------- src/all/hikari/build.gradle | 3 +- .../animeextension/all/hikari/Hikari.kt | 8 ++--- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt b/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt index daa73bff..2e4d7f82 100644 --- a/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt +++ b/lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.lib.chillxextractor import eu.kanade.tachiyomi.animesource.model.Track import eu.kanade.tachiyomi.animesource.model.Video -import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES.decryptWithSalt +import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.parseAs @@ -13,17 +13,18 @@ import kotlinx.serialization.json.Json import okhttp3.Headers import okhttp3.OkHttpClient import uy.kohesive.injekt.injectLazy +import java.net.URI class ChillxExtractor(private val client: OkHttpClient, private val headers: Headers) { private val json: Json by injectLazy() private val playlistUtils by lazy { PlaylistUtils(client, headers) } companion object { - private val REGEX_MASTER_JS by lazy { Regex("""\s*=\s*'([^']+)""") } - private val REGEX_SOURCES by lazy { Regex("""sources:\s*\[\{"file":"([^"]+)""") } - private val REGEX_FILE by lazy { Regex("""file: ?"([^"]+)"""") } - private val REGEX_SOURCE by lazy { Regex("""source = ?"([^"]+)"""") } - private val REGEX_SUBS by lazy { Regex("""\[(.*?)\](https?://[^\s,]+)""") } + private val REGEX_MASTER_JS = Regex("""\s*=\s*'([^']+)""") + private val REGEX_SOURCES = Regex("""sources:\s*\[\{"file":"([^"]+)""") + private val REGEX_FILE = Regex("""file: ?"([^"]+)"""") + private val REGEX_SOURCE = Regex("""source = ?"([^"]+)"""") + private val REGEX_SUBS = Regex("""\[(.*?)\](https?://[^\s,]+)""") private const val KEY_SOURCE = "https://raw.githubusercontent.com/Rowdy-Avocado/multi-keys/keys/index.html" } @@ -38,7 +39,7 @@ class ChillxExtractor(private val client: OkHttpClient, private val headers: Hea val master = REGEX_MASTER_JS.find(body)?.groupValues?.get(1) ?: return emptyList() val aesJson = json.decodeFromString(master) val key = fetchKey() ?: throw ErrorLoadingException("Unable to get key") - val decryptedScript = decryptWithSalt(aesJson.ciphertext, aesJson.salt, key) + val decryptedScript = CryptoAES.decryptWithSalt(aesJson.ciphertext, aesJson.salt, key) .replace("\\n", "\n") .replace("\\", "") @@ -74,18 +75,24 @@ class ChillxExtractor(private val client: OkHttpClient, private val headers: Hea } } + private fun String.getHost(): String { + return fixTitle(URI(this).host.substringBeforeLast(".").substringAfterLast(".")) + } + + private fun fixTitle(title: String): String { + return title.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } + } + @Serializable data class CryptoInfo( - @SerialName("ct") - val ciphertext: String, - @SerialName("s") - val salt: String, + @SerialName("ct") val ciphertext: String, + @SerialName("s") val salt: String, ) @Serializable data class KeysData( - @SerialName("chillx") - val keys: List + @SerialName("chillx") val keys: List ) } + class ErrorLoadingException(message: String) : Exception(message) diff --git a/src/all/hikari/build.gradle b/src/all/hikari/build.gradle index 490edc08..23c6a56c 100644 --- a/src/all/hikari/build.gradle +++ b/src/all/hikari/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Hikari' extClass = '.Hikari' - extVersionCode = 7 + extVersionCode = 8 } apply from: "$rootDir/common.gradle" @@ -9,4 +9,5 @@ apply from: "$rootDir/common.gradle" dependencies { implementation(project(':lib:filemoon-extractor')) implementation(project(':lib:vidhide-extractor')) + implementation(project(':lib:chillx-extractor')) } \ No newline at end of file diff --git a/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt b/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt index cc35e0cb..784ca2ec 100644 --- a/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt +++ b/src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt @@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor import eu.kanade.tachiyomi.lib.vidhideextractor.VidHideExtractor +import eu.kanade.tachiyomi.lib.chillxextractor.ChillxExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking import eu.kanade.tachiyomi.util.parseAs @@ -218,6 +219,7 @@ class Hikari : ParsedAnimeHttpSource(), ConfigurableAnimeSource { private val filemoonExtractor by lazy { FilemoonExtractor(client) } private val vidHideExtractor by lazy { VidHideExtractor(client, headers) } + private val chillxExtractor by lazy { ChillxExtractor(client, headers) } private val embedRegex = Regex("""getEmbed\(\s*(\d+)\s*,\s*(\d+)\s*,\s*'(\d+)'""") override fun videoListRequest(episode: SEpisode): Request { @@ -336,10 +338,8 @@ class Hikari : ParsedAnimeHttpSource(), ConfigurableAnimeSource { private fun getVideosFromEmbed(embedUrl: String, name: String): List