From 91258095a9c9e7398dd30ea3d8351930fdfebe41 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Fri, 23 Sep 2022 19:09:16 +0200 Subject: [PATCH 1/2] [hotfix] fix material you theme crashing on a11 --- .../lagradost/cloudstream3/CommonActivity.kt | 9 +++-- .../cloudstream3/ui/settings/SettingsUI.kt | 33 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index b229775c..8f22c01a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -166,7 +166,8 @@ object CommonActivity { "Light" -> R.style.LightMode "Amoled" -> R.style.AmoledMode "AmoledLight" -> R.style.AmoledModeLight - "Monet" -> R.style.MonetMode + "Monet" -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + R.style.MonetMode else R.style.AppTheme else -> R.style.AppTheme } @@ -187,8 +188,10 @@ object CommonActivity { "Banana" -> R.style.OverlayPrimaryColorBanana "Party" -> R.style.OverlayPrimaryColorParty "Pink" -> R.style.OverlayPrimaryColorPink - "Monet" -> R.style.OverlayPrimaryColorMonet - "Monet2" -> R.style.OverlayPrimaryColorMonetTwo + "Monet" -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + R.style.OverlayPrimaryColorMonet else R.style.OverlayPrimaryColorNormal + "Monet2" -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) + R.style.OverlayPrimaryColorMonetTwo else R.style.OverlayPrimaryColorNormal else -> R.style.OverlayPrimaryColorNormal } act.theme.applyStyle(currentTheme, true) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index 9ad3ee8f..e2fd24ca 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.settings +import android.os.Build import android.os.Bundle import android.view.View import androidx.preference.PreferenceFragmentCompat @@ -83,8 +84,20 @@ class SettingsUI : PreferenceFragmentCompat() { } getPref(R.string.app_theme_key)?.setOnPreferenceClickListener { - val prefNames = resources.getStringArray(R.array.themes_names) - val prefValues = resources.getStringArray(R.array.themes_names_values) + val prefNames = resources.getStringArray(R.array.themes_names).toMutableList() + val prefValues = resources.getStringArray(R.array.themes_names_values).toMutableList() + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { // remove monet on android 11 and less + val toRemove = prefValues + .mapIndexed { idx, s -> if (s.startsWith("Monet")) idx else null } + .filterNotNull() + var offset = 0 + toRemove.forEach { idx -> + prefNames.removeAt(idx - offset) + prefValues.removeAt(idx - offset) + offset += 1 + } + } val currentLayout = settingsManager.getString(getString(R.string.app_theme_key), prefValues.first()) @@ -107,8 +120,20 @@ class SettingsUI : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } getPref(R.string.primary_color_key)?.setOnPreferenceClickListener { - val prefNames = resources.getStringArray(R.array.themes_overlay_names) - val prefValues = resources.getStringArray(R.array.themes_overlay_names_values) + val prefNames = resources.getStringArray(R.array.themes_overlay_names).toMutableList() + val prefValues = resources.getStringArray(R.array.themes_overlay_names_values).toMutableList() + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { // remove monet on android 11 and less + val toRemove = prefValues + .mapIndexed { idx, s -> if (s.startsWith("Monet")) idx else null } + .filterNotNull() + var offset = 0 + toRemove.forEach { idx -> + prefNames.removeAt(idx - offset) + prefValues.removeAt(idx - offset) + offset += 1 + } + } val currentLayout = settingsManager.getString(getString(R.string.primary_color_key), prefValues.first()) From e89ee02dd4b023189d8f2ac2bdcdbd5cc5697c71 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 23 Sep 2022 20:20:47 +0200 Subject: [PATCH 2/2] The extractor part of the fix for VidSrc --- .../extractors/VidSrcExtractor.kt | 58 +++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt index 7b087157..63634704 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt @@ -3,10 +3,9 @@ package com.lagradost.cloudstream3.extractors import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.apmap import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper -import com.lagradost.cloudstream3.utils.loadExtractor +import com.lagradost.cloudstream3.utils.* +import kotlinx.coroutines.delay +import java.net.URI class VidSrcExtractor2 : VidSrcExtractor() { override val mainUrl = "https://vidsrc.me/embed" @@ -27,6 +26,25 @@ open class VidSrcExtractor : ExtractorApi() { override val mainUrl = "$absoluteUrl/embed" override val requiresReferer = false + companion object { + /** Infinite function to validate the vidSrc pass */ + suspend fun validatePass(url: String) { + val uri = URI(url) + val host = uri.host + + // Basically turn https://tm3p.vidsrc.stream/ -> https://vidsrc.stream/ + val referer = host.split(".").let { + val size = it.size + "https://" + it.subList(maxOf(0, size - 2), size).joinToString(".") + "/" + } + + while (true) { + app.get(url, referer = referer) + delay(60_000) + } + } + } + override suspend fun getUrl( url: String, referer: String?, @@ -40,7 +58,10 @@ open class VidSrcExtractor : ExtractorApi() { val datahash = it.attr("data-hash") if (datahash.isNotBlank()) { val links = try { - app.get("$absoluteUrl/src/$datahash", referer = "https://source.vidsrc.me/").url + app.get( + "$absoluteUrl/src/$datahash", + referer = "https://source.vidsrc.me/" + ).url } catch (e: Exception) { "" } @@ -54,11 +75,28 @@ open class VidSrcExtractor : ExtractorApi() { val srcresponse = app.get(server, referer = absoluteUrl).text val m3u8Regex = Regex("((https:|http:)//.*\\.m3u8)") val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@apmap - M3u8Helper.generateM3u8( - name, - srcm3u8, - absoluteUrl - ).forEach(callback) + val passRegex = Regex("""['"](.*set_pass[^"']*)""") + val pass = passRegex.find(srcresponse)?.groupValues?.get(1)?.replace( + Regex("""^//"""), "https://" + ) + + callback.invoke( + ExtractorLink( + this.name, + this.name, + srcm3u8, + this.mainUrl, + Qualities.Unknown.value, + extractorData = pass, + isM3u8 = true + ) + ) + +// M3u8Helper.generateM3u8( +// name, +// srcm3u8, +// absoluteUrl +// ).forEach(callback) } else { loadExtractor(linkfixed, url, subtitleCallback, callback) }