diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 28419e7a..e626dcd6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -32,7 +32,9 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.android.gms.cast.framework.* import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.navigationrail.NavigationRailView +import com.google.android.material.snackbar.Snackbar import com.jaredrummler.android.colorpicker.ColorPickerDialogListener +import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings @@ -79,6 +81,7 @@ import com.lagradost.cloudstream3.ui.setup.SetupFragmentExtensions import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable +import com.lagradost.cloudstream3.utils.AppUtils.isNetworkAvailable import com.lagradost.cloudstream3.utils.AppUtils.loadCache import com.lagradost.cloudstream3.utils.AppUtils.loadRepository import com.lagradost.cloudstream3.utils.AppUtils.loadResult @@ -86,6 +89,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStoreHelper.migrateResumeWatching @@ -717,6 +721,28 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { changeStatusBarState(isEmulatorSettings()) + // Automatically enable jsdelivr if cant connect to raw.githubusercontent.com + if (this.getKey(getString(R.string.jsdelivr_proxy_key)) == null && isNetworkAvailable()) { + main { + if (checkGithubConnectivity()) { + this.setKey(getString(R.string.jsdelivr_proxy_key), false) + } else { + this.setKey(getString(R.string.jsdelivr_proxy_key), true) + val parentView: View = findViewById(android.R.id.content) + Snackbar.make(parentView, R.string.jsdelivr_enabled, Snackbar.LENGTH_LONG).let { snackbar -> + snackbar.setAction(R.string.revert) { + setKey(getString(R.string.jsdelivr_proxy_key), false) + } + snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground)) + snackbar.setTextColor(colorFromAttribute(R.attr.textColor)) + snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary)) + snackbar.show() + } + } + + } + } + if (PluginManager.checkSafeModeFile()) { normalSafeApiCall { @@ -1090,4 +1116,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // } } + + suspend fun checkGithubConnectivity(): Boolean { + return try { + app.get("https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck", timeout = 5).text.trim() == "ok" + } catch (t: Throwable) { + false + } + } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt index 7ec1fb22..0d94eb08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -38,6 +38,9 @@ class DoodWsExtractor : DoodLaExtractor() { override var mainUrl = "https://dood.ws" } +class DoodYtExtractor : DoodLaExtractor() { + override var mainUrl = "https://dood.yt" +} open class DoodLaExtractor : ExtractorApi() { override var name = "DoodStream" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt index eddbf6df..3e38b446 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt @@ -16,26 +16,7 @@ open class Evoload : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List { - val lang = url.substring(0, 2) - val flag = - if (lang == "vo") { - " \uD83C\uDDEC\uD83C\uDDE7" - } - else if (lang == "vf"){ - " \uD83C\uDDE8\uD83C\uDDF5" - } else { - "" - } - - val cleaned_url = if (lang == "ht") { // if url doesn't contain a flag and the url starts with http:// - url - } else { - url.substring(2, url.length) - } - //println(lang) - //println(cleaned_url) - - val id = cleaned_url.replace("https://evoload.io/e/", "") // wanted media id + val id = url.replace("https://evoload.io/e/", "") // wanted media id val csrv_token = app.get("https://csrv.evosrv.com/captcha?m412548=").text // whatever that is val captchaPass = app.get("https://cd2.evosrv.com/html/jsx/e.jsx").text.take(300).split("captcha_pass = '")[1].split("\'")[0] //extract the captcha pass from the js response (located in the 300 first chars) val payload = mapOf("code" to id, "csrv_token" to csrv_token, "pass" to captchaPass) @@ -44,9 +25,9 @@ open class Evoload : ExtractorApi() { return listOf( ExtractorLink( name, - name + flag, + name, link, - cleaned_url, + url, Qualities.Unknown.value, ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt index bc910a7e..382ca756 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -13,6 +13,11 @@ class FileMoon : Filesim() { override val name = "FileMoon" } +class FileMoonSx : Filesim() { + override val mainUrl = "https://filemoon.sx" + override val name = "FileMoonSx" +} + open class Filesim : ExtractorApi() { override val name = "Filesim" override val mainUrl = "https://files.im" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt index c28a8900..6a4945bb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt @@ -18,31 +18,36 @@ open class Linkbox : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val id = Regex("""(/file/|id=)(\S+)[&/?]""").find(url)?.groupValues?.get(2) - app.get("$mainUrl/api/open/get_url?itemId=$id", referer=url).parsedSafe()?.data?.rList?.map { link -> - callback.invoke( - ExtractorLink( - name, - name, - link.url, - url, - getQualityFromName(link.resolution) + val id = Regex("""(?:/f/|/file/|\?id=)(\w+)""").find(url)?.groupValues?.get(1) + app.get("$mainUrl/api/file/detail?itemId=$id", referer = url) + .parsedSafe()?.data?.itemInfo?.resolutionList?.map { link -> + callback.invoke( + ExtractorLink( + name, + name, + link.url ?: return@map null, + url, + getQualityFromName(link.resolution) + ) ) - ) - } + } } - data class RList( - @JsonProperty("url") val url: String, - @JsonProperty("resolution") val resolution: String?, + data class Resolutions( + @JsonProperty("url") val url: String? = null, + @JsonProperty("resolution") val resolution: String? = null, + ) + + data class ItemInfo( + @JsonProperty("resolutionList") val resolutionList: ArrayList? = arrayListOf(), ) data class Data( - @JsonProperty("rList") val rList: List?, + @JsonProperty("itemInfo") val itemInfo: ItemInfo? = null, ) data class Responses( - @JsonProperty("data") val data: Data?, + @JsonProperty("data") val data: Data? = null, ) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt index b77617c2..b7477242 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -77,6 +77,10 @@ class StreamSB10 : StreamSB() { override var mainUrl = "https://sbplay2.xyz" } +class StreamSB11 : StreamSB() { + override var mainUrl = "https://sbbrisk.com" +} + // This is a modified version of https://github.com/jmir1/aniyomi-extensions/blob/master/src/en/genoanime/src/eu/kanade/tachiyomi/animeextension/en/genoanime/extractors/StreamSBExtractor.kt // The following code is under the Apache License 2.0 https://github.com/jmir1/aniyomi-extensions/blob/master/LICENSE open class StreamSB : ExtractorApi() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt index 5109acc3..86bd9e0b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt @@ -7,6 +7,10 @@ class Uqload1 : Uqload() { override var mainUrl = "https://uqload.com" } +class Uqload2 : Uqload() { + override var mainUrl = "https://uqload.co" +} + open class Uqload : ExtractorApi() { override val name: String = "Uqload" override val mainUrl: String = "https://www.uqload.com" @@ -15,30 +19,14 @@ open class Uqload : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List? { - val lang = url.substring(0, 2) - val flag = - if (lang == "vo") { - " \uD83C\uDDEC\uD83C\uDDE7" - } - else if (lang == "vf"){ - " \uD83C\uDDE8\uD83C\uDDF5" - } else { - "" - } - - val cleaned_url = if (lang == "ht") { // if url doesn't contain a flag and the url starts with http:// - url - } else { - url.substring(2, url.length) - } - with(app.get(cleaned_url)) { // raised error ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED (3003) is due to the response: "error_nofile" + with(app.get(url)) { // raised error ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED (3003) is due to the response: "error_nofile" srcRegex.find(this.text)?.groupValues?.get(1)?.replace("\"", "")?.let { link -> return listOf( ExtractorLink( name, - name + flag, + name, link, - cleaned_url, + url, Qualities.Unknown.value, ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt new file mode 100644 index 00000000..67e59281 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt @@ -0,0 +1,34 @@ +package com.lagradost.cloudstream3.extractors +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.getAndUnpack + +class Vido : ExtractorApi() { + override var name = "Vido" + override var mainUrl = "https://vido.lol" + private val srcRegex = Regex("""sources:\s*\["(.*?)"\]""") + override val requiresReferer = true + + override suspend fun getUrl(url: String, referer: String?): List? { + val methode = app.get(url.replace("/e/", "/embed-")) // fix wiflix and mesfilms + with(methode) { + if (!methode.isSuccessful) return null + //val quality = unpackedText.lowercase().substringAfter(" height=").substringBefore(" ").toIntOrNull() + srcRegex.find(this.text)?.groupValues?.get(1)?.let { link -> + return listOf( + ExtractorLink( + name, + name, + link, + url, + Qualities.Unknown.value, + true, + ) + ) + } + } + return null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt index e77b2d54..742bf308 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -2,8 +2,10 @@ package com.lagradost.cloudstream3.plugins import android.content.Context import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError @@ -71,6 +73,15 @@ object RepositoryManager { val PREBUILT_REPOSITORIES: Array by lazy { getKey("PREBUILT_REPOSITORIES") ?: emptyArray() } + val GH_REGEX = Regex("^https://raw.githubusercontent.com/([A-Za-z0-9-]+)/([A-Za-z0-9_.-]+)/(.*)$") + + /* Convert raw.githubusercontent.com urls to cdn.jsdelivr.net if enabled in settings */ + fun convertRawGitUrl(url: String): String { + if (getKey(context!!.getString(R.string.jsdelivr_proxy_key)) != true) return url + val match = GH_REGEX.find(url) ?: return url + val (user, repo, rest) = match.destructured + return "https://cdn.jsdelivr.net/gh/$user/$repo@$rest" + } suspend fun parseRepoUrl(url: String): String? { val fixedUrl = url.trim() @@ -84,10 +95,15 @@ object RepositoryManager { } } else if (fixedUrl.matches("^[a-zA-Z0-9!_-]+$".toRegex())) { suspendSafeApiCall { - app.get("https://l.cloudstream.cf/${fixedUrl}").let { - return@let if (it.isSuccessful && !it.url.startsWith("https://cutt.ly/branded-domains")) it.url - else app.get("https://cutt.ly/${fixedUrl}").let let2@{ it2 -> - return@let2 if (it2.isSuccessful) it2.url else null + app.get("https://l.cloudstream.cf/${fixedUrl}", allowRedirects = false).let { + it.headers["Location"]?.let { url -> + return@suspendSafeApiCall if (!url.startsWith("https://cutt.ly/branded-domains")) url + else null + } + app.get("https://cutt.ly/${fixedUrl}", allowRedirects = false).let { it2 -> + it2.headers["Location"]?.let { url -> + return@suspendSafeApiCall if (url.startsWith("https://cutt.ly/404")) url else null + } } } } @@ -97,14 +113,14 @@ object RepositoryManager { suspend fun parseRepository(url: String): Repository? { return suspendSafeApiCall { // Take manifestVersion and such into account later - app.get(url).parsedSafe() + app.get(convertRawGitUrl(url)).parsedSafe() } } private suspend fun parsePlugins(pluginUrls: String): List { // Take manifestVersion and such into account later return try { - val response = app.get(pluginUrls) + val response = app.get(convertRawGitUrl(pluginUrls)) // Normal parsed function not working? // return response.parsedSafe() tryParseJson>(response.text)?.toList() ?: emptyList() @@ -139,7 +155,7 @@ object RepositoryManager { } file.createNewFile() - val body = app.get(pluginUrl).okhttpResponse.body + val body = app.get(convertRawGitUrl(pluginUrl)).okhttpResponse.body write(body.byteStream(), file.outputStream()) file } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt index 4772a7f1..782e3fa4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt @@ -35,11 +35,13 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.utils.EpisodeSkip +import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import java.io.File +import java.time.Duration import javax.net.ssl.HttpsURLConnection import javax.net.ssl.SSLContext import javax.net.ssl.SSLSession @@ -535,15 +537,16 @@ class CS3IPlayer : IPlayer { OkHttpDataSource.Factory(client).setUserAgent(USER_AGENT) } + // Do no include empty referer, if the provider wants those they can use the header map. + val refererMap = if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer) val headers = mapOf( - "referer" to link.referer, "accept" to "*/*", "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", "sec-ch-ua-mobile" to "?0", "sec-fetch-user" to "?1", "sec-fetch-mode" to "navigate", "sec-fetch-dest" to "video" - ) + link.headers // Adds the headers from the provider, e.g Authorization + ) + refererMap + link.headers // Adds the headers from the provider, e.g Authorization return source.apply { setDefaultRequestProperties(headers) @@ -847,7 +850,7 @@ class CS3IPlayer : IPlayer { Log.i(TAG, "loadExo") val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) val maxVideoHeight = settingsManager.getInt( - context.getString(com.lagradost.cloudstream3.R.string.quality_pref_key), + context.getString(if (context.isUsingMobileData()) com.lagradost.cloudstream3.R.string.quality_pref_mobile_data_key else com.lagradost.cloudstream3.R.string.quality_pref_key), Int.MAX_VALUE ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt index 8d28fd9d..d1b2814d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt @@ -40,6 +40,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.GeneratorPlayer.Companion.subsProvidersIsActive import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -1246,9 +1247,8 @@ open class FullScreenPlayer : AbstractPlayerFragment() { ctx.getString(R.string.double_tap_pause_enabled_key), false ) - currentPrefQuality = settingsManager.getInt( - ctx.getString(R.string.quality_pref_key), + ctx.getString(if (ctx.isUsingMobileData()) R.string.quality_pref_mobile_data_key else R.string.quality_pref_key), currentPrefQuality ) // useSystemBrightness = diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt index 354dc89c..078419e2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt @@ -74,6 +74,7 @@ val appLanguages = arrayListOf( Triple("\uD83C\uDDEE\uD83C\uDDE9", "Bahasa Indonesia", "in"), Triple("", "italiano", "it"), Triple("\uD83C\uDDEE\uD83C\uDDF1", "עברית", "iw"), + Triple("", "日本語 (にほんご)", "ja"), Triple("", "ಕನ್ನಡ", "kn"), Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), @@ -82,7 +83,7 @@ val appLanguages = arrayListOf( Triple("", "norsk bokmål", "no"), Triple("", "polski", "pl"), Triple("\uD83C\uDDF5\uD83C\uDDF9", "português", "pt"), - Triple("🦍", "mmmm... monke", "qt"), + Triple("\uD83E\uDD8D", "mmmm... monke", "qt"), Triple("", "română", "ro"), Triple("", "русский", "ru"), Triple("", "slovenčina", "sk"), @@ -97,7 +98,7 @@ val appLanguages = arrayListOf( Triple("", "中文", "zh"), Triple("\uD83C\uDDF9\uD83C\uDDFC", "文言", "zh-rTW"), /* end language list */ -).sortedBy { it.second?.toLowerCase() } //ye, we go alphabetical, so ppl don't put their lang on top +).sortedBy { it.second.lowercase() } //ye, we go alphabetical, so ppl don't put their lang on top class SettingsGeneral : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -157,9 +158,6 @@ class SettingsGeneral : PreferenceFragmentCompat() { getPref(R.string.locale_key)?.setOnPreferenceClickListener { pref -> val tempLangs = appLanguages.toMutableList() - //if (beneneCount > 100) { - // tempLangs.add(Triple("\uD83E\uDD8D", "mmmm... monke", "mo")) - //} val current = getCurrentLocale(pref.context) val languageCodes = tempLangs.map { (_, _, iso) -> iso } val languageNames = tempLangs.map { (emoji, name, iso) -> @@ -316,6 +314,12 @@ class SettingsGeneral : PreferenceFragmentCompat() { } ?: emptyList() } + settingsManager.edit().putBoolean(getString(R.string.jsdelivr_proxy_key), getKey(getString(R.string.jsdelivr_proxy_key), false) ?: false).apply() + getPref(R.string.jsdelivr_proxy_key)?.setOnPreferenceChangeListener { _, newValue -> + setKey(getString(R.string.jsdelivr_proxy_key), newValue) + return@setOnPreferenceChangeListener true + } + getPref(R.string.download_path_key)?.setOnPreferenceClickListener { val dirs = getDownloadDirs() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt index 33d41934..e10a5a1a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsPlayer.kt @@ -113,6 +113,30 @@ class SettingsPlayer : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } + getPref(R.string.quality_pref_mobile_data_key)?.setOnPreferenceClickListener { + val prefValues = Qualities.values().map { it.value }.reversed().toMutableList() + prefValues.remove(Qualities.Unknown.value) + + val prefNames = prefValues.map { Qualities.getStringByInt(it) } + + val currentQuality = + settingsManager.getInt( + getString(R.string.quality_pref_mobile_data_key), + Qualities.values().last().value + ) + + activity?.showBottomDialog( + prefNames.toList(), + prefValues.indexOf(currentQuality), + getString(R.string.watch_quality_pref_data), + true, + {}) { + settingsManager.edit().putInt(getString(R.string.quality_pref_mobile_data_key), prefValues[it]) + .apply() + } + return@setOnPreferenceClickListener true + } + getPref(R.string.player_pref_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.player_pref_names) val prefValues = resources.getIntArray(R.array.player_pref_values) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt index 860144ee..a76b62fd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -491,6 +491,12 @@ object AppUtils { } } + fun Context.isNetworkAvailable(): Boolean { + val manager = this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val activeNetworkInfo = manager.activeNetworkInfo + return activeNetworkInfo != null && activeNetworkInfo.isConnected || manager.allNetworkInfo?.any { it.isConnected } ?: false + } + fun splitQuery(url: URL): Map { val queryPairs: MutableMap = LinkedHashMap() val query: String = url.query @@ -770,8 +776,13 @@ object AppUtils { return networkInfo.any { conManager.getNetworkCapabilities(it) ?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true + } && + !networkInfo.any { + conManager.getNetworkCapabilities(it) + ?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true + } } - } + private fun Activity?.cacheClass(clazz: String?) { clazz?.let { c -> @@ -815,4 +826,4 @@ object AppUtils { } return currentAudioFocusRequest } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index b0dba9ff..6540b8c4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -229,6 +229,7 @@ val extractorApis: MutableList = arrayListOf( StreamSB8(), StreamSB9(), StreamSB10(), + StreamSB11(), SBfull(), // Streamhub(), cause Streamhub2() works Streamhub2(), @@ -254,6 +255,7 @@ val extractorApis: MutableList = arrayListOf( // WatchSB(), 'cause StreamSB.kt works Uqload(), Uqload1(), + Uqload2(), Evoload(), Evoload1(), VoeExtractor(), @@ -277,6 +279,7 @@ val extractorApis: MutableList = arrayListOf( DoodShExtractor(), DoodWatchExtractor(), DoodWfExtractor(), + DoodYtExtractor(), AsianLoad(), @@ -324,6 +327,8 @@ val extractorApis: MutableList = arrayListOf( Filesim(), FileMoon(), + FileMoonSx(), + Vido(), Linkbox(), Acefile(), SpeedoStream(), diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 652df937..cfd761e3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -103,7 +103,7 @@ مزيد من المعلومات قد تكون هناك حاجة إلى VPN لكي يعمل هذا المزود بشكل صحيح هذا المزود هو تورنت ، يوصى باستخدام شبكة ظاهرية خاصة - لا يتم توفير البيانات الوصفية بواسطة الموقع ، وسيفشل تحميل الفيديو إذا لم يكن موجودًا في الموقع. + لا يتم توفير البيانات الوصفية بواسطة الموقع، وسيفشل تحميل الفيديو إذا لم يكن موجودًا في الموقع. الوصف لم يتم العثور على وصف لم يتم العثور على وصف @@ -170,7 +170,7 @@ تم نسخ الرابط إلى الحافظة تشغيل الحلقة إعادة التعيين إلى القيمة الافتراضية - عذرا ، تعطل التطبيق. سيتم إرسال تقرير خطأ مجهول إلى المطورين + عذرا، تعطل التطبيق. سيتم إرسال تقرير خطأ مجهول إلى المطورين موسم لا موسم حلقة @@ -259,15 +259,15 @@ لا تظهر مرة أخرى تخطي هذا التحديث تحديث - جودة المشاهدة المفضلة + جودة المشاهدة المفضلة (WiFi) أقصى عدد لحروف عنوان مُشغل الفيديو أبعاد مُشغل الفيديو حجم ذاكرة التخزين المؤقت للفيديو طول التخزين المؤقت التخزين المؤقت للفيديو على القرص مسح التخزين المؤقت للصورة والفيديو - يتسبب في حدوث أعطال إذا تم ضبطه على مستوى مرتفع جدا على الأجهزة ذات الذاكرة المنخفضة ، مثل Android TV. - يسبب مشاكل إذا تم ضبطه على مستوى مرتفع جدا على الأجهزة ذات مساحة التخزين المنخفضة ، مثل Android TV. + يتسبب في حدوث أعطال إذا تم ضبطه على مستوى مرتفع جدا على الأجهزة ذات الذاكرة المنخفضة، مثل تلفزيون أندرويد. + يسبب مشاكل إذا تم ضبطه على مستوى مرتفع جدا على الأجهزة ذات مساحة التخزين المنخفضة، مثل تلفزيون أندرويد. إستخدام DNS بدلا من HTTPS مفيد لتجاوز حجب مزود خدمة الإنترنت موقع بديل (نسخة) @@ -360,7 +360,7 @@ https://en.wikipedia.org/wiki/The_quick_brown_fox_jumps_over_the_lazy_dog --> نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق - مُوصي به + مُوصى به تم تحميل %s إختيار ملف تحميل من الانترنت @@ -543,4 +543,22 @@ تلفزيون أندرويد مدة التقديم عنما يكون المشغل مرئيا مدة التقديم- المشغل المرئي + فشل + نجح + إختبار المزود + إعادة التشغيل + سجل + بَدأ + إيقاف + تحديث العروض التي تم الاشتراك فيها + إلغاء الاشتراك من %s + تم إصدار الحلقة %d! + مشترك + مشترك في %s + تجاوز مزود خدمة الإنترنت + استرجاع + فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr. + تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. + وكيل raw.githubusercontent.com + جودة المشاهدة المفضلة (بيانات الجوال) \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index a78da8a4..e99e1010 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -245,7 +245,7 @@ Již nezobrazovat Přeskočit tuto aktualizace Aktualizovat - Upřednostněná kvalita sledování + Upřednostněná kvalita sledování (WiFi) Maximální počet znaků v názvu přehrávače Rozlišení přehrávače Velikost vyrovnávací paměti videa @@ -535,4 +535,22 @@ Zobrazený přehrávač - doba hledání Android TV Množství vyhledávané doby při zobrazeném přehrávači + Protokol + Test poskytovatele + Neúspěšné + Úspěšné + Restart + Spustit + Zastavit + Aktualizace odebíraných pořadů + Přihlášeno k odběru %s + Odhlášen odběr od %s + Byla vydána epizoda %d! + Odebíráno + Proxy raw.githubusercontent.com + Nepodařilo se připojit ke GitHubu, povolování proxy jsdelivr. + Upřednostněná kvalita sledování (mobilní data) + Vrátit zpět + Obchází blokování GitHubu pomocí jsdelivr, může způsobit zpoždění aktualizací o několik dní. + Obcházení ISP \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e190aa9c..c5e74a60 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -53,7 +53,7 @@ Abgebrochen Geplant Nichts - Erneut anschauen + Erneut schauen Film abspielen Livestream abspielen Torrent streamen @@ -212,7 +212,7 @@ Keine Untertitel Standard Frei - Benutzt + Belegt App Filme TV-Serien @@ -263,7 +263,7 @@ Nicht mehr anzeigen Update ignorieren Update - Bevorzugte Auflösung + Bevorzugte Videoqualität (WLAN) Videoplayertitel max. Zeichen Videoplayer Auflösung Videopuffergröße @@ -284,7 +284,7 @@ Strecken Vergrößern Haftungsausschluss - General + Allgemein Zufalls-Button Zufallsbutton auf der Startseite anzeigen Anbieter-Sprachen @@ -460,11 +460,11 @@ Automatische Installation aller noch nicht installierten Plugins aus hinzugefügten Repositories. Einrichtungsvorgang wiederholen APK-Installer - Einige Telefone unterstützen das neue Installationsprogramm für Pakete nicht. Benutze die Legacy-Option, wenn sich die Updates nicht installieren lassen. + Einige Telefone unterstützen den neuen Package-Installer nicht. Benutze die Legacy-Option, wenn sich die Updates nicht installieren lassen. %s %d%s Links App-Updates - Back-Up + Sicherung Erweiterungen Wartung Cache @@ -506,4 +506,27 @@ Diese Liste scheint leer zu sein. Versuche, zu einer anderen Liste zu wechseln. Datei für abgesicherten Modus gefunden! \nBeim Start werden keine Erweiterungen geladen, bis die Datei entfernt wird. + Player ausgeblendet - Betrag zum vor- und zurückspulen + Der Betrag, welcher verwendet wird, wenn der Player eingeblendet ist + Der Betrag, welcher verwendet wird, wenn der Player ausgeblendet ist + Android-TV + Player eingeblendet - Betrag zum vor- und zurückspulen + Fehlgeschlagen + Erfolgreich + Anbieter-Test + Stopp + Log + Start + Neustarten + Bevorzugte Videoqualität (mobile Daten) + Umgehung der GitHub Sperre mit jsdelivr, kann zu einigen Tagen Verzögerung bei Updates führen. + %s abonniert + %s deabonniert + Episode %d erschienen! + raw.githubusercontent.com Proxy + GitHub kann nicht erreicht werden, der jsdelivr-Proxy wird aktiviert. + Aktualisierung abonnierter Sendungen + Rückgängig + Abonniert + ISP-Umgehungen \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 0d0b7fb2..5e9dafd8 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -150,7 +150,7 @@ Επεισόδια %d-%d %d %s - Κ + Σ E Δεν βρέθηκαν επεισόδια Διαγραφή αρχείου diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8366b294..18647ef8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -24,7 +24,7 @@ Ocultar la calidad de video en los resultados de búsqueda Diseño Diseño - Calidad de visualización preferida + Calidad de visualización preferida (WiFi) Reproductor de video preferido Diseño para emulador Diseño de la aplicación @@ -511,4 +511,22 @@ Android TV La cantidad de búsqueda utilizada cuando la jugadora es visible La cantidad de búsqueda utilizada cuando el jugador está oculto + Parar + Falló + Registro + Empezar + Aprobado + Prueba del proveedor + Reiniciar + Suscrito + Suscrito a %s + Darse de baja de %s + Actualizando los programas suscritos + ¡Episodio %d publicado! + Proxy raw.githubusercontent.com + No se ha podido acceder a GitHub, activando el proxy jsdelivr. + Evita el bloqueo de GitHub usando jsdelivr, puede causar que las actualizaciones se retrasen unos días. + Revertir + ISP Bypasses + Calidad de visualización preferida (Datos móviles) \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f0e112a8..18255b3b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -6,12 +6,12 @@ Téléchargements Paramètres Rechercher… - Miniature + Affiche Aucune Donnée Plus d\'options Retour Épisode suivant - Miniature + Affiche Genres Partager Ouvrir dans le navigateur @@ -29,7 +29,7 @@ Sous-titres Réessayer la connection… Retour - Miniature de l\'Épisode + Affiche de l\'épisode Lire l\'Épisode Télécharger @@ -51,10 +51,10 @@ Désactiver le rapport de bug automatique Plus d\'informations Cacher - Poster principal + Affiche principale Lecture - Info - Suivant Aléatoire + Infos + Aléatoire suivant Changer le fournisseur Filtrer les marques-pages Marque-pages @@ -211,7 +211,7 @@ Arrière plan Source Aléatoire - À venir … + Bientôt disponible… Image de l\'affiche %s Connecté Définir le statut de visionage @@ -490,4 +490,22 @@ L\'application sera mise à jour dès la fin de la session Plugin Téléchargé Retirer de la vue + Bibliothèque + Navigateur + Trier + Note (basse à haute) + Note (haut à bas) + Alphabétique (A à Z) + On dirait que votre bibliothèque est vide :( +\nConnectez-vous à un compte ou ajoutez des séries à votre bibliothèque locale + Il semble que cette liste soit vide, essayez d\'en choisir une autre + Android TV + Trié par + Alphabétique (Z à A) + Sélectionnez la bibliothèque + Ouvrir avec + Mis à jour (Nouveau vers ancien) + Mis à jour (ancien vers nouveau) + Fichier du mode sans échec trouvé ! +\nAucune extension ne sera chargée au démarrage avant que le fichier ne soit enlevé. \ No newline at end of file diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 0f3e36bc..b623ec5d 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -531,4 +531,26 @@ Čini se da je ova lista prazna, pokušajte se prebaciti na drugu Pronađena datoteka sigurnog načina rada! \nNe učitavaju se ekstenzije pri pokretanju dok se datoteka ne ukloni. + Prikazan player- iznos preskakanja + Količina preskakanja koja se koristi kada je player vidljiv + Player skriven - Količina preskakanja + Količina preskakanja koja se koristi kada je player skriven + Android TV + Prošlo + Restart + Log + Početak + Neuspješno + Stop + Test pružatelja usluga + Ažuriram pretplaćene serije + Epizoda %d izbačena! + Pretplaćeno + Pretplaćen na %s + Otkazana pretplata sa %s + Vraćanje + ISP zaobilaznice + raw.githubusercontent.com Proxy + Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. + Zaobilazi blokiranje GitHuba pomoću jsdelivr, može uzrokovati odgode ažuriranja za nekoliko dana. \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index d54e4fa9..84179352 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -35,7 +35,7 @@ Skip Loading Loading… Sedang Menonton - Tertahan + Tertunda Selesai Dihentikan Rencana untuk Menonton @@ -387,7 +387,7 @@ %d %s 17+ Lainnya - Vidio + Video Duplikasi Website Duplikasi website yang telah ada, dengan alamat berbeda Tautan @@ -395,7 +395,7 @@ Cadangkan Fitur Tambahan Putar di CloudStream - Sembunyikan kualitas vidio terpilih di pencarian + Sembunyikan kualitas video terpilih di pencarian %s %d%s Siaran langsung Hapus Website @@ -444,7 +444,7 @@ Peringkat: %s Pembuat Bahasa - Pemutar vidio utama + Pemutar video utama Pemutar Bawaan VLC MPV @@ -475,7 +475,7 @@ Hapus teks tertutup dari subtitel Hapus karakter sampah dari subtitel Audio Trek - Vidio Trek + Video Trek Dukungan Daftar putar HLS Penginstal APK @@ -529,4 +529,26 @@ Yahh daftar ini kosong, coba ganti ke yang lain Mode aman file ditemukan! \nTidak memuat ekstensi pada startup sampai berkas dihapus. + Sembunyikan Pemutaran - Geser + Pemutar terlihat - Geser + Geser untuk menghilangkan + Geser untuk menghilangkan + Android TV + Log + Berhasil + Tes provider + Berhenti + Mulai + Mulai lagi + Gagal + Memperbarui acara langganan + Berlangganan + Berlangganan ke %s + Berhenti berlangganan di %s + Episode %d telah rilis! + raw.githubusercontent.com Proksi + Gagal mencapai GitHub, mengaktifkan proksi jsdelivr. + Bypass pemblokiran Github menggunakan JSDeliVR, dapat menyebabkan pembaruan tertunda beberapa hari. + Bypass ISP + Pulihkan \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9dbc627f..d6bdc204 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -528,4 +528,26 @@ Sembra che questa lista sia vuota, prova a passare a un\'altra File \"safe mode\" trovato! \nAll\'avvio non sarà caricata alcuna estensione finchè il file non verrà rimosso. + Quantità di ricerca usata quando il player è nascosto + TV Android + Quantità di ricerca usata quando il player è visibile + Player visibile - Quantità di ricerca + Player nascosto - Quantità di ricerca + Registro + Avvia + Test del provider + Riavvia + Ferma + Superato + Fallito + Proxy raw.githubusercontent.com + Disiscritto da %s + Iscritto + Iscritto a %s + Impossibile contattare GitHub, abilitazione proxy jsdelivr avviata. + Bypassa il blocco di GitHub utilizzando jsdelivr, potrebbe causare un ritardo di alcuni giorni. + Baypass ISP + Ripristina + Aggiornando shows a cui sei iscritto + L\'episodio %d è stato rilasciato! \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000..a3d1d434 --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,185 @@ + + + %d分 + ダウンロード + 検索 + 設定 + シェア + 映画 + ホーム + ライブラリ + 再生 + %d日 %d時間%d分 + %d時間%d分 + 検索… + ダウンロード + 情報 + シーズン + 予告編 + シリーズ + エピソード + 再生速度 (%.2fx) + 次のエピソード + 適用 + アカウント + カートゥーン + TVシリーズ + トレント + ドキュメンタリー + OVA + アジアドラマ + ライブ配信 + 映画 + その他 + カートゥーン + トレント + ドキュメンタリー + アジアドラマ + ライブ配信 + NSFW + キャンセル + アニメ + ロック + ソース + NSFW + 履歴を削除 + 視聴中コンテンツ + 全般 + 動画 + プレーヤー + 懐う + 予告編を再生 + エピソード + 視聴 + ジャンル + 映画を再生 + 字幕 + CloudStream + CloudStreamで再生 + ブラウザ + 完成 + 放置 + 保留 + ローディング… + ブラウザで開く + シーズン + 残り +\n%d分 + 再生エピソード + ダウンロード済 + バックアップ + ソース + 履歴 + ポスター + なし + コピー + 閉じる + 保存 + 消去 + %sエピ%d + 出演者:%s + ポスター + エピソードポスター + 主要ポスター + 次のランダム + 戻り + 視聴率 %.1f + 新しいアップデートを発見! +\n%s -> %s + %d分 + %sを検索… + ソース + ろくごうきじ + 接続を再試行… + 戻り + 削除 + 詳細情報 + 閉じる + アップデート・バックアップ + アプリ言語 + GitHub(ギットハブ) + -30 + +30 + 免責 + 拡張機能 + アプリ更新 + 提供者 + 字幕 + 特徴 + デフォルト + 自動 + 任意 + 拡張機能 + リンク + Android TV + ログイン + ログアウト + 最大 + 最小 + なし + + 18+ + + で開く + エピソード + 時間 + 概要 + サイト + 使用 + アプリ + 詳細情報 + 削除 + ピクチャーインピクチャー + 字幕 + 情報 + 一時停止 + 再生エピソード + 削除 + 開始 + 状態 + + 再開 + 失敗 + 合格 + 空き + 完成 + 進行中 + デフォルト + ウェブブラウザ + VLC + MPV + 言語 + 作成者 + サイズ + 状態 + バージョン + 視聴率 %s + 視聴率 + デフォルト + ダウンロード失敗 + ダウンロード開始 + ダウンロード完了 + ダウンロード終了 + ストリーム + アップデート開始 + シーズンなし + 字幕なし + アスペクト比 + ロードをスキップする + その他のオプション + データなし + ダウンロード中 + ブックマーク + 内部記憶装置 + ダウンロードが一時停止 + メタデータはこのサイトでは提供されません。メタデータがサイト上に存在しない場合、ビデオの読み込みに失敗します。 + 記述 + Logcat 🐈を表示 + ログ + 検索 + Discordに参加 + アップデート + アップデートを確認 + 作品名 + アプリのアップデートをインストール中… + \ No newline at end of file diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index efe0a1d8..242653be 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -1,3 +1,128 @@ - \ No newline at end of file + %sಎಪಿ%d + ಕ್ಯಾಸ್ಟ್:%s + ಹಿಂದೆ ಹೋಗು + ಫಿಲ್ಲರ್ + ಹುಡುಕು + ಡೌನ್ಲೋಡ್ + ಫಾಂಟ್ + ಪೂರೈಕೆದಾರರನ್ನು ಬಳಸಿಕೊಂಡು ಹುಡುಕಿ + ಪ್ರಕಾರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಹುಡುಕಿ + ಯಾವುದೇ ಬೆನೆನ್ಸ್ ನೀಡಿಲ್ಲ + ಸ್ವಯಂ-ಆಯ್ಕೆ ಭಾಷೆ + ಹೆಚ್ಚಿನ ಮಾಹಿತಿ + \@ಸ್ಟ್ರಿಂಗ್/ಹೋಮ್_ಪ್ಲೇ + ಈ ಪೂರೈಕೆದಾರರು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು VPN ಬೇಕಾಗಬಹುದು + ಕಪ್ಪು ಗಡಿಗಳನ್ನು ತೆಗೆದುಹಾಕಿ + ಸಂಚಿಕೆ%d ಬಿಡುಗಡೆಯಾಗಲಿದೆ + %dh %dm + ಪೋಸ್ಟರ್ + ಪೋಸ್ಟರ್ + ಸಂಚಿಕೆ ಪೋಸ್ಟರ್ + ಮೇನ್ ಪೋಸ್ಟರ್ + ಅಪ್ಡೇಟ್ ಪ್ರಾರಂಭವಾಗಿದೆ + ಲೋಡಿಂಗ್ ಲಿಂಕ್ ಎರರ್ ಬಂದಿದೆ + ಇಂಟರ್ನಲ್ ಸ್ಟೋರೇಜ್ + ಡಬ್ + ಸಬ್ + ಸ್ವಯಂಚಾಲಿತ ದೋಷ ವರದಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + ಹೈಡ್ + ಪ್ಲೇ + ಮಾಹಿತಿ + ಸೆಟ್ ವಾಚ್ ಸ್ಟೇಟಸ್ + ಅನ್ವಯಿಸು + ರದ್ದುಮಾಡು + ಸಬ್ ಟೈಟಲ್ಸ್ ಎಲೆವಷನ್ + ಫಾಂಟ್ ಸೈಜ್ + ಸಬ್ ಟೈಟಲ್ಸ್ ಭಾಷೆ + ತೆಗೆದುಹಾಕಿ + ಈ ಪೂರೈಕೆದಾರರು ಟೊರೆಂಟ್ ಆಗಿದೆ, VPN ಅನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ + ಯಾವುದೇ ಪ್ಲಾಟ್ ಕಂಡುಬಂದಿಲ್ಲ + ಲಾಗ್‌ಕ್ಯಾಟ್ 🐈 ತೋರಿಸಿ + ಲಾಗ್ + ಚಿತ್ರದಲ್ಲಿ-ಚಿತ್ರದಲ್ಲಿ + ಪ್ಲೇಯರ್ ಮರುಗಾತ್ರಗೊಳಿಸಿ ಬಟನ್ + ಸಬ್ ಟೈಟಲ್ಸ್ + ಪ್ಲೇಯರ್ ಸಬ್ ಟೈಟಲ್ಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು + ಕ್ರೋಮ್ ಕ್ಯಾಸ್ಟ್ ಸಬ್ ಟೈಟಲ್ಸ್ ಸೆಟ್ಟಿಂಗ್ಸ್ + ಹಿಂದೆ ಹೋಗು + ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಿ + ಬುಕ್‌ಮಾರ್ಕ್‌ + ಬ್ಯಾಕ್ ಗ್ರೌಂಡ್ ಕಲರ್ + %d ಡೇವ್‌ಗಳಿಗೆ ಬೆನೆನೆಸ್ ನೀಡಲಾಗಿದೆ + ಡೀಫಾಲ್ಟ್‌ಗೆ ಮರುಹೊಂದಿಸಲು ಹಿಡಿದುಕೊಳ್ಳಿ + ಸೈಟ್‌ನಿಂದ ಮೆಟಾಡೇಟಾವನ್ನು ಒದಗಿಸಲಾಗಿಲ್ಲ, ಅದು ಸೈಟ್‌ನಲ್ಲಿ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ ವೀಡಿಯೊ ಲೋಡಿಂಗ್ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ. + ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಮೇಲೆ ಚಿಕಣಿ ಪ್ಲೇಯರ್‌ನಲ್ಲಿ ಪ್ಲೇಬ್ಯಾಕ್ ಅನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ + ಕ್ರೋಮ್ ಕ್ಯಾಸ್ಟ್ ಸಬ್ ಟೈಟಲ್ಸ್ + ರೇಟೆಡ್:%.1f + ತೆಗೆದುಹಾಕಿ + ಡೌನ್‌ಲೋಡ್ ಅನ್ನು ಪುನರಾರಂಭಿಸಿ + ಕ್ಲೋಸ್ + ಕ್ಲಿಯರ್ + ಸೇವ್ + ಸಬ್ ಟೈಟಲ್ಸ್ ಸೆಟ್ಟಿಂಗ್ಸ್ + ಫೈಲ್ ಪ್ಲೇ + ಟೆಕ್ಸ್ಟ್ ಕಲರ್ + ಔಟ್ ಲೈನ್ ಕಲರ್ + ವಿಂಡೋ ಕಲರ್ + ಎಡ್ಜ್ ಟೈಪ್ + ಪ್ರೊವೈಡರ್ ಬದಲಾಯಿಸಿ + %dಮಿನ + ವಿವರಣೆ + ಸ್ಪೀಡ್(%.2fx) + ಹೋಂ + ಸಬ್ ಟೈಟಲ್ಸ್ + ಸೆಟ್ಟಿಂಗ್ಸ್ + ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಿ + ಹುಡುಕು… + ಚಲನಚಿತ್ರವನ್ನು ಪ್ಲೇ ಮಾಡಿ + ಪ್ರಿವ್ಯೂ ಹಿನ್ನೆಲೆ + ಮುಂದಿನ ಸಂಚಿಕೆ + ಕ್ಲೌಡ್ ಸ್ಟ್ರೀಮ್ + ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ + ಸ್ಟ್ರೀಮ್ + ಶೇರ್ + ಫೈಲ್ ಅಳಿಸಿ + ಹೆಚ್ಚಿನ ಮಾಹಿತಿ + ಹೊಸ ಅಪ್ಡೇಟ್ ಬಂದಿದೆ +\n%s-%s + ಲೋಡಿಂಗ್… + ಡೌನ್‌ಲೋಡ್ ಭಾಷೆಗಳನ್ನು ಮಾಡಿ + ಲೈವ್‌ಸ್ಟ್ರೀಮ್ ಪ್ಲೇ ಮಾಡಿ + ಕ್ಲೌಡ್ ಸ್ಟ್ರೀಮ್ ಇದರೊಂದಿಗೆ ಪ್ಲೇ ಮಾಡಿ + ವೀಕ್ಷಿಸಲು ಯೋಜನೆ + ಸಂಚಿಕೆಯನ್ನು ಪ್ಲೇ ಮಾಡಿ + ಕಂಟಿನ್ಯೂ ವಾಟಚಿಂಗ್ + ಯಾವುದೇ ವಿವರಣೆ ಕಂಡುಬಂದಿಲ್ಲ + ಸ್ಟ್ರೀಮ್ ಟೊರೆಂಟ್ + ಡೌನ್‌ಲೋಡ್ + ಕಾಪಿ + ನೋ ಡೇಟಾ + ಪ್ಲೇಯರ್ ಸ್ಪೀಡ್ + %d %dh %dm + ಹುಡುಕು %s… + ಹೆಚ್ಚಿನ ಆಯ್ಕೆ + ಫಾಂಟ್‌ಗಳನ್ನು ಇರಿಸುವ ಮೂಲಕ ಆಮದು ಮಾಡಿ %s + %dm + ಪ್ರಕಾರಗಳು + ಬ್ರೌಸರ್ ತೆರೆಯಿರಿ + ಆನ್-ಹೋಲ್ಡ್ + ನನ್ + ಸಂಪರ್ಕವನ್ನು ಮರುಪ್ರಯತ್ನಿಸಿ… + ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ + ಡೌನ್‌ಲೋಡ್ ವಿಫಲವಾಗಿದೆ + ಡೌನ್‌ಲೋಡ್ ಮುಗಿದಿದೆ + ಬ್ರೌಸರ್ + ಸ್ಕಿಪ್ ಲೋಡಿಂಗ್ + ವಾಚಿಂಗ್ + ಪೂರ್ಣಗೊಂಡಿದೆ + ಕೈಬಿಡಲಾಯಿತು + ಪುನಃ ವೀಕ್ಷಿಸುತ್ತಿದೆ + ಟ್ರೈಲರ್ ಪ್ಲೇ ಮಾಡಿ + ಮೂಲಗಳು + ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ + ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ + ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ + ಮುಂದಿನ ರಾಂಡಮ್ + \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c709f124..bbaaec57 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -373,7 +373,7 @@ Pomiń setup Dostosuj wygląd aplikacji do urządzenia Zgłaszanie błędów - Co chciałbyś obejrzeć\? + Co chciałbyś obejrzeć Gotowe Rozszerzenia Dodaj repozytorium @@ -509,4 +509,26 @@ Wygląda na to, że ta lista jest pusta, spróbuj przełączyć się na inną Znaleziono plik trybu bezpiecznego. \nRozszerzenia nie zostaną wczytane, dopóki plik nie zostanie usunięty. + Używana ilość przewijania, gdy widoczny jest odtwarzacz + Ukryty odtwarzacz - ilość przewijania + Android TV + Pokazany odtwarzacz — ilość przewijania + Używana ilość przewijania, gdy ukryty jest odtwarzacz + Dziennik + Uruchom ponownie + Rozpocznij + Nie powiodło się + Ukończone powodzeniem + Serwer pośredniczący raw.githubusercontent.com + Obejścia ISP + Test dostawcy + Zatrzymaj + Przywróć + Aktualizowanie subskrybowanych programów + Zasubskrybowano + Zasubskrybowano %s + Anulowano subskrypcję %s + Został wydany odcinek %d! + Obchodzi blokadę GitHuba za pomocą jsdelivr, może spowodować opóźnienie aktualizacji o kilka dni. + Nie udało się połączyć z GitHub, włączono serwer pośredniczący jsdelivr. \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 9353664e..3754de8b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -6,12 +6,12 @@ Episódio %d será lançado em Poster Capa do Episódio - \@string/result_poster_img_des + Poster Capa Principal Próximo Aleatório Voltar Trocar Provedor - %dd %dh %dm + %d dia(s), %d hora(s) e %d mese(s) Fonte Resolução Extras @@ -381,4 +381,31 @@ Todas as legendas em maiúsculas Transferir todos os plugins deste repositório\? %s (Desativado) + Instalador APK + %d minuto(s) + Reproduzir trailer + Marcar como visto/não visto + Reproduzir + Instalar automaticamente todas as extensões dos repositórios cadastrados. + Baixar extensões automaticamente + Refazer o processo de configuração + -30 + Vídeo + +30 + %s %d%s + Elenco: %s + Atualização em andamento + Log + Alguns aparelhos não possuem suporte para o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar. + %d-%d + %d %s + Iniciar + Falha + Sucesso + Biblioteca + Navegar + Aplicativo de Anime pelos mesmos desenvolvedores + Ova + Anime + Player visível - Procurar valor \ No newline at end of file diff --git a/app/src/main/res/values-qt/strings.xml b/app/src/main/res/values-qt/strings.xml index b36f3b16..c1119bfc 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -172,30 +172,31 @@ oouuh haa oohahaha hahha ooooohaha oohahaha hahha ooooohaha haaoou - u ahhu uuuh hau uaohuau + u ahhu uuuh hau uaohuau aahuuouhh ouh hhhah hhaohuhha a auoo ohauh - uhaauauau ahuuouaha + uhaauauau ahuuouaha auuuha h a ahuhaaaa - uaoh uhu uahaaaaoo - uauhah u aao u oah - h u ahahh aoou ha + uaoh uhu uahaaaaoo + uauhah u aao u oah + h u ahahh aoou ha haoooo aaoou uou ah oahuouooaouoa ouuhh o ouou uhauuuoaah h ou aouhouo aaooao hh - hhauhohhuu au aaohu - uhuoh o a ohahuhohoa hah + hhauhohhuu au aaohu + uhuoh o a ohahuhohoa hah ua hu ouo o aoau hah ah - ah huu oouhhau aoaoaaohoo ha - a ahu uoo uoahuo uo + ah huu oouhhau aoaoaaohoo ha + a ahu uoo uoahuo uo uo u ohouao uuoouhh hhuhuuh ouhoaao hau aouo - uha uh huo uooaah u + uha uh huo uooaah u u ooah uo ahauao huhuu hauu h a ou oh ouhuouhoaaha aaooohhouhhha hauauuu - aaaaaaa uuuuuu\n%s -> %s + aaaaaaa uuuuuu +\n%s -> %s %s aaou %d oouaaahh %s aaaaaaugh ouh %d uuoogahaaah ooua-h-ha diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 982546bc..42d9b7c8 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -9,7 +9,7 @@ %dm Poster - \@string/result_poster_img_des + Poster Poster Episod Poster Principal Următorul la Întâmplare @@ -142,7 +142,7 @@ Fișier de rezervă încărcat Imposibilitatea de a restaura datele din %s Date stocate - Permisiuni de arhivare lipsă, vă rugăm să încercați din nou + Permisiunea de arhivare lipșe, vă rugăm să încercați din nou. Eroare de backup %s Căutare Conturi și credite @@ -154,7 +154,7 @@ Nu trimiteți niciun fel de date Afișează etichetele [filler] pentru anime Arată trailerul - Arată posterele de la Kitsu + Arată afișele de la Kitsu Afișați actualizările aplicației Căutați automat noi actualizări la pornire Actualizați la prerelease @@ -384,4 +384,8 @@ Începe următorul episod când se termină episodul curent Ascundeți calitatea video selectată în rezultatele căutării Redare Livestream + Librărie + Log + Browser + Joacă cu CloudStream \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6e9fb394..2812667a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -506,4 +506,16 @@ Плеер показан - Перемотки объем Плеер спрятан - Перемотки объем Удалять лишнее из субтитров + Местоположение ползунка, когда игрок скрыт + Android TV + Второго планa + Смешанный опенинг + Смешанный конец + Тест провайдер + Журнал + Запустить + Выполнено + Неудачный + Прекратить + Перезапустить \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 97039233..66d8ada9 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -17,7 +17,7 @@ %dd %dh %dm %dm %d min - \@string/result_poster_img_des + Plagát Plagát epizódy Hlavný plagát Prehrať s CloudStream diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 871e0a28..a676b583 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -217,7 +217,7 @@ Пропустити OP Не показувати знову Оновити - Бажана якість перегляду + Бажана якість перегляду (WiFi) Заголовок Перемикання елементів інтерфейсу на плакаті Оновлення не знайдено @@ -507,4 +507,27 @@ Файл безпечного режиму знайдено! \nРозширеня не завантажуються під час запуску, доки файл не буде видалено. Android TV + Плеєр сховано - обсяг пошуку + Плеєр показано - обсяг пошуку + Обсяг пошуку, який використовується, коли плеєр видимий + Обсяг пошуку, який використовується, коли гравець прихований + Не вдалося + Пройдено + Перезапуск + Журнал + Старт + Стоп + Тест постачальника + Оновлення підписаних шоу + Підписано + Підписано на %s + Відписатися від %s + Епізод %d випущено! + Повернути + raw.githubusercontent.com +\nProxy + Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. + Обходи ISP + Обходити блокування GitHub з використанням jsdlitr, може викликати затримку оновлень на кілька днів. + Бажана якість перегляду (Мобільні дані) \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a8341d46..8a10208a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -19,7 +19,7 @@ %dm 封面 - \@string/result_poster_img_des + 封面 劇集封面 主封面 隨機下一個 @@ -533,4 +533,5 @@ 預設 外觀 功能 + 瀏覽器 \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c57e3ca1..626cc0fe 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -554,4 +554,26 @@ 看来您的库是空的 :( \n登录库账户或添加节目到您的本地库 看来此列表是空的,请尝试切换到另一个 + 播放器显示 - 快进快退秒数 + 播放器可见时使用的快进快退秒数 + 播放器隐藏 - 快进快退秒数 + 播放器隐藏时使用的快进快退秒数 + Android TV + 失败 + 片源测试 + 重启 + 停止 + 正在更新订阅节目 + 已订阅 + 已订阅 %s + 已取消订阅 %s + 开始 + 第 %d 集已发布! + 成功 + 日志 + raw.githubusercontent.com 代理 + 连接 Github 失败,正在启用 jsdelivr 代理。 + 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 + ISP 绕过 + 还原 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0858fdfa..49380b5e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,6 +16,7 @@ test_providers_key subtitle_settings_chromecast_key quality_pref_key + quality_pref_mobile_data_key player_pref_key prefer_limit_title_key prefer_limit_title_rez_key @@ -43,6 +44,7 @@ random_button_key provider_lang_key dns_key + jsdelivr_proxy_key download_path_key Cloudstream app_layout_key @@ -363,7 +365,8 @@ Don\'t show again Skip this Update Update - Preferred watch quality + Preferred watch quality (WiFi) + Preferred watch quality (Mobile Data) Video player title max chars Video player resolution Video buffer size @@ -378,6 +381,9 @@ Causes problems if set too high on devices with low storage space, such as Android TV. DNS over HTTPS Useful for bypassing ISP blocks + raw.githubusercontent.com Proxy + Failed to reach GitHub, enabling jsdelivr proxy. + Bypasses blocking of GitHub using jsdelivr, may cause updates to be delayed by few days. Clone site Remove site Add a clone of an existing site, with a different URL @@ -405,6 +411,7 @@ responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. + ISP Bypasses Links App updates Backup @@ -644,9 +651,10 @@ Looks like your library is empty :(\nLogin to a library account or add shows to your local library Looks like this list is empty, try switching to another one Safe mode file found!\nNot loading any extensions on startup until file is removed. + Revert Updating subscribed shows Subscribed Subscribed to %s Unsubscribed from %s Episode %d released! - \ No newline at end of file + diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml index 0e5bd84f..2d2905ea 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -15,6 +15,10 @@ android:icon="@drawable/ic_baseline_hd_24" android:key="@string/quality_pref_key" android:title="@string/watch_quality_pref" /> + - - - - + + + + + + + + + +