diff --git a/StremioProvider/build.gradle.kts b/StremioProvider/build.gradle.kts index a810295..0a0b6c7 100644 --- a/StremioProvider/build.gradle.kts +++ b/StremioProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 1 +version = 2 cloudstream { diff --git a/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt b/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt index a72e1ef..7df1815 100644 --- a/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt +++ b/StremioProvider/src/main/kotlin/com/lagradost/StremioProvider.kt @@ -1,14 +1,17 @@ package com.lagradost import android.util.Log +import com.lagradost.StremioProvider.Companion.encodeUri import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.loadExtractor import org.json.JSONObject +import java.net.URLEncoder class StremioProvider : MainAPI() { override var mainUrl = "https://stremio.github.io/stremio-static-addon-example" @@ -30,6 +33,15 @@ class StremioProvider : MainAPI() { ) } + override suspend fun search(query: String): List? { + val res = tryParseJson(app.get("${mainUrl}/manifest.json").text) ?: return null + val list = mutableListOf() + res.catalogs.forEach { catalog -> + list.addAll(catalog.search(query, this)) + } + return list + } + override suspend fun load(url: String): LoadResponse? { val res = tryParseJson(url) ?: throw RuntimeException(url) return res.toLoadResponse(this) @@ -41,10 +53,12 @@ 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) } + return true } @@ -59,10 +73,21 @@ class StremioProvider : MainAPI() { if (type != null) types.add(type) } + suspend fun search(query: String, provider: StremioProvider): List { + val entries = mutableListOf() + types.forEach { type -> + val res = tryParseJson(app.get("${provider.mainUrl}/catalog/${type.encodeUri()}/${id.encodeUri()}/search=${query.encodeUri()}.json").text) ?: return@forEach + res.metas.forEach { entry -> + entries.add(entry.toSearchResponse(provider)) + } + } + return entries + } + suspend fun toHomePageList(provider: StremioProvider): HomePageList? { val entries = mutableListOf() types.forEach { type -> - val res = tryParseJson(app.get("${provider.mainUrl}/catalog/$type/$id.json").text) ?: return@forEach + val res = tryParseJson(app.get("${provider.mainUrl}/catalog/${type.encodeUri()}/${id.encodeUri()}.json").text) ?: return@forEach res.metas.forEach { entry -> entries.add(entry.toSearchResponse(provider)) } @@ -80,26 +105,54 @@ class StremioProvider : MainAPI() { val id: String, val poster: String?, val description: String?, - val type: String? + val type: String?, + val videos: List