From a33aadae878977aab1cf66ebb5eb664daf228bca Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Tue, 10 Oct 2023 22:42:11 +0000 Subject: [PATCH] feat(multisrc): Add ZoroTheme generator (#2347) --- .run/ZoroThemeGenerator.run.xml | 11 + lib/megacloud-extractor/build.gradle.kts | 21 + .../megacloudextractor/MegaCloudExtractor.kt | 65 ++- .../lib/playlistutils/PlaylistUtils.kt | 10 +- .../zorotheme/kaido/additional.gradle | 4 + .../kaido/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4959 bytes .../kaido/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2641 bytes .../kaido/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6792 bytes .../kaido/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12263 bytes .../kaido/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17540 bytes .../zorotheme/kaido/res/play_store_512.png | Bin 0 -> 97898 bytes .../overrides/zorotheme/kaido/src/Kaido.kt | 33 ++ .../zorotheme/zoro/additional.gradle | 4 + .../zoro}/res/mipmap-hdpi/ic_launcher.png | Bin .../zoro}/res/mipmap-mdpi/ic_launcher.png | Bin .../zoro}/res/mipmap-xhdpi/ic_launcher.png | Bin .../zoro}/res/mipmap-xxhdpi/ic_launcher.png | Bin .../zoro}/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../zorotheme/zoro}/res/play_store_512.png | Bin .../overrides/zorotheme/zoro/src/AniWatch.kt | 37 ++ .../tachiyomi/multisrc/zorotheme/ZoroTheme.kt | 449 ++++++++++++++++++ .../multisrc/zorotheme/ZoroThemeFilters.kt | 37 +- .../multisrc/zorotheme/ZoroThemeGenerator.kt | 22 + .../multisrc/zorotheme/dto/ZoroThemeDto.kt | 18 +- src/en/aniwatch/AndroidManifest.xml | 23 - src/en/aniwatch/build.gradle | 21 - .../animeextension/en/zoro/AniWatch.kt | 424 ----------------- .../en/zoro/AniWatchUrlActivity.kt | 41 -- 28 files changed, 680 insertions(+), 540 deletions(-) create mode 100644 .run/ZoroThemeGenerator.run.xml create mode 100644 lib/megacloud-extractor/build.gradle.kts rename src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/AniWatchExtractor.kt => lib/megacloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/megacloudextractor/MegaCloudExtractor.kt (57%) create mode 100644 multisrc/overrides/zorotheme/kaido/additional.gradle create mode 100644 multisrc/overrides/zorotheme/kaido/res/mipmap-hdpi/ic_launcher.png create mode 100644 multisrc/overrides/zorotheme/kaido/res/mipmap-mdpi/ic_launcher.png create mode 100644 multisrc/overrides/zorotheme/kaido/res/mipmap-xhdpi/ic_launcher.png create mode 100644 multisrc/overrides/zorotheme/kaido/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/zorotheme/kaido/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/zorotheme/kaido/res/play_store_512.png create mode 100644 multisrc/overrides/zorotheme/kaido/src/Kaido.kt create mode 100644 multisrc/overrides/zorotheme/zoro/additional.gradle rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/mipmap-hdpi/ic_launcher.png (100%) rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/mipmap-mdpi/ic_launcher.png (100%) rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/mipmap-xhdpi/ic_launcher.png (100%) rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {src/en/aniwatch => multisrc/overrides/zorotheme/zoro}/res/play_store_512.png (100%) create mode 100644 multisrc/overrides/zorotheme/zoro/src/AniWatch.kt create mode 100644 multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroTheme.kt rename src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/AniWatchFilters.kt => multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt (83%) create mode 100644 multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeGenerator.kt rename src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/dto/AniWatchDto.kt => multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/zorotheme/dto/ZoroThemeDto.kt (60%) delete mode 100644 src/en/aniwatch/AndroidManifest.xml delete mode 100644 src/en/aniwatch/build.gradle delete mode 100644 src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/AniWatch.kt delete mode 100644 src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/AniWatchUrlActivity.kt diff --git a/.run/ZoroThemeGenerator.run.xml b/.run/ZoroThemeGenerator.run.xml new file mode 100644 index 000000000..f406bf701 --- /dev/null +++ b/.run/ZoroThemeGenerator.run.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/lib/megacloud-extractor/build.gradle.kts b/lib/megacloud-extractor/build.gradle.kts new file mode 100644 index 000000000..c657a290e --- /dev/null +++ b/lib/megacloud-extractor/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + id("com.android.library") + kotlin("android") + id("kotlinx-serialization") +} + +android { + compileSdk = AndroidConfig.compileSdk + namespace = "eu.kanade.tachiyomi.lib.megacloudextractor" + + defaultConfig { + minSdk = AndroidConfig.minSdk + } +} + +dependencies { + compileOnly(libs.bundles.common) + implementation(project(":lib-cryptoaes")) + implementation(project(":lib-playlist-utils")) +} +// BUMPS: 0 diff --git a/src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/AniWatchExtractor.kt b/lib/megacloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/megacloudextractor/MegaCloudExtractor.kt similarity index 57% rename from src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/AniWatchExtractor.kt rename to lib/megacloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/megacloudextractor/MegaCloudExtractor.kt index a248f22e3..cfa01bf12 100644 --- a/src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/extractors/AniWatchExtractor.kt +++ b/lib/megacloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/megacloudextractor/MegaCloudExtractor.kt @@ -1,19 +1,30 @@ -package eu.kanade.tachiyomi.animeextension.en.zoro.extractors +package eu.kanade.tachiyomi.lib.megacloudextractor -import eu.kanade.tachiyomi.animeextension.en.zoro.dto.SourceResponseDto -import eu.kanade.tachiyomi.animeextension.en.zoro.dto.VideoDto -import eu.kanade.tachiyomi.animeextension.en.zoro.dto.VideoLink +import eu.kanade.tachiyomi.animesource.model.Track +import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES +import eu.kanade.tachiyomi.lib.playlistutils.PlaylistUtils +import okhttp3.Headers import eu.kanade.tachiyomi.network.GET -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import kotlinx.serialization.json.jsonPrimitive import okhttp3.OkHttpClient import uy.kohesive.injekt.injectLazy +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement +import okhttp3.CacheControl +import okhttp3.HttpUrl.Companion.toHttpUrl -class AniWatchExtractor(private val client: OkHttpClient) { +class MegaCloudExtractor(private val client: OkHttpClient, private val headers: Headers) { private val json: Json by injectLazy() + private val playlistUtils by lazy { PlaylistUtils(client, headers) } + + private val cacheControl = CacheControl.Builder().noStore().build() + private val noCacheClient = client.newBuilder() + .cache(null) + .build() + companion object { private val SERVER_URL = arrayOf("https://megacloud.tv", "https://rapid-cloud.co") private val SOURCES_URL = arrayOf("/embed-2/ajax/e-1/getSources?id=", "/ajax/embed-6-v2/getSources?id=") @@ -24,7 +35,7 @@ class AniWatchExtractor(private val client: OkHttpClient) { private fun cipherTextCleaner(data: String, type: String): Pair { // TODO: fetch the key only when needed, using a thread-safe map // (Like ConcurrentMap?) or MUTEX hacks. - val indexPairs = client.newCall(GET("https://raw.githubusercontent.com/Claudemirovsky/keys/e$type/key")) + val indexPairs = noCacheClient.newCall(GET("https://raw.githubusercontent.com/Claudemirovsky/keys/e$type/key", cache = cacheControl)) .execute() .use { it.body.string() } .let { json.decodeFromString>>(it) } @@ -49,7 +60,23 @@ class AniWatchExtractor(private val client: OkHttpClient) { } } - fun getVideoDto(url: String): VideoDto { + fun getVideosFromUrl(url: String, type: String, name: String): List