From 05088707a008a94bbd2bb5e63170419ffee32c71 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 11 Oct 2022 06:03:49 -0300 Subject: [PATCH] Add support to shared extractors (#917) Co-authored-by: github-actions[bot] --- .github/scripts/bump-versions.sh | 49 +++++++++++++++ .github/workflows/build_push.yml | 13 ++++ lib/dood-extractor/build.gradle.kts | 24 ++++++++ .../src/main/AndroidManifest.xml | 2 + .../lib/doodextractor}/DoodExtractor.kt | 28 +++++++-- settings.gradle.kts | 6 +- src/ar/animelek/build.gradle | 6 +- .../animeextension/ar/animelek/AnimeLek.kt | 2 +- .../ar/animelek/extractors/DoodExtractor.kt | 43 ------------- src/ar/animerco/build.gradle | 6 +- .../animeextension/ar/animerco/Animerco.kt | 2 +- .../ar/animerco/extractors/DoodExtractor.kt | 43 ------------- src/ar/movizland/build.gradle | 6 +- .../animeextension/ar/movizland/Movizland.kt | 2 +- .../ar/movizland/extractors/DoodExtractor.kt | 43 ------------- src/ar/shahid4u/build.gradle | 6 +- .../animeextension/ar/shahid4u/Shahid4U.kt | 2 +- .../ar/shahid4u/extractors/DoodExtractor.kt | 43 ------------- src/ar/witanime/build.gradle | 6 +- .../animeextension/ar/witanime/WitAnime.kt | 2 +- .../ar/witanime/extractors/DoodExtractor.kt | 43 ------------- src/de/aniflix/build.gradle | 6 +- .../animeextension/de/aniflix/Aniflix.kt | 4 +- .../de/aniflix/extractors/DoodExtractor.kt | 40 ------------ src/de/animeshitai/build.gradle | 6 +- .../de/animeshitai/AnimeShitai.kt | 2 +- .../animeshitai/extractors/DoodExtractor.kt | 42 ------------- src/de/animetoast/build.gradle | 6 +- .../de/animetoast/AnimeToast.kt | 4 +- .../de/animetoast/extractors/DoodExtractor.kt | 40 ------------ src/de/aniworld/build.gradle | 6 +- .../animeextension/de/aniworld/AniWorld.kt | 2 +- .../de/aniworld/extractors/DoodExtractor.kt | 42 ------------- src/de/fireanime/build.gradle | 6 +- .../animeextension/de/fireanime/FireAnime.kt | 4 +- .../de/fireanime/extractors/DoodExtractor.kt | 40 ------------ src/de/kinoking/build.gradle | 6 +- .../animeextension/de/kinoking/Kinoking.kt | 5 +- .../de/kinoking/extractors/DoodExtractor.kt | 61 ------------------- src/de/serienstream/build.gradle | 6 +- .../de/serienstream/Serienstream.kt | 2 +- .../serienstream/extractors/DoodExtractor.kt | 42 ------------- src/de/streamcloud/build.gradle | 6 +- .../de/streamcloud/StreamCloud.kt | 4 +- .../streamcloud/extractors/DoodExtractor.kt | 40 ------------ src/en/animension/build.gradle | 6 +- .../en/animension/Animension.kt | 2 +- .../en/animension/extractors/DoodExtractor.kt | 43 ------------- src/en/asianload/build.gradle | 6 +- .../animeextension/en/asianload/AsianLoad.kt | 2 +- .../en/asianload/extractors/DoodExtractor.kt | 43 ------------- src/en/dopebox/build.gradle | 3 +- .../animeextension/en/dopebox/DopeBox.kt | 2 +- .../en/dopebox/extractors/DoodExtractor.kt | 43 ------------- src/en/dramacool/build.gradle | 6 +- .../animeextension/en/dramacool/DramaCool.kt | 2 +- .../en/dramacool/extractors/DoodExtractor.kt | 43 ------------- src/en/genoanime/build.gradle | 6 +- .../animeextension/en/genoanime/GenoAnime.kt | 2 +- .../en/genoanime/extractors/DoodExtractor.kt | 43 ------------- src/en/gogoanime/build.gradle | 6 +- .../animeextension/en/gogoanime/GogoAnime.kt | 2 +- .../en/gogoanime/extractors/DoodExtractor.kt | 43 ------------- src/en/kickassanime/build.gradle | 6 +- .../en/kickassanime/KickAssAnime.kt | 2 +- .../kickassanime/extractors/DoodExtractor.kt | 43 ------------- src/en/sflix/build.gradle | 3 +- .../animeextension/en/sflix/SFlix.kt | 2 +- .../en/sflix/extractors/DoodExtractor.kt | 43 ------------- src/es/animeflv/build.gradle | 6 +- .../animeextension/es/animeflv/AnimeFlv.kt | 4 +- .../es/animeflv/extractors/DoodExtractor.kt | 43 ------------- src/es/animelatinohd/build.gradle | 6 +- .../es/animelatinohd/AnimeLatinoHD.kt | 2 +- src/es/animeonlineninja/build.gradle | 6 +- .../es/animeonlineninja/AnimeonlineNinja.kt | 4 +- .../extractors/DoodExtractor.kt | 43 ------------- src/es/pelisflix/build.gradle | 6 +- .../es/pelisflix/PelisflixFactory.kt | 4 +- .../es/pelisflix/extractors/DoodExtractor.kt | 43 ------------- src/es/pelisplushd/build.gradle | 6 +- .../es/pelisplushd/Pelisplushd.kt | 4 +- .../pelisplushd/extractors/DoodExtractor.kt | 43 ------------- src/fr/vostfree/build.gradle | 6 +- .../animeextension/fr/vostfree/Vostfree.kt | 4 +- .../fr/vostfree/extractors/DoodExtractor.kt | 40 ------------ src/it/animeworld/build.gradle | 6 +- .../it/animeworld/ANIMEWORLD.kt | 2 +- .../it/animeworld/extractors/DoodExtractor.kt | 43 ------------- src/pt/animesvision/build.gradle | 4 +- .../pt/animesvision/AnimesVision.kt | 2 +- .../animesvision/extractors/DoodExtractor.kt | 43 ------------- 92 files changed, 291 insertions(+), 1280 deletions(-) create mode 100755 .github/scripts/bump-versions.sh create mode 100644 lib/dood-extractor/build.gradle.kts create mode 100644 lib/dood-extractor/src/main/AndroidManifest.xml rename {src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors => lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor}/DoodExtractor.kt (62%) delete mode 100644 src/ar/animelek/src/eu/kanade/tachiyomi/animeextension/ar/animelek/extractors/DoodExtractor.kt delete mode 100644 src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/extractors/DoodExtractor.kt delete mode 100644 src/ar/movizland/src/eu/kanade/tachiyomi/animeextension/ar/movizland/extractors/DoodExtractor.kt delete mode 100644 src/ar/shahid4u/src/eu/kanade/tachiyomi/animeextension/ar/shahid4u/extractors/DoodExtractor.kt delete mode 100755 src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/DoodExtractor.kt delete mode 100644 src/de/aniflix/src/eu/kanade/tachiyomi/animeextension/de/aniflix/extractors/DoodExtractor.kt delete mode 100644 src/de/animeshitai/src/eu/kanade/tachiyomi/animeextension/de/animeshitai/extractors/DoodExtractor.kt delete mode 100644 src/de/animetoast/src/eu/kanade/tachiyomi/animeextension/de/animetoast/extractors/DoodExtractor.kt delete mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/DoodExtractor.kt delete mode 100644 src/de/fireanime/src/eu/kanade/tachiyomi/animeextension/de/fireanime/extractors/DoodExtractor.kt delete mode 100644 src/de/kinoking/src/eu/kanade/tachiyomi/animeextension/de/kinoking/extractors/DoodExtractor.kt delete mode 100644 src/de/serienstream/src/eu/kanade/tachiyomi/animeextension/de/serienstream/extractors/DoodExtractor.kt delete mode 100644 src/de/streamcloud/src/eu/kanade/tachiyomi/animeextension/de/streamcloud/extractors/DoodExtractor.kt delete mode 100644 src/en/animension/src/eu/kanade/tachiyomi/animeextension/en/animension/extractors/DoodExtractor.kt delete mode 100644 src/en/asianload/src/eu/kanade/tachiyomi/animeextension/en/asianload/extractors/DoodExtractor.kt delete mode 100644 src/en/dopebox/src/eu/kanade/tachiyomi/animeextension/en/dopebox/extractors/DoodExtractor.kt delete mode 100644 src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/extractors/DoodExtractor.kt delete mode 100644 src/en/genoanime/src/eu/kanade/tachiyomi/animeextension/en/genoanime/extractors/DoodExtractor.kt delete mode 100644 src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/extractors/DoodExtractor.kt delete mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/extractors/DoodExtractor.kt delete mode 100644 src/en/sflix/src/eu/kanade/tachiyomi/animeextension/en/sflix/extractors/DoodExtractor.kt delete mode 100644 src/es/animeflv/src/eu/kanade/tachiyomi/animeextension/es/animeflv/extractors/DoodExtractor.kt delete mode 100644 src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/extractors/DoodExtractor.kt delete mode 100644 src/es/pelisflix/src/eu/kanade/tachiyomi/animeextension/es/pelisflix/extractors/DoodExtractor.kt delete mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/extractors/DoodExtractor.kt delete mode 100644 src/fr/vostfree/src/eu/kanade/tachiyomi/animeextension/fr/vostfree/extractors/DoodExtractor.kt delete mode 100644 src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/DoodExtractor.kt delete mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/extractors/DoodExtractor.kt diff --git a/.github/scripts/bump-versions.sh b/.github/scripts/bump-versions.sh new file mode 100755 index 000000000..2652fa7fb --- /dev/null +++ b/.github/scripts/bump-versions.sh @@ -0,0 +1,49 @@ +#!/bin/bash +versionStr="extVersionCode =" + +getVersion() { + # cut -d "=" -f 2 -> string.split("=")[1] + # "extVersionCode = 6" -> ["extVersionCode ", " 6"] -> " 6" -> "6" + grep "$versionStr" "$1" | cut -d "=" -f 2 | cut -d " " -f 2 +} + +bumpVersion() { + local file=$1 + local old_version=$(getVersion $file) + local new_version=$((old_version + 1)) + + echo -e "\n$file: $old_version -> $new_version\n" + sed -i "s/$versionStr $old_version/$versionStr $new_version/" $file +} + +findAndBump() { + local bumpedFiles="" + for lib in $@; do + for file in $(grep -l -R ":lib-$lib" --include "build.gradle"); do + # prevent bumping the same extension multiple times + if [[ ! $bumpedFiles =~ ( |^)$file( |$) ]]; then + bumpedFiles+="$file " + bumpVersion $file + fi + done + done + commitChanges $bumpedFiles +} + +commitChanges() { + # this will NOT trigger another workflow, because it will use $GITHUB_TOKEN. + # so the build-action will run fine with the bumped-up extensions + if [[ -n "$@" ]]; then + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + git add $@ + git commit -m "Mass-bump on extensions" + git push + fi +} + +# lib/cryptoaes/build.gradle.kts -> lib/cryptoaes -> cryptoaes +modified=$(echo $@ | tr " " "\n" | grep -Eo "^lib/\w+" | sort | uniq | cut -c 5-) +if [[ -n "$modified" ]]; then + findAndBump $modified +fi diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index a92c27352..c13cf62a1 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -29,6 +29,19 @@ jobs: - name: Clone repo uses: actions/checkout@v3 + - name: Find lib changes + id: modified-libs + uses: tj-actions/changed-files@v32 + with: + files: lib/** + files_ignore: lib/**.md + files_separator: " " + # This step is going to commit, but this will not trigger another workflow. + - name: Bump extensions that uses a modified lib + if: steps.modified-libs.outputs.any_changed == 'true' + run: | + ./.github/scripts/bump-versions.sh ${{ steps.modified-libs.outputs.all_changed_files }} + - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 diff --git a/lib/dood-extractor/build.gradle.kts b/lib/dood-extractor/build.gradle.kts new file mode 100644 index 000000000..1c2f5bc51 --- /dev/null +++ b/lib/dood-extractor/build.gradle.kts @@ -0,0 +1,24 @@ +plugins { + id("com.android.library") + kotlin("android") +} + +android { + compileSdk = AndroidConfig.compileSdk + + defaultConfig { + minSdk = AndroidConfig.minSdk + targetSdk = AndroidConfig.targetSdk + } +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly(libs.kotlin.stdlib) + compileOnly(libs.okhttp) + compileOnly(libs.aniyomi.lib) +} +// BUMPS: 0 \ No newline at end of file diff --git a/lib/dood-extractor/src/main/AndroidManifest.xml b/lib/dood-extractor/src/main/AndroidManifest.xml new file mode 100644 index 000000000..fd4aec6b0 --- /dev/null +++ b/lib/dood-extractor/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors/DoodExtractor.kt b/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt similarity index 62% rename from src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors/DoodExtractor.kt rename to lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt index 66a832901..6c4ca1223 100644 --- a/src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors/DoodExtractor.kt +++ b/lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.animeextension.es.animelatinohd.extractors +package eu.kanade.tachiyomi.lib.doodextractor import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.network.GET @@ -6,10 +6,19 @@ import okhttp3.Headers import okhttp3.OkHttpClient class DoodExtractor(private val client: OkHttpClient) { - fun videoFromUrl(url: String, quality: String): Video? { + + fun videoFromUrl( + url: String, + quality: String? = null, + redirect: Boolean = true + ): Video? { + val newQuality = quality ?: "Doodstream" + if(redirect) " mirror" else "" + return try { val response = client.newCall(GET(url)).execute() - val doodTld = url.substringAfter("https://dood.").substringBefore("/") + val newUrl = if(redirect) response.request.url.toString() else url + + val doodTld = newUrl.substringAfter("https://dood.").substringBefore("/") val content = response.body!!.string() if (!content.contains("'/pass_md5/")) return null val md5 = content.substringAfter("'/pass_md5/").substringBefore("',") @@ -19,16 +28,25 @@ class DoodExtractor(private val client: OkHttpClient) { val videoUrlStart = client.newCall( GET( "https://dood.$doodTld/pass_md5/$md5", - Headers.headersOf("referer", url) + Headers.headersOf("referer", newUrl) ) ).execute().body!!.string() val videoUrl = "$videoUrlStart$randomString?token=$token&expiry=$expiry" - Video(url, quality, videoUrl, headers = doodHeaders(doodTld)) + Video(newUrl, newQuality, videoUrl, headers = doodHeaders(doodTld)) } catch (e: Exception) { null } } + fun videosFromUrl( + url: String, + quality: String? = null, + redirect: Boolean = true + ): List