From 23fb6cb2c6a86dfb4736bebf3bfeb2a263d267dc Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 25 Apr 2023 04:01:31 -0300 Subject: [PATCH] feat(lib/StreamSB): Get API endpoint dynamically (#1539) --- lib/streamsb-extractor/build.gradle.kts | 1 + .../streamsbextractor/StreamSBExtractor.kt | 76 +++++++++++++++---- 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/lib/streamsb-extractor/build.gradle.kts b/lib/streamsb-extractor/build.gradle.kts index 2ef914770..7c2e749d1 100644 --- a/lib/streamsb-extractor/build.gradle.kts +++ b/lib/streamsb-extractor/build.gradle.kts @@ -19,5 +19,6 @@ dependencies { compileOnly(libs.kotlin.json) compileOnly(libs.okhttp) compileOnly(libs.aniyomi.lib) + compileOnly(libs.injekt.core) } // BUMPS: 0 diff --git a/lib/streamsb-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamsbextractor/StreamSBExtractor.kt b/lib/streamsb-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamsbextractor/StreamSBExtractor.kt index 8712caf57..f3482526d 100644 --- a/lib/streamsb-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamsbextractor/StreamSBExtractor.kt +++ b/lib/streamsb-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamsbextractor/StreamSBExtractor.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.lib.streamsbextractor +import android.app.Application import eu.kanade.tachiyomi.animesource.model.Track import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.network.GET @@ -8,9 +9,34 @@ import kotlinx.serialization.json.Json import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy class StreamSBExtractor(private val client: OkHttpClient) { + companion object { + private const val PREF_ENDPOINT_KEY = "streamsb_api_endpoint" + private const val PREF_ENDPOINT_DEFAULT = "/sources16" + private const val ENDPOINT_URL = "https://raw.githubusercontent.com/Claudemirovsky/streamsb-endpoint/master/endpoint.txt" + } + + private val json: Json by injectLazy() + + private val preferences by lazy { + Injekt.get().getSharedPreferences(javaClass.simpleName, 0x0000) + } + + private fun getEndpoint() = preferences.getString(PREF_ENDPOINT_KEY, PREF_ENDPOINT_DEFAULT)!! + + private fun updateEndpoint() { + client.newCall(GET(ENDPOINT_URL)).execute() + .use { it.body.string() } + .let { + preferences.edit().putString(PREF_ENDPOINT_KEY, it).commit() + } + } + protected fun bytesToHex(bytes: ByteArray): String { val hexArray = "0123456789ABCDEF".toCharArray() val hexChars = CharArray(bytes.size * 2) @@ -26,7 +52,7 @@ class StreamSBExtractor(private val client: OkHttpClient) { // animension, asianload and dramacool uses "common = false" private fun fixUrl(url: String, common: Boolean): String { val host = url.toHttpUrl().host - val sbUrl = "https://$host/sources16" + val sbUrl = "https://$host" + getEndpoint() val id = url.substringAfter(host) .substringAfter("/e/") .substringAfter("/embed-") @@ -43,18 +69,30 @@ class StreamSBExtractor(private val client: OkHttpClient) { fun videosFromUrl(url: String, headers: Headers, prefix: String = "", suffix: String = "", common: Boolean = true, manualData: Boolean = false): List