diff --git a/app/build.gradle b/app/build.gradle index bfab645d..d78fb37d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -156,7 +156,7 @@ dependencies { // Networking // implementation "com.squareup.okhttp3:okhttp:4.9.2" // implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1" - implementation 'com.github.Blatzar:NiceHttp:0.1.8' + implementation 'com.github.Blatzar:NiceHttp:0.2.0' // Util to skip the URI file fuckery 🙏 implementation "com.github.tachiyomiorg:unifile:17bec43" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd7a2ec0..6dcd4e1b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ - + () val urls = listOf( @@ -27,19 +28,21 @@ class SoaptwoDayProvider:MainAPI() { for ((url, name) in urls) { try { val soup = app.get(url).document - val home = soup.select("div.container div.row div.col-sm-12.col-lg-12 div.row div.col-sm-12.col-lg-12 .col-xs-6").map { - val title = it.selectFirst("h5 a")!!.text() - val link = it.selectFirst("a")!!.attr("href") - TvSeriesSearchResponse( - title, - link, - this.name, - TvType.TvSeries, - fixUrl(it.selectFirst("img")!!.attr("src")), - null, - null, - ) - } + val home = + soup.select("div.container div.row div.col-sm-12.col-lg-12 div.row div.col-sm-12.col-lg-12 .col-xs-6") + .map { + val title = it.selectFirst("h5 a")!!.text() + val link = it.selectFirst("a")!!.attr("href") + TvSeriesSearchResponse( + title, + link, + this.name, + TvType.TvSeries, + fixUrl(it.selectFirst("img")!!.attr("src")), + null, + null, + ) + } items.add(HomePageList(name, home)) } catch (e: Exception) { @@ -51,34 +54,36 @@ class SoaptwoDayProvider:MainAPI() { override suspend fun search(query: String): List { val doc = app.get("$mainUrl/search/keyword/$query").document - return doc.select("div.container div.row div.col-sm-12.col-lg-12 div.row div.col-sm-12.col-lg-12 .col-xs-6").map { - val title = it.selectFirst("h5 a")!!.text() - val image = fixUrl(it.selectFirst("img")!!.attr("src")) - val href = fixUrl(it.selectFirst("a")!!.attr("href")) - TvSeriesSearchResponse( - title, - href, - this.name, - TvType.TvSeries, - image, - null, - null - ) - } + return doc.select("div.container div.row div.col-sm-12.col-lg-12 div.row div.col-sm-12.col-lg-12 .col-xs-6") + .map { + val title = it.selectFirst("h5 a")!!.text() + val image = fixUrl(it.selectFirst("img")!!.attr("src")) + val href = fixUrl(it.selectFirst("a")!!.attr("href")) + TvSeriesSearchResponse( + title, + href, + this.name, + TvType.TvSeries, + image, + null, + null + ) + } } override suspend fun load(url: String): LoadResponse? { val soup = app.get(url).document val title = soup.selectFirst(".hidden-lg > div:nth-child(1) > h4")?.text() ?: "" val description = soup.selectFirst("p#wrap")?.text()?.trim() - val poster = soup.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img")?.attr("src") + val poster = + soup.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img")?.attr("src") val episodes = mutableListOf() soup.select("div.alert").forEach { val season = it?.selectFirst("h4")?.text()?.filter { c -> c.isDigit() }?.toIntOrNull() it?.select("div > div > a")?.forEach { entry -> val link = fixUrlNull(entry?.attr("href")) ?: return@forEach val text = entry?.text() ?: "" - val name = text.replace(Regex("(^(\\d+)\\.)"),"") + val name = text.replace(Regex("(^(\\d+)\\.)"), "") val epNum = text.substring(0, text.indexOf(".")).toIntOrNull() episodes.add( Episode( @@ -149,7 +154,7 @@ class SoaptwoDayProvider:MainAPI() { } } - data class ServerJson ( + data class ServerJson( @JsonProperty("0") val zero: String?, @JsonProperty("key") val key: Boolean?, @JsonProperty("val") val stream: String?, @@ -163,7 +168,7 @@ class SoaptwoDayProvider:MainAPI() { @JsonProperty("next_epi_url") val nextEpiUrl: String? ) - data class Subs ( + data class Subs( @JsonProperty("id") val id: Int?, @JsonProperty("movieId") val movieId: Int?, @JsonProperty("tvId") val tvId: Int?, @@ -188,16 +193,19 @@ class SoaptwoDayProvider:MainAPI() { val idplayer2 = doc.selectFirst("#divP")?.text() val movieid = doc.selectFirst("div.row input#hId")!!.attr("value") val tvType = try { - doc.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img")!!.attr("src") ?: "" + doc.selectFirst(".col-md-5 > div:nth-child(1) > div:nth-child(1) > img")!!.attr("src") + ?: "" } catch (e: Exception) { "" } - val ajaxlink = if (tvType.contains("movie")) "$mainUrl/home/index/GetMInfoAjax" else "$mainUrl/home/index/GetEInfoAjax" + val ajaxlink = + if (tvType.contains("movie")) "$mainUrl/home/index/GetMInfoAjax" else "$mainUrl/home/index/GetEInfoAjax" listOf( idplayer, idplayer2, ).mapNotNull { playerID -> - val url = app.post(ajaxlink, + val url = app.post( + ajaxlink, headers = mapOf( "Host" to "secretlink.xyz", "User-Agent" to USER_AGENT, @@ -211,32 +219,35 @@ class SoaptwoDayProvider:MainAPI() { "Referer" to data, "Sec-Fetch-Dest" to "empty", "Sec-Fetch-Mode" to "cors", - "Sec-Fetch-Site" to "same-origin",), + "Sec-Fetch-Site" to "same-origin", + ), data = mapOf( - Pair("pass",movieid), - Pair("param",playerID), + Pair("pass", movieid), + Pair("param", playerID ?: ""), ) - ).text.replace("\\\"","\"").replace("\"{","{").replace("}\"","}") - .replace("\\\\\\/","\\/") + ).text.replace("\\\"", "\"").replace("\"{", "{").replace("}\"", "}") + .replace("\\\\\\/", "\\/") val json = parseJson(url) listOfNotNull( json.stream, json.streambackup ).apmap { stream -> - val cleanstreamurl = stream.replace("\\/","/").replace("\\\\\\","") + val cleanstreamurl = stream.replace("\\/", "/").replace("\\\\\\", "") if (cleanstreamurl.isNotBlank()) { - callback(ExtractorLink( - "Soap2Day", - "Soap2Day", - cleanstreamurl, - "https://soap2day.ac", - Qualities.Unknown.value, - isM3u8 = false - )) + callback( + ExtractorLink( + "Soap2Day", + "Soap2Day", + cleanstreamurl, + "https://soap2day.ac", + Qualities.Unknown.value, + isM3u8 = false + ) + ) } } json.subs?.forEach { subtitle -> - val sublink = mainUrl+subtitle.path + val sublink = mainUrl + subtitle.path listOf( sublink, subtitle.downlink diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt b/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt index e021bdbe..c6c02e6f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt @@ -211,12 +211,6 @@ class WebViewResolver(val interceptUrl: Regex, val additionalUrls: List = this.method, webViewUrl, this.requestHeaders, - null, - emptyMap(), - emptyMap(), - null, - 10, - TimeUnit.MINUTES ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt index b73aded2..e00ef53a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/MALApi.kt @@ -613,16 +613,18 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { score: Int? = null, num_watched_episodes: Int? = null, ): String? { + val data = mapOf( + "status" to status, + "score" to score?.toString(), + "num_watched_episodes" to num_watched_episodes?.toString() + ).filter { it.value != null } as Map + return app.put( "https://api.myanimelist.net/v2/anime/$id/my_list_status", headers = mapOf( "Authorization" to "Bearer " + (getAuth() ?: return null) ), - data = mapOf( - "status" to status, - "score" to score?.toString(), - "num_watched_episodes" to num_watched_episodes?.toString() - ) + data = data ).text }