diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml index 100ad7aaf..dd6fd7751 100644 --- a/.github/workflows/build_pull_request.yml +++ b/.github/workflows/build_pull_request.yml @@ -18,9 +18,9 @@ jobs: runs-on: ubuntu-latest outputs: individualMatrix: ${{ steps.generate-matrices.outputs.individualMatrix }} - #multisrcMatrix: ${{ steps.generate-matrices.outputs.multisrcMatrix }} + multisrcMatrix: ${{ steps.generate-matrices.outputs.multisrcMatrix }} isIndividualChanged: ${{ steps.parse-changed-files.outputs.isIndividualChanged }} - #isMultisrcChanged: ${{ steps.parse-changed-files.outputs.isMultisrcChanged }} + isMultisrcChanged: ${{ steps.parse-changed-files.outputs.isMultisrcChanged }} env: CI_MODULE_GEN: true steps: @@ -44,34 +44,36 @@ jobs: name: Parse changed files run: | isIndividualChanged=0 - #isMultisrcChanged=0 + isMultisrcChanged=0 for changedFile in ${{ steps.get-changed-files.outputs.all }}; do if [[ ${changedFile} == src/* ]]; then isIndividualChanged=1 - # elif [[ ${changedFile} == multisrc/* ]]; then - # isMultisrcChanged=1 + elif [[ ${changedFile} == multisrc/* ]]; then + isMultisrcChanged=1 + elif [[ ${changedFile} == *.md ]]; then + true else isIndividualChanged=1 - # isMultisrcChanged=1 + isMultisrcChanged=1 break fi done - echo "::set-output name=isIndividualChanged::$isIndividualChanged" - #echo "::set-output name=isMultisrcChanged::$isMultisrcChanged" + echo "isIndividualChanged=$isIndividualChanged" >> $GITHUB_OUTPUT + echo "isMultisrcChanged=$isMultisrcChanged" >> $GITHUB_OUTPUT -# - name: Generate multisrc sources -# if: ${{ steps.parse-changed-files.outputs.isMultisrcChanged == '1' }} -# uses: gradle/gradle-command-action@v2 -# with: -# arguments: :multisrc:generateExtensions + - name: Generate multisrc sources + if: ${{ steps.parse-changed-files.outputs.isMultisrcChanged == '1' }} + uses: gradle/gradle-command-action@v2 + with: + arguments: :multisrc:generateExtensions - name: Get number of modules run: | set -x - ./gradlew -q projects | grep '.*extensions\:individual\:.*\:.*' > projects.txt + ./gradlew -q projects | grep '.*extensions\:\(individual\|multisrc\)\:.*\:.*' > projects.txt echo "NUM_INDIVIDUAL_MODULES=$(cat projects.txt | grep '.*\:individual\:.*' | wc -l)" >> $GITHUB_ENV - #echo "NUM_MULTISRC_MODULES=$(cat projects.txt | grep '.*\:multisrc\:.*' | wc -l)" >> $GITHUB_ENV + echo "NUM_MULTISRC_MODULES=$(cat projects.txt | grep '.*\:multisrc\:.*' | wc -l)" >> $GITHUB_ENV - id: generate-matrices name: Create output matrices @@ -79,51 +81,51 @@ jobs: with: script: | const numIndividualModules = process.env.NUM_INDIVIDUAL_MODULES; - //const numMultisrcModules = process.env.NUM_MULTISRC_MODULES; + const numMultisrcModules = process.env.NUM_MULTISRC_MODULES; const chunkSize = process.env.CI_CHUNK_SIZE; const numIndividualChunks = Math.ceil(numIndividualModules / chunkSize); - //const numMultisrcChunks = Math.ceil(numMultisrcModules / chunkSize); + const numMultisrcChunks = Math.ceil(numMultisrcModules / chunkSize); console.log(`Individual modules: ${numIndividualModules} (${numIndividualChunks} chunks of ${chunkSize})`); - //console.log(`Multi-source modules: ${numMultisrcModules} (${numMultisrcChunks} chunks of ${chunkSize})`); + console.log(`Multi-source modules: ${numMultisrcModules} (${numMultisrcChunks} chunks of ${chunkSize})`); core.setOutput('individualMatrix', { 'chunk': [...Array(numIndividualChunks).keys()] }); - //core.setOutput('multisrcMatrix', { 'chunk': [...Array(numMultisrcChunks).keys()] }); + core.setOutput('multisrcMatrix', { 'chunk': [...Array(numMultisrcChunks).keys()] }); - #build_multisrc: - # name: Build multisrc modules - # needs: prepare - # if: ${{ needs.prepare.outputs.isMultisrcChanged == '1' }} - # runs-on: ubuntu-latest - # strategy: - # matrix: ${{ fromJSON(needs.prepare.outputs.multisrcMatrix) }} - # steps: - # - name: Checkout PR - # uses: actions/checkout@v3 + build_multisrc: + name: Build multisrc modules + needs: prepare + if: ${{ needs.prepare.outputs.isMultisrcChanged == '1' }} + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJSON(needs.prepare.outputs.multisrcMatrix) }} + steps: + - name: Checkout PR + uses: actions/checkout@v3 - # - name: Set up JDK - # uses: actions/setup-java@v3 - # with: - # java-version: 11 - # distribution: adopt + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: adopt - # - name: Generate sources from the multi-source library - # uses: gradle/gradle-command-action@v2 - # env: - # CI_MODULE_GEN: "true" - # with: - # arguments: :multisrc:generateExtensions - # cache-read-only: true + - name: Generate sources from the multi-source library + uses: gradle/gradle-command-action@v2 + env: + CI_MODULE_GEN: "true" + with: + arguments: :multisrc:generateExtensions + cache-read-only: true - # - name: Build extensions (chunk ${{ matrix.chunk }}) - # uses: gradle/gradle-command-action@v2 - # env: - # CI_MULTISRC: "true" - # CI_CHUNK_NUM: ${{ matrix.chunk }} - # with: - # arguments: assembleDebug - # cache-read-only: true + - name: Build extensions (chunk ${{ matrix.chunk }}) + uses: gradle/gradle-command-action@v2 + env: + CI_MULTISRC: "true" + CI_CHUNK_NUM: ${{ matrix.chunk }} + with: + arguments: assembleDebug + cache-read-only: true build_individual: name: Build individual modules diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml index 8d86c2e17..3d16db8a3 100644 --- a/.github/workflows/build_push.yml +++ b/.github/workflows/build_push.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest outputs: individualMatrix: ${{ steps.generate-matrices.outputs.individualMatrix }} - #multisrcMatrix: ${{ steps.generate-matrices.outputs.multisrcMatrix }} + multisrcMatrix: ${{ steps.generate-matrices.outputs.multisrcMatrix }} env: CI_MODULE_GEN: true steps: @@ -49,18 +49,18 @@ jobs: java-version: 11 distribution: adopt -# - name: Generate multisrc sources -# uses: gradle/gradle-command-action@v2 -# with: -# arguments: :multisrc:generateExtensions + - name: Generate multisrc sources + uses: gradle/gradle-command-action@v2 + with: + arguments: :multisrc:generateExtensions - name: Get number of modules run: | set -x - ./gradlew -q projects | grep '.*extensions\:individual\:.*\:.*' > projects.txt + ./gradlew -q projects | grep '.*extensions\:\(individual\|multisrc\)\:.*\:.*' > projects.txt echo "NUM_INDIVIDUAL_MODULES=$(cat projects.txt | grep '.*\:individual\:.*' | wc -l)" >> $GITHUB_ENV - #echo "NUM_MULTISRC_MODULES=$(cat projects.txt | grep '.*\:multisrc\:.*' | wc -l)" >> $GITHUB_ENV + echo "NUM_MULTISRC_MODULES=$(cat projects.txt | grep '.*\:multisrc\:.*' | wc -l)" >> $GITHUB_ENV - id: generate-matrices name: Create output matrices @@ -68,68 +68,66 @@ jobs: with: script: | const numIndividualModules = process.env.NUM_INDIVIDUAL_MODULES; - //const numMultisrcModules = process.env.NUM_MULTISRC_MODULES; + const numMultisrcModules = process.env.NUM_MULTISRC_MODULES; const chunkSize = process.env.CI_CHUNK_SIZE; const numIndividualChunks = Math.ceil(numIndividualModules / chunkSize); - //const numMultisrcChunks = Math.ceil(numMultisrcModules / chunkSize); + const numMultisrcChunks = Math.ceil(numMultisrcModules / chunkSize); console.log(`Individual modules: ${numIndividualModules} (${numIndividualChunks} chunks of ${chunkSize})`); - //console.log(`Multi-source modules: ${numMultisrcModules} (${numMultisrcChunks} chunks of ${chunkSize})`); + console.log(`Multi-source modules: ${numMultisrcModules} (${numMultisrcChunks} chunks of ${chunkSize})`); core.setOutput('individualMatrix', { 'chunk': [...Array(numIndividualChunks).keys()] }); - //core.setOutput('multisrcMatrix', { 'chunk': [...Array(numMultisrcChunks).keys()] }); + core.setOutput('multisrcMatrix', { 'chunk': [...Array(numMultisrcChunks).keys()] }); - #build_multisrc: - # name: Build multisrc modules - # needs: prepare - # runs-on: ubuntu-latest - # strategy: - # matrix: ${{ fromJSON(needs.prepare.outputs.multisrcMatrix) }} - # steps: - # - name: Checkout master branch - # uses: actions/checkout@v3 - # with: - # ref: master + build_multisrc: + name: Build multisrc modules + needs: prepare + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJSON(needs.prepare.outputs.multisrcMatrix) }} + steps: + - name: Checkout master branch + uses: actions/checkout@v3 - # - name: Set up JDK - # uses: actions/setup-java@v3 - # with: - # java-version: 11 - # distribution: adopt + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: adopt - # - name: Prepare signing key - # run: | - # echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks + - name: Prepare signing key + run: | + echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks - # - name: Generate sources from the multi-source library - # uses: gradle/gradle-command-action@v2 - # env: - # CI_MODULE_GEN: "true" - # with: - # arguments: :multisrc:generateExtensions + - name: Generate sources from the multi-source library + uses: gradle/gradle-command-action@v2 + env: + CI_MODULE_GEN: "true" + with: + arguments: :multisrc:generateExtensions - # - name: Build extensions (chunk ${{ matrix.chunk }}) - # uses: gradle/gradle-command-action@v2 - # env: - # CI_MULTISRC: "true" - # CI_CHUNK_NUM: ${{ matrix.chunk }} - # ALIAS: ${{ secrets.ALIAS }} - # KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - # KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - # with: - # arguments: assembleRelease + - name: Build extensions (chunk ${{ matrix.chunk }}) + uses: gradle/gradle-command-action@v2 + env: + CI_MULTISRC: "true" + CI_CHUNK_NUM: ${{ matrix.chunk }} + ALIAS: ${{ secrets.ALIAS }} + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + with: + arguments: assembleRelease - # - name: Upload APKs (chunk ${{ matrix.chunk }}) - # uses: actions/upload-artifact@v2 - # if: "github.repository == 'jmir1/aniyomi-extensions'" - # with: - # name: "multisrc-apks-${{ matrix.chunk }}" - # path: "**/*.apk" - # retention-days: 1 + - name: Upload APKs (chunk ${{ matrix.chunk }}) + uses: actions/upload-artifact@v3 + if: "github.repository == 'jmir1/aniyomi-extensions'" + with: + name: "multisrc-apks-${{ matrix.chunk }}" + path: "**/*.apk" + retention-days: 1 - # - name: Clean up CI files - # run: rm signingkey.jks + - name: Clean up CI files + run: rm signingkey.jks build_individual: name: Build individual modules @@ -177,6 +175,7 @@ jobs: name: Publish repo needs: - build_individual + - build_multisrc if: "github.repository == 'jmir1/aniyomi-extensions'" runs-on: ubuntu-latest steps: diff --git a/multisrc/build.gradle.kts b/multisrc/build.gradle.kts new file mode 100644 index 000000000..ca7995fb4 --- /dev/null +++ b/multisrc/build.gradle.kts @@ -0,0 +1,93 @@ +plugins { + id("com.android.library") + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +android { + compileSdk = AndroidConfig.compileSdk + namespace = "eu.kanade.tachiyomi.lib.themesources" + + defaultConfig { + minSdk = 29 + targetSdk = AndroidConfig.targetSdk + } + + kotlinOptions { + freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" + } +} + +configurations { + compileOnly { + isCanBeResolved = true + } +} + +dependencies { + compileOnly(libs.bundles.common) + + // Implements all shared-extractors on the extensions generator + // Note that this does not mean that generated sources are going to + // implement them too; this is just to be able to compile and generate sources. + rootProject.subprojects + .filter { it.path.startsWith(":lib") } + .forEach(::implementation) +} + +tasks { + val generateExtensions by registering { + doLast { + val isWindows = System.getProperty("os.name").toString().toLowerCase().contains("win") + var classPath = ( + configurations.compileOnly.get().asFileTree.toList() + + listOf( + configurations.androidApis.get().asFileTree.first().absolutePath, // android.jar path + "$projectDir/build/intermediates/aar_main_jar/debug/classes.jar", // jar made from this module + ) + ) + .joinToString(if (isWindows) ";" else ":") + + var javaPath = "${System.getProperty("java.home")}/bin/java" + + val mainClass = "generator.GeneratorMainKt" // Main class we want to execute + + if (isWindows) { + classPath = classPath.replace("/", "\\") + javaPath = javaPath.replace("/", "\\") + } + + val javaProcess = ProcessBuilder() + .directory(null).command(javaPath, "-classpath", classPath, mainClass) + .redirectErrorStream(true).start() + + javaProcess.inputStream + .bufferedReader() + .forEachLine(logger::info) + + val exitCode = javaProcess.waitFor() + if (exitCode != 0) { + throw Exception("Java process failed with exit code: $exitCode") + } + } + dependsOn("ktFormat", "ktLint", "assembleDebug") + } + + register("ktLint") { + if (project.hasProperty("theme")) { + val theme = project.property("theme") + source(files("src/main/java/eu/kanade/tachiyomi/multisrc/$theme", "overrides/$theme")) + return@register + } + source(files("src", "overrides")) + } + + register("ktFormat") { + if (project.hasProperty("theme")) { + val theme = project.property("theme") + source(files("src/main/java/eu/kanade/tachiyomi/multisrc/$theme", "overrides/$theme")) + return@register + } + source(files("src", "overrides")) + } +} diff --git a/multisrc/overrides/dopeflix/default/additional.gradle b/multisrc/overrides/dopeflix/default/additional.gradle new file mode 100644 index 000000000..5220e8ca3 --- /dev/null +++ b/multisrc/overrides/dopeflix/default/additional.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation(project(":lib-dood-extractor")) +} diff --git a/src/en/dopebox/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/dopeflix/dopebox/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/en/dopebox/res/mipmap-hdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/dopebox/res/mipmap-hdpi/ic_launcher.png diff --git a/src/en/dopebox/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/dopeflix/dopebox/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/en/dopebox/res/mipmap-mdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/dopebox/res/mipmap-mdpi/ic_launcher.png diff --git a/src/en/dopebox/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/dopebox/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/en/dopebox/res/mipmap-xhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/dopebox/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/en/dopebox/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/dopebox/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/en/dopebox/res/mipmap-xxhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/dopebox/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/en/dopebox/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/dopebox/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/en/dopebox/res/mipmap-xxxhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/dopebox/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/en/dopebox/res/play_store_512.png b/multisrc/overrides/dopeflix/dopebox/res/play_store_512.png similarity index 100% rename from src/en/dopebox/res/play_store_512.png rename to multisrc/overrides/dopeflix/dopebox/res/play_store_512.png diff --git a/multisrc/overrides/dopeflix/dopebox/src/DopeBox.kt b/multisrc/overrides/dopeflix/dopebox/src/DopeBox.kt new file mode 100644 index 000000000..14ca8ff1e --- /dev/null +++ b/multisrc/overrides/dopeflix/dopebox/src/DopeBox.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.animeextension.en.dopebox + +import eu.kanade.tachiyomi.multisrc.dopeflix.DopeFlix + +class DopeBox : DopeFlix( + "DopeBox", + "en", + arrayOf("dopebox.to", "dopebox.se"), // Domain list + "dopebox.to", // Default domain +) { + override val id: Long = 787491081765201367 +} diff --git a/src/en/sflix/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/dopeflix/sflix/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/en/sflix/res/mipmap-hdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/sflix/res/mipmap-hdpi/ic_launcher.png diff --git a/src/en/sflix/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/dopeflix/sflix/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/en/sflix/res/mipmap-mdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/sflix/res/mipmap-mdpi/ic_launcher.png diff --git a/src/en/sflix/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/sflix/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/en/sflix/res/mipmap-xhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/sflix/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/en/sflix/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/sflix/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/en/sflix/res/mipmap-xxhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/sflix/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/en/sflix/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/dopeflix/sflix/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/en/sflix/res/mipmap-xxxhdpi/ic_launcher.png rename to multisrc/overrides/dopeflix/sflix/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/en/sflix/res/play_store_512.png b/multisrc/overrides/dopeflix/sflix/res/play_store_512.png similarity index 100% rename from src/en/sflix/res/play_store_512.png rename to multisrc/overrides/dopeflix/sflix/res/play_store_512.png diff --git a/multisrc/overrides/dopeflix/sflix/src/SFlix.kt b/multisrc/overrides/dopeflix/sflix/src/SFlix.kt new file mode 100644 index 000000000..23cb0facd --- /dev/null +++ b/multisrc/overrides/dopeflix/sflix/src/SFlix.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.animeextension.en.sflix + +import eu.kanade.tachiyomi.multisrc.dopeflix.DopeFlix + +class SFlix : DopeFlix( + "SFlix", + "en", + arrayOf("sflix.to", "sflix.se"), // Domain list + "sflix.to", // Default domain +) { + override val id: Long = 8615824918772726940 +} diff --git a/src/en/sflix/src/eu/kanade/tachiyomi/animeextension/en/sflix/SFlix.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlix.kt similarity index 84% rename from src/en/sflix/src/eu/kanade/tachiyomi/animeextension/en/sflix/SFlix.kt rename to multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlix.kt index e1002bf7f..f31c369de 100644 --- a/src/en/sflix/src/eu/kanade/tachiyomi/animeextension/en/sflix/SFlix.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlix.kt @@ -1,10 +1,9 @@ -package eu.kanade.tachiyomi.animeextension.en.sflix +package eu.kanade.tachiyomi.multisrc.dopeflix import android.app.Application import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen -import eu.kanade.tachiyomi.animeextension.en.sflix.extractors.SFlixExtractor import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.AnimesPage @@ -14,6 +13,8 @@ import eu.kanade.tachiyomi.animesource.model.Track import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.multisrc.dopeflix.dto.VideoDto +import eu.kanade.tachiyomi.multisrc.dopeflix.extractors.DopeFlixExtractor import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.util.asJsoup @@ -23,10 +24,6 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.runBlocking import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient @@ -37,18 +34,18 @@ import org.jsoup.nodes.Element import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -import uy.kohesive.injekt.injectLazy -class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { - - override val name = "SFlix" +abstract class DopeFlix( + override val name: String, + override val lang: String, + private val domainArray: Array, + private val defaultDomain: String, +) : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val baseUrl by lazy { - "https://" + preferences.getString(PREF_DOMAIN_KEY, "sflix.to")!! + "https://" + preferences.getString(PREF_DOMAIN_KEY, defaultDomain)!! } - override val lang = "en" - override val supportsLatest = true override val client: OkHttpClient = network.cloudflareClient @@ -57,7 +54,9 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - private val json: Json by injectLazy() + private val json = Json { + ignoreUnknownKeys = true + } override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("Referer", "$baseUrl/") @@ -67,7 +66,7 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun popularAnimeSelector(): String = "div.film_list-wrap div.flw-item div.film-poster" override fun popularAnimeRequest(page: Int): Request { - val type = preferences.getString(PREF_POPULAR_KEY, "movie")!! + val type = preferences.getString(PREF_POPULAR_KEY, PREF_POPULAR_DEFAULT)!! return GET("$baseUrl/$type?page=$page") } @@ -148,7 +147,7 @@ class SFlix : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListParse(response: Response): List