From a3a4df376886158b57471b79c6fb3f45354c0de0 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 1 Nov 2022 12:50:58 +0100 Subject: [PATCH] add infoHash to stremio (i've yet to find a working link) --- .../kotlin/com/lagradost/StremioProvider.kt | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt b/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt index 7df1815..9e7cc31 100644 --- a/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt +++ b/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt @@ -13,6 +13,8 @@ import com.lagradost.cloudstream3.utils.loadExtractor import org.json.JSONObject import java.net.URLEncoder +private const val TRACKER_LIST_URL = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" + class StremioProvider : MainAPI() { override var mainUrl = "https://stremio.github.io/stremio-static-addon-example" override var name = "Stremio example" @@ -53,7 +55,6 @@ class StremioProvider : MainAPI() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ): Boolean { - Log.i("Stremio", data) val res = tryParseJson(app.get(data).text) ?: return false res.streams.forEach { stream -> stream.runCallback(subtitleCallback, callback) @@ -164,7 +165,9 @@ class StremioProvider : MainAPI() { val url: String?, val ytId: String?, val externalUrl: String?, - val behaviorHints: JSONObject? + val behaviorHints: JSONObject?, + val infoHash: String?, + val sources: List = emptyList() ) { suspend fun runCallback(subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { if (url != null) { @@ -205,6 +208,33 @@ class StremioProvider : MainAPI() { if (externalUrl != null) { loadExtractor(externalUrl, subtitleCallback, callback) } + if (infoHash != null) { + val resp = app.get(TRACKER_LIST_URL).text + val otherTrackers = resp + .split("\n") + .filterIndexed{i, s -> i%2==0} + .filter{s -> !s.isNullOrEmpty()} + .map{it -> "&tr=$it"} + .joinToString("") + + val sourceTrackers = sources + .filter{it->it.startsWith("tracker:")} + .map{it->it.removePrefix("tracker:")} + .filter{s -> !s.isNullOrEmpty()} + .map{it -> "&tr=$it"} + .joinToString("") + + val magnet = "magnet:?xt=urn:btih:${infoHash}${sourceTrackers}" + callback.invoke( + ExtractorLink( + name ?: "", + title ?: name ?: "", + magnet, + "", + Qualities.Unknown.value + ) + ) + } } }