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