diff --git a/StremioX/src/main/kotlin/com/hexated/Stremio.kt b/StremioX/src/main/kotlin/com/hexated/Stremio.kt index b5c08f57..2fb7b2f5 100644 --- a/StremioX/src/main/kotlin/com/hexated/Stremio.kt +++ b/StremioX/src/main/kotlin/com/hexated/Stremio.kt @@ -17,9 +17,10 @@ class Stremio : MainAPI() { override var name = "Stremio" override val supportedTypes = setOf(TvType.Others) override val hasMainPage = true + private val fixedUrl = mainUrl.fixSourceUrl() override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse? { - val res = tryParseJson(app.get("${mainUrl}/manifest.json").text) ?: return null + val res = tryParseJson(app.get("${fixedUrl}/manifest.json").text) ?: return null val lists = mutableListOf() res.catalogs.forEach { catalog -> catalog.toHomePageList(this)?.let { @@ -33,7 +34,7 @@ class Stremio : MainAPI() { } override suspend fun search(query: String): List? { - val res = tryParseJson(app.get("${mainUrl}/manifest.json").text) ?: return null + val res = tryParseJson(app.get("${fixedUrl}/manifest.json").text) ?: return null val list = mutableListOf() res.catalogs.forEach { catalog -> list.addAll(catalog.search(query, this)) @@ -43,7 +44,7 @@ class Stremio : MainAPI() { override suspend fun load(url: String): LoadResponse? { val res = parseJson(url) - val json = app.get("${mainUrl}/meta/${res.type}/${res.id}.json") + val json = app.get("${fixedUrl}/meta/${res.type}/${res.id}.json") .parsedSafe()?.meta ?: throw RuntimeException(url) return json.toLoadResponse(this) } @@ -77,7 +78,7 @@ class Stremio : MainAPI() { val entries = mutableListOf() types.forEach { type -> val json = - app.get("${provider.mainUrl}/catalog/${type}/${id}/search=${query}.json").text + app.get("${provider.fixedUrl}/catalog/${type}/${id}/search=${query}.json").text val res = tryParseJson(json) ?: return@forEach @@ -91,7 +92,7 @@ class Stremio : MainAPI() { suspend fun toHomePageList(provider: Stremio): HomePageList? { val entries = mutableListOf() types.forEach { type -> - val json = app.get("${provider.mainUrl}/catalog/${type}/${id}.json").text + val json = app.get("${provider.fixedUrl}/catalog/${type}/${id}.json").text val res = tryParseJson(json) ?: return@forEach @@ -129,9 +130,9 @@ class Stremio : MainAPI() { if (videos == null || videos.isEmpty()) { return provider.newMovieLoadResponse( name, - "${provider.mainUrl}/meta/${type}/${id}.json", + "${provider.fixedUrl}/meta/${type}/${id}.json", TvType.Others, - "${provider.mainUrl}/stream/${type}/${id}.json" + "${provider.fixedUrl}/stream/${type}/${id}.json" ) { posterUrl = poster plot = description @@ -139,7 +140,7 @@ class Stremio : MainAPI() { } else { return provider.newTvSeriesLoadResponse( name, - "${provider.mainUrl}/meta/${type}/${id}.json", + "${provider.fixedUrl}/meta/${type}/${id}.json", TvType.Others, videos.map { it.toEpisode(provider, type) @@ -161,7 +162,7 @@ class Stremio : MainAPI() { ) { fun toEpisode(provider: Stremio, type: String?): Episode { return provider.newEpisode( - "${provider.mainUrl}/stream/${type}/${id}.json" + "${provider.fixedUrl}/stream/${type}/${id}.json" ) { this.name = title this.posterUrl = thumbnail @@ -209,7 +210,7 @@ class Stremio : MainAPI() { name ?: "", title ?: name ?: "", url, - if (provider.mainUrl.contains("kisskh")) "https://kisskh.me/" else referer + if (provider.fixedUrl.contains("kisskh")) "https://kisskh.me/" else referer ?: "", getQualityFromName(description), isM3u8 = URI(url).path.endsWith(".m3u8") diff --git a/StremioX/src/main/kotlin/com/hexated/StremioX.kt b/StremioX/src/main/kotlin/com/hexated/StremioX.kt index cd973fc9..0e5c64ac 100644 --- a/StremioX/src/main/kotlin/com/hexated/StremioX.kt +++ b/StremioX/src/main/kotlin/com/hexated/StremioX.kt @@ -311,40 +311,6 @@ open class StremioX : MainAPI() { } - private fun String.fixSourceUrl() : String { - return this.replace("/manifest.json", "").replace("stremio://", "https://") - } - - private fun getEpisodeSlug( - season: Int? = null, - episode: Int? = null, - ): Pair { - return if (season == null && episode == null) { - "" to "" - } else { - (if (season!! < 10) "0$season" else "$season") to (if (episode!! < 10) "0$episode" else "$episode") - } - } - - private fun fixUrl(url: String, domain: String): String { - if (url.startsWith("http")) { - return url - } - if (url.isEmpty()) { - return "" - } - - val startsWithNoHttp = url.startsWith("//") - if (startsWithNoHttp) { - return "https:$url" - } else { - if (url.startsWith('/')) { - return domain + url - } - return "$domain/$url" - } - } - private data class StreamsResponse(val streams: List) private data class Subtitle( val url: String?, diff --git a/StremioX/src/main/kotlin/com/hexated/Utils.kt b/StremioX/src/main/kotlin/com/hexated/Utils.kt new file mode 100644 index 00000000..f0c29fc1 --- /dev/null +++ b/StremioX/src/main/kotlin/com/hexated/Utils.kt @@ -0,0 +1,35 @@ +package com.hexated + +fun String.fixSourceUrl() : String { + return this.replace("/manifest.json", "").replace("stremio://", "https://") +} + +fun getEpisodeSlug( + season: Int? = null, + episode: Int? = null, +): Pair { + return if (season == null && episode == null) { + "" to "" + } else { + (if (season!! < 10) "0$season" else "$season") to (if (episode!! < 10) "0$episode" else "$episode") + } +} + +fun fixUrl(url: String, domain: String): String { + if (url.startsWith("http")) { + return url + } + if (url.isEmpty()) { + return "" + } + + val startsWithNoHttp = url.startsWith("//") + if (startsWithNoHttp) { + return "https:$url" + } else { + if (url.startsWith('/')) { + return domain + url + } + return "$domain/$url" + } +} \ No newline at end of file