mirror of
				https://github.com/recloudstream/cloudstream.git
				synced 2024-08-15 01:53:11 +00:00 
			
		
		
		
	Merge branch 'master' into weblate
This commit is contained in:
		
						commit
						bec0a2e7b9
					
				
					 6 changed files with 92 additions and 22 deletions
				
			
		|  | @ -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<Boolean>(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 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -73,7 +75,9 @@ object RepositoryManager { | |||
|     } | ||||
|     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<Boolean>(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" | ||||
|  | @ -91,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 | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -82,7 +82,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 +97,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 +157,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 +313,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() | ||||
| 
 | ||||
|  |  | |||
|  | @ -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<String, String> { | ||||
|         val queryPairs: MutableMap<String, String> = LinkedHashMap() | ||||
|         val query: String = url.query | ||||
|  |  | |||
|  | @ -43,6 +43,7 @@ | |||
|     <string name="random_button_key" translatable="false">random_button_key</string> | ||||
|     <string name="provider_lang_key" translatable="false">provider_lang_key</string> | ||||
|     <string name="dns_key" translatable="false">dns_key</string> | ||||
|     <string name="jsdelivr_proxy_key" translatable="false">jsdelivr_proxy_key</string> | ||||
|     <string name="download_path_key" translatable="false">download_path_key</string> | ||||
|     <string name="app_name_download_path" translatable="false">Cloudstream</string> | ||||
|     <string name="app_layout_key" translatable="false">app_layout_key</string> | ||||
|  | @ -378,6 +379,9 @@ | |||
|     <string name="video_disk_description">Causes problems if set too high on devices with low storage space, such as Android TV.</string> | ||||
|     <string name="dns_pref">DNS over HTTPS</string> | ||||
|     <string name="dns_pref_summary">Useful for bypassing ISP blocks</string> | ||||
|     <string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string> | ||||
|     <string name="jsdelivr_enabled">Failed to reach GitHub, enabling jsdelivr proxy.</string> | ||||
|     <string name="jsdelivr_proxy_summary">Bypasses blocking of GitHub using jsdelivr, may cause updates to be delayed by few days.</string> | ||||
|     <string name="add_site_pref">Clone site</string> | ||||
|     <string name="remove_site_pref">Remove site</string> | ||||
|     <string name="add_site_summary">Add a clone of an existing site, with a different URL</string> | ||||
|  | @ -405,6 +409,7 @@ | |||
|         responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use | ||||
|         CloudStream 3 at your own risk. | ||||
|     </string> | ||||
|     <string name="pref_category_bypass">ISP Bypasses</string> | ||||
|     <string name="pref_category_links">Links</string> | ||||
|     <string name="pref_category_app_updates">App updates</string> | ||||
|     <string name="pref_category_backup">Backup</string> | ||||
|  | @ -644,6 +649,7 @@ | |||
|     <string name="empty_library_no_accounts_message">Looks like your library is empty :(\nLogin to a library account or add shows to your local library</string> | ||||
|     <string name="empty_library_logged_in_message">Looks like this list is empty, try switching to another one</string> | ||||
|     <string name="safe_mode_file">Safe mode file found!\nNot loading any extensions on startup until file is removed.</string> | ||||
|     <string name="revert">Revert</string> | ||||
|     <string name="subscription_in_progress_notification">Updating subscribed shows</string> | ||||
|     <string name="subscription_list_name">Subscribed</string> | ||||
|     <string name="subscription_new">Subscribed to %s</string> | ||||
|  |  | |||
|  | @ -6,18 +6,6 @@ | |||
|         android:title="@string/app_language" | ||||
|         android:icon="@drawable/ic_baseline_language_24" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:key="@string/override_site_key" | ||||
|             android:title="@string/add_site_pref" | ||||
|             android:summary="@string/add_site_summary" | ||||
|             android:icon="@drawable/ic_baseline_add_24" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:key="@string/dns_key" | ||||
|             android:title="@string/dns_pref" | ||||
|             android:summary="@string/dns_pref_summary" | ||||
|             android:icon="@drawable/ic_baseline_dns_24" /> | ||||
| 
 | ||||
|     <Preference | ||||
|             android:key="@string/download_path_key" | ||||
|             android:title="@string/download_path_pref" | ||||
|  | @ -34,6 +22,30 @@ | |||
|         android:icon="@drawable/benene" | ||||
|         app:summary="@string/benene_des" /> | ||||
| 
 | ||||
|     <PreferenceCategory | ||||
|             android:title="@string/pref_category_bypass"> | ||||
| 
 | ||||
|         <Preference | ||||
|                 android:key="@string/override_site_key" | ||||
|                 android:title="@string/add_site_pref" | ||||
|                 android:summary="@string/add_site_summary" | ||||
|                 android:icon="@drawable/ic_baseline_add_24" /> | ||||
| 
 | ||||
|         <Preference | ||||
|                 android:key="@string/dns_key" | ||||
|                 android:title="@string/dns_pref" | ||||
|                 android:summary="@string/dns_pref_summary" | ||||
|                 android:icon="@drawable/ic_baseline_dns_24" /> | ||||
| 
 | ||||
|         <SwitchPreference | ||||
|                 android:defaultValue="false" | ||||
|                 android:icon="@drawable/ic_github_logo" | ||||
|                 android:key="@string/jsdelivr_proxy_key" | ||||
|                 android:title="@string/jsdelivr_proxy" | ||||
|                 android:summary="@string/jsdelivr_proxy_summary" /> | ||||
| 
 | ||||
|     </PreferenceCategory> | ||||
| 
 | ||||
|     <PreferenceCategory | ||||
|             android:title="@string/pref_category_links"> | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue