From a273be6d89d30e32156501beb979efbe5ee831c6 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 21 Aug 2022 20:51:01 +0200 Subject: [PATCH 001/888] Fix oversight when cookies are already stored in cloudflare --- .../cloudstream3/network/CloudflareKiller.kt | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index 7a759cd6..05836269 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -23,16 +23,21 @@ class CloudflareKiller : Interceptor { } } - val savedCookies: MutableMap = mutableMapOf() + val savedCookies: MutableMap> = mutableMapOf() override fun intercept(chain: Interceptor.Chain): Response = runBlocking { val request = chain.request() - if (savedCookies[request.url.host] == null) { + val cookies = savedCookies[request.url.host] + + if (cookies == null) { bypassCloudflare(request)?.let { Log.d(TAG, "Succeeded bypassing cloudflare: ${request.url}") return@runBlocking it } + } else { + return@runBlocking proceed(request, cookies) } + debugWarning({ true }) { "Failed cloudflare at: ${request.url}" } return@runBlocking chain.proceed(request) } @@ -49,11 +54,25 @@ class CloudflareKiller : Interceptor { // Not sure if this takes expiration into account return getWebViewCookie(request.url.toString())?.let { cookie -> cookie.contains("cf_clearance").also { solved -> - if (solved) savedCookies[request.url.host] = cookie + if (solved) savedCookies[request.url.host] = parseCookieMap(cookie) } } ?: false } + private suspend fun proceed(request: Request, cookies: Map): Response { + val userAgentMap = WebViewResolver.getWebViewUserAgent()?.let { + mapOf("user-agent" to it) + } ?: emptyMap() + + val headers = + getHeaders(request.headers.toMap() + userAgentMap, cookies + request.cookies) + return app.baseClient.newCall( + request.newBuilder() + .headers(headers) + .build() + ).await() + } + private suspend fun bypassCloudflare(request: Request): Response? { val url = request.url.toString() @@ -78,17 +97,6 @@ class CloudflareKiller : Interceptor { } val cookies = savedCookies[request.url.host] ?: return null - - val mappedCookies = parseCookieMap(cookies) - val userAgentMap = WebViewResolver.getWebViewUserAgent()?.let { - mapOf("user-agent" to it) - } ?: emptyMap() - - val headers = getHeaders(request.headers.toMap() + userAgentMap, mappedCookies + request.cookies) - return app.baseClient.newCall( - request.newBuilder() - .headers(headers) - .build() - ).await() + return proceed(request, cookies) } } \ No newline at end of file From cc38cf42642df6c09908ae90970e673b37aed86f Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 21 Aug 2022 22:13:53 +0200 Subject: [PATCH 002/888] Fix TV layout bugs --- .../cloudstream3/plugins/PluginManager.kt | 2 +- .../ui/settings/SettingsAccount.kt | 2 ++ .../ui/settings/SettingsFragment.kt | 10 +++++++ .../ui/settings/SettingsGeneral.kt | 2 ++ .../cloudstream3/ui/settings/SettingsLang.kt | 2 ++ .../ui/settings/SettingsPlayer.kt | 2 ++ .../cloudstream3/ui/settings/SettingsUI.kt | 2 ++ .../ui/settings/SettingsUpdates.kt | 2 ++ .../ui/settings/extensions/PluginAdapter.kt | 3 +- .../ui/settings/extensions/PluginsFragment.kt | 28 +++++++++++++------ .../settings/extensions/PluginsViewModel.kt | 4 +-- app/src/main/res/layout/fragment_plugins.xml | 1 + 12 files changed, 47 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 93bc85bf..96a2222e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -125,7 +125,7 @@ object PluginManager { Environment.getExternalStorageDirectory().absolutePath + "/Cloudstream3/plugins" // Maps filepath to plugin - private val plugins: MutableMap = + val plugins: MutableMap = LinkedHashMap() // Maps urls to plugin diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 7d809187..971e630e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -26,6 +26,7 @@ import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -208,6 +209,7 @@ class SettingsAccount : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_account) + setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 638af264..4c532e4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -21,6 +21,7 @@ import com.lagradost.cloudstream3.ui.home.HomeFragment import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setImage +import com.lagradost.cloudstream3.utils.UIHelper.toPx import kotlinx.android.synthetic.main.main_settings.* import kotlinx.android.synthetic.main.standard_toolbar.* import java.io.File @@ -40,6 +41,15 @@ class SettingsFragment : Fragment() { } } + /** + * On TV you cannot properly scroll to the bottom of settings, this fixes that. + * */ + fun PreferenceFragmentCompat.setPaddingBottom() { + if (this.context?.isTvSettings() == true) { + listView?.setPadding(0, 0, 0, 100.toPx) + } + } + fun Fragment?.setUpToolbar(title: String) { if (this == null) return settings_toolbar?.apply { 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 50d581ad..389d52c3 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 @@ -25,6 +25,7 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.ui.EasterEggMonke import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -42,6 +43,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_general) + setPaddingBottom() } data class CustomSite( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt index ccfd55b3..1c77f1d8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt @@ -12,6 +12,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -61,6 +62,7 @@ class SettingsLang : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_preferred_media_and_lang) + setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 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 478457c4..125fadec 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 @@ -9,6 +9,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment @@ -21,6 +22,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_player) + setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() 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 0dd1dec9..9e85ab94 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 @@ -9,6 +9,7 @@ import com.lagradost.cloudstream3.SearchQuality import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -19,6 +20,7 @@ class SettingsUI : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_ui) + setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index ee974502..6b19042a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -13,6 +13,7 @@ import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt @@ -31,6 +32,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_updates) + setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index d49ea10c..e46c1508 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -134,7 +134,8 @@ class PluginAdapter( //} if (data.isDownloaded) { - val plugin = PluginManager.urlPlugins[metadata.url] + // On local plugins page the filepath is provided instead of url. + val plugin = PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] if (plugin?.openSettings != null) { itemView.action_settings?.isVisible = true itemView.action_settings.setOnClickListener { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index 3dffef85..0ee0615a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -13,12 +13,14 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.getPairList +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.appLanguages import com.lagradost.cloudstream3.ui.settings.getCurrentLocale import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper +import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import kotlinx.android.synthetic.main.fragment_plugins.* @@ -64,20 +66,23 @@ class PluginsFragment : Fragment() { R.id.lang_filter -> { val tempLangs = appLanguages.toMutableList() val languageCodes = mutableListOf("none") + tempLangs.map { (_, _, iso) -> iso } - val languageNames = mutableListOf(getString(R.string.no_data)) + tempLangs.map { (emoji, name, iso) -> - val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } - "$flag $name" - } - val selectedList = pluginViewModel.languages.map { it -> languageCodes.indexOf(it) } + val languageNames = + mutableListOf(getString(R.string.no_data)) + tempLangs.map { (emoji, name, iso) -> + val flag = + emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } + "$flag $name" + } + val selectedList = + pluginViewModel.languages.map { it -> languageCodes.indexOf(it) } activity?.showMultiDialog( languageNames, selectedList, getString(R.string.provider_lang_settings), {}) { newList -> - pluginViewModel.languages = newList.map { it -> languageCodes[it] } - pluginViewModel.updateFilteredPlugins() - } + pluginViewModel.languages = newList.map { it -> languageCodes[it] } + pluginViewModel.updateFilteredPlugins() + } } else -> {} } @@ -123,6 +128,11 @@ class PluginsFragment : Fragment() { pluginViewModel.handlePluginAction(activity, url, it, isLocal) } + if (context?.isTvSettings() == true) { + // Scrolling down does not reveal the whole RecyclerView on TV, add to bypass that. + plugin_recycler_view?.setPadding(0, 0, 0, 200.toPx) + } + observe(pluginViewModel.filteredPlugins) { (scrollToTop, list) -> (plugin_recycler_view?.adapter as? PluginAdapter?)?.updateList(list) @@ -160,7 +170,7 @@ class PluginsFragment : Fragment() { for ((button, validTypes) in pairList) { val validTypesMapped = validTypes.map { it.name } val isValid = true - //validTypes.any { it -> supportedTypes.contains(it.name) } + //validTypes.any { it -> supportedTypes.contains(it.name) } button?.isVisible = isValid if (isValid) { fun buttonContains(): Boolean { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt index a8e95254..0a71c17a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt @@ -176,7 +176,7 @@ class PluginsViewModel : ViewModel() { } this.plugins = list - _filteredPlugins.postValue(false to list.filterTvTypes().sortByQuery(currentQuery)) + _filteredPlugins.postValue(false to list.filterTvTypes().filterLang().sortByQuery(currentQuery)) } // Perhaps can be optimized? @@ -234,6 +234,6 @@ class PluginsViewModel : ViewModel() { } plugins = downloadedPlugins - _filteredPlugins.postValue(false to downloadedPlugins.filterTvTypes().sortByQuery(currentQuery)) + _filteredPlugins.postValue(false to downloadedPlugins.filterTvTypes().filterLang().sortByQuery(currentQuery)) } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_plugins.xml b/app/src/main/res/layout/fragment_plugins.xml index e1606e81..54eae80f 100644 --- a/app/src/main/res/layout/fragment_plugins.xml +++ b/app/src/main/res/layout/fragment_plugins.xml @@ -127,6 +127,7 @@ Date: Sun, 21 Aug 2022 23:36:12 +0200 Subject: [PATCH 003/888] Added OpenSubtitles and nginx account login to the backup blacklist --- .../java/com/lagradost/cloudstream3/utils/BackupUtils.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 48d96bb5..08c03d6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -28,6 +28,8 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_S import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_TOKEN_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY +import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi +import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY import com.lagradost.cloudstream3.utils.DataStore.getDefaultSharedPrefs import com.lagradost.cloudstream3.utils.DataStore.getSharedPrefs import com.lagradost.cloudstream3.utils.DataStore.mapper @@ -63,7 +65,10 @@ object BackupUtils { // The plugins themselves are not backed up PLUGINS_KEY, - PLUGINS_KEY_LOCAL + PLUGINS_KEY_LOCAL, + + OPEN_SUBTITLES_USER_KEY, + "nginx_user", // Nginx user key ) /** false if blacklisted key */ From 8862b103a739ef9410bf054e51aac32f8fec67a5 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Mon, 22 Aug 2022 14:57:47 +0200 Subject: [PATCH 004/888] dont show nsfw in recently watched --- .../com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index c0c24f85..3e6e24cb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -733,6 +733,9 @@ class GeneratorPlayer : FullScreenPlayer() { // Don't save livestream data if ((currentMeta as? ResultEpisode)?.tvType?.isLiveStream() == true) return + // Don't save NSFW data + if ((currentMeta as? ResultEpisode)?.tvType == TvType.NSFW) return + val (position, duration) = posDur if (duration == 0L) return // idk how you achieved this, but div by zero crash From f0668da0a847671113f8d84672143724f3adddf5 Mon Sep 17 00:00:00 2001 From: Gustavo <64141391+GustavoASantos@users.noreply.github.com> Date: Mon, 22 Aug 2022 18:06:12 +0100 Subject: [PATCH 005/888] Updated PT and PT-BR Translations (#51) * Update strings-pt.xml * Update strings.xml * Update strings-pt.xml * Fixed missing > --- app/src/main/res/values-bp/strings.xml | 8 +- app/src/main/res/values-pt/strings-pt.xml | 398 +++++++++++++++------- 2 files changed, 274 insertions(+), 132 deletions(-) diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 168d7278..33245013 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -171,7 +171,7 @@ Arquivo de Backup carregado Falha em restaurar dados do arquivo %s Dados salvos com sucesso - Permissões de armazenamento faltando, por favor tente denovo + Permissões de armazenamento faltando, por favor tente de novo Erro no backup de %s Procurar @@ -186,6 +186,9 @@ Mostrar episódios de Filler em anime Mostrar trailers Mostrar posters do kitsu + + Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa + Atualizações de plugin automáticas Mostrar atualizações do app Automaticamente procurar por novas atualizações ao abrir @@ -253,6 +256,8 @@ Documentários OVA Dramas Asiáticos + Transmissões em Direto + Outros Filme @@ -263,6 +268,7 @@ Torrent Documentário Drama Asiático + Transmissão em Direto Erro de fornecimento Erro remoto diff --git a/app/src/main/res/values-pt/strings-pt.xml b/app/src/main/res/values-pt/strings-pt.xml index e686c988..a77aac7a 100644 --- a/app/src/main/res/values-pt/strings-pt.xml +++ b/app/src/main/res/values-pt/strings-pt.xml @@ -15,161 +15,205 @@ Velocidade (%.2fx) Classificado: %.1f Nova atualização encontrada!\n%s -> %s - Cheio + Enchimento CloudStream + Reproduzir com CloudStream Início - Buscar - Downloads - Opções + Pesquisa + Transferências + Configurações - Buscar… - Sem dados + Procurar… + Procurar em %s… + + Sem Dados Mais Opções Próximo episódio - Gêneros - Compartir + Géneros + Partilhar Abrir no Navegador Saltar Carga - Cargando… + Carregando… Assistindo - Em espera - Completado - Deixado - Planejando assistir + Em Espera + Concluído + Abandonado + Planeio Assistir Nenhuma Assistindo de Novo - Assistir Filme - Stream Torrent - Origems - Subtítulos - Reintentar conexão… + Reproduzir Filme + Reproduzir Livestream + Transmitir Torrent + Fontes + Legendas + Voltar a tentar ligação… Voltar Atrás - Assistir Episódio + Reproduzir Episódio - Descàrregar - Descàrregado - Descàrregando - Descàrrega Pausada - Descàrrega Iniciada - Descàrrega Fallida - Descàrrega Cancelada - Descàrrega Terminada + Transferir + Transferido + A Transferir + Transferência em Pausa + Transferência Iniciada + Transferência Falhou + Transferência Cancelada + Transferência Completa + Transmitir - Error Cargando Links - Armazenagem Interno + Erro a Carregar Links + Armazenamento Interno - Dub - Sub + Dob + Leg - Eliminar Arquivo - Reproduzir Arquivo - Retomar Descàrrega - Pausar Descàrrega + Eliminar Ficheiro + Reproduzir Ficheiro + Retomar Transferência + Pausar Transferência - Desativar o relatório automático de erros + Desativar relatório automático de erros Mais info Esconder Reproduzir Info Filtrar Marcadores Marcadores - Eliminar + Remover Aplicar Cancelar - Velocidade do Reproductor + Copiar + Fechar + Limpar + Guardar - Ajustes de Subtítulos - Color do Texto - Color do Delineado - Color do Fondo - Color da Janela + Velocidade de Reprodução + + Configurações de Legendas + Cor do Texto + Cor do Delineado + Cor do Fundo + Cor da Janela Tipo de Borda - Elevação de Subtítulo + Elevação da Legenda Fonte Tamanho da Fonte - Busca usando fornecedores - Busca usando tipos + Procurar usando fornecedores + Procurar usando tipos - %d Benenes dadas a os devs - Nenhum Benene dado + %d Benenes dadas aos devs + Nenhum Benene dada Auto-seleção de Idioma - Descàrregar Idiomas - Segure para reinicializar para o padrão - Continuar Assistindo + Transferir Idiomas + Idioma da Legenda + Segure para retornar para o padrão + Importar fontes colocando em %s + Continuar a Assistir - Eliminar + Remover Mais info - Uma VPN pode ser necessária para que este provedor funcione corretamente - Este provedor é uma torrent; uma VPN é recomendada + Uma VPN pode ser necessária para que este fornecedor funcione corretamente + Este fornecedor é um torrent, uma VPN é recomendada - Metadados não são fornecidos pelo site, o carregamento de vídeo pode falhar. + Metadados não são oferecidos pelo site, o carregamento do vídeo irá falhar se ele não existir no site. - Descripção - Nenhuma Trama Encontrada - Nenhuma Descripção Encontrada + Descrição + Nenhum Enredo Encontrado + Nenhuma Descrição Encontrada - Picture-em-picture - Continua a reprodução em um player em miniatura em cima de outros apps + Mostrar logcat 🐈 + + Picture-in-picture + Continua a reprodução num player em miniatura em cima de outras apps Botão de redimensionamento do player - Tirar as bordas negras - Subtítulos - Configurações de subtítulos do Player + Remover as bordas negras + Legendas + Configurações de legendas do player + Legendas do Chromecast + Configurações de legendas do Chromecast + Modo Eigengravy - Adiciona um botão de velocidade no player - Deslize para buscar para frente + Acrescenta uma opção de velocidade no player + Deslize para andar Deslize para a esq. ou dir. para controlar o tempo no player Deslize para mudar as configurações - Deslize para o lado esq. ou dir. para ajustar brilho ou volume - Duplo toque para buscar para frente - Usar o brilho da sistema - Usar o brilho da sistema em vez de uma sobreposição escura + Deslize do lado esq. ou dir. para ajustar brilho ou volume + Toque duplo para avançar + Toque duplo para pôr em pausa + Segundos avançados no player + Toque duplo no lado esq. ou dir. para andar para trás ou para a frente + Toque no meio para pôr em pausa + Usar brilho da sistema + Usar brilho do sistema no player em vez de uma sobreposição escura + + Atualizar progresso + Sincronizar automaticamente o progresso do seu episódio atual + + Restaurar dados a partir de backup + + Fazer backup + Arquivo de backup carregado + Falha ao restaurar dados do ficheiro %s + Dados guardados com sucesso + Permissões de armazenamento em falta, por favor tente de novo + Erro no backup de %s + + Procurar + Contas + Atualizações e backup - Buscar Info - Búsqueda Avançada - Mostra resultados da busca separados por fornecedor - Só envia dados sobre travamentos + Procura Avançada + Mostra resultados separados por fornecedor + Só envia dados sobre falhas Não envia nenhum dado Mostrar episódios de enchimento para anime - Mostrar actualizações do app - Busca novas actualizações à iniciar - Actualizar à Pré-lançamentos - Busca actualizações pré-lançamento em vez de só lançamentos completos + Mostrar trailers + Mostrar posters do kitsu + + Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa + Atualizações de plugin automáticas + + Mostrar atualizações da app + Procurar novas atualizações automaticamente ao iniciar + Atualizar para pré-lançamentos + Procura atualizações de pré-lançamento em vez de só lançamentos oficiais Github - App light novel por os mesmos devs - Junte-se à Discord - Dar um benene à os devs + App light novel pelos mesmos devs + Junte-se ao Discord + Dar um benene aos devs Benene dada - Linguagem do App + Linguagem da App Este fornecedor não tem suporte para Chromecast - Links Não Encontrados - Link copiado para a prancheta + Nenhum Link Encontrado + Link copiado para a área de transferência Reproduzir episódio - Reinicializar para o padrão - Desculpe, a aplicação falhou. Um relatório de erro anônimo será enviado para os + Restaurar para o padrão + Desculpe, a aplicação falhou. Um relatório de erro anónimo será enviado para os desenvolvedores Temporada - Sem Temporada + Nenhuma Temporada Episódio Episódios T E + Nenhum Episódio encontrado - Eliminar Arquivo + Eliminar Ficheiro Eliminar - Pausar + Pôr em Pausa Retomar - Isto apagarà %s permanentemente\nVocê tem certeza? + Isto apagará %s permanentemente\nTem a certeza? + %dm\nem falta Em Curso Concluído @@ -177,12 +221,12 @@ Ano Classificação Duração - Sitio - Sinopsis + Site + Sinopse - Em fila - Não Há Subtítulos - Por Padrão + Na fila + Sem Legendas + Padrão Livre Usado @@ -190,52 +234,85 @@ Filmes - Séries de TV - Desenhos animados + Séries + Desenhos Animados Anime - Torrentes + Torrents Documentários + OVA + Dramas Asiáticos + Transmissões em Direto + NSFW + Outros Filme - Sériado - Desenho animado + Série + Desenho Animado Torrent Documentário + Drama Asiático + Transmissão em Direto + NSFW - Erro de origem + Erro de fonte Erro remoto - Erro de Renderizador - Erro inesperado do player reproductor - Erro de descàrrega; verifica permissões de armazenamento + Erro de renderização + Erro inesperado do player + Erro de transferência, verifique permissões de armazenamento - Chromecast o Episódio - Chromecast á o Espelho - Assistir no App - Assistir no VLC - Assistir no Navegador - Copiar Link - Auto Descàrrega - Descàrregar Espelho - Recarregar Links + Episódio pelo Chromecast + Alternativa pelo Chromecast + Reproduzir na app + Reproduzir no VLC + Reproduzir no navegador + Copiar link + Transferência Automática + Transferir por servidor alternativo + Recarregar links + Transferir legendas - Nenhuma Atualização - Buscar Atualização + Etiqueta de qualidade + Etiqueta Dub + Etiqueta Sub + Título + Alternar elementos da interface no póster + + Nenhuma Atualização Encontrada + Procurar Atualização Fixar Mudar Tamanho - Origem - Pular OP + Fonte + Saltar OP - Não mostra de novo + Não mostrar de novo + Saltar esta Atualização Atualizar - Calidade Preferida - DNS sobre HTTPS - Útil para contornar blocos do provedor de internet - - Caminho de descarga + Qualidade Preferida + Máximo de caracteres do título de vídeos + Resolução do player de vídeo - Mostrar Anime Dublado/Subtítulado + Tamanho do buffer do vídeo + Comprimento do buffer do vídeo + Cache do vídeo em disco + Limpar cache de vídeo e imagem + + Causará travamentos aleatórios se definido muito alto. Não mude se tiver pouca memória RAM, como um Android TV ou um telefone antigo + Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV + + DNS sobre HTTPS + Útil para contornar bloqueios do fornecedor de internet + + Clonar site + Remover site + Adiciona um clone de um site existente, com um url diferente + + Caminho de transferência + + Url do servidor Nginx + + Mostrar Anime Dobrado/Legendado Ajustar para a Tela Esticar @@ -259,33 +336,65 @@ CloudStream 3 por sua própria conta e risco. Geral - Idiomas dos Origems - Layout do App + Botão Aleatório + Mostra o botão Aleatório na página inicial + Idioma dos fornecedores + Layout da App Mídia preferida + Codificação das legendas + Linguagem + Layout Auto Layout de TV - Layout de Celular + Layout de telemóvel + Layout de emulador Cor Primária Tema do App + Local do título do poster + Coloca o título debaixo do poster + senha123 + MeuNomeFixe + ola@mundo.com + 127.0.0.1 + MeuSiteFixe + examplo.com + Codigo da Língua (pt) + Conta Sair - Autenticar + Entrar Mudar de conta Adicionar conta + Criar conta + Adicionar sincronização + %s adicionado + Sincronizar + Nota + %d / 10 + /?? + /%d + %s autenticado + Falha em autenticar para %s + Nenhuma Normal - Todos + Tudo Max Min - Esboçado + Contornado Deprimido - Sombrado + Sombreado Em Relevo + Sincronizar legendas + Atraso de legenda + Use isto se as legendas forem mostradas %dms adiantadas + Use isto se as legendas forem mostradas %dms atrasadas + Sem atraso de legenda Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português - \ No newline at end of file + + Recomendada + %s carregada + Carregar de arquivo + Carregar da Internet + Arquivo baixado + Protagonista + Coadjuvante + Figurante + + Fonte + Aleatório + + Em breve… + + Imagem de Poster + Player + Resolução e título + Título + Resolução + Id invalida + Dado invalido + Erro + Remover legendas ocultas(CC) das legendas + Remover bloat das legendas + Extras + Trailer + From 942c9541a2294f9ef4d19bb1d7092b3c14a74407 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:47:58 +0200 Subject: [PATCH 006/888] Fix CloudflareKiller (remove cookies on init) --- .../com/lagradost/cloudstream3/network/CloudflareKiller.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index 05836269..ceacb9aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -23,6 +23,11 @@ class CloudflareKiller : Interceptor { } } + init { + // Needs to clear cookies between sessions to generate new cookies. + CookieManager.getInstance().removeAllCookies(null) + } + val savedCookies: MutableMap> = mutableMapOf() override fun intercept(chain: Interceptor.Chain): Response = runBlocking { From a3f4c0b953b073662b900dc591673e0bf160e328 Mon Sep 17 00:00:00 2001 From: Visiraptor <110540187+Visiraptor@users.noreply.github.com> Date: Mon, 22 Aug 2022 19:43:38 +0200 Subject: [PATCH 007/888] Update strings-de.xml --- app/src/main/res/values-de/strings-de.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index d665a405..0e9c2821 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -87,7 +87,7 @@ Damit dieser Anbieter korrekt funktioniert, ist möglicherweise eine VPN erforderlich Dies ist ein Torrent Anbieter, eine VPN wird empfohlen Beschreibung - Keine Parzelle gefunden + Keine Beschreibung gefunden Keine Beschreibung gefunden Bild-in-Bild-Modus Setzt die Wiedergabe in einem Miniplayer über anderen Anwendungen fort From 3eb5df5bc1e71c81f63f5e1593f89b602b4ebc95 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 22 Aug 2022 23:30:53 +0200 Subject: [PATCH 008/888] Reload result fragment on plugins fetched --- .../cloudstream3/ui/result/ResultFragment.kt | 97 +++++++++++++------ 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index ffc99585..d47ebb4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.result import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.content.Intent.* import android.content.res.ColorStateList @@ -26,6 +27,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.DubStatus +import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.TvType @@ -261,6 +263,7 @@ open class ResultFragment : ResultTrailerPlayer() { } override fun onResume() { + afterPluginsLoadedEvent += ::reloadViewModel super.onResume() activity?.let { it.window?.navigationBarColor = @@ -268,6 +271,11 @@ open class ResultFragment : ResultTrailerPlayer() { } } + override fun onDestroy() { + afterPluginsLoadedEvent -= ::reloadViewModel + super.onDestroy() + } + /// 0 = LOADING, 1 = ERROR LOADING, 2 = LOADED private fun updateVisStatus(state: Int) { when (state) { @@ -409,6 +417,51 @@ open class ResultFragment : ResultTrailerPlayer() { } } + data class StoredData( + val url: String?, + val apiName: String, + val showFillers: Boolean, + val dubStatus: DubStatus, + val start: AutoResume? + ) + + private fun getStoredData(context: Context): StoredData? { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + val url = arguments?.getString(URL_BUNDLE) + val apiName = arguments?.getString(API_NAME_BUNDLE) ?: return null + val showFillers = + settingsManager.getBoolean(context.getString(R.string.show_fillers_key), false) + val dubStatus = if (context.getApiDubstatusSettings() + .contains(DubStatus.Dubbed) + ) DubStatus.Dubbed else DubStatus.Subbed + val startAction = arguments?.getInt(START_ACTION_BUNDLE) + + val start = startAction?.let { action -> + val startValue = arguments?.getInt(START_VALUE_BUNDLE) + val resumeEpisode = arguments?.getInt(EPISODE_BUNDLE) + val resumeSeason = arguments?.getInt(SEASON_BUNDLE) + + arguments?.remove(START_VALUE_BUNDLE) + arguments?.remove(START_ACTION_BUNDLE) + AutoResume( + startAction = action, + id = startValue, + episode = resumeEpisode, + season = resumeSeason + ) + } + return StoredData(url, apiName, showFillers, dubStatus, start) + } + + private fun reloadViewModel(success: Boolean = false) { + if (!viewModel.hasLoaded()) { + val storedData = getStoredData(activity ?: context ?: return) ?: return + + //viewModel.clear() + viewModel.load(activity, storedData.url ?: return, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) + } + } + @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -441,26 +494,12 @@ open class ResultFragment : ResultTrailerPlayer() { // activity?.fixPaddingStatusbar(result_toolbar) - val url = arguments?.getString(URL_BUNDLE) - val apiName = arguments?.getString(API_NAME_BUNDLE) ?: return - val startAction = arguments?.getInt(START_ACTION_BUNDLE) - val start = startAction?.let { action -> - val startValue = arguments?.getInt(START_VALUE_BUNDLE) - val resumeEpisode = arguments?.getInt(EPISODE_BUNDLE) - val resumeSeason = arguments?.getInt(SEASON_BUNDLE) - - arguments?.remove(START_VALUE_BUNDLE) - arguments?.remove(START_ACTION_BUNDLE) - AutoResume( - startAction = action, - id = startValue, - episode = resumeEpisode, - season = resumeSeason - ) + val storedData = (activity ?: context)?.let { + getStoredData(it) } - syncModel.addFromUrl(url) + syncModel.addFromUrl(storedData?.url) - val api = getApiFromNameNull(apiName) + val api = getApiFromNameNull(storedData?.apiName) result_episodes?.adapter = EpisodeAdapter( @@ -856,7 +895,7 @@ open class ResultFragment : ResultTrailerPlayer() { } } is Resource.Failure -> { - result_error_text.text = url?.plus("\n") + data.errorString + result_error_text.text = storedData?.url?.plus("\n") + data.errorString updateVisStatus(1) } is Resource.Loading -> { @@ -866,27 +905,23 @@ open class ResultFragment : ResultTrailerPlayer() { } context?.let { ctx -> - val dubStatus = if (ctx.getApiDubstatusSettings() - .contains(DubStatus.Dubbed) - ) DubStatus.Dubbed else DubStatus.Subbed //result_bookmark_button?.isVisible = ctx.isTvSettings() val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) - val showFillers = - settingsManager.getBoolean(ctx.getString(R.string.show_fillers_key), false) + Kitsu.isEnabled = settingsManager.getBoolean(ctx.getString(R.string.show_kitsu_posters_key), true) - if (url != null) { + if (storedData?.url != null) { result_reload_connectionerror.setOnClickListener { - viewModel.load(activity, url, apiName, showFillers, dubStatus, start) + viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) } result_reload_connection_open_in_browser?.setOnClickListener { val i = Intent(ACTION_VIEW) - i.data = Uri.parse(url) + i.data = Uri.parse(storedData.url) try { startActivity(i) } catch (e: Exception) { @@ -894,10 +929,10 @@ open class ResultFragment : ResultTrailerPlayer() { } } - result_open_in_browser?.isVisible = url.startsWith("http") + result_open_in_browser?.isVisible = storedData.url.startsWith("http") result_open_in_browser?.setOnClickListener { val i = Intent(ACTION_VIEW) - i.data = Uri.parse(url) + i.data = Uri.parse(storedData.url) try { startActivity(i) } catch (e: Exception) { @@ -908,7 +943,7 @@ open class ResultFragment : ResultTrailerPlayer() { // bloats the navigation on tv if (context?.isTrueTvSettings() == false) { result_meta_site?.setOnClickListener { - it.context?.openBrowser(url) + it.context?.openBrowser(storedData.url) } result_meta_site?.isFocusable = true } else { @@ -917,7 +952,7 @@ open class ResultFragment : ResultTrailerPlayer() { if (restart || !viewModel.hasLoaded()) { //viewModel.clear() - viewModel.load(activity, url, apiName, showFillers, dubStatus, start) + viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) } } } From 8ff2540f4bca8fe0b5edcd145575be2d9ccc21f4 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 23 Aug 2022 17:13:35 +0200 Subject: [PATCH 009/888] fix #43 (again) --- .../lagradost/cloudstream3/ui/settings/SettingsLang.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt index 1c77f1d8..b038f21a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt @@ -101,9 +101,11 @@ class SettingsLang : PreferenceFragmentCompat() { val names = enumValues().sorted().map { it.name } val default = enumValues().sorted().filter { it != TvType.NSFW }.map { it.ordinal } val defaultSet = default.map { it.toString() }.toSet() - val currentList = settingsManager.getStringSet(getString(R.string.prefer_media_type_key), defaultSet)?.map { - it.toInt() - } ?: default + val currentList = try { + settingsManager.getStringSet(getString(R.string.prefer_media_type_key), defaultSet)?.map { + it.toInt() + } + } catch (e: Throwable) { null } ?: default activity?.showMultiDialog( names, From 0f8a2df9e5046c5f1822f19e85dd2248e6b1737b Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 23 Aug 2022 21:28:42 +0200 Subject: [PATCH 010/888] Optimized plugin loading --- .../lagradost/cloudstream3/MainActivity.kt | 73 ++++++++++++------- .../cloudstream3/plugins/PluginManager.kt | 52 ++++++++----- .../cloudstream3/ui/home/HomeFragment.kt | 9 +-- .../cloudstream3/ui/home/HomeViewModel.kt | 43 ++++++----- 4 files changed, 108 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 49864e65..629406aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -84,6 +84,8 @@ import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ResponseParser import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_result_swipe.* +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import java.io.File import java.net.URI import kotlin.reflect.KClass @@ -131,6 +133,10 @@ var app = Requests(responseParser = object : ResponseParser { class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" + + /** + * Fires every time a new batch of plugins have been loaded, no guarantee about how often this is run and on which thread + * */ val afterPluginsLoadedEvent = Event() val mainPluginsLoadedEvent = Event() // homepage api, used to speed up time to load for homepage @@ -236,6 +242,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onResume() { super.onResume() + afterPluginsLoadedEvent += ::onAllPluginsLoaded try { if (isCastApiAvailable()) { //mCastSession = mSessionManager.currentCastSession @@ -325,6 +332,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { broadcastIntent.action = "restart_service" broadcastIntent.setClass(this, VideoDownloadRestartReceiver::class.java) this.sendBroadcast(broadcastIntent) + afterPluginsLoadedEvent -= ::onAllPluginsLoaded super.onDestroy() } @@ -414,6 +422,36 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } + private val pluginsLock = Mutex() + private fun onAllPluginsLoaded(success: Boolean = false) { + ioSafe { + pluginsLock.withLock { + // Load cloned sites after plugins have been loaded since clones depend on plugins. + try { + getKey>(USER_PROVIDER_API)?.let { list -> + list.forEach { custom -> + allProviders.firstOrNull { it.javaClass.simpleName == custom.parentJavaClass } + ?.let { + allProviders.add(it.javaClass.newInstance().apply { + name = custom.name + lang = custom.lang + mainUrl = custom.url.trimEnd('/') + canBeOverridden = false + }) + } + } + } + // it.hashCode() is not enough to make sure they are distinct + apis = allProviders.distinctBy { it.lang + it.name + it.mainUrl + it.javaClass.name } + APIHolder.apiMap = null + } catch (e: Exception) { + logError(e) + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) @@ -446,36 +484,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { mainPluginsLoadedEvent.invoke(false) } - if (settingsManager.getBoolean(getString(R.string.auto_update_plugins_key), true)) { - PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) - } else { - PluginManager.loadAllOnlinePlugins(this@MainActivity) - } - - PluginManager.loadAllLocalPlugins(this@MainActivity) - - // Load cloned sites after plugins have been loaded since clones depend on plugins. - try { - getKey>(USER_PROVIDER_API)?.let { list -> - list.forEach { custom -> - allProviders.firstOrNull { it.javaClass.simpleName == custom.parentJavaClass } - ?.let { - allProviders.add(it.javaClass.newInstance().apply { - name = custom.name - lang = custom.lang - mainUrl = custom.url.trimEnd('/') - canBeOverridden = false - }) - } - } + ioSafe { + if (settingsManager.getBoolean(getString(R.string.auto_update_plugins_key), true)) { + PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) + } else { + PluginManager.loadAllOnlinePlugins(this@MainActivity) } - apis = allProviders.distinctBy { it } - APIHolder.apiMap = null - } catch (e: Exception) { - logError(e) } - afterPluginsLoadedEvent.invoke(true) + ioSafe { + PluginManager.loadAllLocalPlugins(this@MainActivity) + } } // ioSafe { diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 96a2222e..ef7dbf35 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -21,12 +21,15 @@ import com.lagradost.cloudstream3.ui.settings.extensions.REPOSITORIES_KEY import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData import com.lagradost.cloudstream3.utils.VideoDownloadManager.sanitizeFilename import com.lagradost.cloudstream3.APIHolder.removePluginMapping +import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.extractorApis import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import org.acra.log.debug import java.io.File import java.io.InputStreamReader import java.util.* @@ -162,7 +165,7 @@ object PluginManager { val isDisabled = onlineData.second.status == PROVIDER_STATUS_DOWN } - var allCurrentOutDatedPlugins: Set = emptySet() + // var allCurrentOutDatedPlugins: Set = emptySet() suspend fun loadSinglePlugin(activity: Activity, apiName: String): Boolean { return (getPluginsOnline().firstOrNull { it.internalName == apiName } @@ -184,6 +187,19 @@ object PluginManager { * 4. Else load the plugin normally **/ fun updateAllOnlinePluginsAndLoadThem(activity: Activity) { + // Load all plugins as fast as possible! + (getPluginsOnline()).toList().apmap { pluginData -> + loadPlugin( + activity, + File(pluginData.filePath), + pluginData + ) + } + + ioSafe { + afterPluginsLoadedEvent.invoke(true) + } + val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES @@ -198,29 +214,28 @@ object PluginManager { OnlinePluginData(savedData, onlineData) } }.flatten().distinctBy { it.onlineData.second.url } - allCurrentOutDatedPlugins = outdatedPlugins.toSet() - Log.i(TAG, "Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}") + debug { + "Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}" + } - outdatedPlugins.apmap { - if (it.isDisabled) { - return@apmap - } else if (it.isOutdated) { + outdatedPlugins.apmap { pluginData -> + if (pluginData.isDisabled) { + unloadPlugin(pluginData.savedData.filePath) + } else if (pluginData.isOutdated) { downloadAndLoadPlugin( activity, - it.onlineData.second.url, - it.savedData.internalName, - it.onlineData.first - ) - } else { - loadPlugin( - activity, - File(it.savedData.filePath), - it.savedData + pluginData.onlineData.second.url, + pluginData.savedData.internalName, + pluginData.onlineData.first ) } } + ioSafe { + afterPluginsLoadedEvent.invoke(true) + } + Log.i(TAG, "Plugin update done!") } @@ -256,6 +271,7 @@ object PluginManager { } loadedLocalPlugins = true + afterPluginsLoadedEvent.invoke(true) } /** @@ -380,7 +396,9 @@ object PluginManager { try { val folderName = getPluginSanitizedFileName(repositoryUrl) // Guaranteed unique val fileName = getPluginSanitizedFileName(internalName) - Log.i(TAG, "Downloading plugin: $pluginUrl to $folderName/$fileName") + unloadPlugin("${activity.filesDir}/${ONLINE_PLUGINS_FOLDER}/${folderName}/$fileName.cs3") + + Log.d(TAG, "Downloading plugin: $pluginUrl to $folderName/$fileName") // The plugin file needs to be salted with the repository url hash as to allow multiple repositories with the same internal plugin names val file = downloadPluginToFile(activity, pluginUrl, fileName, folderName) return loadPlugin( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 975545ee..539ce843 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -456,20 +456,17 @@ class HomeFragment : Fragment() { homeViewModel.loadStoredData(list) } - private var hasBeenConsumed = false private fun firstLoadHomePage(successful: Boolean = false) { // dirty hack to make it only load once - if(hasBeenConsumed) return - hasBeenConsumed = true - loadHomePage(successful) + loadHomePage(false) } - private fun loadHomePage(successful: Boolean = false) { + private fun loadHomePage(forceReload: Boolean = true) { val apiName = context?.getKey(USER_SELECTED_HOMEPAGE_API) if (homeViewModel.apiName.value != apiName || apiName == null) { //println("Caught home: " + homeViewModel.apiName.value + " at " + apiName) - homeViewModel.loadAndCancel(apiName) + homeViewModel.loadAndCancel(apiName, forceReload) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index 7319c5b2..daff5e4a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -264,25 +264,30 @@ class HomeViewModel : ViewModel() { } } - fun loadAndCancel(preferredApiName: String?) = viewModelScope.launchSafe { - val api = getApiFromNameNull(preferredApiName) - if (preferredApiName == noneApi.name){ - setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) - loadAndCancel(noneApi) - } - else if (preferredApiName == randomApi.name || api == null) { - val validAPIs = context?.filterProviderByPreferredMedia() - if (validAPIs.isNullOrEmpty()) { - // Do not set USER_SELECTED_HOMEPAGE_API when there is no plugins loaded - loadAndCancel(noneApi) - } else { - val apiRandom = validAPIs.random() - loadAndCancel(apiRandom) - setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name) + fun loadAndCancel(preferredApiName: String?, forceReload: Boolean = true) = + viewModelScope.launchSafe { + // Since plugins are loaded in stages this function can get called multiple times. + // This makes the home page reload only if it's a failure or loading + if (!forceReload && page.value is Resource.Success) { + return@launchSafe + } + val api = getApiFromNameNull(preferredApiName) + if (preferredApiName == noneApi.name) { + setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) + loadAndCancel(noneApi) + } else if (preferredApiName == randomApi.name || api == null) { + val validAPIs = context?.filterProviderByPreferredMedia() + if (validAPIs.isNullOrEmpty()) { + // Do not set USER_SELECTED_HOMEPAGE_API when there is no plugins loaded + loadAndCancel(noneApi) + } else { + val apiRandom = validAPIs.random() + loadAndCancel(apiRandom) + setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name) + } + } else { + setKey(USER_SELECTED_HOMEPAGE_API, api.name) + loadAndCancel(api) } - } else { - setKey(USER_SELECTED_HOMEPAGE_API, api.name) - loadAndCancel(api) } - } } \ No newline at end of file From 92dbbf86b2210ab92957512fcfb5240f47248df9 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Wed, 24 Aug 2022 00:12:56 +0200 Subject: [PATCH 011/888] =?UTF-8?q?Switched=20prefer=5Fmedia=5Ftype=5Fkey?= =?UTF-8?q?=20to=20fix=20crashes=20(you=20arent=20supposed=20to=20use=20th?= =?UTF-8?q?is=20yet=20anyways=20=F0=9F=92=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0fd0102..4430d224 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,7 +42,7 @@ primary_color_key restore_key backup_key - prefer_media_type_key + prefer_media_type_key_2 app_theme_key episode_sync_enabled_key log_enabled_key From 82d416ad7f47fb5685f86b845c9df183f7683116 Mon Sep 17 00:00:00 2001 From: antonydp <38143733+antonydp@users.noreply.github.com> Date: Wed, 24 Aug 2022 00:14:07 +0200 Subject: [PATCH 012/888] Cloudflare getCookieHeaders (#56) --- .../cloudstream3/network/CloudflareKiller.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index ceacb9aa..7dc8dba7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -9,6 +9,7 @@ import com.lagradost.nicehttp.Requests.Companion.await import com.lagradost.nicehttp.cookies import kotlinx.coroutines.runBlocking import okhttp3.* +import java.net.URI @AnyThread @@ -30,6 +31,17 @@ class CloudflareKiller : Interceptor { val savedCookies: MutableMap> = mutableMapOf() + /** + * Gets the headers with cookies, webview user agent included! + * */ + fun getCookieHeaders(url: String): Headers { + val userAgentHeaders = WebViewResolver.webViewUserAgent?.let { + mapOf("user-agent" to it) + } ?: emptyMap() + + return getHeaders(userAgentHeaders, savedCookies[URI(url).host] ?: emptyMap()) + } + override fun intercept(chain: Interceptor.Chain): Response = runBlocking { val request = chain.request() val cookies = savedCookies[request.url.host] From bbdb1d7ad31fb570fa00dbf3017b25792958f7a6 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Wed, 24 Aug 2022 03:10:06 +0200 Subject: [PATCH 013/888] Add toggle to disable autoplay Fixes #57 --- .../cloudstream3/ui/player/CS3IPlayer.kt | 21 +++++++++++++++++-- app/src/main/res/values/strings.xml | 5 +++++ app/src/main/res/xml/settings_player.xml | 6 ++++++ 3 files changed, 30 insertions(+), 2 deletions(-) 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 0eb72f19..5f6ef921 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 @@ -6,6 +6,7 @@ import android.os.Handler import android.os.Looper import android.util.Log import android.widget.FrameLayout +import androidx.preference.PreferenceManager import com.google.android.exoplayer2.* import com.google.android.exoplayer2.database.StandaloneDatabaseProvider import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource @@ -742,7 +743,15 @@ class CS3IPlayer : IPlayer { } Player.STATE_ENDED -> { - handleEvent(CSPlayerEvent.NextEpisode) + // Only play next episode if autoplay is on (default) + if (PreferenceManager.getDefaultSharedPreferences(context) + ?.getBoolean( + context.getString(com.lagradost.cloudstream3.R.string.autoplay_next_key), + true + ) == true + ) { + handleEvent(CSPlayerEvent.NextEpisode) + } } Player.STATE_BUFFERING -> { updatedTime() @@ -780,7 +789,15 @@ class CS3IPlayer : IPlayer { } Player.STATE_ENDED -> { - handleEvent(CSPlayerEvent.NextEpisode) + // Only play next episode if autoplay is on (default) + if (PreferenceManager.getDefaultSharedPreferences(context) + ?.getBoolean( + context.getString(com.lagradost.cloudstream3.R.string.autoplay_next_key), + true + ) == true + ) { + handleEvent(CSPlayerEvent.NextEpisode) + } } Player.STATE_BUFFERING -> { updatedTime() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4430d224..1b47b180 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ double_tap_pause_enabled_key double_tap_seek_time_key swipe_vertical_enabled_key + autoplay_next_key display_sub_key show_fillers_key show_trailers_key @@ -223,6 +224,10 @@ Swipe left or right to control time in the videoplayer Swipe to change settings Swipe on the left or right side to change brightness or volume + + Autoplay next episode + Start the next episode when the current one ends + Double tap to seek Double tap to pause Player seek amount diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml index d98f506f..a7e36488 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -58,6 +58,12 @@ android:title="@string/swipe_to_change_settings" android:summary="@string/swipe_to_change_settings_des" app:defaultValue="true" /> + Date: Wed, 24 Aug 2022 04:21:46 +0200 Subject: [PATCH 014/888] Fix randomized homepage --- .../lagradost/cloudstream3/plugins/PluginManager.kt | 9 +++++++-- .../lagradost/cloudstream3/ui/home/HomeViewModel.kt | 13 ++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index ef7dbf35..59dae640 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -168,8 +168,13 @@ object PluginManager { // var allCurrentOutDatedPlugins: Set = emptySet() suspend fun loadSinglePlugin(activity: Activity, apiName: String): Boolean { - return (getPluginsOnline().firstOrNull { it.internalName == apiName } - ?: getPluginsLocal().firstOrNull { it.internalName == apiName })?.let { savedData -> + return (getPluginsOnline().firstOrNull { + // Most of the time the provider ends with Provider which isn't part of the api name + it.internalName.replace("provider", "", ignoreCase = true) == apiName + } + ?: getPluginsLocal().firstOrNull { + it.internalName.replace("provider", "", ignoreCase = true) == apiName + })?.let { savedData -> // OnlinePluginData(savedData, onlineData) loadPlugin( activity, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index daff5e4a..1d6ed584 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -267,15 +267,18 @@ class HomeViewModel : ViewModel() { fun loadAndCancel(preferredApiName: String?, forceReload: Boolean = true) = viewModelScope.launchSafe { // Since plugins are loaded in stages this function can get called multiple times. - // This makes the home page reload only if it's a failure or loading - if (!forceReload && page.value is Resource.Success) { + // The issue with this is that the homepage may be fetched multiple times while the first request is loading + val api = getApiFromNameNull(preferredApiName) + if (!forceReload && api?.let { expandable[it.name]?.list?.list?.isNotEmpty() } == true) { return@launchSafe } - val api = getApiFromNameNull(preferredApiName) - if (preferredApiName == noneApi.name) { + // If the plugin isn't loaded yet. (Does not set the key) + if (api == null) { + loadAndCancel(noneApi) + } else if (preferredApiName == noneApi.name) { setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) loadAndCancel(noneApi) - } else if (preferredApiName == randomApi.name || api == null) { + } else if (preferredApiName == randomApi.name) { val validAPIs = context?.filterProviderByPreferredMedia() if (validAPIs.isNullOrEmpty()) { // Do not set USER_SELECTED_HOMEPAGE_API when there is no plugins loaded From 7a6d16d2c137546417e69c666eb13999a8684a72 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Thu, 25 Aug 2022 03:59:20 +0200 Subject: [PATCH 015/888] trailers fix + crash fix --- app/build.gradle | 4 +- .../com/lagradost/cloudstream3/MainAPI.kt | 24 +++++--- .../cloudstream3/mvvm/ArchComponentExt.kt | 4 +- .../cloudstream3/plugins/RepositoryManager.kt | 4 +- .../cloudstream3/ui/ControllerActivity.kt | 4 +- .../ui/download/DownloadHeaderAdapter.kt | 4 +- .../ui/download/DownloadViewModel.kt | 4 +- .../ui/result/ResultViewModel2.kt | 60 +++++++++++++++++-- .../cloudstream3/ui/result/SyncViewModel.kt | 4 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 4 +- .../utils/VideoDownloadManager.kt | 4 +- .../widget/CenterZoomLayoutManager.kt | 4 +- 12 files changed, 91 insertions(+), 33 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1aa62378..c14f0657 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -107,7 +107,7 @@ dependencies { testImplementation 'org.json:json:20180813' implementation 'androidx.core:core-ktx:1.8.0' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.4.2' // need target 32 for 1.5.0 // dont change this to 1.6.0 it looks ugly af implementation 'com.google.android.material:material:1.5.0' @@ -194,7 +194,7 @@ dependencies { //implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' // newpipe yt - implementation 'com.github.recloudstream:NewPipeExtractor:master-SNAPSHOT' + implementation 'com.github.recloudstream:NewPipeExtractor:0.22.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' // Library/extensions searching with Levenshtein distance diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 67283de3..f442e175 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -236,8 +236,8 @@ object APIHolder { val defaultSet = default.map { it.toString() }.toSet() val currentPrefMedia = try { PreferenceManager.getDefaultSharedPreferences(this) - .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) - ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } + .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) + ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } } catch (e: Throwable) { null } ?: default @@ -891,8 +891,11 @@ data class TvSeriesSearchResponse( ) : SearchResponse data class TrailerData( - var mirros: List, - var subtitles: List = emptyList(), + val extractorUrl: String, + val referer: String?, + val raw: Boolean, + //var mirros: List, + //var subtitles: List = emptyList(), ) interface LoadResponse { @@ -971,7 +974,8 @@ interface LoadResponse { addRaw: Boolean = false ) { if (!isTrailersEnabled || trailerUrl.isNullOrBlank()) return - val links = arrayListOf() + this.trailers.add(TrailerData(trailerUrl, referer, addRaw)) + /*val links = arrayListOf() val subs = arrayListOf() if (!loadExtractor( trailerUrl, @@ -995,12 +999,13 @@ interface LoadResponse { ) } else { this.trailers.add(TrailerData(links, subs)) - } + }*/ } + /* fun LoadResponse.addTrailer(newTrailers: List) { trailers.addAll(newTrailers.map { TrailerData(listOf(it)) }) - } + }*/ suspend fun LoadResponse.addTrailer( trailerUrls: List?, @@ -1008,7 +1013,8 @@ interface LoadResponse { addRaw: Boolean = false ) { if (!isTrailersEnabled || trailerUrls == null) return - val trailers = trailerUrls.filter { it.isNotBlank() }.apmap { trailerUrl -> + trailers.addAll(trailerUrls.map { TrailerData(it, referer, addRaw) }) + /*val trailers = trailerUrls.filter { it.isNotBlank() }.apmap { trailerUrl -> val links = arrayListOf() val subs = arrayListOf() if (!loadExtractor( @@ -1031,7 +1037,7 @@ interface LoadResponse { links to subs } }.map { (links, subs) -> TrailerData(links, subs) } - this.trailers.addAll(trailers) + this.trailers.addAll(trailers)*/ } fun LoadResponse.addImdbId(id: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index df585cda..a64f0d8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -127,8 +127,8 @@ fun CoroutineScope.launchSafe( val obj: suspend CoroutineScope.() -> Unit = { try { block() - } catch (e: Exception) { - logError(e) + } catch (throwable: Throwable) { + logError(throwable) } } 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 c7e0ff86..ee0b60b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -84,8 +84,8 @@ object RepositoryManager { // Normal parsed function not working? // return response.parsedSafe() tryParseJson>(response.text)?.toList() ?: emptyList() - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) emptyList() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index bd918911..ad0b4399 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -279,8 +279,8 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi val currentPosition = remoteMediaClient?.approximateStreamPosition if (currentDuration != null && currentPosition != null) DataStoreHelper.setViewPos(epData.id, currentPosition, currentDuration) - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } if (itemCount != null && itemCount - currentIdIndex == 1 && !isLoadingMore) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt index fde490e2..29bb303a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt @@ -148,10 +148,10 @@ class DownloadHeaderAdapter( ), mbString ) - } catch (e : Exception) { + } catch (t : Throwable) { // you probably formatted incorrectly extraInfo.text = "Error" - logError(e) + logError(t) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt index 8d969b0a..3a74a715 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt @@ -112,9 +112,9 @@ class DownloadViewModel : ViewModel() { _usedBytes.postValue(localTotalBytes - localBytesAvailable - localDownloadedBytes) _availableBytes.postValue(localBytesAvailable) _downloadBytes.postValue(localDownloadedBytes) - } catch (e : Exception) { + } catch (t : Throwable) { _downloadBytes.postValue(0) - logError(e) + logError(t) } _headerCards.postValue(visual) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 498eb109..e26265ec 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -304,6 +304,11 @@ fun SelectPopup.getOptions(context: Context): List { } } +data class ExtractedTrailerData( + var mirros: List, + var subtitles: List = emptyList(), +) + class ResultViewModel2 : ViewModel() { private var currentResponse: LoadResponse? = null @@ -349,9 +354,9 @@ class ResultViewModel2 : ViewModel() { MutableLiveData(Some.None) val episodesCountText: LiveData> = _episodesCountText - private val _trailers: MutableLiveData> = MutableLiveData(mutableListOf()) - val trailers: LiveData> = _trailers - + private val _trailers: MutableLiveData> = + MutableLiveData(mutableListOf()) + val trailers: LiveData> = _trailers private val _dubSubSelections: MutableLiveData>> = MutableLiveData(emptyList()) @@ -1784,12 +1789,58 @@ class ResultViewModel2 : ViewModel() { return ResumeWatchingStatus(progress = progress, isMovie = isMovie, result = episode) } + private fun loadTrailers(loadResponse: LoadResponse) = ioSafe { + _trailers.postValue(getTrailers(loadResponse, 3)) // we dont want to fetch too many trailers + } + + private suspend fun getTrailers( + loadResponse: LoadResponse, + limit: Int = 0 + ): List = + coroutineScope { + var currentCount = 0 + return@coroutineScope loadResponse.trailers.apmap { trailerData -> + try { + val links = arrayListOf() + val subs = arrayListOf() + if (!loadExtractor( + trailerData.extractorUrl, + trailerData.referer, + { subs.add(it) }, + { links.add(it) }) && trailerData.raw + ) { + arrayListOf( + ExtractorLink( + "", + "Trailer", + trailerData.extractorUrl, + trailerData.referer ?: "", + Qualities.Unknown.value, + trailerData.extractorUrl.contains(".m3u8") + ) + ) to arrayListOf() + } else { + links to subs + }.also { (extractor, _) -> + if (extractor.isNotEmpty() && limit != 0) { + currentCount++ + if (currentCount >= limit) { + cancel() + } + } + } + } catch (e: Throwable) { + logError(e) + null + } + }.filterNotNull().map { (links, subs) -> ExtractedTrailerData(links, subs) } + } + // this instantly updates the metadata on the page private fun postPage(loadResponse: LoadResponse, apiRepository: APIRepository) { _recommendations.postValue(loadResponse.recommendations ?: emptyList()) _page.postValue(Resource.Success(loadResponse.toResultData(apiRepository))) - _trailers.postValue(loadResponse.trailers) } fun hasLoaded() = currentResponse != null @@ -1914,6 +1965,7 @@ class ResultViewModel2 : ViewModel() { ) ) + loadTrailers(data.value) postSuccessful( data.value, updateEpisodes = true, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt index c5955ea0..513d68e8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt @@ -246,8 +246,8 @@ class SyncViewModel : ViewModel() { if (syncs.containsKey(aniListApi.idPrefix)) { try { // swap can throw error Collections.swap(current, current.indexOfFirst { it.first == aniListApi.idPrefix }, 0) - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index cc24ef16..ab49492a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -136,8 +136,8 @@ object UIHelper { navigation, arguments ) } - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index f74762a5..a629dad9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1612,8 +1612,8 @@ object VideoDownloadManager { .mapIndexed { index, any -> DownloadQueueResumePackage(index, any) } .toTypedArray() setKey(KEY_RESUME_QUEUE_PACKAGES, dQueue) - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt b/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt index 6f5d7592..310f2a06 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/widget/CenterZoomLayoutManager.kt @@ -53,8 +53,8 @@ class CenterZoomLayoutManager : LinearLayoutManager { largestTag = tag } } - } catch (e : Exception) { - logError(e) + } catch (t : Throwable) { + logError(t) } } } From 241cc92e841c7e58d759b05f5ff8654e9efd8210 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 25 Aug 2022 13:48:55 +0200 Subject: [PATCH 016/888] update loadAllOnlinePlugins --- .../lagradost/cloudstream3/plugins/PluginManager.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 59dae640..4482c7a9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -248,10 +248,14 @@ object PluginManager { * Use updateAllOnlinePluginsAndLoadThem * */ fun loadAllOnlinePlugins(activity: Activity) { - File(activity.filesDir, ONLINE_PLUGINS_FOLDER).listFiles()?.sortedBy { it.name } - ?.apmap { file -> - maybeLoadPlugin(activity, file) - } + // Load all plugins as fast as possible! + (getPluginsOnline()).toList().apmap { pluginData -> + loadPlugin( + activity, + File(pluginData.filePath), + pluginData + ) + } } fun loadAllLocalPlugins(activity: Activity) { From 67addd79a0757ceb4248f88c02375b0cf084056d Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 25 Aug 2022 13:49:24 +0200 Subject: [PATCH 017/888] update loadAllOnlinePlugins --- .../com/lagradost/cloudstream3/plugins/PluginManager.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 4482c7a9..9f283b08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -193,13 +193,7 @@ object PluginManager { **/ fun updateAllOnlinePluginsAndLoadThem(activity: Activity) { // Load all plugins as fast as possible! - (getPluginsOnline()).toList().apmap { pluginData -> - loadPlugin( - activity, - File(pluginData.filePath), - pluginData - ) - } + loadAllOnlinePlugins(activity) ioSafe { afterPluginsLoadedEvent.invoke(true) From 5636bf2518ecf0230435471d8b1ae22548bdf331 Mon Sep 17 00:00:00 2001 From: Gustavo <64141391+GustavoASantos@users.noreply.github.com> Date: Thu, 25 Aug 2022 19:59:44 +0100 Subject: [PATCH 018/888] Update PT and PT BR translations (#60) --- app/src/main/res/values-bp/strings.xml | 39 +++++++++++++++++ app/src/main/res/values-pt/strings-pt.xml | 51 ++++++++++++++++++++--- 2 files changed, 85 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 33245013..f35047dc 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -468,9 +468,48 @@ Resolução Id invalida Dado invalido +URL invalido Erro Remover legendas ocultas(CC) das legendas Remover bloat das legendas +Filtrar por linguagem preferida Extras Trailer + +Próximo + Ver vídeos nestas linguagens + Anterior + Saltar setup + + Change the look of the app to suit your device + Crash reporting + What do you want to see + Feito + Extensões + Adicionar repositório + Nome do repositório + URL do repositório + Plugin Carregado + Plugin Apagado + Falha ao carregar %s + + Iniciada a transferência %d %s + Transferido %d %s com sucesso + Tudo %s já transferido + Transferência em batch + plugin + plugins + Isto irá apagar todos os repositórios de plugins + Apagar repositório + Transferir lista de sites a usar + Transferido: %d + Desativado: %d + Não transferido: %d + Adicionar um repositório para instalar extensões de sites + Ver repositórios da comunidade + Lista pública + Todas as legendas em maiúsculas + + Transferir todos os plugins deste repositório? + %s (Desativado) diff --git a/app/src/main/res/values-pt/strings-pt.xml b/app/src/main/res/values-pt/strings-pt.xml index a77aac7a..55ad9d0a 100644 --- a/app/src/main/res/values-pt/strings-pt.xml +++ b/app/src/main/res/values-pt/strings-pt.xml @@ -22,7 +22,7 @@ Início Pesquisa Transferências - Configurações + Opções Procurar… Procurar em %s… @@ -61,7 +61,7 @@ Transferência Falhou Transferência Cancelada Transferência Completa - Transmitir + Stream Erro a Carregar Links Armazenamento Interno @@ -189,7 +189,7 @@ Dar um benene aos devs Benene dada - Linguagem da App + Idioma da App Este fornecedor não tem suporte para Chromecast Nenhum Link Encontrado @@ -422,11 +422,52 @@ Resolução e título Título Resolução - Id invalida - Dado invalido + Id inválida + Dado inválido + +URL inválido Erro Remover legendas ocultas(CC) das legendas Remover bloat das legendas + +Filtrar por linguagem preferida Extras Trailer + + Próximo + Ver vídeos nestas linguagens + Anterior + Saltar setup + + Change the look of the app to suit your device + Crash reporting + What do you want to see + Feito + Extensões + Adicionar repositório + Nome do repositório + URL do repositório + Plugin Carregado + Plugin Apagado + Falha ao carregar %s + + Iniciada a transferência %d %s + Transferido %d %s com sucesso + Tudo %s já transferido + Transferência em batch + plugin + plugins + Isto irá apagar todos os repositórios de plugins + Apagar repositório + Transferir lista de sites a usar + Transferido: %d + Desativado: %d + Não transferido: %d + Adicionar um repositório para instalar extensões de sites + Ver repositórios da comunidade + Lista pública + Todas as legendas em maiúsculas + + Transferir todos os plugins deste repositório? + %s (Desativado) From 66842daa9369dcfc44fdf7321ce25a2b6ffb043d Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:07:53 +0700 Subject: [PATCH 019/888] Added Zorofile (extractor) (#58) * Added Zorofile (extractor) * fixes --- .../cloudstream3/extractors/StreamSB.kt | 4 + .../cloudstream3/extractors/Zorofile.kt | 76 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 2 + 3 files changed, 82 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt 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 da3ef278..8cd68587 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -7,6 +7,10 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Sbthe : StreamSB() { + override var mainUrl = "https://sbthe.com" +} + class Ssbstream : StreamSB() { override var mainUrl = "https://ssbstream.net" } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt new file mode 100644 index 00000000..84785b6c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt @@ -0,0 +1,76 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.APIHolder.getCaptchaToken +import com.lagradost.cloudstream3.ErrorLoadingException +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper + +class Zorofile : ExtractorApi() { + override val name = "Zorofile" + override val mainUrl = "https://zorofile.com" + override val requiresReferer = true + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = url.split("?").first().split("/").last() + val token = app.get( + url, + referer = referer + ).document.select("button.g-recaptcha").attr("data-sitekey").let { captchaKey -> + getCaptchaToken( + url, + captchaKey, + referer = referer + ) + } ?: throw ErrorLoadingException("can't bypass captcha") + + val data = app.post( + "$mainUrl/dl", + data = mapOf( + "op" to "embed", + "file_code" to id, + "auto" to "1", + "referer" to "$referer/", + "g-recaptcha-response" to token + ), + referer = url, + headers = mapOf( + "Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Content-Type" to "application/x-www-form-urlencoded", + "Origin" to mainUrl, + "Sec-Fetch-Dest" to "iframe", + "Sec-Fetch-Mode" to "navigate", + "Sec-Fetch-Site" to "same-origin", + "Sec-Fetch-User" to "?1", + "Upgrade-Insecure-Requests" to "1", + ) + ).document.select("script").find { it.data().contains("var holaplayer;") }?.data() + ?.substringAfter("sources: [")?.substringBefore("],")?.replace("src", "\"src\"") + ?.replace("type", "\"type\"") + + tryParseJson("$data")?.let { res -> + return M3u8Helper.generateM3u8( + name, + res.src ?: return@let, + "$mainUrl/", + headers = mapOf( + "Origin" to mainUrl, + ) + ).forEach(callback) + } + } + + private data class Sources( + @JsonProperty("src") val src: String? = null, + @JsonProperty("type") val type: String? = null, + ) +} \ 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 de3c013a..217837c9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -234,6 +234,7 @@ val extractorApis: MutableList = arrayListOf( // Streamhub(), cause Streamhub2() works Streamhub2(), Ssbstream(), + Sbthe(), Fastream(), @@ -312,6 +313,7 @@ val extractorApis: MutableList = arrayListOf( Linkbox(), Acefile(), SpeedoStream(), + Zorofile(), YoutubeExtractor(), YoutubeShortLinkExtractor(), From 2893cd8da3e16faae3dfed5e084c23cb731256f1 Mon Sep 17 00:00:00 2001 From: Dilute Oxygen Date: Mon, 29 Aug 2022 00:01:30 +0530 Subject: [PATCH 020/888] Updated HI Translation (#66) --- app/src/main/res/values-hi/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 03d54924..e3f0a233 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -47,7 +47,7 @@ डाउनलोड फिर शुरू करे डाउनलोड रोके - Disable automatic bug reporting + स्वचालित त्रुटि रिपोर्ट रोकें और जानकारी छिपाये चलाये @@ -149,7 +149,7 @@ ताला आकार सूत्र - OP टालें + OP स्किप करें फिरसे ना दिखाए अपडेट From 01c81fc4215efb813961e40c87f851c6ec1ed02c Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Mon, 29 Aug 2022 02:32:17 +0800 Subject: [PATCH 021/888] [Feature] Copy settings values from Preferences to providers APIs (#48) * [Feature] Copy settings values from Preferences to providers APIs * Use companion object instead for singular object access across all providers * Fix build * Re-order code hierarchy. Prioritize loading settings from pref --- app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt | 5 +++++ .../main/java/com/lagradost/cloudstream3/MainActivity.kt | 5 +++++ app/src/main/res/values/strings.xml | 3 +++ app/src/main/res/xml/settings_media_lang.xml | 7 +++++++ 4 files changed, 20 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index f442e175..67a3051c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -315,6 +315,10 @@ data class ProvidersInfoJson( @JsonProperty("status") var status: Int, ) +data class SettingsJson( + @JsonProperty("enableAdult") var enableAdult: Boolean = false, +) + data class MainPageData( val name: String, @@ -354,6 +358,7 @@ fun newHomePageResponse(list: List, hasNext: Boolean? = null): Hom abstract class MainAPI { companion object { var overrideData: HashMap? = null + var settingsForProvider: SettingsJson = SettingsJson() } fun init() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 629406aa..44f78703 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -455,6 +455,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + + val settingsForProvider = SettingsJson() + settingsForProvider.enableAdult = settingsManager.getBoolean(getString(R.string.enable_nsfw_on_providers_key), false) + + MainAPI.settingsForProvider = settingsForProvider loadThemes(this) updateLocale() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b47b180..268d6246 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,6 +55,7 @@ redo_setup_key filter_sub_lang_key pref_filter_search_quality_key + enable_nsfw_on_providers_key %d %s | %s @@ -444,6 +445,7 @@ Provider languages App Layout Preferred media + Enable NSFW on supported providers Subtitle encoding Language Layout @@ -607,4 +609,5 @@ Download all plugins from this repository? %s (Disabled) + Apply on Restart diff --git a/app/src/main/res/xml/settings_media_lang.xml b/app/src/main/res/xml/settings_media_lang.xml index 575b638c..2244eff8 100644 --- a/app/src/main/res/xml/settings_media_lang.xml +++ b/app/src/main/res/xml/settings_media_lang.xml @@ -18,4 +18,11 @@ android:key="@string/display_sub_key" android:title="@string/display_subbed_dubbed_settings" android:icon="@drawable/ic_outline_voice_over_off_24" /> + + \ No newline at end of file From cd119822f21045d7db6cf1838ffb44f305bb384b Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Mon, 29 Aug 2022 01:52:15 +0200 Subject: [PATCH 022/888] tv UI fixes --- .../lagradost/cloudstream3/CommonActivity.kt | 5 +- .../com/lagradost/cloudstream3/MainAPI.kt | 2 +- .../ui/download/DownloadFragment.kt | 2 +- .../cloudstream3/ui/home/HomeFragment.kt | 64 +++--- .../ui/home/HomeParentItemAdapter.kt | 2 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 2 +- .../ui/player/PlayerEpisodeAdapter.kt | 2 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 2 +- .../cloudstream3/ui/result/ImageAdapter.kt | 2 +- .../cloudstream3/ui/result/ResultFragment.kt | 10 +- .../cloudstream3/ui/result/SelectAdaptor.kt | 2 +- .../cloudstream3/ui/search/SearchFragment.kt | 2 +- .../ui/search/SearchResultBuilder.kt | 2 +- .../ui/settings/SettingsAccount.kt | 2 +- .../ui/settings/SettingsFragment.kt | 24 +- .../cloudstream3/ui/settings/SettingsUI.kt | 8 +- .../settings/extensions/ExtensionsFragment.kt | 24 +- .../ui/settings/extensions/PluginAdapter.kt | 5 +- .../ui/settings/extensions/PluginsFragment.kt | 2 +- .../ui/settings/extensions/RepoAdapter.kt | 4 +- .../ui/setup/SetupFragmentExtensions.kt | 6 +- .../subtitles/ChromecastSubtitlesFragment.kt | 2 +- .../ui/subtitles/SubtitlesFragment.kt | 2 +- .../lagradost/cloudstream3/utils/AppUtils.kt | 8 +- .../utils/SingleSelectionHelper.kt | 2 +- .../widget/LinearRecycleViewLayoutManager.kt | 30 +++ app/src/main/res/layout/add_repo_input.xml | 4 + .../main/res/layout/fragment_extensions.xml | 216 ++++++++++-------- .../main/res/layout/repository_item_tv.xml | 122 ++++++++++ 29 files changed, 393 insertions(+), 167 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/widget/LinearRecycleViewLayoutManager.kt create mode 100644 app/src/main/res/layout/repository_item_tv.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 0f54770f..e56b3bd9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -6,7 +6,6 @@ import android.content.Context import android.content.pm.PackageManager import android.content.res.Resources import android.os.Build -import android.os.Looper import android.util.Log import android.view.* import android.widget.TextView @@ -20,12 +19,12 @@ import com.google.android.gms.cast.framework.CastSession import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.PlayerEventType import com.lagradost.cloudstream3.ui.result.UiText +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.hasPIPPermission import com.lagradost.cloudstream3.utils.UIHelper.shouldShowPIPMode import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.coroutines.currentCoroutineContext import org.schabi.newpipe.extractor.NewPipe import java.util.* @@ -128,7 +127,7 @@ object CommonActivity { act.hasPIPPermission() // CHECK IF FEATURE IS ENABLED IN SETTINGS act.updateLocale() - + act.updateTv() NewPipe.init(DownloaderTestImpl.getInstance()) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 67a3051c..dc6cc454 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -226,7 +226,7 @@ object APIHolder { } private fun Context.getHasTrailers(): Boolean { - if (this.isTvSettings()) return false + if (isTvSettings()) return false val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) return settingsManager.getBoolean(this.getString(R.string.show_trailers_key), true) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 7ea360a8..3335e023 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -175,7 +175,7 @@ class DownloadFragment : Fragment() { download_list?.adapter = adapter download_list?.layoutManager = GridLayoutManager(context, 1) - download_stream_button?.isGone = context?.isTvSettings() == true + download_stream_button?.isGone = isTvSettings() download_stream_button?.setOnClickListener { val dialog = Dialog(it.context ?: return@setOnClickListener, R.style.AlertDialogCustom) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 539ce843..0071ab49 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -400,7 +400,7 @@ class HomeFragment : Fragment() { //homeViewModel = // ViewModelProvider(this).get(HomeViewModel::class.java) val layout = - if (context?.isTvSettings() == true) R.layout.fragment_home_tv else R.layout.fragment_home + if (isTvSettings()) R.layout.fragment_home_tv else R.layout.fragment_home return inflater.inflate(layout, container, false) } @@ -568,7 +568,7 @@ class HomeFragment : Fragment() { val randomSize = items.size tempAdapter?.updateList(items) - if (context?.isTvSettings() == false) { + if (!isTvSettings()) { home_main_poster_recyclerview?.post { (home_main_poster_recyclerview?.layoutManager as CenterZoomLayoutManager?)?.let { manager -> manager.updateSize(forceUpdate = true) @@ -939,7 +939,7 @@ class HomeFragment : Fragment() { } } // GridLayoutManager(context, 1).also { it.supportsPredictiveItemAnimations() } - if (context?.isTvSettings() == false) { + if (!isTvSettings()) { LinearSnapHelper().attachToRecyclerView(home_main_poster_recyclerview) // snap val centerLayoutManager = CenterZoomLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) @@ -975,7 +975,7 @@ class HomeFragment : Fragment() { home_api_fab?.shrink() // hide home_random?.shrink() } else if (dy < -5) { - if (v.context?.isTvSettings() == false) { + if (!isTvSettings()) { home_api_fab?.extend() // show home_random?.extend() } @@ -984,37 +984,35 @@ class HomeFragment : Fragment() { // nice profile pic on homepage home_profile_picture_holder?.isVisible = false - context?.let { ctx -> - // just in case - if (ctx.isTvSettings()) { - home_api_fab?.isVisible = false - home_change_api?.isVisible = true - if (ctx.isTrueTvSettings()) { - home_change_api_loading?.isVisible = true - home_change_api_loading?.isFocusable = true - home_change_api_loading?.isFocusableInTouchMode = true - home_change_api?.isFocusable = true - home_change_api?.isFocusableInTouchMode = true - } - // home_bookmark_select?.isFocusable = true - // home_bookmark_select?.isFocusableInTouchMode = true - } else { - home_api_fab?.isVisible = true - home_change_api?.isVisible = false - home_change_api_loading?.isVisible = false + // just in case + if (isTvSettings()) { + home_api_fab?.isVisible = false + home_change_api?.isVisible = true + if (isTrueTvSettings()) { + home_change_api_loading?.isVisible = true + home_change_api_loading?.isFocusable = true + home_change_api_loading?.isFocusableInTouchMode = true + home_change_api?.isFocusable = true + home_change_api?.isFocusableInTouchMode = true } + // home_bookmark_select?.isFocusable = true + // home_bookmark_select?.isFocusableInTouchMode = true + } else { + home_api_fab?.isVisible = true + home_change_api?.isVisible = false + home_change_api_loading?.isVisible = false + } - for (syncApi in OAuth2Apis) { - val login = syncApi.loginInfo() - val pic = login?.profilePicture - if (home_profile_picture?.setImage( - pic, - errorImageDrawable = errorProfilePic - ) == true - ) { - home_profile_picture_holder?.isVisible = true - break - } + for (syncApi in OAuth2Apis) { + val login = syncApi.loginInfo() + val pic = login?.profilePicture + if (home_profile_picture?.setImage( + pic, + errorImageDrawable = errorProfilePic + ) == true + ) { + home_profile_picture_holder?.isVisible = true + break } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index 3fc1da24..23ab81ce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -29,7 +29,7 @@ class ParentItemAdapter( override fun onCreateViewHolder(parent: ViewGroup, i: Int): ParentViewHolder { //println("onCreateViewHolder $i") val layout = - if (parent.context.isTvSettings()) R.layout.homepage_parent_tv else R.layout.homepage_parent + if (isTvSettings()) R.layout.homepage_parent_tv else R.layout.homepage_parent return ParentViewHolder( LayoutInflater.from(parent.context).inflate(layout, parent, false), clickCallback, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 3e6e24cb..8f908465 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -993,7 +993,7 @@ class GeneratorPlayer : FullScreenPlayer() { savedInstanceState: Bundle? ): View? { // this is used instead of layout-television to follow the settings and some TV devices are not classified as TV for some reason - isTv = context?.isTvSettings() == true + isTv = isTvSettings() layout = if (isTv) R.layout.fragment_player_tv else R.layout.fragment_player diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt index 2ba47978..cfe27a30 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt @@ -124,7 +124,7 @@ class PlayerEpisodeAdapter( clickCallback.invoke(PlayerEpisodeClickEvent(0, card)) } - if (parentView.context.isTrueTvSettings()) { + if (isTrueTvSettings()) { parentView.isFocusable = true parentView.isFocusableInTouchMode = true parentView.touchscreenBlocksFocus = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 075e6cf5..a89e8279 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -166,7 +166,7 @@ class EpisodeAdapter( fun bind(card: ResultEpisode) { localCard = card - val isTrueTv = itemView.context?.isTrueTvSettings() == true + val isTrueTv = isTrueTvSettings() val (parentView, otherView) = if (card.poster == null) { itemView.episode_holder to itemView.episode_holder_large diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt index 35e372d6..ebd6a658 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt @@ -83,7 +83,7 @@ class ImageAdapter( this.nextFocusUpId = nextFocusUp } if (clickCallback != null) { - if (context.isTrueTvSettings()) { + if (isTrueTvSettings()) { isClickable = true isLongClickable = true isFocusable = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index d47ebb4c..5fc61146 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -293,7 +293,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_reload_connection_open_in_browser?.isVisible = true } 2 -> { - result_bookmark_fab?.isGone = result_bookmark_fab?.context?.isTvSettings() == true + result_bookmark_fab?.isGone = isTvSettings() result_bookmark_fab?.extend() //if (result_bookmark_button?.context?.isTrueTvSettings() == true) { // when { @@ -551,7 +551,7 @@ open class ResultFragment : ResultTrailerPlayer() { } // This is to band-aid FireTV navigation - val isTv = context?.isTvSettings() == true + val isTv = isTvSettings() result_season_button?.isFocusableInTouchMode = isTv result_episode_select?.isFocusableInTouchMode = isTv result_dub_select?.isFocusableInTouchMode = isTv @@ -794,7 +794,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_next_airing_time.setText(d.nextAiringDate) result_poster.setImage(d.posterImage) - if (d.posterImage != null && context?.isTrueTvSettings() == false) + if (d.posterImage != null && !isTrueTvSettings()) result_poster_holder?.setOnClickListener { try { context?.let { ctx -> @@ -883,7 +883,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_tag_holder?.isVisible = tags.isNotEmpty() if (tags.isNotEmpty()) { //result_tag_holder?.visibility = VISIBLE - val isOnTv = context?.isTrueTvSettings() == true + val isOnTv = isTrueTvSettings() for ((index, tag) in tags.withIndex()) { val viewBtt = layoutInflater.inflate(R.layout.result_tag, null) val btt = viewBtt.findViewById(R.id.result_tag_card) @@ -941,7 +941,7 @@ open class ResultFragment : ResultTrailerPlayer() { } // bloats the navigation on tv - if (context?.isTrueTvSettings() == false) { + if (!isTrueTvSettings()) { result_meta_site?.setOnClickListener { it.context?.openBrowser(storedData.url) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt index 74647ada..2e7ec529 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt @@ -85,7 +85,7 @@ class SelectAdaptor(val callback: (Any) -> Unit) : RecyclerView.Adapter Unit ) { - val isTrueTv = itemView.context?.isTrueTvSettings() == true + val isTrueTv = isTrueTvSettings() if (isTrueTv) { item.isFocusable = true item.isFocusableInTouchMode = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 74d81627..69f8a274 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -386,7 +386,7 @@ class SearchFragment : Fragment() { } } - if (context?.isTrueTvSettings() == true) { + if (isTrueTvSettings()) { search_filter.isFocusable = true search_filter.isFocusableInTouchMode = true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index bcabb268..3afbb8c0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -164,7 +164,7 @@ object SearchResultBuilder { } } - if (bg.context.isTrueTvSettings()) { + if (isTrueTvSettings()) { bg.isFocusable = true bg.isFocusableInTouchMode = true bg.touchscreenBlocksFocus = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 971e630e..2554d6ee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -117,7 +117,7 @@ class SettingsAccount : PreferenceFragmentCompat() { dialog.login_username_input to api.requiresUsername ) - if (activity.isTvSettings()) { + if (isTvSettings()) { visibilityMap.forEach { (input, isVisible) -> input.isVisible = isVisible diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 4c532e4c..7e26afb5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -30,6 +30,9 @@ class SettingsFragment : Fragment() { companion object { var beneneCount = 0 + private var isTv : Boolean = false + private var isTrueTv : Boolean = false + fun PreferenceFragmentCompat?.getPref(id: Int): Preference? { if (this == null) return null @@ -45,7 +48,7 @@ class SettingsFragment : Fragment() { * On TV you cannot properly scroll to the bottom of settings, this fixes that. * */ fun PreferenceFragmentCompat.setPaddingBottom() { - if (this.context?.isTvSettings() == true) { + if (isTvSettings()) { listView?.setPadding(0, 0, 0, 100.toPx) } } @@ -93,7 +96,7 @@ class SettingsFragment : Fragment() { return settingsManager.getInt(this.getString(R.string.app_layout_key), -1) } - fun Context.isTvSettings(): Boolean { + private fun Context.isTvSettings(): Boolean { var value = getLayoutInt() if (value == -1) { value = if (isAutoTv()) 1 else 0 @@ -101,7 +104,7 @@ class SettingsFragment : Fragment() { return value == 1 || value == 2 } - fun Context.isTrueTvSettings(): Boolean { + private fun Context.isTrueTvSettings(): Boolean { var value = getLayoutInt() if (value == -1) { value = if (isAutoTv()) 1 else 0 @@ -109,6 +112,19 @@ class SettingsFragment : Fragment() { return value == 1 } + fun Context.updateTv() { + isTrueTv = isTrueTvSettings() + isTv = isTvSettings() + } + + fun isTrueTvSettings(): Boolean { + return isTrueTv + } + + fun isTvSettings(): Boolean { + return isTv + } + fun Context.isEmulatorSettings(): Boolean { return getLayoutInt() == 2 } @@ -136,7 +152,7 @@ class SettingsFragment : Fragment() { activity?.navigate(id, Bundle()) } - val isTrueTv = context?.isTrueTvSettings() == true + val isTrueTv = isTrueTvSettings() for (syncApi in accountManagers) { val login = syncApi.loginInfo() 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 9e85ab94..9ad3ee8f 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 @@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog @@ -22,6 +23,7 @@ class SettingsUI : PreferenceFragmentCompat() { setUpToolbar(R.string.category_ui) setPaddingBottom() } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() setPreferencesFromResource(R.xml.settins_ui, rootKey) @@ -71,6 +73,7 @@ class SettingsUI : PreferenceFragmentCompat() { settingsManager.edit() .putInt(getString(R.string.app_layout_key), prefValues[it]) .apply() + context?.updateTv() activity?.recreate() } catch (e: Exception) { logError(e) @@ -130,7 +133,10 @@ class SettingsUI : PreferenceFragmentCompat() { getPref(R.string.pref_filter_search_quality_key)?.setOnPreferenceClickListener { val names = enumValues().sorted().map { it.name } - val currentList = settingsManager.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf())?.map { + val currentList = settingsManager.getStringSet( + getString(R.string.pref_filter_search_quality_key), + setOf() + )?.map { it.toInt() } ?: listOf() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 143794d1..267dda60 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -11,6 +11,7 @@ import android.view.ViewGroup import android.widget.LinearLayout import android.widget.Toast import androidx.appcompat.app.AlertDialog +import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels @@ -23,12 +24,14 @@ import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.ui.result.setText +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.AppUtils.downloadAllPluginsDialog import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.widget.LinearRecycleViewLayoutManager import kotlinx.android.synthetic.main.add_repo_input.* import kotlinx.android.synthetic.main.fragment_extensions.* import kotlinx.android.synthetic.main.fragment_extensions.list_repositories @@ -119,9 +122,15 @@ class ExtensionsFragment : Fragment() { (repo_recycler_view?.adapter as? RepoAdapter)?.updateList(it) } + repo_recycler_view?.apply { + context?.let { ctx -> + layoutManager = LinearRecycleViewLayoutManager(ctx, nextFocusUpId, nextFocusDownId) + } + } + list_repositories?.setOnClickListener { // Open webview on tv if browser fails - val isTv = it.context.isTvSettings() + val isTv = isTvSettings() openBrowser(PUBLIC_REPOSITORIES_LIST, isTv, this) // Set clipboard on TV because the browser might not exist or work properly @@ -170,9 +179,9 @@ class ExtensionsFragment : Fragment() { ) } - add_repo_button?.setOnClickListener { + val addRepositoryClick = View.OnClickListener { val builder = - AlertDialog.Builder(context ?: return@setOnClickListener, R.style.AlertDialogCustom) + AlertDialog.Builder(context ?: return@OnClickListener, R.style.AlertDialogCustom) .setView(R.layout.add_repo_input) val dialog = builder.create() @@ -193,8 +202,7 @@ class ExtensionsFragment : Fragment() { dialog.list_repositories?.setOnClickListener { // Open webview on tv if browser fails - val isTv = it.context.isTvSettings() - openBrowser(PUBLIC_REPOSITORIES_LIST, isTv, this) + openBrowser(PUBLIC_REPOSITORIES_LIST, isTvSettings(), this) } // dialog.text2?.text = provider.name @@ -223,6 +231,12 @@ class ExtensionsFragment : Fragment() { } } + val isTv = isTrueTvSettings() + add_repo_button?.isGone = isTv + add_repo_button_imageview_holder?.isVisible = isTv + add_repo_button?.setOnClickListener(addRepositoryClick) + add_repo_button_imageview?.setOnClickListener(addRepositoryClick) + reloadRepositories() } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index e46c1508..75e7023e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -14,6 +14,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.result.txt +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.GlideApp import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage @@ -36,8 +37,9 @@ class PluginAdapter( private val plugins: MutableList = mutableListOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val layout = if(isTrueTvSettings()) R.layout.repository_item_tv else R.layout.repository_item return PluginViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.repository_item, parent, false) + LayoutInflater.from(parent.context).inflate(layout, parent, false) ) } @@ -123,7 +125,6 @@ class PluginAdapter( itemView.action_button?.setOnClickListener { iconClickCallback.invoke(data.plugin) } - testFindClosestBase2() //if (itemView.context?.isTrueTvSettings() == false) { // val siteUrl = metadata.repositoryUrl // if (siteUrl != null && siteUrl.isNotBlank() && siteUrl != "NONE") { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index 0ee0615a..7b944f62 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -128,7 +128,7 @@ class PluginsFragment : Fragment() { pluginViewModel.handlePluginAction(activity, url, it, isLocal) } - if (context?.isTvSettings() == true) { + if (isTvSettings()) { // Scrolling down does not reveal the whole RecyclerView on TV, add to bypass that. plugin_recycler_view?.setPadding(0, 0, 0, 200.toPx) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt index 15c54687..2dc302ee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt @@ -7,6 +7,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import kotlinx.android.synthetic.main.repository_item.view.* class RepoAdapter( @@ -19,8 +20,9 @@ class RepoAdapter( private val repositories: MutableList = mutableListOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val layout = if(isTrueTvSettings()) R.layout.repository_item_tv else R.layout.repository_item return RepoViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.repository_item, parent, false) + LayoutInflater.from(parent.context).inflate(layout, parent, false) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt index a3ea9b2a..43037038 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt @@ -73,8 +73,7 @@ class SetupFragmentExtensions : Fragment() { } else { list_repositories?.setOnClickListener { // Open webview on tv if browser fails - val isTv = it.context.isTvSettings() - openBrowser(PUBLIC_REPOSITORIES_LIST, isTv, this) + openBrowser(PUBLIC_REPOSITORIES_LIST, isTvSettings(), this) } } } @@ -86,8 +85,7 @@ class SetupFragmentExtensions : Fragment() { val isSetup = arguments?.getBoolean(SETUP_EXTENSION_BUNDLE_IS_SETUP) ?: false view_public_repositories_button?.setOnClickListener { - val isTv = it.context.isTvSettings() - openBrowser(PUBLIC_REPOSITORIES_LIST, isTv, this) + openBrowser(PUBLIC_REPOSITORIES_LIST, isTvSettings(), this) } with(context) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt index 957b1d9b..83d134cb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt @@ -164,7 +164,7 @@ class ChromecastSubtitlesFragment : Fragment() { state = getCurrentSavedStyle() context?.updateState() - val isTvSettings = context?.isTvSettings() == true + val isTvSettings = isTvSettings() fun View.setFocusableInTv() { this.isFocusableInTouchMode = isTvSettings diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index 8095b007..b1d82b76 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -243,7 +243,7 @@ class SubtitlesFragment : Fragment() { state = getCurrentSavedStyle() context?.updateState() - val isTvTrueSettings = context?.isTrueTvSettings() == true + val isTvTrueSettings = isTrueTvSettings() fun View.setFocusableInTv() { this.isFocusableInTouchMode = isTvTrueSettings 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 fa39e374..1c7bb214 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -407,8 +407,8 @@ object AppUtils { //private val viewModel: ResultViewModel by activityViewModels() - private fun getResultsId(context: Context): Int { - return if (context.isTrueTvSettings()) { + private fun getResultsId(): Int { + return if (isTrueTvSettings()) { R.id.global_to_navigation_results_tv } else { R.id.global_to_navigation_results_phone @@ -424,7 +424,7 @@ object AppUtils { this.runOnUiThread { // viewModelStore.clear() this.navigate( - getResultsId(this.applicationContext ?: return@runOnUiThread), + getResultsId(), ResultFragment.newInstance(url, apiName, startAction, startValue) ) } @@ -438,7 +438,7 @@ object AppUtils { this?.runOnUiThread { // viewModelStore.clear() this.navigate( - getResultsId(this), + getResultsId(), ResultFragment.newInstance(card, startAction, startValue) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt index b228fe77..b3bce446 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt @@ -44,7 +44,7 @@ object SingleSelectionHelper { ) { if (this == null) return - if (this.isTvSettings()) { + if (isTvSettings()) { val builder = AlertDialog.Builder(this, R.style.AlertDialogCustom) .setView(R.layout.options_popup_tv) diff --git a/app/src/main/java/com/lagradost/cloudstream3/widget/LinearRecycleViewLayoutManager.kt b/app/src/main/java/com/lagradost/cloudstream3/widget/LinearRecycleViewLayoutManager.kt new file mode 100644 index 00000000..4df8e086 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/widget/LinearRecycleViewLayoutManager.kt @@ -0,0 +1,30 @@ +package com.lagradost.cloudstream3.widget + +import android.content.Context +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager + +class LinearRecycleViewLayoutManager( + val context: Context, + val nextFocusUp: Int, + val nextFocusDown: Int +) : LinearLayoutManager(context) { + override fun onInterceptFocusSearch(focused: View, direction: Int): View? { + return try { + val position = getPosition(focused) + val count = itemCount + //println("onInterceptFocusSearch position=$position count=$count focused=$focused direction=$direction") + + (if (position == count - 1 && direction == View.FOCUS_DOWN) { + focused.rootView.findViewById(nextFocusDown) + } else if (position == 0 && direction == View.FOCUS_UP) { + focused.rootView.findViewById(nextFocusUp) + } else { + super.onInterceptFocusSearch(focused, direction) + }) ?: super.onInterceptFocusSearch(focused, direction) + } catch (t : Throwable) { + super.onInterceptFocusSearch(focused, direction) + } + } +} + diff --git a/app/src/main/res/layout/add_repo_input.xml b/app/src/main/res/layout/add_repo_input.xml index 0e8b72aa..445e71ec 100644 --- a/app/src/main/res/layout/add_repo_input.xml +++ b/app/src/main/res/layout/add_repo_input.xml @@ -29,7 +29,10 @@ android:textStyle="bold" /> + android:orientation="vertical" + tools:visibility="gone"> - - + android:orientation="horizontal"> - - - - - - - - - - + + + android:text="@string/extensions" + android:textColor="?attr/textColor" /> - + + + + + + + + + + android:orientation="horizontal"> - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 9d1bc4800c066d91fb8f534c8b5c13ae850c0a92 Mon Sep 17 00:00:00 2001 From: TubaApollo <86665265+TubaApollo@users.noreply.github.com> Date: Mon, 29 Aug 2022 18:40:51 +0200 Subject: [PATCH 023/888] German translation updated (#72) --- app/src/main/res/values-de/strings-de.xml | 456 +++++++++++++++++----- 1 file changed, 348 insertions(+), 108 deletions(-) diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index 0e9c2821..cc301da8 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -1,255 +1,495 @@ - - - Poster + + + Vorschaubild @string/result_poster_img_des - Episode Poster - Hauptposter - Nächstes Poster + Episodenvorschaubild + Medienvorschaubild + Nächstes zufällig Zurück - Anbieter ändern - Vorschau Hintergrund + Anbieter wechseln + Hintergrundbildvorschau + + Geschwindigkeit (%.2fx) Bewertung: %.1f Neues Update gefunden!\n%s -> %s + Füller + %d Min + CloudStream + Mit CloudStream abspielen Startseite - Suchen + Suche Downloads Einstellungen + Suche… + Suche %s… + Keine Daten vorhanden Mehr Optionen - Nächste Episode + Nächste Epsisode Genres Teilen - Im Browser öffnen + In Browser öffnen Buffern überspringen Lädt… + Am schauen Pausiert Abgeschlossen Abgebrochen - Geplant - Nichts + Möchte schauen + None + Erneut anschauen + Film abspielen + Livestream abspielen Torrent streamen Quellen Untertitel - Verbindung wiederholen… + Erneuter Verbindungsaufbau… Zurück Episode abspielen + + Herunterladen Heruntergeladen Lädt herunter Download pausiert - Download begonnen + Download startet Download fehlgeschlagen Download abgebrochen Download abgeschlossen + Stream + Fehler beim Laden von Links Interner Speicher + Dub Sub + Datei löschen Datei abspielen Download fortsetzen Download pausieren + Automatische Fehlerberichterstattung deaktivieren Mehr Infos - Ausblenden + Verstecken Abspielen Info Lesezeichen filtern Lesezeichen - Löschen + Entfernen + Status setzen Anwenden Abbrechen - Player Geschwindigkeit - Untertitel Einstellungen + Kopieren + Schließen + Löschen + Speichern + + Players Geschwindigkeit + + Untertiteleinstellungen Textfarbe Konturfarbe Hintergrundfarbe Fensterfarbe Kanten-Typ - Untertitel Höhe + Untertitelhöhe Schriftart Schriftgröße - Suchen mit Anbietern - Suchen mit Kategorien - %d Benenes an die Entwickler gegeben - Keine Benenes gegeben - Sprache automatisch auswählen + + Suche anhand Anbietern + Suche anhand Typen + + %d Benenes an die Devs verteilt + Noch keine Benenes verteilt + + Sprache automatisch wählen Sprachen herunterladen + Untertitelsprache Halten, um auf die Standardeinstellungen zurückzusetzen + Fonts in %s importieren Weiterschauen - Löschen + + Entfernen Mehr Infos - Damit dieser Anbieter korrekt funktioniert, ist möglicherweise eine VPN erforderlich - Dies ist ein Torrent Anbieter, eine VPN wird empfohlen + @string/home_play + + Damit dieser Anbieter korrekt funktioniert, ist möglicherweise ein VPN erforderlich + Dieser Anbieter bietet Torrents an, ein VPN wird dringend empfohlen + + Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie auf der Website nicht vorhanden sind. + Beschreibung - Keine Beschreibung gefunden + Keine Handlung gefunden Keine Beschreibung gefunden - Bild-in-Bild-Modus - Setzt die Wiedergabe in einem Miniplayer über anderen Anwendungen fort - Schaltfläche um die Größe des Players zu verändern + + Logcat anzeigen 🐈 + + Bild-in-Bild + Setzt die Wiedergabe in einem kleinen Fenster über anderen Anwendungen fort + Player Skalierung anpassen Entfernt schwarze Ränder Untertitel Player Untertiteleinstellungen - Eigengravy Modus - Fügt die Geschwindigkeitsoption im Player hinzu - Wischen zum Suchen - Wische nach links oder rechts, um im Player vor- und zurückzuspulen + Chromecast Untertitel + Chromecast Untertiteleinstellungen + + Eigengravy-Modus + Fügt eine Geschwindigkeitsoption im Player hinzu + Wischen zum vor- und zurückspulen + Nach links oder rechts wischen, um die Zeit im Videoplayer zu steuern Wischen, um Einstellungen zu ändern - Wische auf der linken oder rechten Seite, um die Helligkeit oder Lautstärke zu ändern + Nach links oder rechts wischen, um die Helligkeit oder Lautstärke zu ändern + + Nächste Episode automatisch abspielen + Nächste Episode wird gestartet, sobald die aktuelle Episode endet + Doppeltippen zum vor- und zurückspulen - Tippe zweimal auf die rechte oder linke Seite, um vorwärts oder rückwärts zuspulen - Tippen zweimal in die Mitte, um zu pausieren - Systemhelligkeit benutzen - Benutze Systemhelligkeit im Player anstatt von einem Dunklem Overlay - Daten aus der Sicherung wiederherstellen + Doppeltippen zum Pausieren + Zeit für vor- und zurückspulen im Player + Zweimal auf die rechte oder linke Seite tippen, um vor- oder zurückzuspulen + + In die Mitte tippen, um zu pausieren + Systemhelligkeit verwenden + Systemhelligkeit anstelle eines dunklen + Overlay im Player verwenden + + + Episodenfortschritt aktualisieren + Automatisches Synchronisieren des aktuellen Episodenfortschritts + + Daten aus Sicherung wiederherstellen + Daten sichern Sicherungsdatei geladen Wiederherstellung der Daten aus der Datei %s fehlgeschlagen - Daten erfolgreich gespeichert + Daten erfolgreich gesichert Speicherberechtigungen fehlen, bitte erneut versuchen Fehler beim Sichern von %s + Suche + Konten + Updates und Datensicherung + Info Erweiterte Suche - Liefert die Suchergebnisse getrennt von den jeweiligen Anbietern + Liefert die Suchergebnisse getrennt nach Anbietern Sendet Daten nur bei Abstürzen Sendet keine Daten - Filler-Episoden für Animes anzeigen + Füller-Episoden für Animes zeigen + Trailer zeigen + Vorschaubilder von Kitsu anzeigen + Ausgewählte Videoqualität bei Suchergebnissen ausblenden + + Automatische Plugin-Updates App-Updates anzeigen Automatisches Suchen nach neuen Updates beim Start - Updaten auf Vorabversionen - Sucht auch nach Vorabversionen statt nur nach Vollversionen + Auf Vorabversionen updaten + Suche nach Vorabversionen statt nur nach Vollversionen Github Light Novel App von denselben Entwicklern - Anime-App von denselben Entwicklern + Anime App von denselben Entwicklern Discord beitreten - Gebe den Entwicklern eine Benene - Gegebene Benenes - App-Sprache + Eine Benene an die Devs verteilen + Verteilte Benenes + + App Sprache + Dieser Anbieter hat keine Chromecast-Unterstützung - Keine Links gefunden + Keine Verlinkung gefunden Link in die Zwischenablage kopiert Episode abspielen - Auf Standardwerte zurückgesetzt - Sorry, die App ist abgestürzt. Ein anonymer Fehlerbericht wird an die Entwickler gesendet - Season - Keine Season + Auf Standardwert zurücksetzen + Sorry, die Anwendung ist abgestürzt. Ein anonymer Fehlerbericht wird an die + Entwickler gesendet + + + Staffel + %s %d + Keine Staffel Episode Episoden + %d-%d + %d %s S E - Gelöschte Dateien + Keine Episoden gefunden + + Datei löschen Löschen - Pausieren + Pause Fortsetzen - Dies löscht dauerhaft %s\nBist du dir sicher? + -30 + +30 + Dadurch wird %s permanent gelöscht \nBist du dir sicher? + %dm\nverbleibend + + Laufend Abgeschlossen Status Jahr Bewertung - Dauer - Seite + Länge + Website Zusammenfassung - In der Warteschlange - Kein Untertitel + + In Warteschlange eingereiht + Keine Untertitel Standard + Frei Benutzt App + + Filme - TV-Serien - Zeichentrickfilme + TV Serien + Trickfilme Anime - Torrent + Torrents Dokumentationen OVA Asiatische Dramen + Livestreams + NSFW + Andere + + Film Serie - Zeichentrickfilm + Trickfilm @string/anime @string/ova Torrent Dokumentation Asiatisches Drama + Livestream + NSFW + Video + Quellenfehler Remotefehler Renderfehler Unerwarteter Player-Fehler Download-Fehler, Speicherberechtigungen prüfen - Chromecast Episoden - Chromecast Spiegeln - In App abspielen - In VLC-Player abspielen - Im Browser abspielen + + Chromecast-Episode + Chromecastmirror + In App wiedergeben + In VLC wiedergeben + In Browser wiedergeben Link kopieren - Automatischer Download - Mirror herunterladen - Links neuladen - Keine Aktualisierungen gefunden - Auf Aktualisierungen überprüfen + Auto Download + Downloadmirror + Links neu laden + Untertitel herunterladen + + Qualitätsanzeige + Dub Label + Sub Label + Titel + UI-Elemente auf Vorschaubild umschalten + + Kein Update gefunden + Auf Update prüfen + Sperren - Größe anpassen + Skalieren Quelle Intro überspringen + + Nicht mehr anzeigen + Update ignorieren + Update + Bevorzugte Auflösung + Videoplayer Titel max. Zeichen + Videoplayers Auflösung + Videopuffergröße Videopufferlänge - Video-Cache auf Festplatte - Video- und Bildcache löschen - Kann auf Systemen mit geringem Arbeitsspeicher, wie z. B. Android-TV-Geräten oder alten Handys, Probleme verursachen, wenn der Wert zu hoch eingestellt ist + Video-Cache in Speicher + Video- und Bild-Cache leeren + + Verursacht Abstürze, wenn zu hoch eingestellt. Nicht ändern, wenn wenig Arbeitsspeicher verfügbar ist, wie z.B. ein Android TV oder ein altes Telefon Kann auf Systemen mit geringem Speicherplatz, wie z. B. Android TV-Geräten, zu Problemen führen, wenn der Wert zu hoch eingestellt ist - Nicht mehr anzeigen - Aktualisieren - Bevorzugte Videoqualität + DNS über HTTPS - Nützlich zur Umgehung von ISP-Sperren - Zeige Dubbed/Subbed Animes + Nützlich für die Umgehung von ISP-Sperren + + Website klonen + Website entfernen + Einen Klon einer bestehenden Website mit einer anderen URL hinzufügen + + Downloadpfad + + Nginx-Server-URL + + Dubbed/Subbed Anime anzeigen (Synchronisiert/Untertitelt) + An Bildschirm anpassen Strecken - Zoomen - Anbietersprache + Vergrößern + Haftungsausschluss - App-Layout + General + Zufalls-Button + Zeige Zufallsgenerator Schaltfläche auf der Startseite + Anbieter Sprachen + App Layout Bevorzugte Medien - Automatisch - TV-Layout - Handy-Layout - Primärfarbe + Untertitel-Kodierung + Sprache + Layout + + Auto + TV Layout + Handy Layout + Emulator Layout + + Grundfarbe App-Thema - Downloadpfad - Konto - Abmelden - Anmelden - Konto wechseln - Konto hinzufügen + Vorschaubild Titel Platzierung + Titel unter Vorschaubild platzieren + + + + passwort123 + MeinCoolerUsername + hello@world.com + 127.0.0.1 + MeineCooleSeite + example.com + Sprachcode (en) + %s %s + Account + Ausloggen + Einloggen + Account wechseln + Account hinzufügen + Account erstellen + Synchronisation hinzufügen + Hinzugefügt %s + Sync + Bewertung + %d / 10 + /?? + /%d + Authentifiziert %s + Die Authentifizierung bei %s ist fehlgeschlagen + + Keine Normal Alle + Max + Min Umrandung Gesenkt Schatten Erhöht - Synchronisiere Untertitel + Untertitel synchronisieren 1000ms - Untertitel Verzögerung - Verwende diese Option, wenn die Untertitel %dms zu früh angezeigt werden - Verwende diese Option, wenn die Untertitel %dms zu spät angezeigt werden - Keine Verzögerung bei Untertiteln - Kaufen Sie jede Woche vier gute bequeme Pelze + Untertitelverzögerung + Verwenden, wenn die Untertitel %dms zu früh angezeigt werden + Verwenden, wenn die Untertitel %dms zu spät angezeigt werden + Keine Untertitelverzögerung + + + Vogel Quax zwickt Johnys Pferd Bim + Empfohlen - Geladen %s + %s geladen Aus Datei laden - Datei herunterladen + Vom Internet laden + Heruntergeladene Datei Hauptdarsteller Nebendarsteller Hintergrunddarsteller - Quelle + + Anbieter + Zufällig + Demnächst... + + Cam + Cam + Cam + HQ + HD + TS + TC + BlueRay + WP + DVD + 4K + SD + UHD + HDR + SDR + Web + Vorschaubild + Player + Auflösung und Titel + Titel + Auflösung + Ungültige ID + Ungültige Daten + Ungültige URL + Fehler + Softsubs aus Untertiteln entfernen + Entferne nutzloses aus Untertiteln (z.B. Werbung) + Nach bevorzugter Mediensprache filtern + Extras + Trailer + Link zum Stream + Referent + Nächste + Videos in diesen Sprachen ansehen + Vorherige + Einrichtung überspringen + + Hallo leeres Fragment + Aussehen der App passend zu dem des Geräts ändern + Absturzmeldung + Was möchtest du anschauen? + Fertig + Erweiterungen + Repository hinzufügen + Repository-Name + Repository-URL + Plugin geladen + Plugin gelöscht + Fehler beim Laden von %s + 18+ + Herunterladen begonnen %d %s + Downloaded %d %s erfolgreich + Alle %s bereits heruntergeladen + Batch Download + Plugin + Plugins + Dadurch werden auch alle Repository-Plugins gelöscht + Repository löschen + Liste der Websites herunterladen, welche du verwenden möchtest + Downloaded: %d + Heruntergeladen: %d + Nicht heruntergeladen: %d + Repository hinzufügen um Anbieter-Erweiterungen herunterzuladen + Community-Repositories anzeigen + Öffentliche Liste + Alle Untertitel in Großbuchstaben + + Alle Plugins aus diesem Repository herunterladen? + %s (Deaktiviert) From e503534ab193d8d03d047832c8af45b63ee89a12 Mon Sep 17 00:00:00 2001 From: KillerDogeEmpire <87155550+KillerDogeEmpire@users.noreply.github.com> Date: Mon, 29 Aug 2022 15:20:03 -0600 Subject: [PATCH 024/888] Made Language into provider (#68) * made the language category to Provider category * Remove the translations for the language category since it's now changed --- .../lagradost/cloudstream3/MainActivity.kt | 2 +- .../ui/settings/SettingsFragment.kt | 2 +- .../ui/settings/SettingsGeneral.kt | 70 +++++++++++++++++++ .../{SettingsLang.kt => SettingsProviders.kt} | 70 +------------------ app/src/main/res/layout/main_settings.xml | 8 +-- .../main/res/navigation/mobile_navigation.xml | 8 +-- app/src/main/res/values-bp/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-de/strings-de.xml | 1 - app/src/main/res/values-es/strings-es.xml | 3 +- app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt/strings-pt.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values/strings.xml | 2 +- ..._media_lang.xml => settings_providers.xml} | 4 -- app/src/main/res/xml/settins_general.xml | 5 ++ 21 files changed, 90 insertions(+), 95 deletions(-) rename app/src/main/java/com/lagradost/cloudstream3/ui/settings/{SettingsLang.kt => SettingsProviders.kt} (64%) rename app/src/main/res/xml/{settings_media_lang.xml => settings_providers.xml} (84%) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 44f78703..3cf5de18 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -183,7 +183,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { R.id.navigation_settings_updates, R.id.navigation_settings_ui, R.id.navigation_settings_account, - R.id.navigation_settings_lang, + R.id.navigation_settings_providers, R.id.navigation_settings_general, R.id.navigation_settings_extensions, R.id.navigation_settings_plugins, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 7e26afb5..40c996cc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -173,7 +173,7 @@ class SettingsFragment : Fragment() { Pair(settings_player, R.id.action_navigation_settings_to_navigation_settings_player), Pair(settings_credits, R.id.action_navigation_settings_to_navigation_settings_account), Pair(settings_ui, R.id.action_navigation_settings_to_navigation_settings_ui), - Pair(settings_lang, R.id.action_navigation_settings_to_navigation_settings_lang), + Pair(settings_providers, R.id.action_navigation_settings_to_navigation_settings_providers), Pair(settings_updates, R.id.action_navigation_settings_to_navigation_settings_updates), Pair( settings_extensions, 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 389d52c3..0ae7a258 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 @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.settings +import android.content.Context import android.content.Intent import android.net.Uri import android.os.Build @@ -17,6 +18,7 @@ import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.AcraApplication import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.app @@ -30,6 +32,7 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpTo import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog +import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.USER_PROVIDER_API @@ -39,6 +42,44 @@ import kotlinx.android.synthetic.main.add_remove_sites.* import kotlinx.android.synthetic.main.add_site_input.* import java.io.File +fun getCurrentLocale(context: Context): String { + val res = context.resources + // Change locale settings in the app. + // val dm = res.displayMetrics + val conf = res.configuration + return conf?.locale?.language ?: "en" +} + +// idk, if you find a way of automating this it would be great +// https://www.iemoji.com/view/emoji/1794/flags/antarctica +// Emoji Character Encoding Data --> C/C++/Java Src +// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto +val appLanguages = arrayListOf( + Triple("", "Spanish", "es"), + Triple("", "English", "en"), + Triple("", "Viet Nam", "vi"), + Triple("", "Dutch", "nl"), + Triple("", "French", "fr"), + Triple("", "Greek", "el"), + Triple("", "Swedish", "sv"), + Triple("", "Tagalog", "tl"), + Triple("", "Polish", "pl"), + Triple("", "Hindi", "hi"), + Triple("", "Malayalam", "ml"), + Triple("", "Norsk", "no"), + Triple("", "German", "de"), + Triple("", "Arabic", "ar"), + Triple("", "Turkish", "tr"), + Triple("", "Macedonian", "mk"), + Triple("\uD83C\uDDF5\uD83C\uDDF9", "Portuguese", "pt"), + Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"), + Triple("", "Romanian", "ro"), + Triple("", "Italian", "it"), + Triple("", "Chinese", "zh"), + Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"), + Triple("", "Czech", "cs"), +).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top + class SettingsGeneral : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -95,6 +136,35 @@ class SettingsGeneral : PreferenceFragmentCompat() { ?: mutableListOf() } + 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) -> + val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } + "$flag $name" + } + val index = languageCodes.indexOf(current) + + activity?.showDialog( + languageNames, index, getString(R.string.app_language), true, { } + ) { languageIndex -> + try { + val code = languageCodes[languageIndex] + CommonActivity.setLocale(activity, code) + settingsManager.edit().putString(getString(R.string.locale_key), code).apply() + activity?.recreate() + } catch (e: Exception) { + logError(e) + } + } + return@setOnPreferenceClickListener true + } + + fun showAdd() { val providers = allProviders.distinctBy { it.javaClass }.sortedBy { it.name } activity?.showDialog( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt similarity index 64% rename from app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt rename to app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index b038f21a..7bba9d88 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsLang.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -20,54 +20,18 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -fun getCurrentLocale(context: Context): String { - val res = context.resources - // Change locale settings in the app. - // val dm = res.displayMetrics - val conf = res.configuration - return conf?.locale?.language ?: "en" -} -// idk, if you find a way of automating this it would be great -// https://www.iemoji.com/view/emoji/1794/flags/antarctica -// Emoji Character Encoding Data --> C/C++/Java Src -// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto -val appLanguages = arrayListOf( - Triple("", "Spanish", "es"), - Triple("", "English", "en"), - Triple("", "Viet Nam", "vi"), - Triple("", "Dutch", "nl"), - Triple("", "French", "fr"), - Triple("", "Greek", "el"), - Triple("", "Swedish", "sv"), - Triple("", "Tagalog", "tl"), - Triple("", "Polish", "pl"), - Triple("", "Hindi", "hi"), - Triple("", "Malayalam", "ml"), - Triple("", "Norsk", "no"), - Triple("", "German", "de"), - Triple("", "Arabic", "ar"), - Triple("", "Turkish", "tr"), - Triple("", "Macedonian", "mk"), - Triple("\uD83C\uDDF5\uD83C\uDDF9", "Portuguese", "pt"), - Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"), - Triple("", "Romanian", "ro"), - Triple("", "Italian", "it"), - Triple("", "Chinese", "zh"), - Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"), - Triple("", "Czech", "cs"), -).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top -class SettingsLang : PreferenceFragmentCompat() { +class SettingsProviders : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setUpToolbar(R.string.category_preferred_media_and_lang) + setUpToolbar(R.string.category_providers) setPaddingBottom() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { hideKeyboard() - setPreferencesFromResource(R.xml.settings_media_lang, rootKey) + setPreferencesFromResource(R.xml.settings_providers, rootKey) val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) getPref(R.string.display_sub_key)?.setOnPreferenceClickListener { @@ -123,34 +87,6 @@ class SettingsLang : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } - 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) -> - val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } - "$flag $name" - } - val index = languageCodes.indexOf(current) - - activity?.showDialog( - languageNames, index, getString(R.string.app_language), true, { } - ) { languageIndex -> - try { - val code = languageCodes[languageIndex] - CommonActivity.setLocale(activity, code) - settingsManager.edit().putString(getString(R.string.locale_key), code).apply() - activity?.recreate() - } catch (e: Exception) { - logError(e) - } - } - return@setOnPreferenceClickListener true - } - getPref(R.string.provider_lang_key)?.setOnPreferenceClickListener { activity?.getApiProviderLangSettings()?.let { current -> val langs = APIHolder.apis.map { it.lang }.toSet() diff --git a/app/src/main/res/layout/main_settings.xml b/app/src/main/res/layout/main_settings.xml index 11dd7d5c..1527599c 100644 --- a/app/src/main/res/layout/main_settings.xml +++ b/app/src/main/res/layout/main_settings.xml @@ -65,22 +65,22 @@ style="@style/SettingsItem" android:nextFocusUp="@id/settings_general" - android:nextFocusDown="@id/settings_lang" + android:nextFocusDown="@id/settings_providers" android:text="@string/category_player" /> + android:text="@string/category_providers" /> diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 3fd7abb7..3c45ee70 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -205,8 +205,8 @@ tools:layout="@layout/fragment_webview" /> Layout do App Mídia preferida Codificação das legendas - Linguagem Layout Auto diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1703b5d5..aa840760 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -342,7 +342,6 @@ Rozložení aplikace Preferovaná média Kódování titulků - Jazyk Rozložení Automaticky diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index cc301da8..435ac9a0 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -344,7 +344,6 @@ App Layout Bevorzugte Medien Untertitel-Kodierung - Sprache Layout Auto diff --git a/app/src/main/res/values-es/strings-es.xml b/app/src/main/res/values-es/strings-es.xml index d845cf82..9b739b39 100644 --- a/app/src/main/res/values-es/strings-es.xml +++ b/app/src/main/res/values-es/strings-es.xml @@ -346,8 +346,7 @@ Idiomas del proveedor Diseño de la aplicación Medios preferidos - Codificación de subtítulos - Idioma + Codificación de subtítulos Diseño Automático diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 4abb6bf9..e8f7e9e9 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -337,7 +337,6 @@ Bahasa provider Tata Letak Aplikasi Media yang lebih diinginkan - Media dan bahasa yang lebih diinginkan Antarmuka pengguna Otomatis diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index cb6d7bda..b990a7f6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -333,7 +333,6 @@ Layout app Media preferito Encoding Sottotitoli - Media e lingua preferiti Interfaccia utente Auto diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 4a721ce4..c51dbcbb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -337,7 +337,6 @@ App Layout Preferred media Subtitle encoding - Language Layout Auto diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 08f01cdb..83b87a20 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -311,7 +311,6 @@ Preferowane media Kodowanie napisów - Język Układ interfejsu Automatyczny Układ dla telewizorów diff --git a/app/src/main/res/values-pt/strings-pt.xml b/app/src/main/res/values-pt/strings-pt.xml index 55ad9d0a..9bf52a83 100644 --- a/app/src/main/res/values-pt/strings-pt.xml +++ b/app/src/main/res/values-pt/strings-pt.xml @@ -342,7 +342,6 @@ Layout da App Mídia preferida Codificação das legendas - Linguagem Layout Auto diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 540e7644..7d1f3458 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -347,7 +347,6 @@ Aplicație de prezentare Media preferată Codificarea subtitrărilor - Media și limba preferată Interfața utilizatorului Auto diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 513ac315..1e76adc9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -350,7 +350,6 @@ Uygulama düzeni Tercih edilen medya Alt yazı kodlaması - Dil Düzen Otomatik diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8454187a..61c9a779 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -348,7 +348,6 @@ Giao diện App Thể loại ưu tiên Mã hoá phụ đề - Ngôn ngữ Giao diện Tự động diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 268d6246..fea0fe83 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -447,7 +447,7 @@ Preferred media Enable NSFW on supported providers Subtitle encoding - Language + Providers Layout Auto diff --git a/app/src/main/res/xml/settings_media_lang.xml b/app/src/main/res/xml/settings_providers.xml similarity index 84% rename from app/src/main/res/xml/settings_media_lang.xml rename to app/src/main/res/xml/settings_providers.xml index 2244eff8..a177865b 100644 --- a/app/src/main/res/xml/settings_media_lang.xml +++ b/app/src/main/res/xml/settings_providers.xml @@ -1,10 +1,6 @@ - + + Date: Wed, 31 Aug 2022 21:54:39 +0700 Subject: [PATCH 025/888] [extractor] simple added Rasacintaku (#74) --- .../java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt | 4 ++++ .../java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 5 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 89f4ca67..75a7270b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -7,6 +7,10 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName +class Rasacintaku: XStreamCdn() { + override val mainUrl: String = "https://rasa-cintaku-semakin-berantai.xyz" +} + class LayarKaca: XStreamCdn() { override val name: String = "LayarKaca-xxi" override val mainUrl: String = "https://layarkacaxxi.icu" 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 217837c9..d3a59a2e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -244,6 +244,7 @@ val extractorApis: MutableList = arrayListOf( DBfilm(), Luxubu(), LayarKaca(), + Rasacintaku(), // WatchSB(), 'cause StreamSB.kt works Uqload(), Uqload1(), From 7a68d6304fa3284cc5701626dfefbcca01816016 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Wed, 31 Aug 2022 20:08:45 +0200 Subject: [PATCH 026/888] fixed subs bug + fixed generator bug + bump 3.1.4 + updated drive link --- app/build.gradle | 2 +- .../lagradost/cloudstream3/AcraApplication.kt | 4 +-- .../cloudstream3/ui/player/GeneratorPlayer.kt | 36 ++++++++++++++----- .../cloudstream3/ui/player/IGenerator.kt | 2 +- .../ui/result/ResultViewModel2.kt | 2 +- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c14f0657..b1cb3a6b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,7 +36,7 @@ android { targetSdkVersion 30 versionCode 50 - versionName "3.1.3" + versionName "3.1.4" resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}" diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 93469451..49044e06 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -32,9 +32,9 @@ class CustomReportSender : ReportSender { override fun send(context: Context, errorContent: CrashReportData) { println("Sending report") val url = - "https://docs.google.com/forms/u/0/d/e/1FAIpQLSeFmyBChi6HF3IkhTVWPiDXJtxt8W0Hf4Agljm_0-0_QuEYFg/formResponse" + "https://docs.google.com/forms/u/0/d/e/1FAIpQLSe9Vff8oHGMRXcjgCXZwkjvx3eBdNpn4DzjO0FkcWEU1gEQpA/formResponse" val data = mapOf( - "entry.134906550" to errorContent.toJSON() + "entry.1586460852" to errorContent.toJSON() ) thread { // to not run it on main thread diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 8f908465..04d630aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -101,6 +101,7 @@ class GeneratorPlayer : FullScreenPlayer() { private fun setSubtitles(sub: SubtitleData?): Boolean { currentSelectedSubtitles = sub + //Log.i(TAG, "setSubtitles = $sub") return player.setPreferredSubtitles(sub) } @@ -849,17 +850,33 @@ class GeneratorPlayer : FullScreenPlayer() { private fun autoSelectFromSettings(): Boolean { // auto select subtitle based of settings val langCode = preferredAutoSelectSubtitles - if (!langCode.isNullOrEmpty() && player.getCurrentPreferredSubtitle() == null) { - getAutoSelectSubtitle(currentSubs, settings = true, downloads = false)?.let { sub -> - context?.let { ctx -> - if (setSubtitles(sub)) { - player.saveData() - player.reloadPlayer(ctx) - player.handleEvent(CSPlayerEvent.Play) - return true + val current = player.getCurrentPreferredSubtitle() + Log.i(TAG, "autoSelectFromSettings = $current") + context?.let { ctx -> + if (current != null) { + if (setSubtitles(current)) { + player.saveData() + player.reloadPlayer(ctx) + player.handleEvent(CSPlayerEvent.Play) + return true + } + } else + if (!langCode.isNullOrEmpty()) { + getAutoSelectSubtitle( + currentSubs, + settings = true, + downloads = false + )?.let { sub -> + + if (setSubtitles(sub)) { + player.saveData() + player.reloadPlayer(ctx) + player.handleEvent(CSPlayerEvent.Play) + return true + } + } } - } } return false } @@ -881,6 +898,7 @@ class GeneratorPlayer : FullScreenPlayer() { } private fun autoSelectSubtitles() { + //Log.i(TAG, "autoSelectSubtitles") normalSafeApiCall { if (!autoSelectFromSettings()) { autoSelectFromDownloads() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt index 219f5502..a1287e6a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt @@ -14,7 +14,7 @@ interface IGenerator { fun getCurrentId(): Int? // this is used to save data or read data about this id fun getCurrent(offset : Int = 0): Any? // this is used to get metadata about the current playing, can return null - fun getAll() : List? // thus us used to get the metadata about all entries, not needed + fun getAll() : List? // this us used to get the metadata about all entries, not needed /* not safe, must use try catch */ suspend fun generateLinks( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index e26265ec..b7e36f21 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1226,7 +1226,7 @@ class ResultViewModel2 : ViewModel() { it.getAll() // I know kinda shit to itterate all, but it is 100% sure to work ?.indexOfFirst { value -> value is ResultEpisode && value.id == click.data.id } ?.let { index -> - if (index > 0) + if (index >= 0) it.goto(index) } From 461f3d75d84e1ed26f87e5a7975fb5e9a5d2e2bf Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Wed, 31 Aug 2022 21:58:26 +0200 Subject: [PATCH 027/888] Add audio and video track support (#69) * Add audio and video track support --- .../ui/player/AbstractPlayerFragment.kt | 5 + .../cloudstream3/ui/player/CS3IPlayer.kt | 119 ++- .../ui/player/FullScreenPlayer.kt | 9 + .../cloudstream3/ui/player/GeneratorPlayer.kt | 129 +++ .../cloudstream3/ui/player/IPlayer.kt | 65 +- .../ui/result/ResultTrailerPlayer.kt | 3 + .../cloudstream3/utils/M3u8Helper.kt | 16 +- .../main/res/layout/fragment_player_tv.xml | 200 ++-- .../main/res/layout/player_custom_layout.xml | 908 +++++++++--------- .../res/layout/player_custom_layout_tv.xml | 487 +++++----- .../main/res/layout/player_select_tracks.xml | 148 +++ app/src/main/res/values/strings.xml | 3 + 12 files changed, 1283 insertions(+), 809 deletions(-) create mode 100644 app/src/main/res/layout/player_select_tracks.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 0ce93821..9a0debcf 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -99,6 +99,10 @@ abstract class AbstractPlayerFragment( throw NotImplementedError() } + open fun onTracksInfoChanged() { + throw NotImplementedError() + } + open fun exitedPipMode() { throw NotImplementedError() } @@ -369,6 +373,7 @@ abstract class AbstractPlayerFragment( ), subtitlesUpdates = ::subtitlesChanged, embeddedSubtitlesFetched = ::embeddedSubtitlesFetched, + onTracksInfoChanged = ::onTracksInfoChanged ) if (player is CS3IPlayer) { 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 5f6ef921..677042d0 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 @@ -8,6 +8,8 @@ import android.util.Log import android.widget.FrameLayout import androidx.preference.PreferenceManager import com.google.android.exoplayer2.* +import com.google.android.exoplayer2.C.TRACK_TYPE_AUDIO +import com.google.android.exoplayer2.C.TRACK_TYPE_VIDEO import com.google.android.exoplayer2.database.StandaloneDatabaseProvider import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource import com.google.android.exoplayer2.source.* @@ -24,6 +26,8 @@ import com.google.android.exoplayer2.upstream.cache.SimpleCache import com.google.android.exoplayer2.util.MimeTypes import com.google.android.exoplayer2.video.VideoSize import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull +import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError @@ -39,6 +43,7 @@ import javax.net.ssl.SSLContext import javax.net.ssl.SSLSession const val TAG = "CS3ExoPlayer" +const val PREFERRED_AUDIO_LANGUAGE_KEY = "preferred_audio_language" /** Cache */ @@ -108,6 +113,7 @@ class CS3IPlayer : IPlayer { private var playerUpdated: ((Any?) -> Unit)? = null private var embeddedSubtitlesFetched: ((List) -> Unit)? = null + private var onTracksInfoChanged: (() -> Unit)? = null override fun releaseCallbacks() { playerUpdated = null @@ -120,7 +126,7 @@ class CS3IPlayer : IPlayer { nextEpisode = null prevEpisode = null subtitlesUpdates = null - embeddedSubtitlesFetched = null + onTracksInfoChanged = null requestSubtitleUpdate = null } @@ -136,6 +142,7 @@ class CS3IPlayer : IPlayer { prevEpisode: (() -> Unit)?, subtitlesUpdates: (() -> Unit)?, embeddedSubtitlesFetched: ((List) -> Unit)?, + onTracksInfoChanged: (() -> Unit)?, ) { this.playerUpdated = playerUpdated this.updateIsPlaying = updateIsPlaying @@ -148,6 +155,7 @@ class CS3IPlayer : IPlayer { this.prevEpisode = prevEpisode this.subtitlesUpdates = subtitlesUpdates this.embeddedSubtitlesFetched = embeddedSubtitlesFetched + this.onTracksInfoChanged = onTracksInfoChanged } // I know, this is not a perfect solution, however it works for fixing subs @@ -212,6 +220,72 @@ class CS3IPlayer : IPlayer { var currentSubtitles: SubtitleData? = null + override fun setMaxVideoSize(width: Int, height: Int) { + exoPlayer?.trackSelectionParameters = exoPlayer?.trackSelectionParameters + ?.buildUpon() + ?.setMaxVideoSize(width, height) + ?.build() + ?: return + } + + override fun setPreferredAudioTrack(trackLanguage: String?) { + preferredAudioTrackLanguage = trackLanguage + exoPlayer?.trackSelectionParameters = exoPlayer?.trackSelectionParameters + ?.buildUpon() + ?.setPreferredAudioLanguage(trackLanguage) + ?.build() + ?: return + } + + + /** + * Gets all supported formats in a list + * */ + private fun List.getFormats(): List { + return this.map { + (0 until it.trackGroup.length).mapNotNull { i -> + if (it.isSupported) + it.trackGroup.getFormat(i) // to it.isSelected + else null + } + }.flatten() + } + + private fun Format.toAudioTrack(): AudioTrack { + return AudioTrack( + this.id, + this.label, +// isPlaying, + this.language + ) + } + + private fun Format.toVideoTrack(): VideoTrack { + return VideoTrack( + this.id, + this.label, +// isPlaying, + this.language, + this.width, + this.height + ) + } + + override fun getVideoTracks(): CurrentTracks { + val allTracks = exoPlayer?.currentTracksInfo?.trackGroupInfos ?: emptyList() + val videoTracks = allTracks.filter { it.trackType == TRACK_TYPE_VIDEO }.getFormats() + .map { it.toVideoTrack() } + val audioTracks = allTracks.filter { it.trackType == TRACK_TYPE_AUDIO }.getFormats() + .map { it.toAudioTrack() } + + return CurrentTracks( + exoPlayer?.videoFormat?.toVideoTrack(), + exoPlayer?.audioFormat?.toAudioTrack(), + videoTracks, + audioTracks + ) + } + /** * @return True if the player should be reloaded * */ @@ -350,6 +424,20 @@ class CS3IPlayer : IPlayer { } companion object { + /** + * Setting this variable is permanent across app sessions. + **/ + private var preferredAudioTrackLanguage: String? = null + get() { + return field ?: getKey(PREFERRED_AUDIO_LANGUAGE_KEY, field)?.also { + field = it + } + } + set(value) { + setKey(PREFERRED_AUDIO_LANGUAGE_KEY, value) + field = value + } + private var simpleCache: SimpleCache? = null var requestSubtitleUpdate: (() -> Unit)? = null @@ -460,13 +548,21 @@ class CS3IPlayer : IPlayer { return getMediaItemBuilder(mimeType).setUri(url).build() } - private fun getTrackSelector(context: Context): TrackSelector { + private fun getTrackSelector(context: Context, maxVideoHeight: Int?): TrackSelector { val trackSelector = DefaultTrackSelector(context) trackSelector.parameters = DefaultTrackSelector.ParametersBuilder(context) // .setRendererDisabled(C.TRACK_TYPE_VIDEO, true) .setRendererDisabled(C.TRACK_TYPE_TEXT, true) + // Experimental + .setTunnelingEnabled(true) .setDisabledTextTrackSelectionFlags(C.TRACK_TYPE_TEXT) - .clearSelectionOverrides() + // This will not force higher quality videos to fail + // but will make the m3u8 pick the correct preferred + .setMaxVideoSize(Int.MAX_VALUE, maxVideoHeight ?: Int.MAX_VALUE) + .setPreferredAudioLanguage(preferredAudioTrackLanguage) + + // This would also clear preferred audio +// .clearSelectionOverrides() .build() return trackSelector } @@ -486,6 +582,11 @@ class CS3IPlayer : IPlayer { playWhenReady: Boolean = true, cacheFactory: CacheDataSource.Factory? = null, trackSelector: TrackSelector? = null, + /** + * Sets the m3u8 preferred video quality, will not force stop anything with higher quality. + * Does not work if trackSelector is defined. + **/ + maxVideoHeight: Int? = null ): ExoPlayer { val exoPlayerBuilder = ExoPlayer.Builder(context) @@ -508,7 +609,7 @@ class CS3IPlayer : IPlayer { } else it }.toTypedArray() } - .setTrackSelector(trackSelector ?: getTrackSelector(context)) + .setTrackSelector(trackSelector ?: getTrackSelector(context, maxVideoHeight)) .setLoadControl( DefaultLoadControl.Builder() .setTargetBufferBytes( @@ -637,6 +738,12 @@ class CS3IPlayer : IPlayer { cacheFactory: CacheDataSource.Factory? = null ) { Log.i(TAG, "loadExo") + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + val maxVideoHeight = settingsManager.getInt( + context.getString(com.lagradost.cloudstream3.R.string.quality_pref_key), + Int.MAX_VALUE + ) + try { hasUsedFirstRender = false @@ -653,7 +760,8 @@ class CS3IPlayer : IPlayer { videoBufferMs = videoBufferMs, playWhenReady = isPlaying, // this keep the current state of the player cacheFactory = cacheFactory, - subtitleOffset = currentSubtitleOffset + subtitleOffset = currentSubtitleOffset, + maxVideoHeight = maxVideoHeight ) requestSubtitleUpdate = ::reloadSubs @@ -713,6 +821,7 @@ class CS3IPlayer : IPlayer { } embeddedSubtitlesFetched?.invoke(exoPlayerReportedTracks) + onTracksInfoChanged?.invoke() subtitlesUpdates?.invoke() } super.onTracksInfoChanged(tracksInfo) 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 2ddef9a4..19f2b25b 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 @@ -176,6 +176,10 @@ open class FullScreenPlayer : AbstractPlayerFragment() { throw NotImplementedError() } + open fun showTracksDialogue() { + throw NotImplementedError() + } + open fun openOnlineSubPicker( context: Context, imdbId: Long?, @@ -1101,6 +1105,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { // if nothing has loaded these buttons should not be visible player_skip_episode?.isVisible = false + player_tracks_btt?.isVisible = false player_skip_op?.isVisible = false shadow_overlay?.isVisible = false @@ -1296,6 +1301,10 @@ open class FullScreenPlayer : AbstractPlayerFragment() { showMirrorsDialogue() } + player_tracks_btt?.setOnClickListener { + showTracksDialogue() + } + player_intro_play?.setOnClickListener { player_intro_play?.isGone = true player.handleEvent(CSPlayerEvent.Play) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 04d630aa..05b599de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -18,6 +18,11 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager +import com.google.android.exoplayer2.C.TRACK_TYPE_AUDIO +import com.google.android.exoplayer2.C.TRACK_TYPE_VIDEO +import com.google.android.exoplayer2.Format +import com.google.android.exoplayer2.Format.NO_VALUE +import com.google.android.exoplayer2.TracksInfo import com.google.android.exoplayer2.util.MimeTypes import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.* @@ -53,6 +58,8 @@ import kotlinx.android.synthetic.main.dialog_online_subtitles.cancel_btt import kotlinx.android.synthetic.main.fragment_player.* import kotlinx.android.synthetic.main.player_custom_layout.* import kotlinx.android.synthetic.main.player_select_source_and_subs.* +import kotlinx.android.synthetic.main.player_select_source_and_subs.subtitles_click_settings +import kotlinx.android.synthetic.main.player_select_tracks.* import kotlinx.coroutines.Job class GeneratorPlayer : FullScreenPlayer() { @@ -109,6 +116,11 @@ class GeneratorPlayer : FullScreenPlayer() { viewModel.addSubtitles(subtitles.toSet()) } + override fun onTracksInfoChanged() { + val tracks = player.getVideoTracks() + player_tracks_btt?.isVisible = tracks.allVideoTracks.size > 1 || tracks.allAudioTracks.size > 1 + } + private fun noSubtitles(): Boolean { return setSubtitles(null) } @@ -477,6 +489,8 @@ class GeneratorPlayer : FullScreenPlayer() { } var selectSourceDialog: AlertDialog? = null +// var selectTracksDialog: AlertDialog? = null + override fun showMirrorsDialogue() { try { currentSelectedSubtitles = player.getCurrentPreferredSubtitle() @@ -668,6 +682,121 @@ class GeneratorPlayer : FullScreenPlayer() { } } + override fun showTracksDialogue() { + try { + //println("CURRENT SELECTED :$currentSelectedSubtitles of $currentSubs") + context?.let { ctx -> + val tracks = player.getVideoTracks() + + val isPlaying = player.getIsPlaying() + player.handleEvent(CSPlayerEvent.Pause) + + val currentVideoTracks = tracks.allVideoTracks.sortedBy { + it.height?.times(-1) + } + val currentAudioTracks = tracks.allAudioTracks + + val trackBuilder = AlertDialog.Builder(ctx, R.style.AlertDialogCustomBlack) + .setView(R.layout.player_select_tracks) + + val tracksDialog = trackBuilder.create() + +// selectTracksDialog = tracksDialog + + tracksDialog.show() + val videosList = tracksDialog.video_tracks_list + val audioList = tracksDialog.auto_tracks_list + + tracksDialog.video_tracks_holder.isVisible = currentVideoTracks.size > 1 + tracksDialog.audio_tracks_holder.isVisible = currentAudioTracks.size > 1 + + fun dismiss() { + if (isPlaying) { + player.handleEvent(CSPlayerEvent.Play) + } + activity?.hideSystemUI() + } + + val videosArrayAdapter = + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) + + videosArrayAdapter.addAll(currentVideoTracks.mapIndexed { index, format -> + format.label + ?: (if (format.height == NO_VALUE || format.width == NO_VALUE) index else "${format.width}x${format.height}").toString() + }) + + videosList.choiceMode = AbsListView.CHOICE_MODE_SINGLE + videosList.adapter = videosArrayAdapter + + // Sometimes the data is not the same because some data gets resolved at different stages i think + var videoIndex = currentVideoTracks.indexOf(tracks.currentVideoTrack).takeIf { + it != -1 + } ?: currentVideoTracks.indexOfFirst { + tracks.currentVideoTrack?.id == it.id + } + + videosList.setSelection(videoIndex) + videosList.setItemChecked(videoIndex, true) + + videosList.setOnItemClickListener { _, _, which, _ -> + videoIndex = which + videosList.setItemChecked(which, true) + } + + tracksDialog.setOnDismissListener { + dismiss() +// selectTracksDialog = null + } + + var audioIndexStart = currentAudioTracks.indexOf(tracks.currentAudioTrack).takeIf { + it != -1 + } ?: currentVideoTracks.indexOfFirst { + tracks.currentAudioTrack?.id == it.id + } + + val audioArrayAdapter = + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) +// audioArrayAdapter.add(ctx.getString(R.string.no_subtitles)) + audioArrayAdapter.addAll(currentAudioTracks.mapIndexed { index, format -> + format.label ?: format.language?.let { fromTwoLettersToLanguage(it) } ?: index.toString() + }) + + audioList.adapter = audioArrayAdapter + audioList.choiceMode = AbsListView.CHOICE_MODE_SINGLE + + audioList.setSelection(audioIndexStart) + audioList.setItemChecked(audioIndexStart, true) + + audioList.setOnItemClickListener { _, _, which, _ -> + audioIndexStart = which + audioList.setItemChecked(which, true) + } + + tracksDialog.cancel_btt?.setOnClickListener { + tracksDialog.dismissSafe(activity) + } + + tracksDialog.apply_btt?.setOnClickListener { + player.setPreferredAudioTrack( + currentAudioTracks.getOrNull(audioIndexStart)?.language + ) + + val currentVideo = currentVideoTracks.getOrNull(videoIndex) + val width = currentVideo?.width ?: NO_VALUE + val height = currentVideo?.height ?: NO_VALUE + if (width != NO_VALUE && height != NO_VALUE) { + player.setMaxVideoSize(width, height) + } + + tracksDialog.dismissSafe(activity) + } + } + } catch (e: Exception) { + logError(e) + } + } + + override fun playerError(exception: Exception) { Log.i(TAG, "playerError = $currentSelectedLink") super.playerError(exception) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index 8561a0f4..e8934250 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -46,7 +46,42 @@ enum class CSPlayerLoading { //IsDone, } -class InvalidFileException(msg : String) : Exception(msg) + +interface Track { + /** + * Unique among the class, used to check which track is used. + * VideoTrack and AudioTrack can have the same id + **/ + val id: String? + val label: String? +// val isCurrentlyPlaying: Boolean + val language: String? +} + +data class VideoTrack( + override val id: String?, + override val label: String?, +// override val isCurrentlyPlaying: Boolean, + override val language: String?, + val width: Int?, + val height: Int?, +) : Track + +data class AudioTrack( + override val id: String?, + override val label: String?, +// override val isCurrentlyPlaying: Boolean, + override val language: String?, +) : Track + +data class CurrentTracks( + val currentVideoTrack: VideoTrack?, + val currentAudioTrack: AudioTrack?, + val allVideoTracks: List, + val allAudioTracks: List, +) + +class InvalidFileException(msg: String) : Exception(msg) //http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 const val STATE_RESUME_WINDOW = "resumeWindow" @@ -73,8 +108,8 @@ interface IPlayer { fun seekTime(time: Long) fun seekTo(time: Long) - fun getSubtitleOffset() : Long // in ms - fun setSubtitleOffset(offset : Long) // in ms + fun getSubtitleOffset(): Long // in ms + fun setSubtitleOffset(offset: Long) // in ms fun initCallbacks( playerUpdated: (Any?) -> Unit, // attach player to view @@ -88,7 +123,9 @@ interface IPlayer { prevEpisode: (() -> Unit)? = null, // this is used by the player to load the previous episode subtitlesUpdates: (() -> Unit)? = null, // callback from player to inform that subtitles have updated in some way embeddedSubtitlesFetched: ((List) -> Unit)? = null, // callback from player to give all embedded subtitles + onTracksInfoChanged: (() -> Unit)? = null, // Callback when tracks are changed, used for UI changes ) + fun releaseCallbacks() fun updateSubtitleStyle(style: SaveCaptionStyle) @@ -100,16 +137,16 @@ interface IPlayer { link: ExtractorLink? = null, data: ExtractorUri? = null, startPosition: Long? = null, - subtitles : Set, - subtitle : SubtitleData?, - autoPlay : Boolean? = true + subtitles: Set, + subtitle: SubtitleData?, + autoPlay: Boolean? = true ) fun reloadPlayer(context: Context) - fun setActiveSubtitles(subtitles : Set) - fun setPreferredSubtitles(subtitle : SubtitleData?) : Boolean // returns true if the player requires a reload, null for nothing - fun getCurrentPreferredSubtitle() : SubtitleData? + fun setActiveSubtitles(subtitles: Set) + fun setPreferredSubtitles(subtitle: SubtitleData?): Boolean // returns true if the player requires a reload, null for nothing + fun getCurrentPreferredSubtitle(): SubtitleData? fun handleEvent(event: CSPlayerEvent) @@ -120,5 +157,13 @@ interface IPlayer { fun release() /** Get if player is actually used */ - fun isActive() : Boolean + fun isActive(): Boolean + + fun getVideoTracks(): CurrentTracks + + /** If no parameters are set it'll default to no set size */ + fun setMaxVideoSize(width: Int = Int.MAX_VALUE, height: Int = Int.MAX_VALUE) + + /** If no trackLanguage is set it'll default to first track */ + fun setPreferredAudioTrack(trackLanguage: String?) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index db0a7e16..26c9249d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -75,11 +75,14 @@ open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreen } override fun showMirrorsDialogue() {} + override fun showTracksDialogue() {} + override fun openOnlineSubPicker(context: Context, imdbId: Long?, dismissCallback: () -> Unit) {} override fun subtitlesChanged() {} override fun embeddedSubtitlesFetched(subtitles: List) {} + override fun onTracksInfoChanged() {} override fun exitedPipMode() {} diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index c309d36e..6c5117b4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -116,15 +116,16 @@ class M3u8Helper { return !url.contains("https://") && !url.contains("http://") } - suspend fun m3u8Generation(m3u8: M3u8Stream, returnThis: Boolean?): List { + suspend fun m3u8Generation(m3u8: M3u8Stream, returnThis: Boolean? = true): List { +// return listOf(m3u8) val list = mutableListOf() val m3u8Parent = getParentLink(m3u8.streamUrl) val response = app.get(m3u8.streamUrl, headers = m3u8.headers, verify = false).text - var hasAnyContent = false +// var hasAnyContent = false for (match in QUALITY_REGEX.findAll(response)) { - hasAnyContent = true +// hasAnyContent = true var (quality, m3u8Link, m3u8Link2) = match.destructured if (m3u8Link.isEmpty()) m3u8Link = m3u8Link2 if (absoluteExtensionDetermination(m3u8Link) == "m3u8") { @@ -141,16 +142,14 @@ class M3u8Helper { m3u8.headers ), false ) - } list += M3u8Stream( m3u8Link, quality.toIntOrNull(), m3u8.headers ) - } - if (returnThis ?: !hasAnyContent) { + if (returnThis != false) { list += M3u8Stream( m3u8.streamUrl, Qualities.Unknown.value, @@ -169,7 +168,10 @@ class M3u8Helper { val errored: Boolean = false ) - suspend fun hlsYield(qualities: List, startIndex: Int = 0): Iterator { + suspend fun hlsYield( + qualities: List, + startIndex: Int = 0 + ): Iterator { if (qualities.isEmpty()) return listOf( HlsDownloadData( byteArrayOf(), diff --git a/app/src/main/res/layout/fragment_player_tv.xml b/app/src/main/res/layout/fragment_player_tv.xml index f4cec44c..b84aaf7d 100644 --- a/app/src/main/res/layout/fragment_player_tv.xml +++ b/app/src/main/res/layout/fragment_player_tv.xml @@ -1,131 +1,131 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/player_background" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/black" + android:keepScreenOn="true" + android:orientation="horizontal" + android:screenOrientation="sensorLandscape" + app:backgroundTint="@android:color/black" + app:surface_type="texture_view"> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:show_timeout="0" /> + android:id="@+id/player_loading_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/black" + android:backgroundTint="@android:color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:visibility="gone" + app:icon="@drawable/ic_baseline_skip_next_24" + tools:visibility="visible" /> + android:id="@+id/main_load" + android:layout_width="50dp" + android:layout_height="50dp" + android:layout_gravity="center" /> + android:id="@+id/video_go_back_holder_holder" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="5dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_width="30dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:src="@drawable/ic_baseline_arrow_back_24" + app:tint="@android:color/white" /> + android:layout_gravity="center" + android:background="@drawable/video_tap_button_always_white" + android:clickable="true" + android:focusable="true" + android:focusableInTouchMode="true" + android:nextFocusRight="@id/overlay_loading_skip_button" + android:nextFocusDown="@id/overlay_loading_skip_button" /> + + + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="start" + android:textColor="@color/white" + android:textStyle="bold" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="78% at 18kb/s" /> - - + android:id="@+id/video_torrent_seeders" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="0dp" + android:gravity="start" + android:textColor="@color/white" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@+id/player_video_title" + tools:text="17 seeders" /> \ No newline at end of file diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 5e10e471..9bbded4e 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -1,23 +1,23 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/player_holder" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:screenOrientation="landscape" + tools:orientation="vertical"> + android:id="@+id/subtitle_holder" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:id="@+id/shadow_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/black_overlay" /> + android:id="@+id/player_time_menu" + android:layout_width="match_parent" + android:layout_height="200dp" + android:orientation="horizontal" + app:layout_constraintBottom_toTopOf="@+id/player_center_menu" + app:layout_constraintTop_toBottomOf="@+id/topMenuRight"> + android:id="@+id/player_time_text" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center" + android:shadowColor="@android:color/black" + android:shadowRadius="10.0" + android:textColor="@android:color/white" + android:textSize="30sp" + tools:text="+100" /> + android:id="@+id/player_episode_filler_holder" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:layout_margin="20dp"> + android:id="@+id/player_episode_filler" + style="@style/SmallBlackButton" + android:text="@string/filler" /> + + - + android:layout_height="wrap_content" + android:layout_marginStart="80dp" + android:layout_marginTop="35dp" + android:layout_marginEnd="80dp" + android:gravity="center" + android:textColor="@color/white" + android:textStyle="bold" + android:visibility="visible" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Hello world" /> - - + android:id="@+id/player_video_title_rez" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="80dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="80dp" + android:gravity="center" + android:textColor="@color/white" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@+id/player_video_title" + tools:text="1920x1080" /> @@ -138,30 +138,30 @@ app:layout_constraintTop_toTopOf="parent" />--> + android:id="@+id/player_go_back_holder" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="5dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_width="30dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:contentDescription="@string/go_back_img_des" + android:src="@drawable/ic_baseline_arrow_back_24" + app:tint="@android:color/white" /> + android:id="@+id/player_go_back" + android:layout_width="70dp" + android:layout_height="70dp" + android:layout_gravity="center" + android:background="@drawable/video_tap_button_always_white" + android:clickable="true" + android:contentDescription="@string/go_back_img_des" + android:focusable="true" /> @@ -169,362 +169,374 @@ + android:indeterminate="true" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + android:id="@+id/player_pause_play_holder_holder" + android:layout_width="100dp" + android:layout_height="100dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:id="@+id/player_pause_play_holder" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:ignore="uselessParent"> + android:src="@drawable/netflix_pause" + app:tint="@color/white" + tools:ignore="ContentDescription" /> + android:id="@+id/player_center_menu" + android:layout_width="match_parent" + android:layout_height="100dp" + android:layout_gravity="center" + android:gravity="center" + android:layoutDirection="ltr" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:id="@+id/player_rew_holder" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|start" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toLeftOf="@id/player_ffwd_holder" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintWidth_percent="0.5"> + android:textStyle="bold" + tools:text="10" /> + android:background="@drawable/video_tap_button_skip" + android:nextFocusLeft="@id/exo_rew" + android:nextFocusUp="@id/player_go_back" + android:nextFocusDown="@id/player_lock" + android:padding="10dp" + android:scaleType="fitCenter" + android:scaleX="-1" + android:src="@drawable/netflix_skip_forward" + android:tintMode="src_in" + app:tint="@color/white" + tools:ignore="ContentDescription" /> + android:id="@+id/player_ffwd_holder" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|end" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toRightOf="@id/player_rew_holder" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintWidth_percent="0.5"> + android:id="@+id/exo_ffwd_text" + android:layout_width="200dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:gravity="center" + android:textColor="@color/white" + android:textSize="19sp" + android:textStyle="bold" + tools:text="10" /> + android:background="@drawable/video_tap_button_skip" + android:nextFocusRight="@id/exo_rew" + android:nextFocusUp="@id/player_go_back" + android:nextFocusDown="@id/player_lock" + android:padding="10dp" + android:scaleType="fitCenter" + android:src="@drawable/netflix_skip_forward" + android:tintMode="src_in" + app:tint="@color/white" + tools:ignore="ContentDescription" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginBottom="20dp" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="4dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + android:id="@id/exo_prev" + style="@style/ExoMediaButton.Previous" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_repeat_toggle" + style="@style/ExoMediaButton" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_next" + style="@style/ExoMediaButton.Next" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_vr" + style="@style/ExoMediaButton.VR" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_play" + android:layout_width="0dp" + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_pause" + android:layout_width="0dp" + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@+id/bottom_player_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="10dp" + android:gravity="center_vertical" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + android:id="@+id/player_video_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layoutDirection="ltr" + android:orientation="horizontal"> + android:id="@id/exo_position" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginStart="20dp" + android:gravity="end" + android:includeFontPadding="false" + android:minWidth="50dp" + android:paddingLeft="4dp" + android:paddingRight="4dp" + android:textColor="@android:color/white" + android:textSize="14sp" + android:textStyle="normal" + tools:text="15:30" /> + app:scrubber_color="?attr/colorPrimary" + app:scrubber_dragged_size="26dp" + app:scrubber_enabled_size="24dp" + app:unplayed_color="@color/videoProgress" /> + android:id="@id/exo_duration" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginEnd="20dp" + android:includeFontPadding="false" + android:minWidth="50dp" + android:paddingLeft="4dp" + android:paddingRight="4dp" + android:textColor="@android:color/white" + android:textSize="14sp" + android:textStyle="normal" + tools:text="23:20" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center"> + android:layout_width="wrap_content" + android:layout_height="60dp" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="10dp" + android:paddingBottom="10dp"> + app:iconSize="30dp" /> + android:id="@+id/player_lock_holder" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:orientation="horizontal"> + android:nextFocusRight="@id/player_speed_btt" + android:text="@string/video_aspect_ratio_resize" + app:icon="@drawable/ic_baseline_aspect_ratio_24" /> + android:nextFocusRight="@id/player_subtitle_offset_btt" + app:icon="@drawable/ic_baseline_speed_24" + tools:text="Speed" /> + android:visibility="gone" + app:icon="@drawable/ic_outline_subtitles_24" + tools:visibility="visible" /> - android:nextFocusRight="@id/player_skip_op" - android:text="@string/video_source" - app:icon="@drawable/ic_baseline_playlist_play_24" /> + android:nextFocusLeft="@id/player_sources_btt" + android:nextFocusRight="@id/player_skip_op" + android:text="@string/tracks" + app:icon="@drawable/ic_baseline_playlist_play_24" /> + android:nextFocusRight="@id/player_skip_episode" + android:text="@string/video_skip_op" + app:icon="@drawable/ic_baseline_fast_forward_24" /> + + @@ -532,66 +544,66 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layoutDirection="ltr" + android:orientation="horizontal"> + android:id="@+id/player_progressbar_left_holder" + android:layout_width="100dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:gravity="start" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toLeftOf="@+id/centerMenuView" + app:layout_constraintTop_toTopOf="parent" + tools:alpha="1" + tools:visibility="visible"> + android:id="@+id/player_progressbar_left_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_marginBottom="220dp" + android:src="@drawable/ic_baseline_volume_up_24" + app:tint="@android:color/white" + tools:ignore="ContentDescription"> + android:id="@+id/player_progressbar_left" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="4dp" + android:layout_height="150dp" + android:layout_centerInParent="true" + android:layout_gravity="end|center_vertical" + android:layout_marginStart="40dp" + android:indeterminate="false" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/progress_drawable_vertical" + tools:progress="30" /> + android:id="@+id/player_progressbar_right_holder" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:gravity="right" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toRightOf="@+id/centerMenuView" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:alpha="1" + tools:ignore="RtlHardcoded" + tools:visibility="visible"> + android:id="@+id/player_progressbar_right" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="4dp" + android:layout_height="150dp" + android:layout_centerInParent="true" + android:layout_gravity="end|center_vertical" + android:layout_marginEnd="40dp" + android:indeterminate="false" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/progress_drawable_vertical" /> - + + + + + + + --> diff --git a/app/src/main/res/layout/player_custom_layout_tv.xml b/app/src/main/res/layout/player_custom_layout_tv.xml index 1abfafed..405b606f 100644 --- a/app/src/main/res/layout/player_custom_layout_tv.xml +++ b/app/src/main/res/layout/player_custom_layout_tv.xml @@ -1,24 +1,24 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/player_holder" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:screenOrientation="landscape" + android:tag="television" + tools:orientation="vertical"> + android:id="@+id/subtitle_holder" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:id="@+id/shadow_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/player_gradient_tv" /> + android:id="@+id/player_video_holder" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="16dp"> + + + android:layout_height="wrap_content" + android:layout_marginStart="80dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="32dp" + android:gravity="end" + android:textColor="@color/white" + android:textSize="16sp" + android:textStyle="bold" + tools:text="Hello world" /> - - + android:id="@+id/player_video_title_rez" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="80dp" + android:layout_marginTop="40dp" + android:layout_marginEnd="32dp" + android:gravity="end" + android:textColor="@color/white" + android:textSize="16sp" + tools:text="1920x1080" /> + android:id="@+id/player_go_back_holder" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="5dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_width="30dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:contentDescription="@string/go_back_img_des" + android:src="@drawable/ic_baseline_arrow_back_24" + app:tint="@android:color/white" /> + android:id="@+id/player_go_back" + android:layout_width="70dp" + android:layout_height="70dp" + android:layout_gravity="center" + android:background="@drawable/video_tap_button_always_white" + android:clickable="true" + android:contentDescription="@string/go_back_img_des" + android:focusable="true" /> + android:indeterminate="true" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginBottom="20dp" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="4dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + android:id="@id/exo_prev" + style="@style/ExoMediaButton.Previous" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_repeat_toggle" + style="@style/ExoMediaButton" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_next" + style="@style/ExoMediaButton.Next" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_vr" + style="@style/ExoMediaButton.VR" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_play" + android:layout_width="0dp" + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@id/exo_pause" + android:layout_width="0dp" + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + android:id="@+id/bottom_player_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="64dp" + android:layout_marginEnd="64dp" + android:layout_marginBottom="10dp" + android:gravity="center_vertical" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + android:id="@+id/player_video_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layoutDirection="ltr" + android:orientation="horizontal"> + android:src="@drawable/netflix_pause" + app:tint="@color/player_button_tv" + tools:ignore="ContentDescription" /> + android:id="@id/exo_position" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="end" + android:includeFontPadding="false" + android:minWidth="50dp" + android:paddingLeft="4dp" + android:paddingRight="4dp" + android:textColor="@android:color/white" + android:textSize="14sp" + android:textStyle="normal" + tools:text="15:30" /> + android:id="@id/exo_progress" + android:layout_width="0dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:layout_weight="1" + android:focusable="false" + android:focusableInTouchMode="false" + app:bar_height="2dp" + app:played_color="?attr/colorPrimary" + app:scrubber_color="?attr/colorPrimary" + app:scrubber_dragged_size="26dp" + app:scrubber_enabled_size="24dp" + app:unplayed_color="@color/videoProgress" /> + android:id="@id/exo_duration" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginEnd="20dp" + android:includeFontPadding="false" + android:minWidth="50dp" + android:paddingLeft="4dp" + android:paddingRight="4dp" + android:textColor="@android:color/white" + android:textSize="14sp" + android:textStyle="normal" + tools:text="23:20" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center"> + android:id="@+id/player_lock_holder" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:orientation="horizontal"> + android:id="@+id/player_resize_btt" + style="@style/VideoButtonTV" + android:nextFocusLeft="@id/player_lock" + android:nextFocusRight="@id/player_speed_btt" + android:nextFocusUp="@id/player_pause_play" + android:text="@string/video_aspect_ratio_resize" + app:icon="@drawable/ic_baseline_aspect_ratio_24" /> + android:id="@+id/player_speed_btt" + style="@style/VideoButtonTV" + android:nextFocusLeft="@id/player_resize_btt" + android:nextFocusRight="@id/player_subtitle_offset_btt" + android:nextFocusUp="@id/player_pause_play" + app:icon="@drawable/ic_baseline_speed_24" + tools:text="Speed" /> + android:visibility="gone" + app:icon="@drawable/ic_outline_subtitles_24" + tools:visibility="visible" /> + android:id="@+id/player_sources_btt" + style="@style/VideoButtonTV" + android:nextFocusLeft="@id/player_subtitle_offset_btt" + android:nextFocusRight="@id/player_tracks_btt" + android:nextFocusUp="@id/player_pause_play" + android:text="@string/video_source" + app:icon="@drawable/ic_baseline_playlist_play_24" /> + android:id="@+id/player_tracks_btt" + style="@style/VideoButtonTV" + android:nextFocusLeft="@id/player_sources_btt" + android:nextFocusRight="@id/player_skip_op" + android:nextFocusUp="@id/player_pause_play" + android:text="@string/tracks" + app:icon="@drawable/ic_baseline_playlist_play_24" /> - android:nextFocusLeft="@id/player_skip_op" - android:nextFocusRight="@id/player_lock" - android:nextFocusUp="@id/player_pause_play" - android:text="@string/next_episode" - app:icon="@drawable/ic_baseline_skip_next_24" /> + diff --git a/app/src/main/res/layout/player_select_tracks.xml b/app/src/main/res/layout/player_select_tracks.xml new file mode 100644 index 00000000..d32e1b4e --- /dev/null +++ b/app/src/main/res/layout/player_select_tracks.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fea0fe83..d0c1d83a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -609,5 +609,8 @@ Download all plugins from this repository? %s (Disabled) + Tracks + Audio tracks + Video tracks Apply on Restart From 93b176e3cdc0428c2c5e5ce24c0ef3587abfa1c7 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Thu, 1 Sep 2022 14:13:54 +0200 Subject: [PATCH 028/888] add safe mode that disabled extensions on crash --- .../lagradost/cloudstream3/AcraApplication.kt | 35 ++++++++++++ .../lagradost/cloudstream3/MainActivity.kt | 54 ++++++++++++++----- .../cloudstream3/plugins/PluginManager.kt | 5 ++ app/src/main/res/values/strings.xml | 4 ++ 4 files changed, 85 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 49044e06..85f031b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -4,11 +4,13 @@ import android.app.Activity import android.app.Application import android.content.Context import android.content.ContextWrapper +import android.content.Intent import android.widget.Toast import androidx.fragment.app.Fragment import com.google.auto.service.AutoService import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall +import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.utils.AppUtils.openBrowser import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.DataStore.getKey @@ -17,6 +19,7 @@ import com.lagradost.cloudstream3.utils.DataStore.removeKey import com.lagradost.cloudstream3.utils.DataStore.removeKeys import com.lagradost.cloudstream3.utils.DataStore.setKey import kotlinx.coroutines.runBlocking +import org.acra.ACRA import org.acra.ReportField import org.acra.config.CoreConfiguration import org.acra.data.CrashReportData @@ -24,8 +27,14 @@ import org.acra.data.StringFormat import org.acra.ktx.initAcra import org.acra.sender.ReportSender import org.acra.sender.ReportSenderFactory +import java.io.File +import java.io.FileNotFoundException +import java.io.PrintStream +import java.lang.Exception import java.lang.ref.WeakReference import kotlin.concurrent.thread +import kotlin.system.exitProcess + class CustomReportSender : ReportSender { // Sends all your crashes to google forms @@ -65,7 +74,33 @@ class CustomSenderFactory : ReportSenderFactory { } } +class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)): Thread.UncaughtExceptionHandler { + override fun uncaughtException(thread: Thread, error: Throwable) { + ACRA.errorReporter.handleException(error) + try { + PrintStream(errorFile).use { ps -> + ps.println(String.format("Currently loading extension: ${PluginManager.currentlyLoading ?: "none"}")) + ps.println(String.format("Fatal exception on thread %s (%d)", thread.name, thread.id)) + error.printStackTrace(ps) + } + } catch (ignored: FileNotFoundException) { } + try { + onError.invoke() + } catch (ignored: Exception) { } + exitProcess(1) + } + +} + class AcraApplication : Application() { + override fun onCreate() { + super.onCreate() + Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")){ + val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) + startActivity(Intent.makeRestartActivityTask(intent!!.component)) + }) + } + override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) context = base diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 3cf5de18..6c9fadd8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -10,7 +10,9 @@ import android.view.KeyEvent import android.view.Menu import android.view.MenuItem import android.view.WindowManager +import android.widget.Toast import androidx.annotation.IdRes +import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import androidx.navigation.NavController @@ -88,6 +90,7 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import java.io.File import java.net.URI +import java.nio.charset.Charset import kotlin.reflect.KClass @@ -455,6 +458,13 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + + val errorFile = filesDir.resolve("last_error") + var lastError: String? = null + if (errorFile.exists() && errorFile.isFile) { + lastError = errorFile.readText(Charset.defaultCharset()) + errorFile.delete() + } val settingsForProvider = SettingsJson() settingsForProvider.enableAdult = settingsManager.getBoolean(getString(R.string.enable_nsfw_on_providers_key), false) @@ -482,26 +492,44 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { changeStatusBarState(isEmulatorSettings()) - ioSafe { - getKey(USER_SELECTED_HOMEPAGE_API)?.let { homeApi -> - mainPluginsLoadedEvent.invoke(loadSinglePlugin(this@MainActivity, homeApi)) - } ?: run { - mainPluginsLoadedEvent.invoke(false) - } - + if (lastError == null) { ioSafe { - if (settingsManager.getBoolean(getString(R.string.auto_update_plugins_key), true)) { - PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) - } else { - PluginManager.loadAllOnlinePlugins(this@MainActivity) + getKey(USER_SELECTED_HOMEPAGE_API)?.let { homeApi -> + mainPluginsLoadedEvent.invoke(loadSinglePlugin(this@MainActivity, homeApi)) + } ?: run { + mainPluginsLoadedEvent.invoke(false) + } + + ioSafe { + if (settingsManager.getBoolean(getString(R.string.auto_update_plugins_key), true)) { + PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) + } else { + PluginManager.loadAllOnlinePlugins(this@MainActivity) + } + } + + ioSafe { + PluginManager.loadAllLocalPlugins(this@MainActivity) } } + } else { + val builder: AlertDialog.Builder = AlertDialog.Builder(this) + builder.setTitle(R.string.safe_mode_title) + builder.setMessage(R.string.safe_mode_description) + builder.apply { + setPositiveButton(R.string.safe_mode_crash_info) { _, _ -> + val tbBuilder: AlertDialog.Builder = AlertDialog.Builder(context) + tbBuilder.setTitle(R.string.safe_mode_title) + tbBuilder.setMessage(lastError) + tbBuilder.show() + } - ioSafe { - PluginManager.loadAllLocalPlugins(this@MainActivity) + setNegativeButton("Ok") { _, _ -> } } + builder.show() } + // ioSafe { // val plugins = // RepositoryParser.getRepoPlugins("https://raw.githubusercontent.com/recloudstream/TestPlugin/master/repo.json") diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 9f283b08..b1fc69e7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -127,6 +127,8 @@ object PluginManager { private val LOCAL_PLUGINS_PATH = Environment.getExternalStorageDirectory().absolutePath + "/Cloudstream3/plugins" + public var currentlyLoading: String? = null + // Maps filepath to plugin val plugins: MutableMap = LinkedHashMap() @@ -283,6 +285,7 @@ object PluginManager { private suspend fun loadPlugin(activity: Activity, file: File, data: PluginData): Boolean { val fileName = file.nameWithoutExtension val filePath = file.absolutePath + currentlyLoading = fileName Log.i(TAG, "Loading plugin: $data") return try { @@ -341,6 +344,7 @@ object PluginManager { } pluginInstance.load(activity) Log.i(TAG, "Loaded plugin ${data.internalName} successfully") + currentlyLoading = null true } catch (e: Throwable) { Log.e(TAG, "Failed to load $file: ${Log.getStackTraceString(e)}") @@ -349,6 +353,7 @@ object PluginManager { activity.getString(R.string.plugin_load_fail).format(fileName), Toast.LENGTH_LONG ) + currentlyLoading = null false } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d0c1d83a..9b09f519 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -613,4 +613,8 @@ Audio tracks Video tracks Apply on Restart + + Safe Mode enabled + An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble. + View crash info From cdf0047bfdc899545b2330339fd0d2cc9ab05c79 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Thu, 1 Sep 2022 14:26:37 +0200 Subject: [PATCH 029/888] update pl and de translations --- app/src/main/res/values-de/strings-de.xml | 11 +++++++++-- app/src/main/res/values-nl/strings.xml | 2 -- app/src/main/res/values-pl/strings.xml | 11 +++++++++++ app/src/main/res/values-tr/strings.xml | 2 -- app/src/main/res/values/strings.xml | 2 -- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index 435ac9a0..4ed1ea72 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -458,8 +458,6 @@ Videos in diesen Sprachen ansehen Vorherige Einrichtung überspringen - - Hallo leeres Fragment Aussehen der App passend zu dem des Geräts ändern Absturzmeldung Was möchtest du anschauen? @@ -491,4 +489,13 @@ Alle Plugins aus diesem Repository herunterladen? %s (Deaktiviert) + Abgesicherter Modus aktiviert + Ein nicht behebbarer Absturz ist aufgetreten, und wir haben automatisch alle Erweiterungen deaktiviert, damit du die Erweiterung finden und entfernen kannst, die das Problem verursacht. + Absturzinfo ansehen + Bei Neustart anwenden + Audiospuren + Videospuren + Spuren + Aktivieren der NSFW auf unterstützten Anbietern + Anbieter diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c51dbcbb..ca970d31 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -459,8 +459,6 @@ Bekijk video\'s in deze talen Vorige Instelling overslaan - - Hallo leeg fragment Pas het uiterlijk van de app aan uw apparaat aan Crashrapportage Wat wil je zien? diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 83b87a20..ae5b6d14 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -435,4 +435,15 @@ Pobrać wszystkie rozszerzenia z tego repozytorium? %s (Wyłączone) Ukryj wybraną jakość wideo w wynikach wyszukiwania + Włącz NSFW u obsługiwanych dostawców + Dostawcy + Tryb bezpieczny włączony + Wystąpiła nieoczekiwana awaria i automatycznie wyłączyliśmy wszystkie rozszerzenia, abyś mógł znaleźć i usunąć rozszerzenie, które powoduje problemy. + Wyświetl informacje o awarii + Ścieżki audio + Ścieżki wideo + Ścieżki + Zastosuj po ponownym uruchomieniu + Rozpocznij następny odcinek po zakończeniu bieżącego + Autoodtwarzanie następnego odcinka diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1e76adc9..14db2f6b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -472,8 +472,6 @@ Videoları bu dillerde izle Geri Kurulumu atla - - Merhaba boş parça Cihazınıza uygun görünümü seçin Çökme raporları Ne izlemek istiyorsunuz? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9b09f519..11c90d58 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -576,8 +576,6 @@ Watch videos in these languages Previous Skip setup - - Hello blank fragment Change the look of the app to suit your device Crash reporting What do you want to see From ec9a39814bb148ed6e2a530781a0e5820cf88d57 Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Fri, 2 Sep 2022 23:19:20 +0700 Subject: [PATCH 030/888] [extractor] simple added Vidgomunime (#79) --- .../java/com/lagradost/cloudstream3/extractors/StreamSB.kt | 4 ++++ .../java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 5 insertions(+) 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 8cd68587..a933c484 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -7,6 +7,10 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Vidgomunime : StreamSB() { + override var mainUrl = "https://vidgomunime.xyz" +} + class Sbthe : StreamSB() { override var mainUrl = "https://sbthe.com" } 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 d3a59a2e..7da3d637 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -235,6 +235,7 @@ val extractorApis: MutableList = arrayListOf( Streamhub2(), Ssbstream(), Sbthe(), + Vidgomunime(), Fastream(), From a946127eb126418188b892d91c3dc0472d241b4b Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 2 Sep 2022 23:33:58 +0200 Subject: [PATCH 031/888] Dismiss dialog when clicking public repos --- .../cloudstream3/ui/settings/extensions/ExtensionsFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 267dda60..8480c94d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -203,6 +203,7 @@ class ExtensionsFragment : Fragment() { dialog.list_repositories?.setOnClickListener { // Open webview on tv if browser fails openBrowser(PUBLIC_REPOSITORIES_LIST, isTvSettings(), this) + dialog.dismissSafe() } // dialog.text2?.text = provider.name From 9df4f8be4a452533c0b0c378f074f5534375049f Mon Sep 17 00:00:00 2001 From: tuan041 <30403510+tuan041@users.noreply.github.com> Date: Sat, 3 Sep 2022 14:33:15 +0700 Subject: [PATCH 032/888] Update vietnamese translation (#81) * Update vietnamese translation Update vietnamese translation * Update strings.xml --- app/src/main/res/values-vi/strings.xml | 117 ++++++++++++++++++------- 1 file changed, 84 insertions(+), 33 deletions(-) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 61c9a779..4f6fb7b8 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -23,11 +23,12 @@ Tốc độ (%.2fx) Đánh giá: %.1f - Đã tìm thấy bản cập nhật mới!\n%s -> %s + Đã có bản cập nhật mới!\n%s -> %s Bộ lọc %d phút CloudStream + Mở với CloudStream Trang Chủ Tìm Kiếm Tải Về @@ -54,7 +55,8 @@ Xem lại Xem Ngay - Xem Bằng Torrent + Phát trực tiếp + Xem Torrent Nguồn Phim Phụ đề Thử kết nối lại… @@ -70,7 +72,7 @@ Tải lỗi Đã hủy Tải thành công - Stream + Trực tiếp Đã có lỗi xảy ra Bộ nhớ máy @@ -154,14 +156,21 @@ Bạn có thể vuốt trái hoặc phải để tua nhanh khi xem phim Vuốt để chỉnh độ sáng và âm lượng Vuốt từ dưới lên trên ở bên trái hoặc phải đều điều chỉnh độ sáng và âm lượng + + Tự động phát tập tiếp theo + Phát tập tiếp theo sau khi hết tập hiện tại + Nhấn 2 lần để tua Nhấn 2 lần để tạm dừng Thời lượng tua Nhấn 2 lần vào bên trái hoặc bên phải màn hình để tua trước hoặc sau + Nhấn vào giữa để tạm dừng Sử dụng độ sáng hệ thống Sử dụng độ sáng hệ thống trong trình phát ứng dụng + + Cập nhật tiến trình xem Tự động đồng bộ tiến trình hiện tại của bạn @@ -186,7 +195,9 @@ Hiển thị tập phụ cho anime Hiển thị trailer Hiển thị poster từ kitsu + Ẩn chất lượng Video khi tìm kiếm + Tự động cập nhật plugin Hiển thị thông báo cập nhật App Tự động tìm kiếm và thông báo khi có bản cập nhật mới Cập nhật phiên bản Beta @@ -207,13 +218,18 @@ Làm mới toàn bộ cài đặt Rất tiếc! Ứng dụng đã xảy ra lỗi. Chúng tôi đang tìm hiểu nguyên nhân và khắc phục nó + + Mùa + %s %d Không có mùa nào Tập Tập + %d-%d + %d %s M T - Không có dữ liệu + Không có tập nào Xóa Tệp Xóa @@ -221,9 +237,10 @@ Tiếp Tục -30 +30 - Điều này sẽ xóa %s\nBạn có chắc chắn muốn xóa? + %s sẽ bị xoá vĩnh viễn\nBạn có chắc chắn muốn xóa? %dm\ncòn lại + Đang Chiếu Hoàn Thành Trạng Thái @@ -238,7 +255,7 @@ Mặc Định Còn trống - Đã Sử dụng + Đã dùng App @@ -250,6 +267,9 @@ Torrent Phim Tài Liệu Truyền Hình Châu Á + Trực tiếp + NSFW + Khác Phim Lẻ @@ -260,6 +280,9 @@ Torrent Phim Tài Liệu Truyền Hình Châu Á + Trực tiếp + NSFW + Video Lỗi nguồn phim Lỗi kết nối tới máy chủ @@ -285,7 +308,7 @@ Thay đổi giao diện trên poster Bạn đang dùng phiên bản mới nhất - Kiểm tra cập nhật phiển bản mới + Kiểm tra cập nhật Khóa Thu Phóng @@ -325,29 +348,16 @@ Phóng to Disclaimer - Any legal issues regarding the content on this application - should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. - In case of copyright infringement, please directly contact the responsible parties or the streaming websites. - - The app is purely for educational and personal use. - - CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. - CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or - manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, - user-friendly interface. - - It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the - responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use - CloudStream 3 at your own risk. - Tổng quan Nút ngẫu nhiên Hiện nút ngẫu nhiên trên trang chủ Ngôn ngữ nguồn phim Giao diện App Thể loại ưu tiên + Kích hoạt NSFW với nguồn phim hỗ trợ Mã hoá phụ đề + Nguồn phim Giao diện Tự động @@ -360,6 +370,7 @@ Vị trí tiêu đề Đặt tiêu đề dưới poster + Mật khẩu Tài khoản @@ -369,14 +380,6 @@ example.com Mã ngôn ngữ (vi) - %s %s tài khoản Đăng xuất @@ -407,9 +410,10 @@ Chỉnh phụ đề 1000ms Độ trễ phụ đề - Dùng nếu phụ đề hiện sớm %dms - Dùng nếu phụ đề hiện trễ %dms + Dùng nếu phụ đề bị nhanh %dms + Dùng nếu phụ đề bị trễ %dms Không chỉnh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/repository_item.xml b/app/src/main/res/layout/repository_item.xml index e5872347..e45220b0 100644 --- a/app/src/main/res/layout/repository_item.xml +++ b/app/src/main/res/layout/repository_item.xml @@ -73,6 +73,17 @@ android:visibility="gone" tools:visibility="visible" /> + + diff --git a/app/src/main/res/layout/repository_item_tv.xml b/app/src/main/res/layout/repository_item_tv.xml index aa6346fa..d1445f4c 100644 --- a/app/src/main/res/layout/repository_item_tv.xml +++ b/app/src/main/res/layout/repository_item_tv.xml @@ -73,6 +73,17 @@ android:visibility="gone" tools:visibility="visible" /> + + + Light + + Down + + Ok + Slow + Beta + + @string/automatic diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11c90d58..d0af69e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -615,4 +615,12 @@ Safe Mode enabled An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble. View crash info + + Votes: %s + Description + Version + Status + Size + Authors + Supported From 37c9be96bb7552b7a890f1a742d2482e1a48ff80 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Mon, 5 Sep 2022 18:47:59 +0200 Subject: [PATCH 039/888] update polish --- app/src/main/res/values-pl/array.xml | 20 ++++++++------------ app/src/main/res/values-pl/strings.xml | 7 +++++++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-pl/array.xml b/app/src/main/res/values-pl/array.xml index a9f98ee0..a251a41b 100644 --- a/app/src/main/res/values-pl/array.xml +++ b/app/src/main/res/values-pl/array.xml @@ -29,18 +29,14 @@ 4 - - Wszystko - Filmy i TV - Anime - Dokumentalne - - - 0 - 1 - 2 - 3 - + + Nie działa + + Ok + Wolny + Beta + + @string/resolution_and_title diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index ae5b6d14..811d390c 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -446,4 +446,11 @@ Zastosuj po ponownym uruchomieniu Rozpocznij następny odcinek po zakończeniu bieżącego Autoodtwarzanie następnego odcinka + Głosy: %s + Opis + Versja + Status + Rozmiar + Autorzy + Wspierane From 8172696d1a1f194795b9140eeaf9dc0d443c46f3 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Mon, 5 Sep 2022 19:09:27 +0200 Subject: [PATCH 040/888] update votes to sha256 and add github link --- .../cloudstream3/plugins/VotingApi.kt | 32 +++++++++---------- .../ui/settings/extensions/PluginAdapter.kt | 14 +++++--- .../extensions/PluginDetailsFragment.kt | 8 +++++ .../res/layout/fragment_plugin_details.xml | 9 ++++++ 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index d167ac07..0a7057e5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -20,47 +20,45 @@ object VotingApi { // please do not cheat the votes lol private fun transformUrl(url: String): String = // dont touch or all votes get reset MessageDigest - .getInstance("SHA-1") + .getInstance("SHA-256") .digest("${url}#funny-salt".toByteArray()) .fold("") { str, it -> str + "%02x".format(it) } suspend fun SitePlugin.getVotes(): Int { - if (repositoryUrl == null) return 0 - return getVotes(repositoryUrl, url) + return getVotes(url) } suspend fun SitePlugin.vote(requestType: VoteType): Int { - if (repositoryUrl == null) return 0 - return vote(repositoryUrl, url, requestType) + return vote(url, requestType) } fun SitePlugin.getVoteType(): VoteType { if (repositoryUrl == null) return VoteType.NONE - return getVoteType(repositoryUrl, url) + return getVoteType(url) } - suspend fun getVotes(repositoryUrl: String, pluginUrl: String): Int { - val url = "${apiDomain}/get/cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}" + suspend fun getVotes(pluginUrl: String): Int { + val url = "${apiDomain}/get/cs3-votes/${transformUrl(pluginUrl)}" Log.d(LOGKEY, "Requesting: $url") return app.get(url).parsedSafe()?.value ?: (0.also { ioSafe { - createBucket(repositoryUrl, pluginUrl) + createBucket(pluginUrl) } }) } - fun getVoteType(repositoryUrl: String, pluginUrl: String): VoteType { - return getKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}") ?: VoteType.NONE + fun getVoteType(pluginUrl: String): VoteType { + return getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE } - private suspend fun createBucket(repositoryUrl: String, pluginUrl: String) { - val url = "${apiDomain}/create?namespace=cs3-votes-${transformUrl(repositoryUrl)}&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0" + private suspend fun createBucket(pluginUrl: String) { + val url = "${apiDomain}/create?namespace=cs3-votes&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0" Log.d(LOGKEY, "Requesting: $url") app.get(url) } - suspend fun vote(repositoryUrl: String, pluginUrl: String, requestType: VoteType): Int { - val savedType: VoteType = getKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}") ?: VoteType.NONE + suspend fun vote(pluginUrl: String, requestType: VoteType): Int { + val savedType: VoteType = getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE var newType: VoteType = requestType var changeValue = 0 if (requestType == savedType) { @@ -71,11 +69,11 @@ object VotingApi { // please do not cheat the votes lol } else if (savedType != requestType) { changeValue = -savedType.value + requestType.value } - val url = "${apiDomain}/update/cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}?amount=${changeValue}" + val url = "${apiDomain}/update/cs3-votes/${transformUrl(pluginUrl)}?amount=${changeValue}" Log.d(LOGKEY, "Requesting: $url") val res = app.get(url).parsedSafe()?.value if (res != null) { - setKey("cs3-votes-${transformUrl(repositoryUrl)}/${transformUrl(pluginUrl)}", newType) + setKey("cs3-votes/${transformUrl(pluginUrl)}", newType) } return res ?: 0 } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 244e37a7..7d8cbcea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -135,7 +135,7 @@ class PluginAdapter( val metadata = data.plugin.second val disabled = metadata.status == PROVIDER_STATUS_DOWN val alpha = if (disabled) 0.6f else 1f - val isLocal = data.plugin.second.repositoryUrl == null + val isLocal = !data.plugin.second.url.startsWith("http") itemView.main_text?.alpha = alpha itemView.sub_text?.alpha = alpha @@ -216,12 +216,18 @@ class PluginAdapter( itemView.lang_icon.text = fromTwoLettersToLanguage(metadata.language) } - ioSafe { - metadata.getVotes().main { - itemView.ext_votes?.setText(txt(R.string.votes_format, prettyCount(it))) + if (isLocal) { + itemView.ext_votes?.isVisible = false + } else { + itemView.ext_votes?.isVisible = true + ioSafe { + metadata.getVotes().main { + itemView.ext_votes?.setText(txt(R.string.votes_format, prettyCount(it))) + } } } + if (metadata.fileSize != null) { itemView.ext_filesize?.isVisible = true itemView.ext_filesize?.text = formatShortFileSize(itemView.context, metadata.fileSize) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt index 6afb283b..60cfa8d7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt @@ -18,6 +18,7 @@ import com.lagradost.cloudstream3.plugins.VotingApi.vote import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() { @@ -68,6 +69,13 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen plugin_status?.text = resources.getStringArray(R.array.extension_statuses)[metadata.status] plugin_types?.text = if ((metadata.tvTypes == null) || metadata.tvTypes.isEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString(", ") + github_btn.setOnClickListener { + if (metadata.repositoryUrl != null) { + openBrowser(metadata.repositoryUrl) + } + + } + upvote.setOnClickListener { ioSafe { metadata.vote(VotingApi.VoteType.UPVOTE).main { diff --git a/app/src/main/res/layout/fragment_plugin_details.xml b/app/src/main/res/layout/fragment_plugin_details.xml index 400e1adf..feca832a 100644 --- a/app/src/main/res/layout/fragment_plugin_details.xml +++ b/app/src/main/res/layout/fragment_plugin_details.xml @@ -34,6 +34,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" + android:layout_weight="1" android:gravity="center_vertical" android:paddingStart="10dp" android:paddingEnd="10dp" @@ -41,6 +42,14 @@ android:textSize="20sp" android:textStyle="normal" tools:text="Hello world" /> + + Date: Mon, 5 Sep 2022 20:45:56 +0200 Subject: [PATCH 041/888] Add isM3u8 to raw stream button --- .../ui/download/DownloadFragment.kt | 27 ++++- .../cloudstream3/ui/player/LinkGenerator.kt | 7 +- app/src/main/res/layout/stream_input.xml | 108 ++++++++++-------- app/src/main/res/values/strings.xml | 1 + 4 files changed, 90 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 3335e023..b2286c99 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -38,6 +38,9 @@ import com.lagradost.cloudstream3.utils.VideoDownloadManager import kotlinx.android.synthetic.main.fragment_downloads.* import kotlinx.android.synthetic.main.stream_input.* import android.text.format.Formatter.formatShortFileSize +import androidx.core.widget.doOnTextChanged +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import java.net.URI const val DOWNLOAD_NAVIGATE_TO = "downloadpage" @@ -183,10 +186,29 @@ class DownloadFragment : Fragment() { dialog.show() + // If user has clicked the switch do not interfere + var preventAutoSwitching = false + dialog.hls_switch?.setOnClickListener { + preventAutoSwitching = true + } + + fun activateSwitchOnHls(text: String?) { + dialog.hls_switch?.isChecked = normalSafeApiCall { + URI(text).path?.substringAfterLast(".")?.contains("m3u") + } == true + } + + dialog.stream_referer?.doOnTextChanged { text, _, _, _ -> + if (!preventAutoSwitching) + activateSwitchOnHls(text?.toString()) + } + (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager?)?.primaryClip?.getItemAt( 0 )?.text?.toString()?.let { copy -> - dialog.stream_url?.setText(copy) + val fixedText = copy.trim() + dialog.stream_url?.setText(fixedText) + activateSwitchOnHls(fixedText) } dialog.apply_btt?.setOnClickListener { @@ -202,7 +224,8 @@ class DownloadFragment : Fragment() { LinkGenerator( listOf(url), extract = true, - referer = referer + referer = referer, + isM3u8 = dialog.hls_switch?.isChecked ) ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index f56fcb51..2c8a5372 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -1,12 +1,15 @@ package com.lagradost.cloudstream3.ui.player import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.* +import java.net.URI class LinkGenerator( private val links: List, private val extract: Boolean = true, private val referer: String? = null, + private val isM3u8: Boolean? = null ) : IGenerator { override val hasCache = false @@ -57,7 +60,9 @@ class LinkGenerator( link, unshortenLinkSafe(link), // unshorten because it might be a raw link referer ?: "", - Qualities.Unknown.value, link.contains(".m3u") // TODO USE REAL PARSER + Qualities.Unknown.value, isM3u8 ?: normalSafeApiCall { + URI(link).path?.substringAfterLast(".")?.contains("m3u") + } ?: false ) to null ) } diff --git a/app/src/main/res/layout/stream_input.xml b/app/src/main/res/layout/stream_input.xml index ef6a35b8..20a91b4a 100644 --- a/app/src/main/res/layout/stream_input.xml +++ b/app/src/main/res/layout/stream_input.xml @@ -1,73 +1,81 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> + android:id="@+id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_rowWeight="1" + android:layout_marginTop="20dp" + android:layout_marginBottom="10dp" + android:text="@string/stream" + android:textColor="?attr/textColor" + android:textSize="20sp" + android:textStyle="bold" /> + android:id="@+id/stream_url" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="20" + android:hint="@string/network_adress_example" + android:inputType="textUri" + tools:ignore="LabelFor" /> + android:id="@+id/stream_referer" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="20" + android:hint="@string/referer" + android:inputType="textUri" + tools:ignore="LabelFor" /> + + + android:layout_width="match_parent" + android:layout_height="60dp" + android:layout_gravity="bottom" + android:gravity="bottom|end" + android:orientation="horizontal"> + android:id="@+id/apply_btt" + style="@style/WhiteButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:text="@string/home_play" + android:visibility="visible"> + android:id="@+id/cancel_btt" + style="@style/BlackButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:text="@string/sort_cancel" /> \ 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 11c90d58..06212052 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -615,4 +615,5 @@ Safe Mode enabled An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble. View crash info + HLS Playlist From e1758e6346a9a792ea62ddd99289305b944a751e Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 6 Sep 2022 17:50:41 +0200 Subject: [PATCH 042/888] Possible fix for audio track decoding on some devices --- .../com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 7 ++----- .../cloudstream3/ui/player/GeneratorPlayer.kt | 10 ++++++---- 2 files changed, 8 insertions(+), 9 deletions(-) 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 b25279b9..7cbde29d 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 @@ -427,7 +427,7 @@ class CS3IPlayer : IPlayer { /** * Setting this variable is permanent across app sessions. **/ - private var preferredAudioTrackLanguage: String? = null + var preferredAudioTrackLanguage: String? = null get() { return field ?: getKey(PREFERRED_AUDIO_LANGUAGE_KEY, field)?.also { field = it @@ -559,10 +559,7 @@ class CS3IPlayer : IPlayer { // This will not force higher quality videos to fail // but will make the m3u8 pick the correct preferred .setMaxVideoSize(Int.MAX_VALUE, maxVideoHeight ?: Int.MAX_VALUE) - .setPreferredAudioLanguage(preferredAudioTrackLanguage) - - // This would also clear preferred audio -// .clearSelectionOverrides() + .setPreferredAudioLanguage(null) .build() return trackSelector } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 05b599de..e74132bc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -18,11 +18,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager -import com.google.android.exoplayer2.C.TRACK_TYPE_AUDIO -import com.google.android.exoplayer2.C.TRACK_TYPE_VIDEO -import com.google.android.exoplayer2.Format import com.google.android.exoplayer2.Format.NO_VALUE -import com.google.android.exoplayer2.TracksInfo import com.google.android.exoplayer2.util.MimeTypes import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.* @@ -34,6 +30,7 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.subtitleProviders +import com.lagradost.cloudstream3.ui.player.CS3IPlayer.Companion.preferredAudioTrackLanguage import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.updateForcedEncoding import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSubtitleMimeType import com.lagradost.cloudstream3.ui.result.ResultEpisode @@ -119,6 +116,11 @@ class GeneratorPlayer : FullScreenPlayer() { override fun onTracksInfoChanged() { val tracks = player.getVideoTracks() player_tracks_btt?.isVisible = tracks.allVideoTracks.size > 1 || tracks.allAudioTracks.size > 1 + // Only set the preferred language if it is available. + // Otherwise it may give some users audio track init failed! + if (tracks.allAudioTracks.any { it.language == preferredAudioTrackLanguage }){ + player.setPreferredAudioTrack(preferredAudioTrackLanguage) + } } private fun noSubtitles(): Boolean { From 8c6c4939d2c414d36adf546028f340a8c41da8dd Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 6 Sep 2022 21:31:44 +0200 Subject: [PATCH 043/888] address requests --- .../ui/settings/extensions/PluginAdapter.kt | 9 +++--- .../extensions/PluginDetailsFragment.kt | 7 +++++ .../res/layout/fragment_plugin_details.xml | 30 +++++++++++++++++++ app/src/main/res/layout/repository_item.xml | 2 +- app/src/main/res/values-pl/strings.xml | 21 ++++++------- app/src/main/res/values/strings.xml | 3 +- 6 files changed, 56 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 7d8cbcea..48b7207f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.GlideApp import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage +import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx import kotlinx.android.synthetic.main.repository_item.view.* @@ -212,17 +213,17 @@ class PluginAdapter( itemView.lang_icon?.isVisible = false } else { itemView.lang_icon?.isVisible = true - //itemView.lang_icon.text = getFlagFromIso(metadata.language) - itemView.lang_icon.text = fromTwoLettersToLanguage(metadata.language) + itemView.lang_icon.text = "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" } if (isLocal) { itemView.ext_votes?.isVisible = false } else { - itemView.ext_votes?.isVisible = true + itemView.ext_votes?.isVisible = false ioSafe { metadata.getVotes().main { - itemView.ext_votes?.setText(txt(R.string.votes_format, prettyCount(it))) + itemView.ext_votes?.setText(txt(R.string.extension_rating, prettyCount(it))) + itemView.ext_votes?.isVisible = true } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt index 60cfa8d7..1f5c7a0d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt @@ -19,6 +19,9 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser +import com.lagradost.cloudstream3.utils.SubtitleHelper +import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage +import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() { @@ -68,6 +71,10 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen plugin_author?.text = if (metadata.authors.isEmpty()) getString(R.string.no_data) else metadata.authors.joinToString(", ") plugin_status?.text = resources.getStringArray(R.array.extension_statuses)[metadata.status] plugin_types?.text = if ((metadata.tvTypes == null) || metadata.tvTypes.isEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString(", ") + plugin_lang?.text = if (metadata.language == null) + getString(R.string.no_data) + else + "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" github_btn.setOnClickListener { if (metadata.repositoryUrl != null) { diff --git a/app/src/main/res/layout/fragment_plugin_details.xml b/app/src/main/res/layout/fragment_plugin_details.xml index feca832a..7b91fe2d 100644 --- a/app/src/main/res/layout/fragment_plugin_details.xml +++ b/app/src/main/res/layout/fragment_plugin_details.xml @@ -233,6 +233,36 @@ tools:text="Lolem ipsum kek" /> + + + + + + + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 811d390c..55789920 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -408,23 +408,23 @@ Adres url repozytorium Rozszerzenie załadowane Rozszerzenie usunięte - Błąd ładowania %s + Błąd ładowania %s +18 - Zaczęto pobieranie %d %s - Pobrano %d %s - Wszystkie %s już pobrane + Zaczęto pobieranie %d %s + Pobrano %d %s + Wszystkie %s już pobrane Pobierz wszystko rozszerzenie rozszerzenia Ta akcja usunie także wszystkie rozszerzenia z repozytorium Usuń repozytorium Pobierz strony które Cię interesują - Pobrano: %d - Wyłączono: %d - Nie pobrano: %d + Pobrano: %d + Wyłączono: %d + Nie pobrano: %d Dodaj repozytorium aby zainstalować rozszerzenia Ocenione - %d na 10 + %d na 10 Inne Wideo Zobacz repozytoria społeczności @@ -433,7 +433,7 @@ Filtrowanie wg preferowanego języka mediów Wszystkie napisy wielką literą Pobrać wszystkie rozszerzenia z tego repozytorium? - %s (Wyłączone) + %s (Wyłączone) Ukryj wybraną jakość wideo w wynikach wyszukiwania Włącz NSFW u obsługiwanych dostawców Dostawcy @@ -446,11 +446,12 @@ Zastosuj po ponownym uruchomieniu Rozpocznij następny odcinek po zakończeniu bieżącego Autoodtwarzanie następnego odcinka - Głosy: %s + Ocena: %s Opis Versja Status Rozmiar Autorzy Wspierane + Język diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d0af69e1..83654c98 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -616,11 +616,12 @@ An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble. View crash info - Votes: %s + Rating: %s Description Version Status Size Authors Supported + Language From 8c34994a7e716132147d958ac208ce88ef32e39d Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 6 Sep 2022 21:35:08 +0200 Subject: [PATCH 044/888] forgor to update tv one --- app/src/main/res/layout/repository_item_tv.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/repository_item_tv.xml b/app/src/main/res/layout/repository_item_tv.xml index d1445f4c..881fce63 100644 --- a/app/src/main/res/layout/repository_item_tv.xml +++ b/app/src/main/res/layout/repository_item_tv.xml @@ -79,7 +79,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginEnd="5dp" - android:text="Votes: 0" + tools:text="Rating: 0" android:textColor="?attr/grayTextColor" android:visibility="gone" tools:visibility="visible" /> @@ -132,4 +132,4 @@ android:padding="12dp" tools:src="@drawable/ic_baseline_add_24" /> - \ No newline at end of file + From d799a2127780a3666d93f080ad7020b71cd5e832 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Wed, 7 Sep 2022 00:40:31 +0200 Subject: [PATCH 045/888] Add voting cache to lessen spam --- .../java/com/lagradost/cloudstream3/plugins/VotingApi.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index 0a7057e5..7b9dc8c7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -37,10 +37,15 @@ object VotingApi { // please do not cheat the votes lol return getVoteType(url) } + // Plugin url to Int + private val votesCache = mutableMapOf() + suspend fun getVotes(pluginUrl: String): Int { val url = "${apiDomain}/get/cs3-votes/${transformUrl(pluginUrl)}" Log.d(LOGKEY, "Requesting: $url") - return app.get(url).parsedSafe()?.value ?: (0.also { + return votesCache[pluginUrl] ?: app.get(url).parsedSafe()?.value?.also { + votesCache[pluginUrl] = it + } ?: (0.also { ioSafe { createBucket(pluginUrl) } @@ -74,6 +79,7 @@ object VotingApi { // please do not cheat the votes lol val res = app.get(url).parsedSafe()?.value if (res != null) { setKey("cs3-votes/${transformUrl(pluginUrl)}", newType) + votesCache[pluginUrl] = res } return res ?: 0 } From 1db1baef19c8a5a63582e583ec9634bb7b656369 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Wed, 7 Sep 2022 01:23:53 +0200 Subject: [PATCH 046/888] bump --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b1cb3a6b..ed641a0a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,8 +35,8 @@ android { minSdkVersion 21 targetSdkVersion 30 - versionCode 50 - versionName "3.1.4" + versionCode 51 + versionName "3.1.5" resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}" @@ -194,7 +194,7 @@ dependencies { //implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' // newpipe yt - implementation 'com.github.recloudstream:NewPipeExtractor:0.22.1' + implementation 'com.github.recloudstream:NewPipeExtractor:master-SNAPSHOT' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' // Library/extensions searching with Levenshtein distance From 73748ee55fd42d7a39b39045045ba7388f70d69f Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 7 Sep 2022 08:33:04 +0200 Subject: [PATCH 047/888] [skip ci] make prerelease a prerelease --- .github/workflows/prerelease.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 71301e25..903878ed 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -55,7 +55,7 @@ jobs: with: repo_token: "${{ secrets.GITHUB_TOKEN }}" automatic_release_tag: "pre-release" - prerelease: false + prerelease: true title: "Pre-release Build" files: | app/build/outputs/apk/prerelease/*.apk From aa2023509ab269e0136e3892e01ac77e9f750194 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 7 Sep 2022 15:38:21 +0200 Subject: [PATCH 048/888] [skip ci] create crowdin.yml --- crowdin.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..2cc75108 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,5 @@ +files: + - source: /app/src/main/res/values/strings.xml + translation: /app/src/main/res/values-%android_code%/strings.xml + - source: /app/src/main/res/values/array.xml + translation: /app/src/main/res/values-%android_code%/array.xml From 6a7c4a232415818ae2813768fe4407a25569d0fd Mon Sep 17 00:00:00 2001 From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com> Date: Thu, 8 Sep 2022 20:44:09 +0800 Subject: [PATCH 049/888] Update Chinese Translation (#91) * Add files via upload * Add files via upload * Update strings.xml * Update strings.xml * Update strings.xml * Add files via upload --- app/src/main/res/values-zh/strings.xml | 294 +++++++++++++++++++++---- 1 file changed, 249 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4a4a85be..61960fde 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,8 +1,22 @@ - %s 共%d集 - 演员:%s + %d %s | %s + %s • %s + %s / %s + %s %s + +%d + -%d + %d + %d + %.1f/10.0 + %d + %s 共 %d 集 + 演员: %s + 第 %d 集将发布于 + %dd %dh %dm + %dh %dm + %dm 海报 @@ -10,27 +24,33 @@ 剧集海报 主海报 随机下一个 + @string/play_episode 返回 + @string/home_change_provider_img_des 更改内容提供者 预览背景 - 速度(%.2fx) - 评分:%.1f + 速度 (%.2fx) + 评分: %.1f 发现新版本!\n%s -> %s 填充 - %d分钟 + %d 分钟 CloudStream + 使用 CloudStream 播放 主页 搜索 下载 设置 搜索… + 搜索 %s… + 无数据 更多选项 下一集 + @string/synopsis 类型 分享 在浏览器中打开 @@ -46,13 +66,14 @@ 重新观看 播放电影 - 串流Torrent + 播放直播 + 播放种子 来源 字幕 重试连接… 返回 播放剧集 - + 下载 已下载 @@ -62,6 +83,8 @@ 下载失败 下载取消 下载完毕 + %s - %s + 流媒体 加载链接时出错 内部存储 @@ -85,6 +108,11 @@ 设置观看状态 应用 取消 + 复制 + 关闭 + 清除 + 保存 + 播放速度 字幕设置 @@ -100,20 +128,22 @@ 按内容提供者搜索 按类型搜索 - 送给开发者%d根香蕉 + 送给开发者 %d 根香蕉 不送香蕉 自动选择语言 下载语言 + 字幕语言 按住重置为默认值 + 将字体置于 %s 导入 继续观看 移除 更多信息 @string/home_play - 此内容提供者可能需要VPN才能正常工作 - 此内容提供者是一个Torrent,建议使用VPN + 此内容提供者可能需要 VPN 才能正常工作 + 此内容提供者是一个种子 ,建议使用 VPN 站点不提供元数据,如果站点上不存在元数据,视频加载将失败。 @@ -121,6 +151,8 @@ 没有找到简介 没有找到简介 + 显示日志 + 画中画 在其他应用之上的迷你播放器中继续播放 播放器画面调整按钮 @@ -136,31 +168,48 @@ 向屏幕左侧或右侧滑动来控制播放进度 滑动更改设置 在屏幕左侧或右侧滑动来更改亮度或音量 + + 自动播放下一集 + 当前一集结束时开始下一集 + 双击控制进度 双击暂停 + 播放器快进或快退时间 在屏幕左侧或右侧双击来快进或快退 双击屏幕中间暂停 使用系统亮度 - 在app player中使用系统亮度,而不是黑色遮罩 + 在应用播放器中使用系统亮度,而不是黑色遮罩 + overlay + 更新观看进度 + 自动同步当前剧集进度 + 从备份中恢复数据 备份数据 已加载备份文件 - 无法从文件%s中还原数据 + 无法从文件 %s 中还原数据 成功存储数据 缺少存储权限,请重试 - 备份%s时出错 + 备份 %s 时出错 搜索 + 账户 + 更新和备份 + 信息 高级搜索 给出按内容提供者分隔的搜索结果 只发送关于崩溃的数据 不发送数据 为动画显示下一集 + 显示预告片 + 显示来自 Kitsu 的海报 + 在搜索结果中隐藏选中视频质量 + + 自动更新插件 显示应用更新 启动时自动搜索更新 更新至预览版 @@ -168,36 +217,40 @@ Github 由同一开发者开发的轻小说应用 由同一开发者开发的动漫应用 - 加入Discord + 加入 Discord 送给开发者一根香蕉 送香蕉 应用语言 - 该内容提供者不支持投屏 - 没有找到链接 + 此内容提供者不支持投屏 + 未找到链接 链接已复制到剪贴板 播放剧集 重置为默认值 - 抱歉,应用崩溃了,将向开发人员发送一份匿名Bug报告 + 抱歉,应用崩溃了,将向开发人员发送一份匿名错误报告 - 没有季 + %s %d + 无季 + %d-%d + %d %s S E - 没有找到剧集 + 未找到剧集 删除文件 删除 + @string/sort_cancel 暂停 继续 -30 +30 - 这将永久删除%s\n你确定吗? - 剩余%d分钟\n + 这将永久删除 %s\n确定吗? + 剩余 %dm 分钟\n 连载中 @@ -222,20 +275,28 @@ 剧集 卡通 动漫 - Torrents + 种子 纪录片 - OVA + 原创影像动画 + 亚洲剧 + 直播 + 工作场所不宜 + 视频 电影 剧集 卡通 - @string/anime - @string/ova - Torrent + 动漫 + 原创影像动画 + 种子 纪录片 + 亚洲剧 + 直播 + 工作场所不宜 + 视频 - 源错误 + 来源错误 远程错误 渲染器错误 意外的播放器错误 @@ -243,38 +304,59 @@ 投屏剧集 投屏镜像 - 在应用程序中播放 - 在VLC中播放 + 在应用中播放 + 在 VLC 中播放 在浏览器中播放 复制链接 自动下载 下载镜像 - 重新加载链接 + 重新加载镜像 + 下载字幕 - 找不到更新 + 质量标签 + 配音标签 + 字幕标签 + 标题 + show_hd_key + show_dub_key + show_sub_key + show_title_key + 开关海报上的 UI 元素 + + 未找到更新 检查更新 锁定 调整画面 来源 - 跳过OP + 跳过片头曲 不再显示 + 跳过此更新 更新 首选播放质量 + 视频播放器标题最大字符数 + 视频播放器分辨率 + 视频缓冲大小 视频缓冲时长 磁盘上的视频缓存 清除视频和图像缓存 - 如果设置太高,可能会在内存较低的系统(如Android TV设备或旧手机)上导致问题 - 如果将存储空间设置得太高,可能会导致Android TV设备等存储空间不足的系统出现问题 + 如果设置太高,可能会在内存较低的系统(如 Android TV 设备或旧手机)上导致问题 + 如果将存储空间设置得太高,可能会导致 Android TV 设备等存储空间不足的系统出现问题 DNS over HTTPS - 用于忽略ISP块 + 用于绕过 ISP 的封锁 + + 克隆网站 + 移除网站 + 添加现有站点具有不同的URL的克隆 下载路径 + Nginx 服务器 URL + 显示有配音/字幕的动画 适应屏幕 @@ -282,6 +364,7 @@ 缩放 免责声明 + legal_notice_key Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. @@ -299,9 +382,15 @@ CloudStream 3 at your own risk. 全局 + 随机按钮 + 在主页中显示随机按钮 内容提供者语言 应用布局 首选媒体 + 在支持的内容提供者中开启工作场所不宜内容 + 字幕编码 + 内容提供者 + 布局 自动 电视布局 @@ -310,8 +399,23 @@ 主题色 应用主题 + 海报标题位置 + 将标题置于海报下方 + + anilist_key + mal_key + opensubtitles_key + nginx_key + 密码 + 用户名 + 邮箱 + IP + 网站名称 + 网站 URL + 语言代码 (zh) + @@ -336,32 +447,125 @@ 全部 最大 最小 + @string/none 轮廓 - 降低 + 凹陷 阴影 - 提高 + 凸出 同步字幕 1000ms 字幕延迟 - 如果字幕过早显示%dms,请使用此选项 - 如果字幕过晚显示%dms,请使用此选项 + 如果字幕过早显示 %dms,请使用此选项 + 如果字幕过晚显示 %dms,请使用此选项 无字幕延迟 - 一只敏捷的棕色狐狸跳过一只懒惰的狗 + The quick brown fox jumps over the lazy dog 推荐 - 已加载%s + 已加载 %s 从文件加载 + 从互联网加载 下载的文件 主演 配演 群演 来源 + 随机 + + 即将到来… + + Cam + Cam + Cam + HQ + HD + TS + TC + BlueRay + WP + DVD + 4K + SD + UHD + HDR + SDR + Web + + 海报图像 + 播放器 + 分辨率和标题 + 标题 + 分辨率 + 无效 ID + 无效数据 + 无效 URL + 错误 + 从字幕中移除隐藏式字幕 + 从字幕中移除广告 + 按首选媒体语言过滤 + 附加 + 预告片 + 流媒体链接 + Referer + Next + 观看此些语言的视频 + 上一个 + 跳过设置向导 + 更改应用程序的外观以适合您的设备 + 崩溃报告 + 想要看什么 + 完成 + 扩展 + 添加仓库 + 仓库名称 + 仓库 URL + 插件已加载 + 插件已删除 + 加载 %s 失败 + 18+ + 开始下载 %d %s + 下载 %d %s 成功 + 全部 %s 已经下载 + 批量下载 + 插件 + 插件 + 这也将删除所有仓库的插件 + 删除仓库 + 下载需用的网站列表 + 已下载: %d + 已禁用: %d + 未下载: %d + 添加仓库以安装网站扩展 + 查看社区仓库 + 公开列表 + 字幕全大写 + + 从此仓库下载所有插件? + %s (禁用) + 轨道 + 音频轨道 + 视频轨道 + 重启后生效 + + 已启动安全模式 + 发生了不可恢复的崩溃,已自动禁用所有扩展,因此可以找到并删除导致问题的扩展。 + 查看崩溃信息 + + 评分: %s + 简介 + 版本 + 状态 + 大小 + 作者 + 支持 + 语言 + + HLS 播放列表 From e620d7b3d7a9f62900a24d20c7c157a2c5e95cd0 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 8 Sep 2022 17:35:56 +0200 Subject: [PATCH 050/888] Add more keybindings for player actions --- .../com/lagradost/cloudstream3/CommonActivity.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index e56b3bd9..49143498 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -283,7 +283,7 @@ object CommonActivity { KeyEvent.KEYCODE_MEDIA_PLAY, KeyEvent.KEYCODE_BUTTON_START -> { PlayerEventType.Play } - KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_NUMPAD_7 -> { + KeyEvent.KEYCODE_L, KeyEvent.KEYCODE_NUMPAD_7, KeyEvent.KEYCODE_7 -> { PlayerEventType.Lock } KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_MENU -> { @@ -292,20 +292,20 @@ object CommonActivity { KeyEvent.KEYCODE_M, KeyEvent.KEYCODE_VOLUME_MUTE -> { PlayerEventType.ToggleMute } - KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_NUMPAD_9 -> { + KeyEvent.KEYCODE_S, KeyEvent.KEYCODE_NUMPAD_9, KeyEvent.KEYCODE_9 -> { PlayerEventType.ShowMirrors } // OpenSubtitles shortcut - KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_NUMPAD_8 -> { + KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_NUMPAD_8, KeyEvent.KEYCODE_8 -> { PlayerEventType.SearchSubtitlesOnline } - KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_NUMPAD_3 -> { + KeyEvent.KEYCODE_E, KeyEvent.KEYCODE_NUMPAD_3, KeyEvent.KEYCODE_3 -> { PlayerEventType.ShowSpeed } - KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_NUMPAD_0 -> { + KeyEvent.KEYCODE_R, KeyEvent.KEYCODE_NUMPAD_0, KeyEvent.KEYCODE_0 -> { PlayerEventType.Resize } - KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_NUMPAD_4 -> { + KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_NUMPAD_4, KeyEvent.KEYCODE_4 -> { PlayerEventType.SkipOp } KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_P, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_NUMPAD_ENTER, KeyEvent.KEYCODE_ENTER -> { // space is not captured due to navigation From 009d2f99611e1073d9aa2e4f2ff9e48c1978bce3 Mon Sep 17 00:00:00 2001 From: Alessio I Date: Thu, 8 Sep 2022 23:07:17 +0200 Subject: [PATCH 051/888] Updated italian translation (#90) * Updated italian translation --- app/src/main/res/values-it/strings.xml | 51 +++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b990a7f6..db72b31d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -440,5 +440,54 @@ Trailer Link allo stream - + + + Referer + Prossimo + Guarda video in queste lingue + Precedente + Salta configurazione + Cambia l\'aspetto dell\'app per adattarla al proprio dispositivo + Segnala crash + Cosa vuoi vedere + Fatto + Estensioni + Aggiungi repository + Nome repository + Url repository + Plugin caricato + Plugin eliminato + Caricamento non riuscito %s + 18+ + Download iniziato %d %s + Download %d %s completato + Tutti %s già scaricati + Download in blocco + plugin + plugins + Questo cancellerà anche tutti i plugin del repository + Cancella repository + Scarica la lista dei siti che vuoi usare + Scaricato: %d + Disabilitato: %d + Non scaricato: %d + Aggiungi una repository per installare l\'estensione dei siti + Vedi le repository della community + Lista pubblica + Tutti i sottotitoli in maiuscolo + + Scaricare tutti i plugin da questa repository? + %s (Disabilitato) + Tracks + Traccia audio + Traccia video + Applica al riavvio + + Safe Mode abilitata + Si è verificato un crash irrecuperabile e abbiamo disabilitato automaticamente tutte le estensioni, in modo che possiate trovare e rimuovere l\'estensione che causa il problema. + Vedi informazioni del crash + HLS Playlist + + From 5b67bde06ab8e105138935f3fee7fa3a62e68dea Mon Sep 17 00:00:00 2001 From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com> Date: Fri, 9 Sep 2022 19:12:40 +0800 Subject: [PATCH 052/888] Update Chinese translation (#96) --- app/src/main/res/values-zh/strings.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 61960fde..09411075 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -180,7 +180,6 @@ 双击屏幕中间暂停 使用系统亮度 在应用播放器中使用系统亮度,而不是黑色遮罩 - overlay 更新观看进度 @@ -351,13 +350,13 @@ 克隆网站 移除网站 - 添加现有站点具有不同的URL的克隆 + 添加现有站点具有不同的 URL 的克隆 下载路径 Nginx 服务器 URL - 显示有配音/字幕的动画 + 显示有配音或字幕的动画 适应屏幕 拉伸 @@ -434,7 +433,7 @@ 添加同步 已添加 %s 同步 - Rated + 评分 %d / 10 /?? /%d @@ -514,7 +513,7 @@ 预告片 流媒体链接 Referer - Next + 下一个 观看此些语言的视频 上一个 跳过设置向导 From 9383a2d176d5777890ce9b7c32305acdebdac116 Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Fri, 9 Sep 2022 18:13:25 +0700 Subject: [PATCH 053/888] removed "Provider" from extension name (#97) * remove "Provider" from extension name --- .../cloudstream3/ui/settings/extensions/PluginAdapter.kt | 5 +++-- .../ui/settings/extensions/PluginDetailsFragment.kt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 48b7207f..d2935358 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -135,6 +135,7 @@ class PluginAdapter( ) { val metadata = data.plugin.second val disabled = metadata.status == PROVIDER_STATUS_DOWN + val name = metadata.name.removeSuffix("Provider") val alpha = if (disabled) 0.6f else 1f val isLocal = !data.plugin.second.url.startsWith("http") itemView.main_text?.alpha = alpha @@ -177,7 +178,7 @@ class PluginAdapter( } catch (e: Throwable) { Log.e( "PluginAdapter", - "Failed to open ${metadata.name} settings: ${ + "Failed to open $name settings: ${ Log.getStackTraceString(e) }" ) @@ -235,7 +236,7 @@ class PluginAdapter( } else { itemView.ext_filesize?.isVisible = false } - itemView.main_text.setText(if(disabled) txt(R.string.single_plugin_disabled, metadata.name) else txt(metadata.name)) + itemView.main_text.setText(if(disabled) txt(R.string.single_plugin_disabled, name) else txt(name)) itemView.sub_text?.isGone = metadata.description.isNullOrBlank() itemView.sub_text?.text = metadata.description.html() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt index 1f5c7a0d..e3dc31d7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt @@ -64,7 +64,7 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen ) { plugin_icon?.setImageResource(R.drawable.ic_baseline_extension_24) } - plugin_name?.text = metadata.name + plugin_name?.text = metadata.name.removeSuffix("Provider") plugin_version?.text = metadata.version.toString() plugin_description?.text = metadata.description ?: getString(R.string.no_data) plugin_size?.text = if (metadata.fileSize == null) getString(R.string.no_data) else formatFileSize(context, metadata.fileSize) From 2db09e0c9a1ed2a9f5be388c4b9140e567a3219b Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sat, 10 Sep 2022 16:04:59 +0200 Subject: [PATCH 054/888] [skip ci] improve discord invite image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0035daf7..8593fe7b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ You can find the list of community-maintained extension repositories [here ](https://recloudstream.github.io/repos/) -[![Discord](https://img.shields.io/discord/737724143126052974?style=for-the-badge)](https://discord.gg/5Hus6fM) +[![Discord](https://invidget.switchblade.xyz/5Hus6fM)](https://discord.gg/5Hus6fM) ***Features:*** + **AdFree**, No ads whatsoever From 9431cde2f9bb6bc535386981a0b5a79d94ce3306 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sat, 10 Sep 2022 18:37:48 +0200 Subject: [PATCH 055/888] add DNS.WATCH and Quad9 closes #94 --- .../cloudstream3/network/DohProviders.kt | 22 ++++++++++++++++++- .../cloudstream3/network/RequestsHelper.kt | 2 ++ app/src/main/res/values-es/array.xml | 15 ------------- app/src/main/res/values-pl/array.xml | 15 ------------- app/src/main/res/values-tr/array.xml | 15 ------------- app/src/main/res/values-vi/array.xml | 15 ------------- app/src/main/res/values/array.xml | 4 ++++ 7 files changed, 27 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/DohProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/network/DohProviders.kt index 5372d0be..55e09251 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/DohProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/DohProviders.kt @@ -64,4 +64,24 @@ fun OkHttpClient.Builder.addAdGuardDns() = ( "94.140.14.140", "94.140.14.141", ) - )) \ No newline at end of file + )) + +fun OkHttpClient.Builder.addDNSWatchDns() = ( + addGenericDns( + "https://resolver2.dns.watch/dns-query", + // https://dns.watch/ + listOf( + "84.200.69.80", + "84.200.70.40", + ) + )) + +fun OkHttpClient.Builder.addQuad9Dns() = ( + addGenericDns( + "https://dns.quad9.net/dns-query", + // https://www.quad9.net/service/service-addresses-and-features + listOf( + "9.9.9.9", + "149.112.112.112", + ) + )) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt index 85e9d318..03ec6ae8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt @@ -36,6 +36,8 @@ fun Requests.initClient(context: Context): OkHttpClient { 2 -> addCloudFlareDns() // 3 -> addOpenDns() 4 -> addAdGuardDns() + 5 -> addDNSWatchDns() + 6 -> addQuad9Dns() } } // Needs to be build as otherwise the other builders will change this object diff --git a/app/src/main/res/values-es/array.xml b/app/src/main/res/values-es/array.xml index c040714c..658ba7ae 100644 --- a/app/src/main/res/values-es/array.xml +++ b/app/src/main/res/values-es/array.xml @@ -14,21 +14,6 @@ @id/cast_button_type_forward_30_seconds - - @string/none - Google - Cloudflare - - AdGuard - - - 0 - 1 - 2 - - 4 - - Todos Películas y TV diff --git a/app/src/main/res/values-pl/array.xml b/app/src/main/res/values-pl/array.xml index a251a41b..c40b7f87 100644 --- a/app/src/main/res/values-pl/array.xml +++ b/app/src/main/res/values-pl/array.xml @@ -14,21 +14,6 @@ @id/cast_button_type_forward_30_seconds - - @string/none - Google - Cloudflare - - AdGuard - - - 0 - 1 - 2 - - 4 - - Nie działa diff --git a/app/src/main/res/values-tr/array.xml b/app/src/main/res/values-tr/array.xml index 1ec2e27e..ec9acd0e 100644 --- a/app/src/main/res/values-tr/array.xml +++ b/app/src/main/res/values-tr/array.xml @@ -14,21 +14,6 @@ @id/cast_button_type_forward_30_seconds - - @string/none - Google - Cloudflare - - AdGuard - - - 0 - 1 - 2 - - 4 - - Hepsi Film ve Dizi diff --git a/app/src/main/res/values-vi/array.xml b/app/src/main/res/values-vi/array.xml index 197aac78..5e70223b 100644 --- a/app/src/main/res/values-vi/array.xml +++ b/app/src/main/res/values-vi/array.xml @@ -14,21 +14,6 @@ @id/cast_button_type_forward_30_seconds - - @string/none - Google - Cloudflare - - AdGuard - - - 0 - 1 - 2 - - 4 - - Tất cả Phim lẻ và Phim bộ diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index acfd1ee9..13d4f2dc 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -20,6 +20,8 @@ Cloudflare AdGuard + DNS.WATCH + Quad9 0 @@ -27,6 +29,8 @@ 2 4 + 5 + 6 From ce70cdd3d551c400d7e8dcca7538eeaa2d174437 Mon Sep 17 00:00:00 2001 From: Anarchydr <87636399+Anarchydr@users.noreply.github.com> Date: Sat, 10 Sep 2022 18:47:42 +0200 Subject: [PATCH 056/888] croatian language added (#95) --- README.md | 1 + .../ui/settings/SettingsGeneral.kt | 1 + app/src/main/res/values-hr/strings.xml | 548 ++++++++++++++++++ 3 files changed, 550 insertions(+) create mode 100644 app/src/main/res/values-hr/strings.xml diff --git a/README.md b/README.md index 8593fe7b..1c9ca358 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ You can find the list of community-maintained extension repositories [here ***The list of supported languages:*** * 🇱🇧 Arabic +* 🇭🇷 Croatian * 🇨🇿 Czech * 🇳🇱 Dutch * 🇬🇧 English 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 0ae7a258..57074e74 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 @@ -78,6 +78,7 @@ val appLanguages = arrayListOf( Triple("", "Chinese", "zh"), Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"), Triple("", "Czech", "cs"), + Triple("", "Croatian", "hr"), ).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top class SettingsGeneral : PreferenceFragmentCompat() { diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml new file mode 100644 index 00000000..6a204f47 --- /dev/null +++ b/app/src/main/res/values-hr/strings.xml @@ -0,0 +1,548 @@ + + + + %d %s | %s + %s • %s + %s / %s + %s %s + +%d + -%d + %d + %d + %.1f/10.0 + %d + %s Ep %d + Cast: %s + Epizoda %d će izaći + %dd %dh %dm + %dh %dm + %dm + + + Poster + @string/result_poster_img_des + Episode Poster + Main Poster + Next Random + Go back + Change Provider + Preview Background + + + Brzina (%.2fx) + Ocijenjeno: %.1f + Pronađeno novo ažuriranje!\n%s -> %s + Umetak + %d min + + CloudStream + Otvori s CloudStream-om + Početna stranica + Pretraži + Preuzimanja + Postavke + + Pretraži... + Pretraži %s… + + Nema podataka + Više postavki + Sljedeća epizoda + Žanrovi + Podijeli + Otvori u pregledniku + Preskoči učitavanje + Učitavanje... + + Gledam + Na čekanju + Dovršeno + Ispušteno + Planiram pogledati + Ništa + Ponovno gledam + + Pokreni Film + Pokreni LiveStream + Pokreni Torrent + Izvori + Titlovi + Ponovno pokušaj povezivanje… + Idi natrag + Pokreni Epizodu + + + Preuzmi + Preuzeto + Trenutno preuzimam + Preuzimanje pauzirano + Preuzimanje započeto + Preuzimanje nije uspjelo + Preuzimanje otkazano + Preuzimanje dovršeno + Stream + + Pogreška pri učitavanju veza + Unutarnja pohrana + + Dub + Sub + + Izbriši datoteku + Otvori datoteku + Nastavi preuzimanje + Pauziraj preuzimanje + + Onemogući automatsko izvješćivanje o bugovima + Više informacija + Sakrij + Pokreni + Informacije + Filtriraj oznake + Oznake + Makni + Postavi status gledanja + Primijeni + Poništi + Kopiraj + Zatvori + Očisti + Sačuvaj + + Brzina playera + + Postavke titlova + Boja teksta + Boja obruba + Pozadinska boja + Boja prozora + Tip ruba + Visina titlova + Font + Veličina fonta + + Pretraži s uslugama + Pretraži s tipovima + + %d banana dano developerima + Nisi dao ni jednu bananu + + Automatski odabir jezika + Preuzmi jezike + Jezik titlova + Držite za vraćanje na zadane postavke + Uvezi fontove tako da ih postavite u %s + Nastavi gledati + + Makni + Više informacija + @string/home_play + + Za ispravan rad ovog pružatelja usluga može biti potreban VPN + Ovaj pružatelj usluga je torrent, preporučuje se VPN + + Stranica ne daje metapodatke, učitavanje videozapisa neće uspjeti ako ne postoji na stranici. + + Opis + Plot nije pronađen + Opis nije pronađen + + Pokaži logmačku 🐈 + + Picture-in-picture + Nastavlja reprodukciju u minijaturnom playeru povrh drugih aplikacija + Gumb za promjenu veličine playera + Ukloni crne rubove + Titlovi + Postavke titlova playera + Chromecast Titlovi + Postavke Chromecast titlova + + Eigengravy način + Dodaje opciju brzine u playeru + Prijeđi prstom za traženje + Prijeđi prstom ulijevo ili udesno za kontrolu vremena u videoplayeru + Klizni za promjenu postavki + Prijeđi prstom ulijevo ili udesno za promjenu svjetline ili glasnoće + + Automatski započni sljedeću epizodu + Započne sljedeću epizodu kad trenutna završi + + Dodirni dvaput za traženje + Dodirni dvaput za pauziranje + Iznos traženja u playeru + Dvaput dodirni desnu ili lijevu stranu ekrana za pomicanje naprijed ili natrag + + Dodirni u sredini za pauziranje + Koristi svijetlinu u sustavu + Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog + preklopa + + + Ažuriraj napredak gledanja + Automatski sinkroniziraj svoj trenutni napredak u epizodi + + Vraćanje podataka iz sigurnosne kopije + + Sigurnosna kopija podataka + Učitana datoteka sigurnosne kopije + Vraćanje podataka iz datoteke nije uspjelo %s + Uspješno pohranjeni podaci + Nedostaju dozvole za pohranu, pokušaj ponovo + Pogreška pri sigurnosnom kopiranju %s + + Pretraži + Računi + Ažuriranja i sigurnosne kopije + + Informacije + Napredno pretraživanje + Daje rezultate pretraživanja odvojene prema pružatelju usluga + Šalje samo podatke o padovima aplikacije + Ne šalje podatke + Prikaži dodatnu epizodu za anime + Prikaži trailere + Prikaži postere iz kitsua + Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja + + Automatsko ažuriranje dodataka + Prikaži ažuriranja aplikacije + Automatski traži nova ažuriranja pri pokretanju aplikacije + Ažuriranje na predizdanja + Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja + Github + Aplikacija za romane od istih developera + Anime aplikacija od istih developera + Uđi u naš Discord + Daj bananu developerima + Dana banana + + Jezik aplikacije + + Ovaj pružatelj usluga nema podršku za Chromecast + Nisu pronađene veze + Veza je kopirana u međuspremnik + Pokreni epizodu + Vrati na zadanu vrijednost + Nažalost, aplikacija se srušila. Anonimno izvješće o bugu bit će poslano developerima + + + Sezona + %s %d + Nema sezone + Epizoda + Epizode + %d-%d + %d %s + S + E + Nisu pronađene epizode + + Izbriši datoteku + Izbriši + Pauziraj + Nastavi + -30 + +30 + Ovo će trajno izbrisati %s\nJeste li sigurni? + %dm\npreostalo + + + U tijeku + Završeno + Status + Godina + Ocjena + Trajanje + Stranica + Sinopsis + + u redu čekanja + Nema titlova + Zadano + + Slobodno + Iskorišteno + Aplikacija + + + Filmovi + TV Serije + Crtići + Anime + Torrenti + Dokumentarci + OVA + Azijske drame + Livestreamovi + NSFW + Ostali + + + Film + Serija + Crtić + @string/anime + @string/ova + Torrent + Dokumentarac + Azijska drama + Livestream + NSFW + Video + + Greška u izvoru + Pogreška remote-a + Pogreška renderera + Neočekivana pogreška playera + Pogreška preuzimanja, provjeri dozvole za pohranu + + Chromecast epizoda + Chromecast mirror + Pokreni u aplikaciji + Pokreni u VLC-u + Pokreni u pregledniku + Kopiraj poveznicu + Automatsko preuzimanje + Preuzmi zrcalo + Ponovno učitaj poveznice + Preuzmi titlove + + Oznaka kvalitete + Oznaka sinkronizacije + Oznaka titlova + Naslov + Uključi/isključi elemente korisničkog sučelja na posteru + + Nije pronađeno ažuriranje + Provjeri ažuriranja + + Zaključaj + Promijeni veličinu + Izvor + Preskoči OP + + Ne prikazuj više + Preskoči ovo ažuriranje + Ažuriraj + Preferirana kvaliteta streama + Maksimalni broj znakova u naslovu video playera + Rezolucija video playera + + Veličina video međuspremnika + Duljina video međuspremnika + Video predmemorija na disku + Očisti predmemoriju videa i slika + + Izazvat će nasumična rušenja ako se postavi previsoko. Nemojte mijenjati ako imate malu količinu RAM-a kao što je Android TV ili stari telefon + Može uzrokovati probleme na sustavima s malo prostora za pohranu kao što su Android TV uređaji ako postavite previsoko + + DNS preko HTTPS-a + Korisno za zaobilaženje blokada ISP-a + + Kloniraj web stranicu + Ukloni web stranicu + Dodajt klon postojeće web-lokacije s drugim url-om + + Put preuzimanja + + Nginx server url + + Prikaži sinkronizirani anime ili s titlovima + + Prilagodi zaslonu + Rastegni + Zoom + + Odricanje + Any legal issues regarding the content on this application + should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. + + In case of copyright infringement, please directly contact the responsible parties or the streaming websites. + + The app is purely for educational and personal use. + + CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. + CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or + manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, + user-friendly interface. + + It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the + responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use + CloudStream 3 at your own risk. + + Općenito + Random gumb + Prikaži random gumb na početnoj stranici + Jezici pružatelja usluga + Izgled aplikacije + Preferirani mediji + Omogući NSFW na podržanim pružateljima usluga + Kodiranje titlova + Pružatelji usluga + Izgled + + Auto + TV izgled + Izgled za telefone + Izgled za emulatore + + Primarna boja + Tema aplikacije + Mjesto naslova postera + Stavi naslov ispod postera + + + + lozinka123 + MojeCoolIme + bok@svijete.com + 127.0.0.1 + MojaCoolStranica + primjer.com + Šifra jezika (en) + + %s %s + račun + Odjava + Prijava + Promijeni račun + Dodaj račun + Napravi račun + Dodaj tracking + Dodano %s + Sinkroniziraj + Ocijenjeno + %d / 10 + /?? + /%d + Autentičnost %s + Provjera autentičnosti nije uspjela %s + + + Nijedan + Normal + Sve + Maksimalno + Minimalno + Obrub + Depresivno + Sjena + Podignuto + Sinkroniziraj titlove + 1000ms + Kašnjenje titlova + Koristi ovo ako su titlovi prikazani %dms prerano + Koristite ovo ako se titlovi prikazuju %dms prekasno + Nema kašnjenja titlova + + + The quick brown fox jumps over the lazy dog + + Preporučeno + Učitano %s + Učitaj iz datoteke + Učitaj sa interneta + Preuzeta datoteka + Glavno + Podupiranje + Pozadina + + Izvor + Random + + Dolazi uskoro… + + Cam + Cam + Cam + HQ + HD + TS + TC + BlueRay + WP + DVD + 4K + SD + UHD + HDR + SDR + Web + + Slika postera + Player + Rezolucija i naslov + Naslov + Rezolucija + Nevažeći ID + Nevažeći podaci + Nevažeći URL + Greška + Ukloni titlove iz titlova + Ukloni reklame iz titlova + Filtriraj po željenom jeziku medija + Extras + Trailer + Veza na stream + Upućivač + Sljedeće + Gledaj videozapise na ovim jezicima + Prethodno + Preskoči postavljanje + Promijeni izgled aplikacije kako bi odgovarao vašem uređaju + Izvještavanje o rušenju + Što želite vidjeti + Gotovo + Ekstenzije + Dodaj repository + Ime repositorya + URL Repositorija + Dodatak je učitan + Dodatak je izbrisan + Učitavanje nije uspjelo %s + 18+ + Započelo preuzimanje %d %s + Preuzeto %d %s uspješno + Sve %s je već preuzeto + Skupno preuzimanje + plugin + plugins + Ovo će također izbrisati sve dodatke spremišta + Izbriši repository + Preuzmi popis stranica koje želite koristiti + Preuzeto: %d + Onemogućeno: %d + Nije preuzeto: %d + Dodaj spremište za instaliranje ekstenzija web mjesta + Pregledajte repozitorije zajednice + Javni popis + Svi titlovi pisani velikim slovima + + Preuzeti sve dodatke iz ovog repozitorija? + %s (Onemogućeno) + Zapis + Audio zapis + Video zapis + Primijeni na restart + + Siguran način rada omogućen + Došlo je do nepopravljivog pada i automatski smo onemogućili sva proširenja, tako da možete pronaći i ukloniti proširenje koje uzrokuje probleme. + Pogledajte podatke o padu + + Ocjena: %s + Opis + Verzija + Status + Veličina + Autori + Podržano + Jezik + + HLS Playlista + From 74e3af0dbe209323afbab009c8bdd6e7d88fb92f Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sat, 10 Sep 2022 19:21:01 +0200 Subject: [PATCH 057/888] only allow voting on installed extensions --- .../cloudstream3/plugins/PluginManager.kt | 5 ++- .../cloudstream3/plugins/VotingApi.kt | 20 ++++++++++- .../ui/settings/extensions/PluginAdapter.kt | 7 ++-- .../extensions/PluginDetailsFragment.kt | 34 ++++++++++++++++++- .../res/layout/fragment_plugin_details.xml | 13 +++++++ app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 71 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index b1fc69e7..b5441b94 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -339,9 +339,7 @@ object PluginManager { } plugins[filePath] = pluginInstance classLoaders[loader] = pluginInstance - if (data.url != null) { // TODO: make this cleaner - urlPlugins[data.url] = pluginInstance - } + urlPlugins[data.url ?: filePath] = pluginInstance pluginInstance.load(activity) Log.i(TAG, "Loaded plugin ${data.internalName} successfully") currentlyLoading = null @@ -382,6 +380,7 @@ object PluginManager { classLoaders.values.removeIf { v -> v == plugin } plugins.remove(absolutePath) + urlPlugins.values.removeIf { v -> v == plugin } } /** diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index 7b9dc8c7..ab702d71 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -1,11 +1,15 @@ package com.lagradost.cloudstream3.plugins import android.util.Log +import android.widget.Toast +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 java.security.MessageDigest import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.Coroutines.main object VotingApi { // please do not cheat the votes lol private const val LOGKEY = "VotingApi" @@ -33,10 +37,13 @@ object VotingApi { // please do not cheat the votes lol } fun SitePlugin.getVoteType(): VoteType { - if (repositoryUrl == null) return VoteType.NONE return getVoteType(url) } + fun SitePlugin.canVote(): Boolean { + return canVote(this.url) + } + // Plugin url to Int private val votesCache = mutableMapOf() @@ -62,7 +69,18 @@ object VotingApi { // please do not cheat the votes lol app.get(url) } + fun canVote(pluginUrl: String): Boolean { + if (!PluginManager.urlPlugins.contains(pluginUrl)) return false + return true + } + suspend fun vote(pluginUrl: String, requestType: VoteType): Int { + if (!canVote(pluginUrl)) { + main { + Toast.makeText(context, R.string.extension_install_first, Toast.LENGTH_SHORT).show() + } + return getVotes(pluginUrl) + } val savedType: VoteType = getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE var newType: VoteType = requestType var changeValue = 0 diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index d2935358..0c3d481b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -183,7 +183,6 @@ class PluginAdapter( }" ) } - } } else { itemView.action_settings?.isVisible = false @@ -217,10 +216,8 @@ class PluginAdapter( itemView.lang_icon.text = "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" } - if (isLocal) { - itemView.ext_votes?.isVisible = false - } else { - itemView.ext_votes?.isVisible = false + itemView.ext_votes?.isVisible = false + if (!isLocal) { ioSafe { metadata.getVotes().main { itemView.ext_votes?.setText(txt(R.string.extension_rating, prettyCount(it))) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt index e3dc31d7..9729b4de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt @@ -11,6 +11,8 @@ import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx import kotlinx.android.synthetic.main.fragment_plugin_details.* import android.text.format.Formatter.formatFileSize +import android.util.Log +import androidx.core.view.isVisible import com.lagradost.cloudstream3.plugins.VotingApi import com.lagradost.cloudstream3.plugins.VotingApi.getVoteType import com.lagradost.cloudstream3.plugins.VotingApi.getVotes @@ -19,9 +21,11 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser -import com.lagradost.cloudstream3.utils.SubtitleHelper +import com.lagradost.cloudstream3.plugins.PluginManager +import com.lagradost.cloudstream3.plugins.VotingApi.canVote import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso +import kotlinx.android.synthetic.main.repository_item.view.* class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() { @@ -80,7 +84,35 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen if (metadata.repositoryUrl != null) { openBrowser(metadata.repositoryUrl) } + } + if (!metadata.canVote()) { + downvote.alpha = .6f + upvote.alpha = .6f + } + + if (data.isDownloaded) { + // On local plugins page the filepath is provided instead of url. + val plugin = PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] + if (plugin?.openSettings != null && context != null) { + action_settings?.isVisible = true + action_settings.setOnClickListener { + try { + plugin.openSettings!!.invoke(requireContext()) + } catch (e: Throwable) { + Log.e( + "PluginAdapter", + "Failed to open ${metadata.name} settings: ${ + Log.getStackTraceString(e) + }" + ) + } + } + } else { + action_settings?.isVisible = false + } + } else { + action_settings?.isVisible = false } upvote.setOnClickListener { diff --git a/app/src/main/res/layout/fragment_plugin_details.xml b/app/src/main/res/layout/fragment_plugin_details.xml index 7b91fe2d..35ab9216 100644 --- a/app/src/main/res/layout/fragment_plugin_details.xml +++ b/app/src/main/res/layout/fragment_plugin_details.xml @@ -43,11 +43,24 @@ android:textStyle="normal" tools:text="Hello world" /> + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 55789920..ea6eb140 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -454,4 +454,5 @@ Autorzy Wspierane Język + Najpierw zainstaluj rozszerzenie diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 30efa924..6510d1ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -624,6 +624,7 @@ Authors Supported Language + Install the extension first HLS Playlist From 11d3b576ba5b775870e052d3613d958ac8e904c8 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sat, 10 Sep 2022 19:33:30 +0200 Subject: [PATCH 058/888] add RepoApi.installRepo for the website --- .../com/lagradost/cloudstream3/ui/WebviewFragment.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index d773b3a2..cb4bbf37 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -4,10 +4,12 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.webkit.JavascriptInterface import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.network.WebViewResolver @@ -46,6 +48,7 @@ class WebviewFragment : Fragment() { return super.shouldOverrideUrlLoading(view, request) } } + web_view.addJavascriptInterface(RepoApi(activity), "RepoApi") web_view.settings.javaScriptEnabled = true web_view.settings.domStorageEnabled = true @@ -69,4 +72,11 @@ class WebviewFragment : Fragment() { putString(WEBVIEW_URL, webViewUrl) } } + + private class RepoApi(val activity: FragmentActivity?) { + @JavascriptInterface + fun installRepo(repoUrl: String) { + activity?.loadRepository(repoUrl) + } + } } \ No newline at end of file From 53965b13fb7fb6ed0a23af761317912dffd3accc Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 10 Sep 2022 19:59:37 +0200 Subject: [PATCH 059/888] Add internal support for subtitle headers + season names --- .../subtitles/AbstractSubtitleEntities.kt | 3 +- .../providers/IndexSubtitleApi.kt | 14 ++++--- .../cloudstream3/ui/player/CS3IPlayer.kt | 23 ++++++++--- .../ui/player/DownloadFileGenerator.kt | 3 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 6 ++- .../ui/player/PlayerSubtitleHelper.kt | 5 ++- .../ui/result/ResultViewModel2.kt | 40 ++++++++++++++----- app/src/main/res/values-de/strings-de.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh/strings.xml | 1 - app/src/main/res/values/strings.xml | 2 +- 13 files changed, 71 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt index e7e5b857..f6424c4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt @@ -13,7 +13,8 @@ class AbstractSubtitleEntities { var epNumber: Int? = null, var seasonNumber: Int? = null, var year: Int? = null, - var isHearingImpaired: Boolean = false + var isHearingImpaired: Boolean = false, + var headers: Map = emptyMap() ) data class SubtitleSearch( diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt index 0d62cbe4..5673e868 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt @@ -4,6 +4,7 @@ import android.util.Log import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.imdbUrlToIdNullable +import com.lagradost.cloudstream3.network.CloudflareKiller import com.lagradost.cloudstream3.subtitles.AbstractSubApi import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities import com.lagradost.cloudstream3.utils.SubtitleHelper @@ -19,6 +20,8 @@ class IndexSubtitleApi : AbstractSubApi { override fun logOut() {} + private val interceptor = CloudflareKiller() + companion object { const val host = "https://indexsubtitle.com" const val TAG = "INDEXSUBS" @@ -122,12 +125,13 @@ class IndexSubtitleApi : AbstractSubApi { type = if (seasonNum > 0) TvType.TvSeries else TvType.Movie, epNumber = epNum, seasonNumber = seasonNum, - year = yearNum + year = yearNum, + headers = interceptor.getCookieHeaders(link).toMap() ) ) } - val document = app.get("$host/?search=$queryText").document + val document = app.get("$host/?search=$queryText", interceptor = interceptor).document document.select("div.my-3.p-3 div.media").map { block -> if (seasonNum > 0) { @@ -159,7 +163,7 @@ class IndexSubtitleApi : AbstractSubApi { val urlItem = fixUrl( it.selectFirst("a")!!.attr("href") ) - val itemDoc = app.get(urlItem).document + val itemDoc = app.get(urlItem, interceptor = interceptor).document val id = imdbUrlToIdNullable( itemDoc.selectFirst("div.d-flex span.badge.badge-primary")?.parent() ?.attr("href") @@ -198,7 +202,7 @@ class IndexSubtitleApi : AbstractSubApi { val results = mutableListOf() urlItems.forEach { url -> - val request = app.get(url) + val request = app.get(url, interceptor = interceptor) if (request.isSuccessful) { request.document.select("div.my-3.p-3 div.media").map { block -> if (block.select("span.d-block span[data-original-title=Language]").text() @@ -231,7 +235,7 @@ class IndexSubtitleApi : AbstractSubApi { val seasonNum = data.seasonNumber val epNum = data.epNumber - val req = app.get(data.data) + val req = app.get(data.data, interceptor = interceptor) if (req.isSuccessful) { val document = req.document 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 7cbde29d..ea466120 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 @@ -20,6 +20,7 @@ import com.google.android.exoplayer2.ui.SubtitleView import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.upstream.DefaultHttpDataSource +import com.google.android.exoplayer2.upstream.HttpDataSource import com.google.android.exoplayer2.upstream.cache.CacheDataSource import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor import com.google.android.exoplayer2.upstream.cache.SimpleCache @@ -442,7 +443,14 @@ class CS3IPlayer : IPlayer { var requestSubtitleUpdate: (() -> Unit)? = null - private fun createOnlineSource(link: ExtractorLink): DataSource.Factory { + private fun createOnlineSource(headers: Map): HttpDataSource.Factory { + val source = OkHttpDataSource.Factory(app.baseClient).setUserAgent(USER_AGENT) + return source.apply { + setDefaultRequestProperties(headers) + } + } + + private fun createOnlineSource(link: ExtractorLink): HttpDataSource.Factory { val provider = getApiFromNameNull(link.source) val interceptor = provider?.getVideoInterceptor(link) @@ -813,7 +821,8 @@ class CS3IPlayer : IPlayer { // See setPreferredTextLanguage it.language!!, SubtitleOrigin.EMBEDDED_IN_VIDEO, - it.sampleMimeType ?: MimeTypes.APPLICATION_SUBRIP + it.sampleMimeType ?: MimeTypes.APPLICATION_SUBRIP, + emptyMap() ) } @@ -981,9 +990,10 @@ class CS3IPlayer : IPlayer { val mediaItem = getMediaItem(MimeTypes.VIDEO_MP4, data.uri) val offlineSourceFactory = context.createOfflineSource() + val onlineSourceFactory = createOnlineSource(emptyMap()) val (subSources, activeSubtitles) = getSubSources( - onlineSourceFactory = offlineSourceFactory, + onlineSourceFactory = onlineSourceFactory, offlineSourceFactory = offlineSourceFactory, subtitleHelper, ) @@ -997,7 +1007,7 @@ class CS3IPlayer : IPlayer { } private fun getSubSources( - onlineSourceFactory: DataSource.Factory?, + onlineSourceFactory: HttpDataSource.Factory?, offlineSourceFactory: DataSource.Factory?, subHelper: PlayerSubtitleHelper, ): Pair, List> { @@ -1021,7 +1031,10 @@ class CS3IPlayer : IPlayer { SubtitleOrigin.URL -> { if (onlineSourceFactory != null) { activeSubtitles.add(sub) - SingleSampleMediaSource.Factory(onlineSourceFactory) + SingleSampleMediaSource.Factory(onlineSourceFactory.apply { + if (sub.headers.isNotEmpty()) + this.setDefaultRequestProperties(sub.headers) + }) .createMediaSource(subConfig, C.TIME_UNSET) } else { null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index 63181d30..baf7ed52 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -84,7 +84,8 @@ class DownloadFileGenerator( realName.ifBlank { ctx.getString(R.string.default_subtitles) }, file.second.toString(), SubtitleOrigin.DOWNLOADED_FILE, - name.toSubtitleMimeType() + name.toSubtitleMimeType(), + emptyMap() ) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e74132bc..c69dc476 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -399,7 +399,8 @@ class GeneratorPlayer : FullScreenPlayer() { name = getName(currentSubtitle, true), url = url, origin = SubtitleOrigin.URL, - mimeType = url.toSubtitleMimeType() + mimeType = url.toSubtitleMimeType(), + headers = currentSubtitle.headers ) runOnMainThread { addAndSelectSubtitles(subtitle) @@ -483,7 +484,8 @@ class GeneratorPlayer : FullScreenPlayer() { name, uri.toString(), SubtitleOrigin.DOWNLOADED_FILE, - name.toSubtitleMimeType() + name.toSubtitleMimeType(), + emptyMap() ) addAndSelectSubtitles(subtitleData) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt index 142b73ab..b06812c4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt @@ -29,12 +29,14 @@ enum class SubtitleOrigin { /** * @param name To be displayed in the player * @param url Url for the subtitle, when EMBEDDED_IN_VIDEO this variable is used as the real backend language + * @param headers if empty it will use the base onlineDataSource headers else only the specified headers * */ data class SubtitleData( val name: String, val url: String, val origin: SubtitleOrigin, val mimeType: String, + val headers: Map ) class PlayerSubtitleHelper { @@ -71,7 +73,8 @@ class PlayerSubtitleHelper { name = subtitleFile.lang, url = subtitleFile.url, origin = SubtitleOrigin.URL, - mimeType = subtitleFile.url.toSubtitleMimeType() + mimeType = subtitleFile.url.toSubtitleMimeType(), + headers = emptyMap() ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index b7e36f21..02fe60ca 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -409,6 +409,11 @@ class ResultViewModel2 : ViewModel() { private const val EPISODE_RANGE_SIZE = 20 private const val EPISODE_RANGE_OVERLOAD = 30 + private fun List?.getSeason(season: Int?): SeasonData? { + if (season == null) return null + return this?.firstOrNull { it.season == season } + } + private fun filterName(name: String?): String? { if (name == null) return null Regex("[eE]pisode [0-9]*(.*)").find(name)?.groupValues?.get(1)?.let { @@ -1476,11 +1481,18 @@ class ResultViewModel2 : ViewModel() { if (isMovie || currentSeasons.size <= 1) null else when (indexer.season) { 0 -> txt(R.string.no_season) - else -> txt( - R.string.season_format, - txt(R.string.season), - indexer.season - ) //TODO FIX DISPLAYNAME + else -> { + val seasonNames = (currentResponse as? EpisodeResponse)?.seasonNames + val seasonData = + seasonNames.getSeason(indexer.season) + val suffix = seasonData?.name?.let { " $it" } ?: "" + txt( + R.string.season_format, + txt(R.string.season), + seasonData?.displaySeason ?: indexer.season, + suffix + ) + } } ) ) @@ -1578,6 +1590,7 @@ class ResultViewModel2 : ViewModel() { val id = mainId + episode + idIndex * 1000000 if (!existingEpisodes.contains(episode)) { existingEpisodes.add(id) + val seasonData = loadResponse.seasonNames.getSeason(i.season) val eps = buildResultEpisode( loadResponse.name, @@ -1585,7 +1598,7 @@ class ResultViewModel2 : ViewModel() { i.posterUrl, episode, null, - i.season, + seasonData?.displaySeason ?: i.season, i.data, loadResponse.apiName, id, @@ -1621,7 +1634,7 @@ class ResultViewModel2 : ViewModel() { existingEpisodes.add(id) val seasonIndex = episode.season?.minus(1) val currentSeason = - loadResponse.seasonNames?.getOrNull(seasonIndex ?: -1) + loadResponse.seasonNames.getSeason(episode.season) val ep = buildResultEpisode( @@ -1630,7 +1643,7 @@ class ResultViewModel2 : ViewModel() { episode.posterUrl, episodeIndex, seasonIndex, - currentSeason?.season ?: episode.season, + currentSeason?.displaySeason ?: episode.season, episode.data, loadResponse.apiName, id, @@ -1731,10 +1744,19 @@ class ResultViewModel2 : ViewModel() { _dubSubSelections.postValue(dubSelection.map { txt(it) to it }) if (loadResponse is EpisodeResponse) { _seasonSelections.postValue(seasonsSelection.map { seasonNumber -> + val seasonData = loadResponse.seasonNames.getSeason(seasonNumber) + val fixedSeasonNumber = seasonData?.displaySeason ?: seasonNumber + val suffix = seasonData?.name?.let { " $it" } ?: "" + val name = /*loadResponse.seasonNames?.firstOrNull { it.season == seasonNumber }?.name?.let { seasonData -> txt(seasonData) - } ?:*/txt(R.string.season_format, txt(R.string.season), seasonNumber) //TODO FIX + } ?:*/txt( + R.string.season_format, + txt(R.string.season), + fixedSeasonNumber, + suffix + ) name to seasonNumber }) } diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index 4ed1ea72..621080b5 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -210,7 +210,6 @@ Staffel - %s %d Keine Staffel Episode Episoden diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 6a204f47..bc2a7098 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -228,7 +228,6 @@ Sezona - %s %d Nema sezone Epizoda Epizode diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ca970d31..ae774f03 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -208,7 +208,6 @@ Sorry, de applicatie is gecrasht. Er wordt een anoniem bugrapport naar de ontwikkelaars gestuurd Seizoen - %s %d Geen seizoen Aflevering afleveringen diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 4f6fb7b8..302c13b5 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -221,7 +221,6 @@ Mùa - %s %d Không có mùa nào Tập Tập diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 09411075..d3ff6e1e 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -231,7 +231,6 @@ - %s %d 无季 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6510d1ce..8e6dadcf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -290,7 +290,7 @@ Season - %s %d + %s %d%s No Season Episode Episodes From dc6af1df43cf3bed57585afdd7c05f2e2c314d8d Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 11 Sep 2022 01:06:37 +0200 Subject: [PATCH 060/888] Fix GMPlayer audio --- .../cloudstream3/extractors/GMPlayer.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt index e36a03d3..9078f389 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt @@ -4,6 +4,7 @@ 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.Qualities class GMPlayer : ExtractorApi() { override val name = "GM Player" @@ -25,11 +26,16 @@ class GMPlayer : ExtractorApi() { data = mapOf("hash" to id, "r" to ref) ).parsed().videoSource ?: return null - return M3u8Helper.generateM3u8( - name, - m3u8, - ref, - headers = mapOf("accept" to "*/*") + return listOf( + ExtractorLink( + this.name, + this.name, + m3u8, + "", + Qualities.Unknown.value, + headers = mapOf("accept" to "*/*"), + isM3u8 = true + ) ) } From 9c5f2ef2f1de376bd170d59f049558cebe363eb9 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 11 Sep 2022 13:37:44 +0200 Subject: [PATCH 061/888] Fix GMPlayer --- .../main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt index 9078f389..af02ee8a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt @@ -31,7 +31,7 @@ class GMPlayer : ExtractorApi() { this.name, this.name, m3u8, - "", + ref, Qualities.Unknown.value, headers = mapOf("accept" to "*/*"), isM3u8 = true From 6f60298fc940ccc3dfb98ecc355e30fc4ef3f540 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 11 Sep 2022 13:43:05 +0200 Subject: [PATCH 062/888] Fix selecting homepage --- .../com/lagradost/cloudstream3/ui/home/HomeViewModel.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index 1d6ed584..6254cb9b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -272,12 +272,13 @@ class HomeViewModel : ViewModel() { if (!forceReload && api?.let { expandable[it.name]?.list?.list?.isNotEmpty() } == true) { return@launchSafe } - // If the plugin isn't loaded yet. (Does not set the key) - if (api == null) { - loadAndCancel(noneApi) - } else if (preferredApiName == noneApi.name) { + + if (preferredApiName == noneApi.name) { setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) loadAndCancel(noneApi) + // If the plugin isn't loaded yet. (Does not set the key) + } else if (api == null) { + loadAndCancel(noneApi) } else if (preferredApiName == randomApi.name) { val validAPIs = context?.filterProviderByPreferredMedia() if (validAPIs.isNullOrEmpty()) { From e830595c5f12e0212ed2c7d985c6e6fa14c0499c Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:00:27 +0200 Subject: [PATCH 063/888] Part 2 update for named seasons --- .../com/lagradost/cloudstream3/MainAPI.kt | 5 ++ .../ui/result/ResultViewModel2.kt | 57 +++++++++++-------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index dc6cc454..80e22d8b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1118,6 +1118,11 @@ data class NextAiring( val unixTime: Long, ) +/** + * @param season To be mapped with episode season, not shown in UI if displaySeason is defined + * @param name To be shown next to the season like "Season $displaySeason $name" but if displaySeason is null then "$name" + * @param displaySeason What to be displayed next to the season name, if null then the name is the only thing shown. + * */ data class SeasonData( val season: Int, val name: String? = null, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 02fe60ca..b94143f1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1483,15 +1483,20 @@ class ResultViewModel2 : ViewModel() { 0 -> txt(R.string.no_season) else -> { val seasonNames = (currentResponse as? EpisodeResponse)?.seasonNames - val seasonData = - seasonNames.getSeason(indexer.season) - val suffix = seasonData?.name?.let { " $it" } ?: "" - txt( - R.string.season_format, - txt(R.string.season), - seasonData?.displaySeason ?: indexer.season, - suffix - ) + val seasonData = seasonNames.getSeason(indexer.season) + + // If displaySeason is null then only show the name! + if (seasonData?.name != null && seasonData.displaySeason == null) { + txt(seasonData.name) + } else { + val suffix = seasonData?.name?.let { " $it" } ?: "" + txt( + R.string.season_format, + txt(R.string.season), + seasonData?.displaySeason ?: indexer.season, + suffix + ) + } } } ) @@ -1598,7 +1603,7 @@ class ResultViewModel2 : ViewModel() { i.posterUrl, episode, null, - seasonData?.displaySeason ?: i.season, + if (seasonData != null) seasonData.displaySeason else i.season, i.data, loadResponse.apiName, id, @@ -1633,7 +1638,7 @@ class ResultViewModel2 : ViewModel() { if (!existingEpisodes.contains(id)) { existingEpisodes.add(id) val seasonIndex = episode.season?.minus(1) - val currentSeason = + val seasonData = loadResponse.seasonNames.getSeason(episode.season) val ep = @@ -1643,7 +1648,7 @@ class ResultViewModel2 : ViewModel() { episode.posterUrl, episodeIndex, seasonIndex, - currentSeason?.displaySeason ?: episode.season, + if (seasonData != null) seasonData.displaySeason else episode.season, episode.data, loadResponse.apiName, id, @@ -1747,16 +1752,17 @@ class ResultViewModel2 : ViewModel() { val seasonData = loadResponse.seasonNames.getSeason(seasonNumber) val fixedSeasonNumber = seasonData?.displaySeason ?: seasonNumber val suffix = seasonData?.name?.let { " $it" } ?: "" - - val name = - /*loadResponse.seasonNames?.firstOrNull { it.season == seasonNumber }?.name?.let { seasonData -> - txt(seasonData) - } ?:*/txt( - R.string.season_format, - txt(R.string.season), - fixedSeasonNumber, - suffix - ) + // If displaySeason is null then only show the name! + val name = if (seasonData?.name != null && seasonData.displaySeason == null) { + txt(seasonData.name) + } else { + txt( + R.string.season_format, + txt(R.string.season), + fixedSeasonNumber, + suffix + ) + } name to seasonNumber }) } @@ -1812,7 +1818,12 @@ class ResultViewModel2 : ViewModel() { } private fun loadTrailers(loadResponse: LoadResponse) = ioSafe { - _trailers.postValue(getTrailers(loadResponse, 3)) // we dont want to fetch too many trailers + _trailers.postValue( + getTrailers( + loadResponse, + 3 + ) + ) // we dont want to fetch too many trailers } private suspend fun getTrailers( From 7f475ba05992e39070df2894086ffe56bb8dc2a9 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 12 Sep 2022 17:22:48 +0200 Subject: [PATCH 064/888] Part 3 update for named seasons --- .../java/com/lagradost/cloudstream3/MainAPI.kt | 5 ++++- .../cloudstream3/ui/result/ResultViewModel2.kt | 17 ++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 80e22d8b..d282f6dd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1203,9 +1203,12 @@ data class AnimeLoadResponse( override var backgroundPosterUrl: String? = null, ) : LoadResponse, EpisodeResponse +/** + * If episodes already exist appends the list. + * */ fun AnimeLoadResponse.addEpisodes(status: DubStatus, episodes: List?) { if (episodes.isNullOrEmpty()) return - this.episodes[status] = episodes + this.episodes[status] = (this.episodes[status] ?: emptyList()) + episodes } suspend fun MainAPI.newAnimeLoadResponse( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index b94143f1..48919308 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1592,8 +1592,8 @@ class ResultViewModel2 : ViewModel() { val idIndex = ep.key.id for ((index, i) in ep.value.withIndex()) { val episode = i.episode ?: (index + 1) - val id = mainId + episode + idIndex * 1000000 - if (!existingEpisodes.contains(episode)) { + val id = mainId + episode + idIndex * 1_000_000 + (i.season?.times(10_000) ?: 0) + if (!existingEpisodes.contains(id)) { existingEpisodes.add(id) val seasonData = loadResponse.seasonNames.getSeason(i.season) val eps = @@ -1602,7 +1602,7 @@ class ResultViewModel2 : ViewModel() { filterName(i.name), i.posterUrl, episode, - null, + seasonData?.season ?: i.season, if (seasonData != null) seasonData.displaySeason else i.season, i.data, loadResponse.apiName, @@ -1615,7 +1615,7 @@ class ResultViewModel2 : ViewModel() { mainId ) - val season = eps.season ?: 0 + val season = eps.seasonIndex ?: 0 val indexer = EpisodeIndexer(ep.key, season) episodes[indexer]?.add(eps) ?: run { episodes[indexer] = mutableListOf(eps) @@ -1630,14 +1630,13 @@ class ResultViewModel2 : ViewModel() { mutableMapOf() val existingEpisodes = HashSet() for ((index, episode) in loadResponse.episodes.sortedBy { - (it.season?.times(10000) ?: 0) + (it.episode ?: 0) + (it.season?.times(10_000) ?: 0) + (it.episode ?: 0) }.withIndex()) { val episodeIndex = episode.episode ?: (index + 1) val id = - mainId + (episode.season?.times(100000) ?: 0) + episodeIndex + 1 + mainId + (episode.season?.times(100_000) ?: 0) + episodeIndex + 1 if (!existingEpisodes.contains(id)) { existingEpisodes.add(id) - val seasonIndex = episode.season?.minus(1) val seasonData = loadResponse.seasonNames.getSeason(episode.season) @@ -1647,7 +1646,7 @@ class ResultViewModel2 : ViewModel() { filterName(episode.name), episode.posterUrl, episodeIndex, - seasonIndex, + seasonData?.season ?: episode.season, if (seasonData != null) seasonData.displaySeason else episode.season, episode.data, loadResponse.apiName, @@ -1660,7 +1659,7 @@ class ResultViewModel2 : ViewModel() { mainId ) - val season = episode.season ?: 0 + val season = ep.seasonIndex ?: 0 val indexer = EpisodeIndexer(DubStatus.None, season) episodes[indexer]?.add(ep) ?: kotlin.run { From d6aa0e576c98656084cccb194868ad16cea85265 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 12 Sep 2022 17:58:03 +0200 Subject: [PATCH 065/888] Fix create account dialog on RTL locale & remove update cache --- .../cloudstream3/utils/InAppUpdater.kt | 13 +- app/src/main/res/layout/add_account_input.xml | 227 +++++++++--------- 2 files changed, 125 insertions(+), 115 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index 42d200d0..54492e6d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -200,16 +200,23 @@ class InAppUpdater { private suspend fun Activity.downloadUpdate(url: String): Boolean { try { Log.d(LOG_TAG, "Downloading update: $url") + val appUpdateName = "CloudStream" + val appUpdateSuffix = "apk" - val localContext = this + // Delete all old updates + this.cacheDir.listFiles()?.filter { + it.name.startsWith(appUpdateName) && it.extension == appUpdateSuffix + }?.forEach { + it.deleteOnExit() + } - val downloadedFile = File.createTempFile("CloudStream", ".apk") + val downloadedFile = File.createTempFile(appUpdateName, ".$appUpdateSuffix") val sink: BufferedSink = downloadedFile.sink().buffer() updateLock.withLock { sink.writeAll(app.get(url).body.source()) sink.close() - openApk(localContext, Uri.fromFile(downloadedFile)) + openApk(this, Uri.fromFile(downloadedFile)) } return true } catch (e: Exception) { diff --git a/app/src/main/res/layout/add_account_input.xml b/app/src/main/res/layout/add_account_input.xml index 1471af9c..ea48a80f 100644 --- a/app/src/main/res/layout/add_account_input.xml +++ b/app/src/main/res/layout/add_account_input.xml @@ -1,131 +1,134 @@ - - - - - - - + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_marginBottom="10dp" + android:orientation="horizontal"> - + + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:textColor="?attr/textColor" + android:textSize="20sp" + android:textStyle="bold" + tools:text="Test" /> - - - + + + + android:layout_height="wrap_content" + android:autofillHints="username" + android:hint="@string/example_username" + android:inputType="text" + android:nextFocusLeft="@id/apply_btt" + android:nextFocusRight="@id/cancel_btt" + android:nextFocusDown="@id/login_email_input" + android:requiresFadingEdge="vertical" + android:textColorHint="?attr/grayTextColor" + tools:ignore="LabelFor" /> + + + + + + + + + + + android:id="@+id/apply_btt" + style="@style/WhiteButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:text="@string/login" /> + android:id="@+id/cancel_btt" + style="@style/BlackButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:text="@string/sort_cancel" /> \ No newline at end of file From beca2b7b8479aebd13973a5986571e1ccd4d9d5e Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Tue, 13 Sep 2022 02:38:33 +0700 Subject: [PATCH 066/888] [extractor] added Gdriveplayer (#99) * added Gdriveplayer * added Sbflix * added DoodWfExtractor * fixed StreamSB --- .../cloudstream3/extractors/DoodExtractor.kt | 4 + .../cloudstream3/extractors/Gdriveplayer.kt | 178 ++++++++++++++++++ .../cloudstream3/extractors/StreamSB.kt | 7 +- .../cloudstream3/utils/ExtractorApi.kt | 13 ++ 4 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt 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 c5eaf40e..7ec1fb22 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -7,6 +7,10 @@ import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getQualityFromName import kotlinx.coroutines.delay +class DoodWfExtractor : DoodLaExtractor() { + override var mainUrl = "https://dood.wf" +} + class DoodCxExtractor : DoodLaExtractor() { override var mainUrl = "https://dood.cx" } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt new file mode 100644 index 00000000..d2e56bf1 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt @@ -0,0 +1,178 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.* +import org.jsoup.nodes.Element +import java.security.DigestException +import java.security.MessageDigest +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +class Gdriveplayerapi: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayerapi.com" +} + +class Gdriveplayerapp: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.app" +} + +class Gdriveplayerfun: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.fun" +} + +class Gdriveplayerio: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.io" +} + +class Gdriveplayerme: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.me" +} + +class Gdriveplayerbiz: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.biz" +} + +class Gdriveplayerorg: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.org" +} + +class Gdriveplayerus: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.us" +} + +class Gdriveplayerco: Gdriveplayer() { + override val mainUrl: String = "https://gdriveplayer.co" +} + +open class Gdriveplayer : ExtractorApi() { + override val name = "Gdrive" + override val mainUrl = "https://gdriveplayer.to" + override val requiresReferer = false + + private fun unpackJs(script: Element): String? { + return script.select("script").find { it.data().contains("eval(function(p,a,c,k,e,d)") } + ?.data()?.let { getAndUnpack(it) } + } + + private fun String.decodeHex(): ByteArray { + check(length % 2 == 0) { "Must have an even length" } + return chunked(2) + .map { it.toInt(16).toByte() } + .toByteArray() + } + + // https://stackoverflow.com/a/41434590/8166854 + private fun GenerateKeyAndIv( + password: ByteArray, + salt: ByteArray, + hashAlgorithm: String = "MD5", + keyLength: Int = 32, + ivLength: Int = 16, + iterations: Int = 1 + ): List? { + + val md = MessageDigest.getInstance(hashAlgorithm) + val digestLength = md.digestLength + val targetKeySize = keyLength + ivLength + val requiredLength = (targetKeySize + digestLength - 1) / digestLength * digestLength + val generatedData = ByteArray(requiredLength) + var generatedLength = 0 + + try { + md.reset() + + while (generatedLength < targetKeySize) { + if (generatedLength > 0) + md.update( + generatedData, + generatedLength - digestLength, + digestLength + ) + + md.update(password) + md.update(salt, 0, 8) + md.digest(generatedData, generatedLength, digestLength) + + for (i in 1 until iterations) { + md.update(generatedData, generatedLength, digestLength) + md.digest(generatedData, generatedLength, digestLength) + } + + generatedLength += digestLength + } + return listOf( + generatedData.copyOfRange(0, keyLength), + generatedData.copyOfRange(keyLength, targetKeySize) + ) + } catch (e: DigestException) { + return null + } + } + + private fun cryptoAESHandler( + data: AesData, + pass: ByteArray, + encrypt: Boolean = true + ): String? { + val (key, iv) = GenerateKeyAndIv(pass, data.s.decodeHex()) ?: return null + val cipher = Cipher.getInstance("AES/CBC/NoPadding") + return if (!encrypt) { + cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) + String(cipher.doFinal(base64DecodeArray(data.ct))) + } else { + cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) + base64Encode(cipher.doFinal(data.ct.toByteArray())) + + } + } + + private fun Regex.first(str: String): String? { + return find(str)?.groupValues?.getOrNull(1) + } + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val document = app.get(url).document + + val eval = unpackJs(document)?.replace("\\", "") ?: return + val data = AppUtils.tryParseJson(Regex("data='(\\S+?)'").first(eval)) ?: return + val password = Regex("null,['|\"](\\w+)['|\"]").first(eval) + ?.split(Regex("\\D+")) + ?.joinToString("") { + Char(it.toInt()).toString() + }.let { Regex("var pass = \"(\\S+?)\"").first(it ?: return)?.toByteArray() } + ?: throw ErrorLoadingException("can't find password") + val decryptedData = + cryptoAESHandler(data, password, false)?.let { getAndUnpack(it) }?.replace("\\", "") + ?.substringAfter("sources:[")?.substringBefore("],") + + Regex("\"file\":\"(\\S+?)\".*?res=(\\d+)").findAll(decryptedData ?: return).map { + it.groupValues[1] to it.groupValues[2] + }.toList().distinctBy { it.second }.map { (link, quality) -> + callback.invoke( + ExtractorLink( + source = this.name, + name = this.name, + url = "${httpsify(link)}&res=$quality", + referer = mainUrl, + quality = quality.toIntOrNull() ?: Qualities.Unknown.value, + headers = mapOf("Range" to "bytes=0-") + ) + ) + } + + } + + data class AesData( + @JsonProperty("ct") val ct: String, + @JsonProperty("iv") val iv: String, + @JsonProperty("s") val s: String + ) + +} \ 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 a933c484..461f56d0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -7,6 +7,11 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Sbflix : StreamSB() { + override var mainUrl = "https://sbflix.xyz" + override var name = "Sbflix" +} + class Vidgomunime : StreamSB() { override var mainUrl = "https://vidgomunime.xyz" } @@ -111,7 +116,7 @@ open class StreamSB : ExtractorApi() { }.first() val bytes = id.toByteArray() val bytesToHex = bytesToHex(bytes) - val master = "$mainUrl/sources43/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" + val master = "$mainUrl/sources44/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" val headers = mapOf( "watchsb" to "streamsb", ) 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 7a65df30..ae3d8c06 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -236,6 +236,7 @@ val extractorApis: MutableList = arrayListOf( Ssbstream(), Sbthe(), Vidgomunime(), + Sbflix(), Fastream(), @@ -269,6 +270,7 @@ val extractorApis: MutableList = arrayListOf( DoodWsExtractor(), DoodShExtractor(), DoodWatchExtractor(), + DoodWfExtractor(), AsianLoad(), @@ -321,6 +323,17 @@ val extractorApis: MutableList = arrayListOf( Mvidoo(), Streamplay(), + Gdriveplayerapi(), + Gdriveplayerapp(), + Gdriveplayerfun(), + Gdriveplayerio(), + Gdriveplayerme(), + Gdriveplayerbiz(), + Gdriveplayerorg(), + Gdriveplayerus(), + Gdriveplayerco(), + Gdriveplayer(), + YoutubeExtractor(), YoutubeShortLinkExtractor(), YoutubeMobileExtractor(), From 2bd4d67c5d70801bf250ab20591714ba480f8301 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:52:51 +0200 Subject: [PATCH 067/888] Fixed random timeout crashes --- app/build.gradle | 2 +- .../java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt | 5 +++-- .../com/lagradost/cloudstream3/network/RequestsHelper.kt | 3 --- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ed641a0a..b80c820f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -170,7 +170,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.3.2' + implementation 'com.github.Blatzar:NiceHttp:0.3.3' // Util to skip the URI file fuckery 🙏 implementation "com.github.tachiyomiorg:unifile:17bec43" diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index a64f0d8d..5c3276fa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -7,6 +7,7 @@ import com.bumptech.glide.load.HttpException import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.ErrorLoadingException import kotlinx.coroutines.* +import java.io.InterruptedIOException import java.net.SocketTimeoutException import java.net.UnknownHostException import javax.net.ssl.SSLHandshakeException @@ -157,7 +158,7 @@ suspend fun safeApiCall( } safeFail(throwable) } - is SocketTimeoutException -> { + is SocketTimeoutException, is InterruptedIOException -> { Resource.Failure( true, null, @@ -192,7 +193,7 @@ suspend fun safeApiCall( true, null, null, - (throwable.message ?: "SSLHandshakeException") + "\nTry again later." + (throwable.message ?: "SSLHandshakeException") + "\nTry a VPN or DNS." ) } else -> safeFail(throwable) diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt index 03ec6ae8..13299002 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt @@ -5,15 +5,12 @@ import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.nicehttp.Requests -import com.lagradost.nicehttp.getCookies import com.lagradost.nicehttp.ignoreAllSSLErrors import okhttp3.Cache import okhttp3.Headers import okhttp3.Headers.Companion.toHeaders import okhttp3.OkHttpClient -import okhttp3.Request import java.io.File -import java.util.concurrent.TimeUnit fun Requests.initClient(context: Context): OkHttpClient { From 4f8f5024cb9e588f41b6ef752777a783cdc8b8d0 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:06:11 +0200 Subject: [PATCH 068/888] TV Navigation improvements --- app/src/main/res/layout/fragment_plugins.xml | 3 +++ app/src/main/res/layout/fragment_search.xml | 4 +++- app/src/main/res/layout/home_select_mainpage.xml | 6 ++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/fragment_plugins.xml b/app/src/main/res/layout/fragment_plugins.xml index 54eae80f..15e0d2f9 100644 --- a/app/src/main/res/layout/fragment_plugins.xml +++ b/app/src/main/res/layout/fragment_plugins.xml @@ -102,18 +102,21 @@ style="@style/RoundedSelectableButton" android:nextFocusLeft="@id/home_select_cartoons" + android:nextFocusRight="@id/home_select_livestreams" android:text="@string/documentaries" /> - + Date: Tue, 13 Sep 2022 19:50:25 +0200 Subject: [PATCH 069/888] =?UTF-8?q?Made=20repository=20focusable=20on=20Fi?= =?UTF-8?q?reStick=20=F0=9F=92=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloudstream3/ui/settings/extensions/RepoAdapter.kt | 2 +- app/src/main/res/layout/repository_item_tv.xml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt index 2dc302ee..e90166a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt @@ -76,7 +76,7 @@ class RepoAdapter( imageClickCallback(repositoryData) } - itemView.setOnClickListener { + itemView.repository_item_root?.setOnClickListener { clickCallback(repositoryData) } itemView.main_text?.text = repositoryData.name diff --git a/app/src/main/res/layout/repository_item_tv.xml b/app/src/main/res/layout/repository_item_tv.xml index 881fce63..fbe18199 100644 --- a/app/src/main/res/layout/repository_item_tv.xml +++ b/app/src/main/res/layout/repository_item_tv.xml @@ -8,6 +8,8 @@ android:background="@drawable/outline_drawable" android:nextFocusRight="@id/action_button" android:orientation="horizontal" + android:clickable="true" + android:focusable="true" android:padding="12dp"> Date: Wed, 14 Sep 2022 11:43:30 +0200 Subject: [PATCH 070/888] arabicSubs100% [SANCTI] (#101) --- app/src/main/res/values-ar/strings.xml | 436 +++++++++++++++++++------ 1 file changed, 344 insertions(+), 92 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2eaa9af5..23b9af9b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -5,57 +5,65 @@ ملصق الحلقة الملصق الرئيسي التالي عشوائي + ارجع للخلف + تغيير المصدر معاينة الخلفية سرعة (%.2fx) Rated: %.1f + !تم إيجاد تحديث جديد\n%s -> %s %d دقيقة CloudStream + تشغيل بواسطة CloudStream الصفحة الرئيسية - بحث + البحث التحميلات الإعدادات - …بحث + …بحث + بحث %s… + لايوجد بيانات المزيد من الخيارات الحلقة التالية - النواع + أنواع شارك - فتح في الويب + فتح في الويب تخطي التحميل …تحميل - مشاهدة + أشاهده في الانتظار مكتمل - إسقاط - تخطط للمشاهدة + مهمل + أخطط لمشاهدته لا شيء إعادة المشاهدة - + مشاهدة الفيلم - تشغيل التورنت + تشغيل بث حي + تشغيل تورنت المصادر الترجمة …إعادة محاولة الاتصال ارجع للخلف تشغيل الحلقة - + تحميل تم التنزيل - جارى التحميل + جاري التنزيل توقف التنزيل مؤقتًا بدأ التنزيل - التحميل فشل + فشل التنزيل تم إلغاء التنزيل - تنزيل تم + تم التنزيل + تشغيل خطأ في تحميل الرابط التخزين الداخلي @@ -73,12 +81,18 @@ إخفاء تشغيل معلومات - تصفية المواقع المفضلة + تصفية الاشارات المرجعية إشارات مرجعية حذف + إعداد حالة المشاهدة تطبيق إلغاء - سرعة المشغل + نسخ + إغلاق + مسح + حفظ + + سرعة المُشغل إعدادات الترجمة لون الخط @@ -90,65 +104,97 @@ الخط حجم الخط - ابحث باستخدام المصادر + البحث باستخدام المصادر البحث باستخدام الأنواع - %d البنينيس المعطاة الى المطورين - لم يتم إعطاء بنين + %d الموزات المعطاة الى المطورين + لم يتم إعطاء موز تحديد اللغة تلقائيًا تحميل اللغات - اضغط بإستمرار لإعادة التعيين - استمر في المشاهدة + لغة الترجمة + إضغط بإستمرار لإعادة التعيين للإعدادات الافتراضية + إستيراد خطوط بوضعها هنا %s + متابعة المشاهدة حذف مزيد من المعلومات - قد تكون هناك حاجة إلى شبكة ظاهرية خاصة لكي يعمل هذا المزود بشكل صحيح + قد تكون هناك حاجة إلى VPN لكي يعمل هذا المزود بشكل صحيح هذا المزود هو تورنت ، يوصى باستخدام شبكة ظاهرية خاصة - + .سيظهر إعلان مدته خمسة عشر ثانية إذا لم يتم توفير الفيديو في الموقع - + الوصف لم يتم العثور على وصف لم يتم العثور على وصف + 🐈 logcat عرض + نافذة منبثقة - يستمر في التشغيل في مشغل مصغر فوق التطبيقات الأخرى - زر تغيير حجم المشغل - قم بإزالة الحدود السوداء + يستمر في التشغيل في مُشغل مصغر فوق التطبيقات الأخرى + زر تغيير حجم المُشغل + إزالة الحدود السوداء الترجمة - إعدادات ترجمة المشغل + إعدادات ترجمة المُشغل + ترجمة كروم كاست + إعدادات ترجمة كروم كاست + وضع إيغنغرافي - يضيف خيار السرعة في المشغل - اسحب للسعي - اسحب إلى اليسار أو اليمين للتحكم في الوقت في مشغل الفيديو - اسحب لتغيير الإعدادات - اسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت - انقر مرتين للسعي للأمام أو للخلف - اضغط مرتين لإيقاف مؤقت - اضغط مرتين على الجانب الأيمن أو الأيسر للسعي للأمام أو للخلف - اضغط في الوسط لإيقاف مؤقت + يضيف خيار السرعة في المُشغل + السحب للسعي + إسحب إلى اليسار أو اليمين للتحكم في الوقت في مُشغل الفيديو + السحب لتغيير الإعدادات + إسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت + + تشغيل الحلقة التالية تلقائيًا + تبدأ الحلقة التالية عندما تنتهي الحالية + + النقر مرتان للسعي للأمام أو للخلف + الضغط مرتان لإيقاف مؤقت + التحكم في سعي المُشغل + إضغط مرتين على الجانب الأيمن أو الأيسر للسعي للأمام أو للخلف + إضغط في الوسط لإيقاف مؤقت استخدم سطوع النظام - استخدم سطوع النظام في مشغل التطبيق بدلاً من التراكب الداكن + استخدم سطوع النظام في مُشغل التطبيق بدلاً من التراكب الداكن + + تحديث تقدم المشاهدة + مزامنة التقدم في الحلقة الحالية تلقائيًا + + إسترجاع البيانات من نسخة إحتياطية + + نسخ إحتياطي + تم تحميل ملف النسخة الاحتياطية + فشل استيراد البيانات من الملف %s + تم تخزين البيانات بنجاح + إذن الوصول الي ذاكرة التخزين مفقود, من فضلك حاول مجددا + فشل إنشاء نسخة احتياطية %s بحث + الحسابات + التحديثات والنسخ الاحتياطية + معلومات البحث المتقدم يعطيك نتائج البحث مفصولة عن طريق المزود - إرسال البيانات عن الأعطال فقط + إرسال البيانات عند الأعطال فقط لا ترسل أي بيانات - عرض حلقة فلر لأنيمي + عرض حلقات الفلر للأنمي + عرض المقاطع الدعائية + عرض ملصقات من kitsu + إخفاء جودة الفيديو المختارة من نتائج البحث + + تحديث الإضافات تلقائيًا التحديث التلقائي - ابحث تلقائيًا عن التحديثات الجديدة عند البداية + البحث تلقائيًا عن التحديثات الجديدة عند البداية التحديث إلى الاصدارات التجريبيه (بيتا) - ابحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط + البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط Github - تطبيق رواية خفيف من نفس المطورين - تطبيق Anime من نفس المطورين - انضم إلى إلديسكورد - أعط موزة للمطورين - أعط الموز + تطبيق روايات خفيف من نفس المطورين + تطبيق أنمي من نفس المطورين + انضم إلى الديسكورد + إعط موزة للمطورين + الموز المُعطي لغة التطبيق @@ -158,23 +204,24 @@ تشغيل الحلقة إعادة التعيين إلى القيمة الافتراضية عذرا ، تعطل التطبيق. سيتم إرسال تقرير خطأ مجهول إلى المطورين - + + موسم لا موسم حلقة حلقات - S - E + ح + م لم يتم العثور على أي حلقات - حذف ملف + حذف الملف حذف إيقاف مؤقت أكمل - -30 - +30 - This will permanently delete %s\nAre you sure? - %dد\nمتبقية + -٣٠ + +٣٠ + سوف يتم الحذف نهائيا %s\nهل أنت متأكد? + %dm\nمتبقية جاري التنفيذ اكتمل @@ -189,28 +236,39 @@ الترجمة ليست موجودة الإفتراضي - حر + فارغ مستخدم - تطبيق + التطبيق + أفلام مسلسلات رسوم متحركة - انمي + أنمي تورنت - الافلام الوثائقية - OVA - + أفلام وثائقية + أوفا + دراما آسيوية + بث حي + +18 + أخري + فيلم - مسلسلات + مسلسل كارتون + @string/anime + @string/ova تورنت - وثائقي - + وثائقي + دراما آسيوية + بث حي + +18 + فيديو + خطأ في المصدر خطأ بعيد خطأ في جهاز العرض - خطأ غير متوقع في مشغل + خطأ غير متوقع في المُشغل خطأ في التنزيل ، تحقق من أذونات التخزين حلقة كروم كاست @@ -218,10 +276,21 @@ تشغيل في التطبيق VLC تشغيل في تشغيل في الويب - انسخ الرابط + نسخ الرابط التحميل التلقائي - تحميل المرآة + تحميل بجودات مختلفة إعادة تحميل الروابط + تحميل الترجمة + + ملصق الجودة + ملصق مدبلج + ملصق مترجم + العنوان + show_hd_key + show_dub_key + show_sub_key + show_title_key + التحكم في عناصر الواجهة علي الملصق لم يتم العثور على تحديث تحقق من التحديثات @@ -229,61 +298,244 @@ قفل تغيير الحجم مصدر - OP تخطي + تخطي المقدمة لا تظهر مرة أخرى + تخطي هذا التحديث تحديث جودة المشاهدة المفضلة + أقصي عدد حروف لعنوان مُشغل الفيديو + أبعاد مُشغل الفيديو + حجم ذاكرة التخزين المؤقت للفيديو + طول التخزين المؤقت + التخزين المؤقت للفيديو علي القرص + مسح التخزين المؤقت للصورة والفيديو + + سوف يسبب بعض الأعطال إذا تم إعداد قيمة عالية جدًا. لا\تغير القيمة إذا كان لديك ذاكرة تخزين عشوائية منخفضة كتلفاز أندرويد أو هاتف قديم + قد يسبب مشاكل مع حجم ذاكرة التخزين المنخفضة كأجهزة تلفاز الأندرويد إذا أعددت قيمة عالية جدًا + DNS فوق HTTPS - مفيد لتجاوز كتل مزود خدمة الإنترنت - - موقع التنزيل - + مفيد لتجاوز حجب مزود خدمة الإنترنت + + نسخ موقع + حذف موقع + إضافة نسخة من موقع موجود, بعنوان رابط مختلف + + مسار التنزيل + + عنوان رابط سيرفر Nginx + عرض أنمي مدبلج / مترجم - تناسب الشاشة + ملائمة الشاشة امتداد تكبير + إخلاء مسؤولية + legal_notice_key + Any legal issues regarding the content on this application + should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. + + In case of copyright infringement, please directly contact the responsible parties or the streaming websites. + + The app is purely for educational and personal use. + + CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. + CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or + manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, + user-friendly interface. + + It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the + responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use + CloudStream 3 at your own risk. + عام + زر العشوائي + إظهار زر العشوائي علي الشاشة الرئيسية لغات الموفر - واجهة التطبيق - النوع المفضل من المشاهدة - - أوتوماتيك - واجهة خاصة بتلفاز - واجهة خاصة بهاتف - + واجهة التطبيق + المحتوي المفضل + تفعيل محتوي البالغين داخل المزودين المدعومين + فك تشفير الترجمة + المصادر + الواجهة + + + أوتوماتيك + واجهة تلفاز + واجهة هاتف + واجهة محاكي + اللون الأساسي مظهر التطبيق - - الحساب + موضع عنوان الملصق + وضع العنوان تحت الملصق + + + + anilist_key + mal_key + opensubtitles_key + nginx_key + password123 + MyCoolUsername + hello@world.com + 127.0.0.1 + MyCoolSite + example.com + Language code (en) + + + %s %s + حساب تسجيل خروج تسجيل الدخول تبديل الحساب إضافة حساب - Add tracking + إنشاء حساب + إضافة تتبع + تم إضافة %s + مزامنة + مقيّم + %d / 10 + /?? + /%d + تم توثيق %s + فشل توثيق %s + لا شيء عادي الكل - ماكس + الحد الاقصي الحد الأدنى - الخطوط العريضة - النمط المكتئب + @string/none + الخطوط المحيطة + النمط المنخفض ظل - رفع - + رفع + مزامنة الترجمة + 1000ms + تأخير الترجمة + استخدم هذا إذا كانت الترجمة تُعرض %dms مبكرًا جدًا + استخدم هذا إذا كانت الترجمة تُعرض %dms متأخرًا جدًا + لا تأخير في الترجمة + + نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق - موصى به + مُوصي به + تم تحميل %s إختيار ملف + تحميل من الانترنت الملف الذي تم تنزيله رئيسي مساعد - خلفية - ترجمة كروم كاست - إعدادات ترجمة الكروم كاست - المصادر + الخلفية + + مصدر + عشوائي + + قريبا… + + Cam + Cam + Cam + HQ + HD + TS + TC + BlueRay + WP + DVD + 4K + SD + UHD + HDR + SDR + Web + + صورة الملصق + المُشغل + الأبعاد والعنوان + العنوان + الأبعاد + هوية غير صالحة + بيانات غير صالحة + عنون رابط غير صالح + خطأ + ازالة التسميات التوضيحية من الترجمة + ازالة البرمجيات الخبيثة من الترجمة + فلترة تبعا للغة المحتوي المفضلة + اكسترا + مقطع دعائي + رابط الفيديو + Referer + التالي + شاهد الفيديوهات بهذه اللغات + السابق + تخطي الإعداد + تغيير شكل البرنامح حتي يلائم جهازك + ابلاغ الاعطال + ماذا تريد ان تري + تم + الإضافات + إضافة مستودع + إسم المستودع + عنوان رابط المستودع + تم تحميل الإضافة + تم إزالة الإضافة + فشل التحميل %s + 18+ + بدأ تنزيل %d %s + تم تنزيل %d %s بنجاح + جميع %s محملة بالفعل + تحميل مكثف + إضافة + إضافات + سوف يتم محو جميع إضافات المستودع + ازالة مستودع + تحميل قائمة المواقع التي تريد استخدامها + تم تحميل: %d + مُعطل %d + غير مُحمل: %d + قم بإضافة مستودع لكي يتم تثبيت إضافات المواقع + عرض مستودعات المجتمع + قائمة عامة + جميع الترجمات حروف كبيرة + + تحميل جميع الإضافات من هذا المستودع? + %s (Disabled) + المسارات + مسار الصوت + مسار الفيديو + تطبيق بعد إعادة الفتح + + وضع الامان مفعل + An unrecoverable crash occurred and we\'ve automatically disabled all extensions, so you can find and remove the extension which is causing trouble. + عرض بيانات الاعطال + + تقييم: %s + الوصف + إصدار + الحالة + الحجم + المؤلفون + مدعوم + اللغة + + قائمة HLS From 9402a280413fb906d31bc6a3d28b1e585b2e7718 Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Wed, 14 Sep 2022 16:43:35 +0700 Subject: [PATCH 071/888] fixed StreamSB (#105) --- .../cloudstream3/extractors/Gdriveplayer.kt | 4 ++ .../cloudstream3/extractors/StreamSB.kt | 50 +++++++++++-------- .../cloudstream3/utils/ExtractorApi.kt | 2 + 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt index d2e56bf1..dfccc118 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt @@ -10,6 +10,10 @@ import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec +class DatabaseGdrive : Gdriveplayer() { + override var mainUrl = "https://series.databasegdriveplayer.co" +} + class Gdriveplayerapi: Gdriveplayer() { override val mainUrl: String = "https://gdriveplayerapi.com" } 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 461f56d0..30a0496d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -1,12 +1,16 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Streamsss : StreamSB() { + override var mainUrl = "https://streamsss.net" +} + class Sbflix : StreamSB() { override var mainUrl = "https://sbflix.xyz" override var name = "Sbflix" @@ -109,31 +113,33 @@ open class StreamSB : ExtractorApi() { @JsonProperty("status_code") val statusCode: Int, ) - override suspend fun getUrl(url: String, referer: String?): List? { - val regexID = Regex("(embed-[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+|\\/e\\/[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val regexID = + Regex("(embed-[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+|/e/[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") val id = regexID.findAll(url).map { - it.value.replace(Regex("(embed-|\\/e\\/)"),"") + it.value.replace(Regex("(embed-|/e/)"), "") }.first() - val bytes = id.toByteArray() - val bytesToHex = bytesToHex(bytes) - val master = "$mainUrl/sources44/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" +// val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" + val master = "$mainUrl/sources48/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" val headers = mapOf( - "watchsb" to "streamsb", - ) - val urltext = app.get(master, + "watchsb" to "sbstream", + ) + val mapped = app.get( + master.lowercase(), headers = headers, - allowRedirects = false - ).text - val mapped = urltext.let { parseJson
(it) } - val testurl = app.get(mapped.streamData.file, headers = headers).text + referer = url, + ).parsedSafe
() // val urlmain = mapped.streamData.file.substringBefore("/hls/") - if (urltext.contains("m3u8") && testurl.contains("EXTM3U")) - return M3u8Helper.generateM3u8( - name, - mapped.streamData.file, - url, - headers = headers - ) - return null + M3u8Helper.generateM3u8( + name, + mapped?.streamData?.file ?: return, + url, + headers = headers + ).forEach(callback) } } \ 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 ae3d8c06..b5c2cd44 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -237,6 +237,7 @@ val extractorApis: MutableList = arrayListOf( Sbthe(), Vidgomunime(), Sbflix(), + Streamsss(), Fastream(), @@ -333,6 +334,7 @@ val extractorApis: MutableList = arrayListOf( Gdriveplayerus(), Gdriveplayerco(), Gdriveplayer(), + DatabaseGdrive(), YoutubeExtractor(), YoutubeShortLinkExtractor(), From 0f492c2c82124742bd4dc3e4200a226597c4b5e2 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 17 Sep 2022 13:03:41 +0200 Subject: [PATCH 072/888] Added fallback webview to login pages and made account selectable on TV --- .../lagradost/cloudstream3/AcraApplication.kt | 31 ++++- .../com/lagradost/cloudstream3/MainAPI.kt | 1 + .../lagradost/cloudstream3/MainActivity.kt | 128 ++++++++++-------- .../cloudstream3/syncproviders/OAuth2API.kt | 4 +- .../syncproviders/providers/AniListApi.kt | 5 +- .../syncproviders/providers/DropboxApi.kt | 3 +- .../syncproviders/providers/MALApi.kt | 5 +- .../cloudstream3/ui/WebviewFragment.kt | 17 +-- .../ui/settings/SettingsAccount.kt | 40 +++--- .../lagradost/cloudstream3/utils/AppUtils.kt | 3 +- app/src/main/res/layout/main_settings.xml | 2 +- 11 files changed, 143 insertions(+), 96 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 85f031b3..198f0f4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -7,10 +7,12 @@ import android.content.ContextWrapper import android.content.Intent import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity import com.google.auto.service.AutoService import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.plugins.PluginManager +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.openBrowser import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.DataStore.getKey @@ -74,19 +76,28 @@ class CustomSenderFactory : ReportSenderFactory { } } -class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)): Thread.UncaughtExceptionHandler { +class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)) : + Thread.UncaughtExceptionHandler { override fun uncaughtException(thread: Thread, error: Throwable) { ACRA.errorReporter.handleException(error) try { PrintStream(errorFile).use { ps -> ps.println(String.format("Currently loading extension: ${PluginManager.currentlyLoading ?: "none"}")) - ps.println(String.format("Fatal exception on thread %s (%d)", thread.name, thread.id)) + ps.println( + String.format( + "Fatal exception on thread %s (%d)", + thread.name, + thread.id + ) + ) error.printStackTrace(ps) } - } catch (ignored: FileNotFoundException) { } + } catch (ignored: FileNotFoundException) { + } try { onError.invoke() - } catch (ignored: Exception) { } + } catch (ignored: Exception) { + } exitProcess(1) } @@ -95,7 +106,7 @@ class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)): Thread.U class AcraApplication : Application() { override fun onCreate() { super.onCreate() - Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")){ + Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")) { val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) startActivity(Intent.makeRestartActivityTask(intent!!.component)) }) @@ -183,5 +194,15 @@ class AcraApplication : Application() { fun openBrowser(url: String, fallbackWebview: Boolean = false, fragment: Fragment? = null) { context?.openBrowser(url, fallbackWebview, fragment) } + + /** Will fallback to webview if in TV layout */ + fun openBrowser(url: String, activity: FragmentActivity?) { + openBrowser( + url, + isTvSettings(), + activity?.supportFragmentManager?.fragments?.lastOrNull() + ) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index d282f6dd..47afbc42 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -40,6 +40,7 @@ object APIHolder { private const val defProvider = 0 + // ConcurrentModificationException is possible!!! val allProviders: MutableList = arrayListOf() fun initAll() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 6c9fadd8..7686a84c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -15,6 +15,7 @@ import androidx.annotation.IdRes import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible +import androidx.fragment.app.FragmentActivity import androidx.navigation.NavController import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hierarchy @@ -144,6 +145,68 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val mainPluginsLoadedEvent = Event() // homepage api, used to speed up time to load for homepage val afterRepositoryLoadedEvent = Event() + + /** + * @return true if the str has launched an app task (be it successful or not) + * @param isWebview does not handle providers and opening download page if true. Can still add repos and login. + * */ + fun handleAppIntentUrl(activity: FragmentActivity?, str: String?, isWebview: Boolean): Boolean = + with(activity) { + if (str != null && this != null) { + if (str.startsWith("https://cs.repo")) { + val realUrl = "https://" + str.substringAfter("?") + println("Repository url: $realUrl") + loadRepository(realUrl) + return true + } else if (str.contains(appString)) { + for (api in OAuth2Apis) { + if (str.contains("/${api.redirectUrl}")) { + ioSafe { + Log.i(TAG, "handleAppIntent $str") + val isSuccessful = api.handleRedirect(str) + + if (isSuccessful) { + Log.i(TAG, "authenticated ${api.name}") + } else { + Log.i(TAG, "failed to authenticate ${api.name}") + } + + this@with.runOnUiThread { + try { + showToast( + this@with, + getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail).format( + api.name + ) + ) + } catch (e: Exception) { + logError(e) // format might fail + } + } + } + return true + } + } + } else if (URI(str).scheme == appStringRepo) { + val url = str.replaceFirst(appStringRepo, "https") + loadRepository(url) + return true + } else if (!isWebview){ + if (str.startsWith(DOWNLOAD_NAVIGATE_TO)) { + this.navigate(R.id.navigation_downloads) + return true + } else { + for (api in apis) { + if (str.startsWith(api.mainUrl)) { + loadResult(str, api.name) + return true + } + } + } + } + } + return false + } } override fun onColorSelected(dialogId: Int, color: Int) { @@ -348,56 +411,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (intent == null) return val str = intent.dataString loadCache() - if (str != null) { - if (str.startsWith("https://cs.repo")) { - val realUrl = "https://" + str.substringAfter("?") - println("Repository url: $realUrl") - loadRepository(realUrl) - } else if (str.contains(appString)) { - for (api in OAuth2Apis) { - if (str.contains("/${api.redirectUrl}")) { - val activity = this - ioSafe { - Log.i(TAG, "handleAppIntent $str") - val isSuccessful = api.handleRedirect(str) - - if (isSuccessful) { - Log.i(TAG, "authenticated ${api.name}") - } else { - Log.i(TAG, "failed to authenticate ${api.name}") - } - - activity.runOnUiThread { - try { - showToast( - activity, - getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail).format( - api.name - ) - ) - } catch (e: Exception) { - logError(e) // format might fail - } - } - } - } - } - } else if (URI(str).scheme == appStringRepo) { - val url = str.replaceFirst(appStringRepo, "https") - loadRepository(url) - } else { - if (str.startsWith(DOWNLOAD_NAVIGATE_TO)) { - this.navigate(R.id.navigation_downloads) - } else { - for (api in apis) { - if (str.startsWith(api.mainUrl)) { - loadResult(str, api.name) - break - } - } - } - } - } + handleAppIntentUrl(this, str, false) } private fun NavDestination.matchDestination(@IdRes destId: Int): Boolean = @@ -445,7 +459,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } // it.hashCode() is not enough to make sure they are distinct - apis = allProviders.distinctBy { it.lang + it.name + it.mainUrl + it.javaClass.name } + apis = + allProviders.distinctBy { it.lang + it.name + it.mainUrl + it.javaClass.name } APIHolder.apiMap = null } catch (e: Exception) { logError(e) @@ -465,9 +480,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { lastError = errorFile.readText(Charset.defaultCharset()) errorFile.delete() } - + val settingsForProvider = SettingsJson() - settingsForProvider.enableAdult = settingsManager.getBoolean(getString(R.string.enable_nsfw_on_providers_key), false) + settingsForProvider.enableAdult = + settingsManager.getBoolean(getString(R.string.enable_nsfw_on_providers_key), false) MainAPI.settingsForProvider = settingsForProvider @@ -501,7 +517,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } ioSafe { - if (settingsManager.getBoolean(getString(R.string.auto_update_plugins_key), true)) { + if (settingsManager.getBoolean( + getString(R.string.auto_update_plugins_key), + true + ) + ) { PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) } else { PluginManager.loadAllOnlinePlugins(this@MainActivity) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt index 0f882f3b..ef74edfc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt @@ -1,9 +1,11 @@ package com.lagradost.cloudstream3.syncproviders +import androidx.fragment.app.FragmentActivity + interface OAuth2API : AuthAPI { val key: String val redirectUrl: String suspend fun handleRedirect(url: String) : Boolean - fun authenticate() + fun authenticate(activity: FragmentActivity?) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 606fee97..3140abbc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.syncproviders.providers +import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper @@ -48,9 +49,9 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { removeAccountKeys() } - override fun authenticate() { + override fun authenticate(activity: FragmentActivity?) { val request = "https://anilist.co/api/v2/oauth/authorize?client_id=$key&response_type=token" - openBrowser(request) + openBrowser(request, activity) } override suspend fun handleRedirect(url: String): Boolean { diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt index f847e0b2..7ec168da 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.syncproviders.providers +import androidx.fragment.app.FragmentActivity import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API @@ -15,7 +16,7 @@ class Dropbox : OAuth2API { override val icon: Int get() = TODO("Not yet implemented") - override fun authenticate() { + override fun authenticate(activity: FragmentActivity?) { TODO("Not yet implemented") } 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 ea27720a..c08958ce 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 @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.syncproviders.providers import android.util.Base64 +import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser @@ -281,7 +282,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { return false } - override fun authenticate() { + override fun authenticate(activity: FragmentActivity?) { // It is recommended to use a URL-safe string as code_verifier. // See section 4 of RFC 7636 for more details. @@ -294,7 +295,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { val codeChallenge = codeVerifier val request = "$mainUrl/v1/oauth2/authorize?response_type=code&client_id=$key&code_challenge=$codeChallenge&state=RequestID$requestId" - openBrowser(request) + openBrowser(request, activity) } private var requestId = 0 diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index cb4bbf37..fbc055a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -11,12 +11,12 @@ import android.webkit.WebViewClient import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.navigation.fragment.findNavController +import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.network.WebViewResolver -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo import com.lagradost.cloudstream3.utils.AppUtils.loadRepository import kotlinx.android.synthetic.main.fragment_webview.* -import java.net.URI class WebviewFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -31,16 +31,8 @@ class WebviewFragment : Fragment() { request: WebResourceRequest? ): Boolean { val requestUrl = request?.url.toString() - val repoUrl = if (requestUrl.startsWith("https://cs.repo")) { - "https://" + requestUrl.substringAfter("?") - } else if (URI(requestUrl).scheme == appStringRepo) { - requestUrl.replaceFirst(appStringRepo, "https") - } else { - null - } - - if (repoUrl != null) { - activity?.loadRepository(repoUrl) + val performedAction = MainActivity.handleAppIntentUrl(activity, requestUrl, true) + if (performedAction) { findNavController().popBackStack() return true } @@ -50,6 +42,7 @@ class WebviewFragment : Fragment() { } web_view.addJavascriptInterface(RepoApi(activity), "RepoApi") web_view.settings.javaScriptEnabled = true + web_view.settings.userAgentString = USER_AGENT web_view.settings.domStorageEnabled = true WebViewResolver.webViewUserAgent = web_view.settings.userAgentString diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 2554d6ee..f9627e46 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -1,8 +1,5 @@ package com.lagradost.cloudstream3.ui.settings -import android.app.Activity -import android.content.Intent -import android.net.Uri import android.os.Bundle import android.view.View import android.view.View.* @@ -12,8 +9,10 @@ import androidx.annotation.UiThread import androidx.appcompat.app.AlertDialog import androidx.core.view.isGone import androidx.core.view.isVisible +import androidx.fragment.app.FragmentActivity import androidx.preference.PreferenceFragmentCompat import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError @@ -39,7 +38,11 @@ import kotlinx.android.synthetic.main.add_account_input.* class SettingsAccount : PreferenceFragmentCompat() { companion object { /** Used by nginx plugin too */ - fun showLoginInfo(activity: Activity?, api: AccountManager, info: AuthAPI.LoginInfo) { + fun showLoginInfo( + activity: FragmentActivity?, + api: AccountManager, + info: AuthAPI.LoginInfo + ) { val builder = AlertDialog.Builder(activity ?: return, R.style.AlertDialogCustom) .setView(R.layout.account_managment) @@ -62,9 +65,13 @@ class SettingsAccount : PreferenceFragmentCompat() { dialog.dismissSafe(activity) showAccountSwitch(activity, api) } + + if (isTvSettings()) { + dialog.account_switch_account?.requestFocus() + } } - fun showAccountSwitch(activity: Activity, api: AccountManager) { + fun showAccountSwitch(activity: FragmentActivity, api: AccountManager) { val accounts = api.getAccounts() ?: return val builder = @@ -98,11 +105,11 @@ class SettingsAccount : PreferenceFragmentCompat() { } @UiThread - fun addAccount(activity: Activity?, api: AccountManager) { + fun addAccount(activity: FragmentActivity?, api: AccountManager) { try { when (api) { is OAuth2API -> { - api.authenticate() + api.authenticate(activity) } is InAppAuthAPI -> { val builder = @@ -144,13 +151,11 @@ class SettingsAccount : PreferenceFragmentCompat() { dialog.login_username_input?.isVisible = api.requiresUsername dialog.create_account?.isGone = api.createAccountUrl.isNullOrBlank() dialog.create_account?.setOnClickListener { - val i = Intent(Intent.ACTION_VIEW) - i.data = Uri.parse(api.createAccountUrl) - try { - activity.startActivity(i) - } catch (e: Exception) { - logError(e) - } + openBrowser( + api.createAccountUrl ?: return@setOnClickListener, + activity + ) + dialog.dismissSafe() } dialog.text1?.text = api.name @@ -181,9 +186,10 @@ class SettingsAccount : PreferenceFragmentCompat() { try { showToast( activity, - activity.getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail).format( - api.name - ) + activity.getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail) + .format( + api.name + ) ) } catch (e: Exception) { logError(e) // format might fail 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 1c7bb214..cf3fbfde 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -31,6 +31,7 @@ import androidx.core.content.ContextCompat import androidx.core.text.HtmlCompat import androidx.core.text.toSpanned import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -415,7 +416,7 @@ object AppUtils { } } - fun AppCompatActivity.loadResult( + fun FragmentActivity.loadResult( url: String, apiName: String, startAction: Int = 0, diff --git a/app/src/main/res/layout/main_settings.xml b/app/src/main/res/layout/main_settings.xml index 1527599c..387f98fa 100644 --- a/app/src/main/res/layout/main_settings.xml +++ b/app/src/main/res/layout/main_settings.xml @@ -101,7 +101,7 @@ Date: Sat, 17 Sep 2022 17:41:44 +0200 Subject: [PATCH 073/888] Update plugin backend --- .../cloudstream3/plugins/VotingApi.kt | 78 ++++++++++++------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index ab702d71..f099ad1a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -10,6 +10,9 @@ import java.security.MessageDigest import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main +import kotlinx.coroutines.delay +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock object VotingApi { // please do not cheat the votes lol private const val LOGKEY = "VotingApi" @@ -23,10 +26,10 @@ object VotingApi { // please do not cheat the votes lol private val apiDomain = "https://api.countapi.xyz" private fun transformUrl(url: String): String = // dont touch or all votes get reset - MessageDigest - .getInstance("SHA-256") - .digest("${url}#funny-salt".toByteArray()) - .fold("") { str, it -> str + "%02x".format(it) } + MessageDigest + .getInstance("SHA-256") + .digest("${url}#funny-salt".toByteArray()) + .fold("") { str, it -> str + "%02x".format(it) } suspend fun SitePlugin.getVotes(): Int { return getVotes(url) @@ -53,9 +56,9 @@ object VotingApi { // please do not cheat the votes lol return votesCache[pluginUrl] ?: app.get(url).parsedSafe()?.value?.also { votesCache[pluginUrl] = it } ?: (0.also { - ioSafe { - createBucket(pluginUrl) - } + ioSafe { + createBucket(pluginUrl) + } }) } @@ -64,7 +67,8 @@ object VotingApi { // please do not cheat the votes lol } private suspend fun createBucket(pluginUrl: String) { - val url = "${apiDomain}/create?namespace=cs3-votes&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0" + val url = + "${apiDomain}/create?namespace=cs3-votes&key=${transformUrl(pluginUrl)}&value=0&update_lowerbound=-2&update_upperbound=2&enable_reset=0" Log.d(LOGKEY, "Requesting: $url") app.get(url) } @@ -74,32 +78,46 @@ object VotingApi { // please do not cheat the votes lol return true } + private val voteLock = Mutex() suspend fun vote(pluginUrl: String, requestType: VoteType): Int { - if (!canVote(pluginUrl)) { - main { - Toast.makeText(context, R.string.extension_install_first, Toast.LENGTH_SHORT).show() + // Prevent multiple requests at the same time. + voteLock.withLock { + if (!canVote(pluginUrl)) { + main { + Toast.makeText(context, R.string.extension_install_first, Toast.LENGTH_SHORT) + .show() + } + return getVotes(pluginUrl) } - return getVotes(pluginUrl) - } - val savedType: VoteType = getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE - var newType: VoteType = requestType - var changeValue = 0 - if (requestType == savedType) { - newType = VoteType.NONE - changeValue = -requestType.value - } else if (savedType == VoteType.NONE) { - changeValue = requestType.value - } else if (savedType != requestType) { - changeValue = -savedType.value + requestType.value - } - val url = "${apiDomain}/update/cs3-votes/${transformUrl(pluginUrl)}?amount=${changeValue}" - Log.d(LOGKEY, "Requesting: $url") - val res = app.get(url).parsedSafe()?.value - if (res != null) { + + val savedType: VoteType = + getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: VoteType.NONE + + val newType = if (requestType == savedType) VoteType.NONE else requestType + val changeValue = if (requestType == savedType) { + -requestType.value + } else if (savedType == VoteType.NONE) { + requestType.value + } else if (savedType != requestType) { + -savedType.value + requestType.value + } else 0 + + // Pre-emptively set vote key setKey("cs3-votes/${transformUrl(pluginUrl)}", newType) - votesCache[pluginUrl] = res + + val url = + "${apiDomain}/update/cs3-votes/${transformUrl(pluginUrl)}?amount=${changeValue}" + Log.d(LOGKEY, "Requesting: $url") + val res = app.get(url).parsedSafe()?.value + + if (res == null) { + // "Refund" key if the response is invalid + setKey("cs3-votes/${transformUrl(pluginUrl)}", savedType) + } else { + votesCache[pluginUrl] = res + } + return res ?: 0 } - return res ?: 0 } private data class Result( From 9bbe3d65d2aed0b8a8686848ce4e20fb7d8f468e Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sun, 18 Sep 2022 14:06:48 +0200 Subject: [PATCH 074/888] link dokka to github and make builds concurrent --- .../{issue-action.yml => issue_action.yml} | 126 +++++++++--------- .github/workflows/prerelease.yml | 4 +- app/build.gradle | 26 +++- 3 files changed, 86 insertions(+), 70 deletions(-) rename .github/workflows/{issue-action.yml => issue_action.yml} (97%) diff --git a/.github/workflows/issue-action.yml b/.github/workflows/issue_action.yml similarity index 97% rename from .github/workflows/issue-action.yml rename to .github/workflows/issue_action.yml index bfcb10d0..9ca9ff04 100644 --- a/.github/workflows/issue-action.yml +++ b/.github/workflows/issue_action.yml @@ -1,63 +1,63 @@ -name: Issue automatic actions - -on: - issues: - types: [opened, edited] - -jobs: - issue-moderator: - runs-on: ubuntu-latest - steps: - - name: Generate access token - id: generate_token - uses: tibdex/github-app-token@v1 - with: - app_id: ${{ secrets.GH_APP_ID }} - private_key: ${{ secrets.GH_APP_KEY }} - - name: Similarity analysis - uses: actions-cool/issues-similarity-analysis@v1 - with: - token: ${{ steps.generate_token.outputs.token }} - filter-threshold: 0.5 - title-excludes: '' - comment-title: | - ### Your issue looks similar to these issues: - Please close if duplicate. - comment-body: '${index}. ${similarity} #${number}' - - uses: actions/checkout@v2 - - name: Automatically close issues that dont follow the issue template - uses: lucasbento/auto-close-issues@v1.0.2 - with: - github-token: ${{ steps.generate_token.outputs.token }} - issue-close-message: | - @${issue.user.login}: hello! :wave: - This issue is being automatically closed because it does not follow the issue template." - closed-issues-label: "invalid" - - name: Check if issue mentions a provider - id: provider_check - env: - GH_TEXT: "${{ github.event.issue.title }} ${{ github.event.issue.body }}" - run: | - wget --output-document check_issue.py "https://raw.githubusercontent.com/recloudstream/.github/master/.github/check_issue.py" - pip3 install httpx - RES="$(python3 ./check_issue.py)" - echo "::set-output name=name::${RES}" - - name: Comment if issue mentions a provider - if: steps.provider_check.outputs.name != 'none' - uses: actions-cool/issues-helper@v3 - with: - actions: 'create-comment' - token: ${{ steps.generate_token.outputs.token }} - body: | - Hello ${{ github.event.issue.user.login }}. - Please do not report any provider bugs here. This repository does not contain any providers. Please find the appropriate repository and report your issue there or join the [discord](https://discord.gg/5Hus6fM). - - Found provider name: `${{ steps.provider_check.outputs.name }}` - - name: Add eyes reaction to all issues - uses: actions-cool/emoji-helper@v1.0.0 - with: - type: 'issue' - token: ${{ steps.generate_token.outputs.token }} - emoji: 'eyes' - - +name: Issue automatic actions + +on: + issues: + types: [opened, edited] + +jobs: + issue-moderator: + runs-on: ubuntu-latest + steps: + - name: Generate access token + id: generate_token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.GH_APP_ID }} + private_key: ${{ secrets.GH_APP_KEY }} + - name: Similarity analysis + uses: actions-cool/issues-similarity-analysis@v1 + with: + token: ${{ steps.generate_token.outputs.token }} + filter-threshold: 0.5 + title-excludes: '' + comment-title: | + ### Your issue looks similar to these issues: + Please close if duplicate. + comment-body: '${index}. ${similarity} #${number}' + - uses: actions/checkout@v2 + - name: Automatically close issues that dont follow the issue template + uses: lucasbento/auto-close-issues@v1.0.2 + with: + github-token: ${{ steps.generate_token.outputs.token }} + issue-close-message: | + @${issue.user.login}: hello! :wave: + This issue is being automatically closed because it does not follow the issue template." + closed-issues-label: "invalid" + - name: Check if issue mentions a provider + id: provider_check + env: + GH_TEXT: "${{ github.event.issue.title }} ${{ github.event.issue.body }}" + run: | + wget --output-document check_issue.py "https://raw.githubusercontent.com/recloudstream/.github/master/.github/check_issue.py" + pip3 install httpx + RES="$(python3 ./check_issue.py)" + echo "::set-output name=name::${RES}" + - name: Comment if issue mentions a provider + if: steps.provider_check.outputs.name != 'none' + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ steps.generate_token.outputs.token }} + body: | + Hello ${{ github.event.issue.user.login }}. + Please do not report any provider bugs here. This repository does not contain any providers. Please find the appropriate repository and report your issue there or join the [discord](https://discord.gg/5Hus6fM). + + Found provider name: `${{ steps.provider_check.outputs.name }}` + - name: Add eyes reaction to all issues + uses: actions-cool/emoji-helper@v1.0.0 + with: + type: 'issue' + token: ${{ steps.generate_token.outputs.token }} + emoji: 'eyes' + + diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 903878ed..37161d6b 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -43,9 +43,7 @@ jobs: echo "::set-output name=key_pwd::$KEY_PWD" - name: Run Gradle run: | - ./gradlew assemblePrerelease - ./gradlew androidSourcesJar - ./gradlew makeJar + ./gradlew assemblePrerelease makeJar androidSourcesJar env: SIGNING_KEY_ALIAS: "key0" SIGNING_KEY_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }} diff --git a/app/build.gradle b/app/build.gradle index b80c820f..291e71ff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -206,10 +206,28 @@ task androidSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs//full sources } +// this is used by the gradlew plugin task makeJar(type: Copy) { - // after modifying here, you can export. Jar from('build/intermediates/compile_app_classes_jar/debug') - into('build') // output location - include('classes.jar') // the classes file of the imported rack package - dependsOn build + into('build') + include('classes.jar') + dependsOn('build') } + +dokkaHtml { + moduleName.set("Cloudstream") + dokkaSourceSets { + main { + sourceLink { + // Unix based directory relative path to the root of the project (where you execute gradle respectively). + localDirectory.set(file("src/main/java")) + + // URL showing where the source code can be accessed through the web browser + remoteUrl.set(new URL( + "https://github.com/recloudstream/cloudstream/tree/master/app/src/main/java")) + // Suffix which is used to append the line number to the URL. Use #L for GitHub + remoteLineSuffix.set("#L") + } + } + } +} \ No newline at end of file From 29aa541dcee36506807cd8085d91922c18e79916 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 20 Sep 2022 21:53:26 +0200 Subject: [PATCH 075/888] Update Dutch translation to fix crashing caused by incorrect formatting --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ae774f03..a5afd785 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -20,7 +20,7 @@ Snelheid (%.2fx) - Beoordeeld: %.Als + Beoordeeld: %.1fAls Nieuwe update gevonden!\n%s -> %s Filler %d min From d057a733685df88e6d3efb52878649389b878fcf Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 20 Sep 2022 22:01:30 +0200 Subject: [PATCH 076/888] fix dokka? --- .github/workflows/generate_dokka.yml | 3 +-- crowdin.yml | 5 ----- 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 crowdin.yml diff --git a/.github/workflows/generate_dokka.yml b/.github/workflows/generate_dokka.yml index 032ea8d0..3c5caad7 100644 --- a/.github/workflows/generate_dokka.yml +++ b/.github/workflows/generate_dokka.yml @@ -39,9 +39,8 @@ jobs: - name: Clean old builds run: | - shopt -s extglob cd $GITHUB_WORKSPACE/dokka/ - rm -rf !(.git) + rm -rf "./-cloudstream" - name: Setup JDK 11 uses: actions/setup-java@v1 diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index 2cc75108..00000000 --- a/crowdin.yml +++ /dev/null @@ -1,5 +0,0 @@ -files: - - source: /app/src/main/res/values/strings.xml - translation: /app/src/main/res/values-%android_code%/strings.xml - - source: /app/src/main/res/values/array.xml - translation: /app/src/main/res/values-%android_code%/array.xml From 880b89ea85cd53f99e8fe9c1481d5cae28d06124 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Wed, 21 Sep 2022 17:47:18 +0200 Subject: [PATCH 077/888] Fixed lock button on Arabic locale --- .../com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 1 + 1 file changed, 1 insertion(+) 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 19f2b25b..1ddd752f 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 @@ -611,6 +611,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { player_lock?.isGone = !isShowing //player_media_route_button?.isClickable = !isGone player_go_back_holder?.isGone = isGone + player_sources_btt?.isGone = isGone } private fun updateLockUI() { From b7ad79a02bbb6f32c4fc3c4e5edaf35bfa206a1e Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:50:28 +0200 Subject: [PATCH 078/888] Add a notification when updated extensions --- .../cloudstream3/plugins/PluginManager.kt | 82 ++++++++++++++++++- app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index b5441b94..c4d1f66f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -1,13 +1,19 @@ package com.lagradost.cloudstream3.plugins +import android.app.* import dalvik.system.PathClassLoader import com.google.gson.Gson import android.content.res.AssetManager import android.content.res.Resources import android.os.Environment import android.widget.Toast -import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Build import android.util.Log +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import androidx.core.net.toUri import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -25,7 +31,9 @@ import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.extractorApis import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -38,6 +46,9 @@ import java.util.* const val PLUGINS_KEY = "PLUGINS_KEY" const val PLUGINS_KEY_LOCAL = "PLUGINS_KEY_LOCAL" +const val EXTENSIONS_CHANNEL_ID = "cloudstream3.extensions" +const val EXTENSIONS_CHANNEL_NAME = "Extensions" +const val EXTENSIONS_CHANNEL_DESCRIPT = "Extension notification channel" // Data class for internal storage data class PluginData( @@ -78,6 +89,8 @@ object PluginManager { const val TAG = "PluginManager" + private var hasCreatedNotChanel = false + /** * Store data about the plugin for fetching later * */ @@ -220,8 +233,11 @@ object PluginManager { "Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}" } + val updatedPlugins = mutableListOf() + outdatedPlugins.apmap { pluginData -> if (pluginData.isDisabled) { + //updatedPlugins.add(activity.getString(R.string.single_plugin_disabled, pluginData.onlineData.second.name)) unloadPlugin(pluginData.savedData.filePath) } else if (pluginData.isOutdated) { downloadAndLoadPlugin( @@ -229,10 +245,17 @@ object PluginManager { pluginData.onlineData.second.url, pluginData.savedData.internalName, pluginData.onlineData.first - ) + ).let { success -> + if (success) + updatedPlugins.add(pluginData.onlineData.second.name) + } } } + main { + createNotification(activity, updatedPlugins) + } + ioSafe { afterPluginsLoadedEvent.invoke(true) } @@ -438,4 +461,59 @@ object PluginManager { false } } + + private fun Context.createNotificationChannel() { + hasCreatedNotChanel = true + // Create the NotificationChannel, but only on API 26+ because + // the NotificationChannel class is new and not in the support library + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = EXTENSIONS_CHANNEL_NAME //getString(R.string.channel_name) + val descriptionText = EXTENSIONS_CHANNEL_DESCRIPT//getString(R.string.channel_description) + val importance = NotificationManager.IMPORTANCE_LOW + val channel = NotificationChannel(EXTENSIONS_CHANNEL_ID, name, importance).apply { + description = descriptionText + } + // Register the channel with the system + val notificationManager: NotificationManager = + this.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.createNotificationChannel(channel) + } + } + private fun createNotification( + context: Context, + extensionNames: List + ): Notification? { + try { + if (extensionNames.isEmpty()) return null + + val content = extensionNames.joinToString(", ") +// main { // DON'T WANT TO SLOW IT DOWN + val builder = NotificationCompat.Builder(context, EXTENSIONS_CHANNEL_ID) + .setAutoCancel(false) + .setColorized(true) + .setOnlyAlertOnce(true) + .setSilent(true) + .setPriority(NotificationCompat.PRIORITY_LOW) + .setColor(context.colorFromAttribute(R.attr.colorPrimary)) + .setContentTitle(context.getString(R.string.plugins_updated, extensionNames.size)) + .setSmallIcon(R.drawable.ic_baseline_extension_24) + .setStyle(NotificationCompat.BigTextStyle() + .bigText(content)) + .setContentText(content) + + if (!hasCreatedNotChanel) { + context.createNotificationChannel() + } + + val notification = builder.build() + with(NotificationManagerCompat.from(context)) { + // notificationId is a unique int for each notification that you must define + notify((System.currentTimeMillis()/1000).toInt(), notification) + } + return notification + } catch (e: Exception) { + logError(e) + return null + } + } } \ 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 ea6eb140..fdc89692 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -455,4 +455,5 @@ Wspierane Język Najpierw zainstaluj rozszerzenie + Zaaktualizowano %d rozszerzeń diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e6dadcf..d086ad27 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -600,6 +600,7 @@ Downloaded: %d Disabled: %d Not downloaded: %d + Updated %d plugins Add a repository to install site extensions View community repositories Public list From 94fa6b963b38e9b2e30c7d3587bff3c94aa0808b Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 22 Sep 2022 17:20:26 +0200 Subject: [PATCH 079/888] Fix buggy OpenSubtitles caused by race condition --- .../java/com/lagradost/cloudstream3/MainActivity.kt | 10 ++++++---- .../com/lagradost/cloudstream3/ui/WebviewFragment.kt | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 7686a84c..cd320060 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -150,7 +150,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { * @return true if the str has launched an app task (be it successful or not) * @param isWebview does not handle providers and opening download page if true. Can still add repos and login. * */ - fun handleAppIntentUrl(activity: FragmentActivity?, str: String?, isWebview: Boolean): Boolean = + fun handleAppIntentUrl( + activity: FragmentActivity?, + str: String?, + isWebview: Boolean + ): Boolean = with(activity) { if (str != null && this != null) { if (str.startsWith("https://cs.repo")) { @@ -191,7 +195,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val url = str.replaceFirst(appStringRepo, "https") loadRepository(url) return true - } else if (!isWebview){ + } else if (!isWebview) { if (str.startsWith(DOWNLOAD_NAVIGATE_TO)) { this.navigate(R.id.navigation_downloads) return true @@ -565,9 +569,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { for (api in accountManagers) { api.init() } - } - ioSafe { inAppAuths.apmap { api -> try { api.initialize() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index fbc055a8..19e24f74 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -40,13 +40,15 @@ class WebviewFragment : Fragment() { return super.shouldOverrideUrlLoading(view, request) } } + + WebViewResolver.webViewUserAgent = web_view.settings.userAgentString + web_view.addJavascriptInterface(RepoApi(activity), "RepoApi") web_view.settings.javaScriptEnabled = true web_view.settings.userAgentString = USER_AGENT web_view.settings.domStorageEnabled = true +// WebView.setWebContentsDebuggingEnabled(true) - WebViewResolver.webViewUserAgent = web_view.settings.userAgentString -// web_view.settings.userAgentString = USER_AGENT web_view.loadUrl(url) } From da09310595677fd3600cc6f1ce9e957a677abadf Mon Sep 17 00:00:00 2001 From: "imgbot[bot]" <31301654+imgbot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:24:00 +0200 Subject: [PATCH 080/888] [skip actions] [ImgBot] Optimize images (#116) Co-authored-by: ImgBotApp --- .github/downloads.jpg | Bin 64109 -> 59461 bytes .github/home.jpg | Bin 139994 -> 139384 bytes .github/player.jpg | Bin 53961 -> 49418 bytes .github/results.jpg | Bin 107145 -> 98562 bytes .github/search.jpg | Bin 153728 -> 152135 bytes app/src/debug/ic_launcher-playstore.png | Bin 13033 -> 9642 bytes app/src/debug/res/mipmap-hdpi/ic_launcher.png | Bin 2884 -> 2737 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 2884 -> 2737 bytes app/src/debug/res/mipmap-mdpi/ic_launcher.png | Bin 1825 -> 1778 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 1825 -> 1778 bytes app/src/debug/res/mipmap-xhdpi/ic_banner.png | Bin 9281 -> 8469 bytes .../debug/res/mipmap-xhdpi/ic_launcher.png | Bin 4152 -> 3931 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 4152 -> 3931 bytes .../debug/res/mipmap-xxhdpi/ic_launcher.png | Bin 6601 -> 6012 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 6601 -> 6012 bytes .../debug/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9182 -> 8413 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 9182 -> 8413 bytes app/src/main/ic_launcher-playstore.png | Bin 13532 -> 9654 bytes app/src/main/res/drawable/example_poster.jpg | Bin 62738 -> 55971 bytes .../drawable/subtitles_preview_background.jpg | Bin 1763215 -> 1655632 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2826 -> 2747 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 2826 -> 2747 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1790 -> 1769 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 1790 -> 1769 bytes app/src/main/res/mipmap-xhdpi/ic_banner.png | Bin 9287 -> 9195 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4082 -> 3898 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 4082 -> 3898 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6536 -> 6000 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 6536 -> 6000 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9093 -> 8334 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 9093 -> 8334 bytes app/src/prerelease/ic_launcher-playstore.png | Bin 13480 -> 9196 bytes .../res/mipmap-hdpi/ic_launcher.png | Bin 2783 -> 2714 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 2783 -> 2714 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 1769 -> 1755 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 1769 -> 1755 bytes .../prerelease/res/mipmap-xhdpi/ic_banner.png | Bin 9447 -> 7918 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 4024 -> 3893 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 4024 -> 3893 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 6410 -> 5982 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 6410 -> 5982 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 8956 -> 8298 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 8956 -> 8298 bytes .../release/res/mipmap-xhdpi/ic_banner.png | Bin 9287 -> 9195 bytes 44 files changed, 0 insertions(+), 0 deletions(-) diff --git a/.github/downloads.jpg b/.github/downloads.jpg index 0b671edc463e1082cf115f2f023ea89e40196d80..ca14a664a2ce2b07cdc366343d54c690d9bacc01 100644 GIT binary patch literal 59461 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ℜ5F2>W2mS%`!tt>Y2ggw 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

g!fC#;0+fen{k3i*HT`@Uz5%PpHG z!Cm^L3(OC+m%K|#bEPy-lJhBM~Nhg5ex48|bhgu~Jm{m@;L+cIq0UAwAc;aHLIwomF`!k@2Q^ugeMy&f_ zSc31DsJVrLY4A)4TZaQ{h#6An-F;==kvWO^ZZmP+N=1%o*ha+CLfQ1=T^X2wx{H6w)U8^Z5N0pAp7j5l9wy3OOan2%J6d} zl&_->J=#&70snd4wW``5qWzLV#728($1=`Xv+UT{$+|DKhr?Bw^o ziyqac0<8MrlZ`W7sYB!4;4yUB12uQzun$b+$y99s7~VP+H&oro~fG@pt7`nHdZ7LZ*ie zJ$h!QC~YEqbX2!?ElvKqY7N2J3pevcj>0B_%{xQSr6HdCXfibHKaW94gS@PHm9>3h z!+mV{v)$Q3A8iM;1a!Va=1ZQu1Ma%Oc^hBxXDUja_cB~~JV?T{OEt-K&mM7Dx)Ua4 zlYeP$b=9XiKAkr8MR^8aQeS%ID^{i3p(nQ^_aoUIj}p^7mRa=~CkkN(5=j(%=!yyt zmAyR(oG0!+%TAG$MkdzM-X9MrZ@on@RbW#~obSkI-oBzL>xe5R35q7|4^d><3Mtx;=x0*<9KreEZ4I#e#E=E@tWQp| z!o-!AjKMrW@iLLlPuME-0$fqGRKI@vej@Jx*}(ovkhgKjzY_7@$*aNg;IeW1F~w9xi-ZXDsAa%y zusdGbGh&f#w(onos@&|`!at21S&oOgga`#djFxy-Cg|-d$>ZH`YF!EUCnT$TLod0$ zpT%8K9W12#^09$Cc`ifu-s7IoXga zUp`v%@Q#T}cG#J3rmZ`ZODfdT+Zba$ob#Bw%+m8&%Jdx@NTS0lN3^@m?(9#*7BKl@ zN>I&7o8g*~g>9!l3z1zKkX{<(FYM+cKfV_dzp!NL@TF56(c;ELiNILo4E16!&-fU=wyAYk^R}=pQoQXPN literal 139994 zcmeFYcUV(Fw>KI@MG-+tK&eWV&;$hOC=jX;10-~iE}{1hqJk6w0YfK9hX6r9K)Oip zH3>y}?;ss1H@^LkbMF1_J?DPUcb?~6JUeUcnKi#zv!<|T&)S!xm$Lv`u$PS$0HCf8 z0097i8-$BMmvdJhs>sWmywHRwsyqh+h=>4yD|i3oT)6`P*gLqnXe!Cw*VWU%|0nJ5 zWNPl}^mq9`-~^0A9Dwi(01Wf}2l@X`NjEJlUCjwfJA}*4g-|&FKx9FXX{`S$d;O8k z{wja?BfDs8$`f=x6Xb{1|00|Hi|py<)11!w}40CEKRzm@*!PsdCEKOUb}wn>hvGE;=aei_lWP|BaVmM5C4D=k&uv(-XNtW zC8d5yPfP#s|218H2Tm)aB z60#9@07S%Bu3ouz<@W8HWF#b4i2+1ch_6y!yZ%6s%9Mnf<{9)x46D!+O_;NL(5H;- zvT`6T-Ca>vw|Avq2Zx5)ghk}wW-f8_oaPpmZ{EgcW;M;uu|F1*2W$P{;8IZ3w%W1w zKsN8@=n(2+AQ(X~qIHb&*ZTsulb`F z>S|2P3~f;s7;V4sHnyLUWd@39hx%p2FW;3*z}0@9L>*?kEmcvuQB7_!F}OzA)>6Uu z_${nMxM#!L%ryz}zCqUM!hDSVnY}ta(cZmosNsTQCK^3PDcMI6*!^u;>733onNjJs zn_jdC?8lf`a>4I6XhcHUfpUt$a0&aU)Dd7MTGBkGQs0j1)qNM%Y@~zT!~9yl)cnPx zk97&38FxAcd*8fK0+|F=sJJbnS^can^IB@mR~atiLU>0tfc&Km9IDELboC`BlZ>fD ztD96zgL%(sY{t3wEaFrf!pyDsB+w;qb~8o%X1s7#okg4YA=Zy_ zvsS0ieSU@B_|smcTG4ZX>>l93zR)R≷0fx>n%U#P8HFhpkHhjfCfOF9)Tyhk|vH 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

    }1zcqB&|>k3C5gbZ0Ig-_H=^rokZp*0QXS;&O41 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 diff --git a/.github/player.jpg b/.github/player.jpg index 0580fb037a9542231874cd1538a30d3dbc32f169..f6959cf31d27e5debc98e7d69b54688c589803a2 100644 GIT binary patch literal 49418 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 diff --git a/.github/results.jpg b/.github/results.jpg index 5e63169fce6924c44b92abd3495ba52d0166914a..4dbc9b8d48abc68bf53b0d8a85e9d28951ce7ad6 100644 GIT binary patch literal 98562 zcmeFZ1#}k4wlMl7#ErO;5MspLjSzQtCGPGdrR$IyQ`|Js=L4M^WWD&$l}6c!XPj(5C{x7K;Jh&m_jb5Mj()s z6o?W80>J=30KRX6lZy!m=*Y^;2#ZMy{ZIhMe&m27gFu#64tDY){Di7%>V%K9UqM&j z-sV^QFLJ=%_3Wcn5NL|#FZll*3D&^SULO$p4E!AI0OLR<3;-P6_$Ti2i0l2tLmqKE zMR@^0CIi69jem#h{SJ3_uyFun`XA->ZR{TLWdP^4v~Ya1^$3q1BN$pKDFC@D@OuWb z2g!p(K>Psy|0?_=p4M3)5c?Gf^d#aRG`&O+sNNR@!e0CbjU)pEdg=oL)s5Nc+Ufpq z1_DUIjesk9o(}>cs)0ag;~)^6#;=b4L-!xo;-A!&5YTxB)YBR`j6oJ4Ll7ZI3}gk; z2hjo;BZwZv0Al^V1QGy2K|n%5LO?-5LP0}A!N4KI!NJ19p(8y-K*mDH#>PU&#KgrX zeU6Jq{0tM5keZN~>?H*y148d zw?#4;FPH-3@DN>|m|Lm8J{ltSV~~@nD$d~{2@SrIbUzQ&zvOwDog!wp<~{kV^`|mu zXCU`=aIuQTlm&YKL=7A=6ugdo&7-RMei-{qbwX+XF>n2Qi-m zf+t5-wyuwKhQj=d>Xbe7|dmC)6jhXS`lxh$Ts|)HFSJg7hC-CoH7yr{WAyY1KZ4CcBo< z83}=LWHqQ!e2mAU7IV~K+KRbqjx3}y zV-WpX*c8p6oJgM-$7dpjHHhlBKXK2(Y2bUZ1|nGN!*R0w)!oM&B8nAcQJYOvBHQ1G zkfNLD2eNSNh)gfQbIPz>d|x&D4(oWF(e@q(d*f}pPQ~vv|0m*bep7i!oPYLAI)JH3 z|C!ukAG%Xz4}Ljln-7qY-duU-*UqIv#RBw+D*9c|rzR2Hw9&qr5(-P1sGWcWtAZ&7 zc+Z+qN^jU+zmzNptYYq(DY*$T3MMsx$hnEVG%mSYsLO#vxE|e~^Bk zz}`P`(h48Y&jmeMo$KLJ>uv`@+!@*2`phzmUELRX7oRr);>Rt~4T(9ZgSyyF3sz2L z#I($JX^|uCAPGIKcl86TO%aH5${P<3+i$Iy*Fjv*pB)*qL<$wNO}@2G5j)#r)Q7`k z^n3Sc7F-7Vx%B$^YJ}Sc=fx-EG2&0wX?%~2-viz;!uC>s?Knx#Bv=I=Dyw2816U z>Hv=ae!TJ1lVW??MLSQ#p*KIhV~gpoC)2D0`zV=encR!cYKSQN!vTnE2wvX}`31S& z-~00uXX7-j^qtUc+%Ib;h@#_l;CS8RE>D?qNe%+__u-2xbT*r@mz!lm_GAcM@pZbl zn`t9BoW2>_>_se)Sn~a}tMW_!^Xv~Pls4gT7eIj$W?$1i{3!?B_6L!F^F)^Ff5gG? z?%(wLhdB7HE^&WD5UEdKt{!=8K$glrngoOtH41Zu;AF?2(dtg})qS#kxPQeIEgtL& z2j2PD)3nt$fIK&J%`MGag$?ycjWJpBn|2WBLZ{-)HIDlPHe6OJti=v%+zAOPK>%R< zJwP2w5E_}Drd^)heRczZuGVkHxY4J~%ywAGlLquihl`P_XwPU7RU|6!_CcIuM}5U(LH)tYc%V&{WVZ?R_ln{XRtN&?dHP}8_Vd{ zm}59U*wz~8*<7x@=5;sDC6^BR0fbSXe7Dr;vwZ&6`lzd5)7n5Ikr2&Np{q!lTV8eb z)qZ_r`o5cQ~>$fk~gm~S>Z$;wb z4)GT3$m_+dpU^=$boCBYrcG;|UvsL&n^V#mEVRXY<`0E?WTomoxXiJPku|e9j%F{V zW4Oo{ca0iOHHJNU!ZX-A_)8VRN0P7qc_hGy!$ePB!X=-(+;j#zTa3*2wFahzQ;#=V zSX-1MT{F&C+s(Qye+>7+8yxH&h^M>?-q+%tDAA}@=IJ?Xa4s3`?;315osn|u3s+&j zmCa9ZMAAu{*XIqYs)}X9Q`D$3cTB5{;{Nc=S>WT!1Y~|U*i~b{Bhx--uq$Bo~V>N|X!V3a)pWWZ5PP zn_!c@;UVFVK!A(kMQKW>ef{_{W=?#m+HI6mZ_{vdtB$6*PW@)d(s+rDMon*J$=-aH zDrtCNZriZ3zkN`$h&x}kI^3P0XW2bk?KbJYIb-qRl$rG#F|HBYoQYiKQBM zeaF6(#~a={5t)+&^a0Grw%R}s5qCc1nM-NxY5gpegYfp}exg>H6U$@in)5OFM| z4QV{q15zv#ELJ^79*&j4k)dJp*Vbxg={%ZKQZos&7ZjSW7-?qMER|@Dv_H}?dDd!R zo>f(r)+*IBHo6TLr=|&iq|&S^uC~`aG;$)RdAe zK=qtRv$(FD6#G{7hCS|NzBrMctz^OQkco~b^q#xazEz2(YKKQB#u$iyrWW{le@hh| zb?^|;?~vA=%+q)O#2bK2au&!l{BZb|%c)#Fsjp|Kw@*{jqnTqr(3)~`p?op!M4DGo zyVRzyXI_7yq_U!-VXmmmta zf$BL3<8ij#_sT~T!0lNqWGti0`toJSp%Im>#Z2oG?mHaRbL4sR_MfgneHl;Q;s-&! z4jcQi@c+$WF!JC*TDPaM3Lo(?%NCO=!y}FHZI8DV(h}+}XcFEU$Z6|T+G#d7#7kTU zRGL#pV-|mtFdwQbT4hOc)sI9h~D1p0(Cg8E{)88Ph~b7s$Q{ ziSj~EU1YYUIPQGqOTUnE!Kg7TX%#tg?Ne;;A7sWFL6BvzU(-mo#Me`@-qdN_T~Fx42qnpDZPWVbO%d}jMn7-CH# z3n_J2a1a+w^P3Z=@K$(OSII81Dd#Sc4A)lnkDPL+D_3c_Px`|_pV-ijeiq04C$2C_ z{NkXn*yllaP6TS4yIq+V9b7ZL(9&Id+1Wyu#ILf>D<>Em0~W>Bz4Hyvtx|MVM*9?c zceAquuJrR1Mg*@D2!FH-)B>QRWXjov-qNUkG%_ccImB6^M057Y?o2VCzgEv)Br7hP z89ulgV%bwU(O(H(ojC4`qf?)?wY4uX_1=|YQ{2($4_?4LU3FZox7)n>ignc7f44`R zN-yjlT3HB!T9OAz>bC!|Wm(KTGMWJFZPevFo=b|_z|y94k_j?{Kt@twZkC}EY&OF0 zeuzFMu|kFxmz=Z;Qv*i5LV+a~9x1LCx2Mq}Z8O0*PFR@9mwSrJH+VOT9!ahCxckvc z$??1sI!Sv*A>k|xrbFkIrz$qrH}PuMAF0I4mzuP;wcI0`-h^B?&avMgjf>OQ& z-|Ei1SPGD1?OoX;LohNF@2XGcd66+OO0->d>{e9}a>_krcvMc}*w9e<#g`ZV1M^JO z2rEKFpeUQ|CY7GZbFz7N9!3e*-LKr0c}p%$$9_)o_O8#GNSd+liuYa9Te{2&vt1(F z{1OLn74$f!3DZUy8PZ@JR?_ai!D`x9^+g&i28z0B^QxL~Of*|At2*_m3t7jF<+O5k z<=V9oLrb-qYC1Qr6$5IaN>_0wlsu(&Jk2|cHxW*>T%2zZuBBe+3BBCy^a80OC`w&4j>ihM;N!Mg&^Z#wGIBz*;iKWgfRf~p@Q#m=CF-ATTUR>j=d8aLypX}e zf3AXn7K$0+D9Re);30~g+Fcjj3q#eR zTN(rPsd^K!LaL2+JB-}@zK(N-&QWs&|VTJgu5g(vF$Xf;Z~<%27wNnvGX! zO%zbMvlCaQVi(`iOj(~j*ECjpt6imXtd{qsTI+3oY^x0Wn91fvS&MO#Df|&x)^N0V z(z1)ez8xNcjRS%HRO3K6v+w8t5)F#af;Gby)ywJQvIK18)dGd*3kGCw^Yw>AbD~;E zquSYA1BJ^iJ)Q1awDc_KNxBsL6T|qLzJmx4CCX-mIc+l=tC~#eRT$(0uCuetAn~N^ zj4y5x5VhD+9lONF+>l@?Lyq+JDZ{tKm3!;$`SnekUQ(!G9;&#qR2JR~*=R5{b$8CB zN~l=Tr-@#(=Y33fkao)W*%nDBaO`>L#4DKfkD#VQo*@% za&yr9I(zZH$b8L%U`D1+MXRYcxmKfS@F6erG~>!RMW^P>;%YABMkb z348QO<7ev{BAJqzK;CL)k}tTn<9eJOJagUtZ^BKtprq&c$&%(jr5x&mdzvAz%_nt? zGc$}IJ$ox{Mda2&yvhghk$|4DE(wLL9s#d6#PawMTmci+)2PIfRW6cqRv2o|6cZJH z8%9Ep4@xtPh~#cWb!p&@o(lTUT7ghMg*2um?zK6b-^$daDIB8~$Wyq|#Z1SA(<-1V z*d=AJDN|ldmU|SLToEWi%NriDiRJo?^NAe|dJ8y-W%ri~Tq?DAJhGG@$;94oJGiBOJF6Q!U6_k{eFi6Ec zt5+Eo8hYK<5pEpIBxVp^Il4QPGoq1b)J!~ORnAXwiIcd!Oz2zQ`-EmG6eMjtm8F2O zD0s0|NHjfHuGVuzerImdJx}egj~hW|%$9Ir=m7IO#0WgxXCyG`|{8YC2vf%<2~60IoIZl|Q+tNAn0rV6t*SmKs!KS(f#XG1Q@m zcT!RyHL96iMaFM+C9R~;;Gr9mx-C=SD@x}k;Ep{_OKZ7QI3~p`uBMAouq?h|C?}Iz zVk;?MhakvM@gwRo~MSk)J12@(>Y?V3??T);l?1EW*Yi_`awU7dI|Cajzr4J!inh@;t<3(4Uo)|U>5rMMF$ zp}rbgd<**e2&rK)MjKGQ-%^ZrP5q?1B$>+01c3ct84tEl=W^PTmZpGNw^WUXbBOFVw5VdYcoq_!A1omR=lQeS~xdKbeG8 z9BsWxL)Sn_qw})xkyHlAPYZ`+1`Mr}F>FoM6ip~(eb{{lM^dz>Xj7UCJGi7Hi3Jv) z;VrLmN{uWK@m{_$O{Ot{QoaDGHE?s+HGuKH`<$_`=kq{5ZtUQ@;SG2Fut>T9QFwyQBZ;;xHv?+;yAfY9 z;j-f?tyH~i^X##ysAoc*J4Y4@S|2+Hn9ghqnCOpH+0;Eg-L{(eUEqek&xqbMADN|< zH8!gZPWuU4PMkC{fSRC!myF}*sbB(zDEcL>yL@OHjV(obDj97&o7A5w@mEBU;wRftmMjKYg zMS}#>vNx0Q**y+vl%GFe_V+cuKE|S;P^3^1bL(qMYt6}3@elHSnIE*ztw`Z6rh zvg}Opk6NIb@VA35TlF43JOl%~P{}8k6WIfA5ii_f5-v7H?5#(`vSYKZh^t)kY7Oif z^16eJ4miPz=HKWic%p?|J;6#G(d7eaI0v0hu{zE0Yme8KMz1^KAs<~JZ(%|0ws#osgJ z3tY9(u`J%f72=>T6kN&X{^gOEOS<&88?L`|;J-m3g=oW@*$*p`IFAIvnvu84y8r)r zl6{c{bU6^|8SKKm(7XSp+J9gpkuJHML7)OUFKxvBZDpSMzg1>n{PKEb9QN!J2zk=(UpA)Qkx#FON3?39$FS`BO18|<>^_J@^IYLMTm9{+ zQJE$89%?~|&fKhHBp+b-ckti(u&0kp^9l4sqy_iko%tD?-iz||P-XNWW>ZcmUcQM_ zC@2@fo%cv{mnhPhE3cAv+x7mTJaA@eoYQMx^sp|P4!Xzul&C~|GjcV z>hWIP-%9^iCi~5s^-6-r=Q9xgju2=y$kOAlxn4sY{|`n{u|NOUTKtRWH$%RIMd<&R z4$LFNt+;l;(`K{%U#5ruqTBFTN0{&anIe?9?2C4g1)@6}%wute34kO*3*RIDJAe$n zhUWv$wQ3!HopStxizncADWD;x`lR9WNt?OV`D&-_ao#ziD%1fA_;GRWpDr1= zE%ZWaZ6DM*V)ZPD%NjKzxey(mU#hC{GA8}(sO8BgQ9(Av)cgR;TBnE}vf7n^kc3kw7S7GUr8Pu_5P zG5*+a`xE~M;csL9*D61$zbY0*#-F^*Q$ROl5dI&RNVBE=T^0Vr`%eV^6M_Fk;6D-g zPXzuGf&WC{KN0v(1pe1WfEIIsCBdS@Zy5X6WT57^uMYl|Xz*N+DF2Xy#J+XFZvR(Q ze#(IF3SqqaiRv#6{KZ?c|Fo!IHp@W>+{5($ROn9(gm%yq;^!t#%cTjktolM7ZE?5L zGw(pyt_g4cB>PVZIPXAEQz|vQL7=CpZ-f3%3IHoy`adY5Pm>Fpdjjf4kPDiA4%k@o z2VQCamjNsxtKz3H6oK@=5kbh|5bmg-n&2O1ektN#u?lwTP1eHY#~;)VNW;-!+1~#v zTK}757>A{n(?P54bqT#bzt(#}Ee&%VUPRDu!$BaKiN5_8x>z<30>}C%D;KiyH2<+* zh5wv`oyLn94H=HXW4|Y@eA|)vtAuoxg7#Z^C@T!XO?cpa_Fu?I{$rdtV<2dOz0{|F zw`#`98)xA5*&PX32~<=ZfA@(|DA_Mu&b%x{b zcKn{KL4B35_(c!+SdBH(wg%{)zd%uBL>~@pVX{4+E@GZ z4+Rnr@hjE>AMKHn{E`S%u9|#=%`aX^As<559yT;#iHyEl$>T93TX1qg^A@sNr~m{*)`WkKr}G3&Ka$kY`)h&&#Sxioe#K|j zZg+M|4l)|y99_R0I2>pOOqgipVOIogw9;hhj_ASGH8Cu!7c3#UNrMdsW(VvA;&_3i zVyQA@I3hlThRC;e&lixtY0DKPYisBpsz7cCPN79-ote*+Lbuwjt&&%HLqTM3e?n?+e+8W}`F3;fmQYHO zMaY#&ftLFA5c#1+h`p1Tnsp@`IaRm&NK21uw64nFBgg)( zQth4p1pJuUS7i-_(djNbj3b?*LeJ6o1sCB|(m0ZiRMqMEa2_3N>sG&U$8nJ97{ba~=!Dk(E^eWOJ#Sh{-Tlr~m z_XDRA$LuJHaOO%~whi}3#jc^P9l39~bJP8V*_J}L)9c|PZd-fzhI-cTV zRYytgX5$&Xnd<(^K#P0h%>^D@Ivgjv+zN$fJJc_^I8G2XMortkR$!pXC&J4WN)CC( zL2z-%p)vL3L_s859Sn9Y-NvCC6atgl%px-NdVW3MK#07pDTI}+p&l&Kl~j8 z5p1kcvIVC?oxgmXs_3uWZo8+oJ~T?7zuijQo>(P6Zn#s`_SwbRyQ_r&fBo|*w0E?& zZ5wUNR&O+O;asYNhxZu!xp!E@24u@t;CIjo1*WtGEOPLr`Y~_)VrstP(pw3s(wQFM z9R`y9Jo@XzFH+^v2=@gQIfIb-c?oV&_JTP{7~3NLMB?s6HYbH$P5DR%DO`_e$L#D> zx}H$<)MZPdnLDON_$@vSM*Ui(DH7AljW*Xwi}Q-hY17%7<5pX7Z(h*kx~tO2b@jTBeHJi5 zqd(tihY(H>f1U4$;Iwie+Eqx5loP@kMPE{5*5OvX{H;CsW&Xaad|LxKg?gyjeORn# zp3wRDPI<8GSGH&k!TX5Z_FN;{tgwyIY3diXIEC7r*g~jJ;gb`Q^TukT*&}LSIHI8$ z!cEe>Wb4U)fnJyt)W2EhMZjXe{O%#dKyA+D@?$MUmD}b)W&r)CqJ^|MscuXM+pLaB zf@~%C^t7K*&>C~1k_e?S+ujb77JW=)whqm;DxOY`n8ZYjeQ|tR?NUIALRve^=g4rl zK9e^jTc~R$KeIi@vLq8tTChxVfL=}1sh&5ukw?IKbmgwiL%l#&H8bVb*O9BmGN(}| zrS_%fW34y~Mo9cF`?5+dYnoX<50TyCPcPE*xBG&*!%6P@&t_I_L|i-Y_aK~8P*!cc zo~sz_xP%ts$$iAdFUE8{X?O1^@J#OEuW6K%Q6MAr%k#O<8x9E{%;u?EYzU9ZY?#N- z_B(8S1)(}2Y=xXf%w?(Rwa=|?s8M8`v6Q?%Daz>UR(ickLwBq(IWu#WqGsc8?BgPN za|C8-jU@Co;tChIBwaEqcKL>o$=Fj_TyP@WHG}%pl9@qw@^<@1>AKchq_HAiVVT#~ z7@pqan7g?y6FLP1CM%)f8^ySR$RCh%lg9JLdb|9Fu0vvdRVOD`Tr=MY7a&z!5R3J& z@Dy!Z$8S#B1tJ{;KuOz%4Q_LPuqrC;Ne*)X;=?{?X=yIiFI-S~ih1`&CUb|#^r>7? z>)4UQ!yKiPtXgF#D{)26Tj93G{T(ESqC!^N$-c8RoR6yOw?HY>OP zO7qHbFs(pSTHu`1%ECooPQss|h)Q*0o&Kw(<^dH<)TZencIAto{mIj2IAB#l;%LPY z<@j*3PcI9--rbd#k%_qIBQXWW=Mp#wLH;mmT4Di;3;d*;h*(?3f$ z?$lg_Bw6l}q@_}9eg|z5Y~lr2y=d_J-;mKga88*!O3iTUH$gifeZn8-%5dg8dB5`H zUq5|!Y~Bwg9Q_c6pb%A;EFgN1&`=N&zou6`3AoeGq(M_Fa zi_&VV`Xs_iu73&+ zlO+yXrl8&o0QwpufDn%4J)Y(hf{|X(QYJi~d@LJNV!!ab3s z9sGS^>lP|Znk#sNwf*U~;^D_qv!V34VMs{cBR|&p;Y0L{s}VY;t`YhV>IYF2*YgLJ zBlNW5A^MDpYPj{+FJ8PLY`F#E0VkuhlOU_A$_s%C0Q^||K|`d01s+sK#a|@#mq{{8 zTm1mgS5#zpz_3i93DG_KH1QmQfd_u8$IE}o(g)7L0 z8T3S9HCh3jiUlLMLdUklK{BKv3jCX7!xkH4(_4L-_c7I2*q5fZyx56JGH}c`BTrbz`Y;k|Z&u>>gKob*CFkKU<(HL(~R8 zwS0ty+a=c?Nnbp#Wyl+Or7Ub#F(v-e+-!fBNxyJKAWqkdmeYK7Euta5e)gz86m1{B z$V)VnQoZ(dvS~`6NB4}KnB5h0o#v>aPj91nZFS^`^yWlqC`JBigmQc+mPf8OJdPer&(H5)Fl8ucjqu=(A<F zXwPP@vY+w;E(!8 zuj}%CK^F5#Ak?NvD}V3tMJSbwFqTuYqN`YUL0&87NNkdbG`BFHbkI#BY<|#*$%!#J z6jNd1nPpEioBW^~@%ipR9FfFZ+!VEjx>OA+t(L3o58pJ+4eb;Rxt0bHRh=9$;^bBCZLW}}8)`XsN;^x4m6muwsnbwW&%5stWsVLgkJifN4p3jSUxab5 zX0WgrTU>5KKI>Ml%k=`Jch{*(u|^9G&kqpz8H%YXC_@6YRR^aHVh z2+%@3eGicUAjD^qkBwm$Wqs9iuEqEMqe$kJha@(AM#h_aY;3&O5q;pWu#oK?XT-4d z(GYK1m^_V_=`Mqws&sewLOy|BfAPM?5-P#~0T?J`p1?u3hmdqil5}9xL9D5Dhd*&y zWeWwq!}(LPmNV|wMuv`#j_@260>%$&+!Rif5gP&(tsNM0B7GhmBh)my8=GhT4l3CM zu3?AwCf|qG$nA`9gjv|w5b*B-<39(;hLNlE3Sf{?>+bM|LUBf_AFcOb1hvMu@xTU$1qv(C4uv4{TnlLvKmux`Ive9y= z5nAt}<=r`ja$@H<@;FL7f=p{)Eg?m;r-H;p}%Nap`ELXLXrDLouu@W>QYG*3P6J@P)S9W&tLK2hBb_topFg#kKe`enzGPVKU^52}Oy# z;(4apxJ<^@hNIQ2jwyj9i^@EjRBsyJ+^hHHjE28v*>cO$msiPuN!oOGlP~srLY1Y_ zp_`T61SdiOl~tBR1*er$A8?lz$V?_}hAWg6f2NYhd6JUicN&aqq1NZ51b(@^odu~s z_1qE8boO9X%MPv4LZM#>U-KoQ8JBpX!U?q*DW4#FxTK@HmF){)+vWp4!UBz|lK2NX z%C%V7Rt^r!zJi3yz-fCTCZy6^o204e6e|Oj%w`=GGMCubtXz&2niX$(Am)73_fgaB zrAGPjbj@QN&|HgQ%)N<6rdF%pdqX|-g975a$roZ^90mo&4vcJ%cSGPFN%-C-_0Xly z)pl)`t`xzPEGj{3bq<&ycLxj>B^(I~u@*8BU%mp1G~+Q484VSAU{*I@ zJtffe6uew47Nm>KE(6wU-$6c~b?30{ShHEk&YRdsONGO3IA0Z(lQtdaw#;cv-D%yR zSwfPeYPizOS<>t_t)@?&HYA%cOiU~6wo+$-|zp`IvZEt0d*yN=Y zX%oz696jL@MQ5FCL%PM49xKfNLyQDY)6w3bB88Q+;vM$*n&2Qe)&%>?Y&(q;(HdTN z$$245mMiK??JEvu^`vW!@&)dV+5G@C?O@ugn5+wxL0dYH`(vI%c5M2$Xi!hXgoQnX z5y;7(1AQC+ZI6$mHrs6>tb# z*b)wy%QMDS*&Nyk?u3(ZfebQ&X;#>DIvG)cEBl;hje3FPi83mPHjV_jH%+hdO!6wW zF>6-m%Ftj@Gy2)1_BxD?ww2o7Lxt}reYBtD-OKWemq!s*cSy7QW{%kP61%lbFEGG2 z_bcsP%?;-Q!;x9GEV}WoDw*eX<;^QD>AO)V1ngI^-q79eT|$6=aQc0q2IITcy>LXX z(Y+)edQ-1j5Prrq5PY4lA%Q+43rYa=f&Vo)1Pm7JYW+1L*P#nG{hNC-gy#Y8T@bJt zfl=%=$&X3qWAm+t?3r_U?7iPXxQo38Q@6(*wu1)&{fYY4ILJpHR#ifLCl^O(_S&KC+iwbCjD+(-;KYdHgFW!T2 z+m=aRsfF07wT~SOm=3K+-zOH=i>nOmu1Uh;%q@s*9YG>iC`=}g#XuY@jfJXXcF=c6 zRK~zpC(4#vQt9D>$5mePl~ZnpB&y2YnHR7_NC2D_h-HaHG88oF{i@_IoFGIw;OHnf zXROrE;ibCbIw{Y_iN-M97&j9llGfBzaL`bq&^-eeL`38N4nmwtCT_BpuJMncF}zlsnmsrZ7An+$>tH z+fKx>I3TfGQxvCsIzX;oWU2iiei;>Abdp{y`K9hkPGjnT_3{)ZU39P{x2Fht*JCwNfpEP$=C#KBmwj7g=~sW$lM6iM4)H(_a1?Q0$$hid7BNfHrrm)xQyVG55{(yBLg0g6*I0kqCNX@JkEkdY9eX&BH0Jk91d0VtWJ+qR zghCxuSroPyL^|Uf6a|8gu$}9}>&YgIJdDWqX~a?0Iia*0k`gD2bM5SMxI{Rd>LO>r z+bpomvWKNClSk!-oel<>{Tx<;86bzV67|T04oNt(0S=AJN*fWaoP4?FjM89wX&QKz38%rL!tL2!Z%wV9^098}?PKVG76m*W z`4Kx%#~C5tW)#ldqP6B@58#=;?uJ3=n8gKMn!{IAIh7U%;E6 zp#L5mve&EZ!CT7h1PbAirvF$xb~^w>fEbDk(AOUU1`Fp~b06-6Um?5Mr=!YVscfW4 zo2lc>B~QLZ-1>8DHP(l#U{)mc*H$FF7z3oLW_cP$?WW2aZk;_O$xjjO#FTLh;}$B; zW;(1idC?g-hG;~PI5S*ozM43#$+G&D_KaksWx1FU6B&l|1}4TcELh8Uwk2JyA^>1R z4-7pUKe`Xhdsl1#K95~3zZobFMyy+35t)=*h>#vC^C7BQ*mo=XGOUuNq~)D76_Tex zLwlqOlUw$-Ze*~3Ijyk434-E+NT4D=tHf{@#aOZ4vT%@l;og@)l}CY$XrrA{HM%Ib z*;!}h{A85Jb0pWt>BSr^?1Oz4;b#2es9JXO&?F`hEu368+>Jn(FxlGWf671SW z_2s9@hnn{tx^gMGMhfH0^ydW0WqK=`s+1fJ8ltE$$e5d&p^LJgNy+dw4j~HJlMz-2 zEoP5xQv`J!Br>2usZXt3KsyiP>M58;yYl#BykHpp(0I4R23IKF6iZfBy96U=IQx(W zgis8a>U2F0Jx9iOCrtQeei)F!bx0;G9Q0RI^RK$g^a8SZ?1XC(pBVFoa~D*bf!-WR+?Ho z_{099NR+TKR#l_exFWPjCbbpy=BE5}B(M-$R&@@^V*&pPJ2%GLBNZGwrY>b=cCeF& z-i%|GOfONlTTEN(KK!^mdt9>3XtZj_njz+|ejHhl*fUmDzZlO`E4-Hb#mO)R9ZgeA zr{hsQ$8r`m4XUVQUbCEeV%enR>ZZ5mUdDNz&Knjy&dbuZyT#o5vn?~myUb%{_cZ=x z=P3AlcwgnIlOqk7-vQ4wtwmhZAxszz*|y8LM(VF6!Y(Wyb`!7Gd@HV&HTY8$D$@;; zEv-tjd99j;LQzmytrh_F*Ar&niaZb!z3oQAS3~np+ zk)-8FnDF#|tVjA`L%+HS^sshr7 zC*>=n4b4v6iEJ>*Iw~0b4xh2?hs|ID{S5^WnJg?%R>LWL^S+f!NJY{xQRfa@ylxet zE(*Xz+!vl6>8Ty6%%iVan|ZvYW*R0qriyUYxoj;h&0_=;$3^REbV*8jF@ro_oqBf7`&kdG|EIr*z zt8l03j{s=u94;%9!C&#I^ra)OFw~ z6RQBjLh_4*&-y8aZecQ}BqSqbDrf_AoLfVox|EEDQjz4WwXF3tMh*T(yqC^-{ch}f zqxvw>6t`quqx7{)(&{b@#tc4UQJ1lT$wbewr$~fQsdM{<0PVKqnP(>2k_}zYh#LyVSe%fsAQUnYb1K zSwb<5FrlQM2Au}=^Izr8o5#(TU>!k<;{_vZ`LyRWWa9wFFW{;+3N%* zD1E{Zln)F)lzvTsJ$auowVqE_OnB{=Y&apnFLc8StnBH$u%SG`i7D9K0wNZ6WIRQm ztYzc+_VRWMly4Nb?V*nA(>jYLpF%T6Mz+j`VQb1~Y@}xZyKOS!jLK%24YA8+nei7u z=t$s&fa$>Q@Bc~v!Tg!PzAX-^p*WaP<`pAJEMy5!~}}1PW;crat8wrk1bv__)74n zl>(d;0*z8n(@32DT{OfVk(2uCQZio#?XQKAu)AYHF4gV|c{{2~o8vNkRg z-Qn!kQUduLVYNmz9EMQ*6tIPM6nEzN1-A(U7heZg^zR^8dYN0=p$d$(Z)#OZ5~B^4 z=ftl%gB;>b4k>I0iuf}*y}GAzn#G=$&dIkKRRF6G1LxVPdRW@YPZyo_vx8TR1PYF| zVTFtlKB+BvQ5R)+9s!0^W_ftUl7-~r$28C7S{2UI-#BY;;_YL3{#aPak z1d!A$I9};%eDnNc91uc6zMKQ?2?!1GuK>J~a&Z>t^@-4}Y&yBhjn3q#wI!tbJLom_ zchES=6d8$fpns}+RfQX;0mW>RVcyu6iD6cgI z&LR<_Y_HL8zZC)HW^6r~5eur_y}>Kp|^U0guAFV3j4KqRcWYc~Tn1Ko{Ab4EB85zFRYmOTzg^`RaDJu}c3qPu1LjM44){p!*=*7D0IIOtQg$iwK8g zbz#vn%HDM9>8@s>Apm)}Lr|={#8EXEV=@0&$<{yiLzK!Br7Gz6U&1@BL z^SeSkz?)_(u$KKVr^g6h;va$u(BnidbDaGCLf|)f{LGNt*J6D>ZN#P|)_+;nZ=!$V za=rE`z|lW1q(+TRuLbNucaTQQw@pyCt9w8{K;9Jcv=2ewlEg`M4LnqO$+JJd%s$qj z_j&^J1#2z+iuhdW9=CPbIDglP4B^?AO%NW z{;K$FTYLlGHgkWkbd#p2kb(Hi%B}A`+J<2*=Wz~sQ2EAVIoA{<^Db*27Rm2>+q|Oa z&Rl?%$fA2%=CyD7#SZFb^k0>$bozvqFOR%gCPOfwsIuafArS-xaF6^Nq?TX3#n(WbPL!B(y zz@PRg%V6H+xIG8DIF)+CYV$*Y$LH}P+Nws_2EH-m_2UpEyd~p50vpvju-08g0AzyP z`^WNDoyD!lx-%NHTeaGH`j2A3o5#SC^k}N!>w?mlv5p{W5t>$MCdJGNl8y5B%@c*W zoi;a<4BcrMz$kM+7wctz#h@z7QaRdb3B4wooF$t=M=RNBz6Bxs-jpmp zi5q~RYl^Q(@K5-50f$&d_Dj-8K8}CA`nL72jsssuHr{LTKo~Ah$h^L-C@sT-&dmJ0 zHS(j}GpyCw~`$sI5SPh~0gf`+JG|7h%cAwvt<4c)@sx8dgEiu+J;`0zd4r z;K}I4M~UAzYRc!dm~XY~sZ1_2TB*CktQ}vG!s1HTaam4XFp`DD&a@iCB}++89sxIxss{af zY^6EFzAhUwy6NI7HEX?OanTPHeC8FGMRTWl7TG+bk21s3+hTFAl_)y@f+aGyl~cAy z22WmE1h-sQFLmw-eUo07h8u9HTN7_ZQuvBhHXu_r8o6X=%c0e)&Bd{iWK!}U2)TT268;jVwd z>FYX*wz(+gAmT|y@9MRRU}K(1(~w@J6fS;&1eUWv-w~h_Oo145hC@vuJ0R!&l&XxQ zDgc558zH)lZH*xv{V1~wM~MWcdrP5kgww^9#}beACA@!}@rU1i`$9E%w`%W^Doh z-K$?vexXb4;s9*|*Q&ZuW{gR!Zh6n}-6rq4l)GMLh~znVAn&jL&q~=hmUMXhIg?@s z?CII-67pO7E?4-M0_6>vZ%8U>!ZC$?WUtb}=F95d0&7_}NN2J)27Bp({GU{`dp4H_eG6?y(z1RrZYTNUetf=DWYB}2*BKc(; zP8;2#xn=ww{a7S##v&Fcm$`Y&h2nF4&woctk)uJqf_?)H34D4D{a2vYtJi4I@6Z)6 zJ}@zUeq$gQ)$u1X3Q|Pi)k~{VmNMQ`SUk=H{=V6kDzPZx?xXH#KB=5oYB<+>2i7f% zf$8Y~a5;&EV|KfJr)XeYB^%muCkRW129D@`aTRC3a1rMj3%zH$mVrxE*z02xs8ULbc8aReAQlu(pepKYV4&y7uG=cqJ|Q%a!){-I#$Y_s=X%D6?H?& zs!(yr=--JoFPn|}HgS9HRnmsiQ->ARUK_7k9d)_lko{SEUG6fPyb~o!GT^@s4xBxp ztXQ^U!3-qNlI?vsBu$R8@oWw$!~;1g%?O8z1n_@GkV_jWKKuDXKv#SR8Eda!L&GB? zyn%s!0~v6?N8KAVbS4ZE!FP~gJVirbRGjP+|)mapWJ_F!J|A(Fvrx`I5;ufMUX)i@HJ)t z2aQtH9^Fa(Uw?WM>61g^NtUd)V68dG*HW^h$Dc{{rW%AeKj8| z#Ap#5+N4sWWv!hDfFT}U$Vm(C{4Gas?$D)!Qwzqd$StKtM z8`;7=i-Mk^&>U~!DIBso8Fz*lCmXzv|ed_(rUNERKK98nlb5u!;PKXUybDz6ygNJfisEm- z?Y^xTgQ_U{`y@j(5cEyY5%Rb>D(0ep ztnd(?>+84(EMmun~K)m*;cx6{dJL}tZ7OXqg%9t z(^+dMUmD)z1I~t9UCq6|wH(K6qw*ep+VYg0Q^X;S?@QU`?d^&9zA!3MehU#g{mxv_ zn8o>-)Av&0^dOXSP5Jb|)g%GQ?#6ah){~n^B7*Cd51$xvd&>h7+8y|Bdvn`vhSfsb z84tFad@``(ACELoWRG5GTADN4zAb%^1ZE}+=}MQ469p*j;McT7x#CXu)_ZM}_Cwif z@97TXv--m3Ka$R2v{F6J4dVBv_nWAuAyPeN$ZrziZ(|;m-MYY;?tw~QGW53dty&F~ zYq*z=Zu0kbP0Y_kba+x3_6HvjA}7GD3*H&Ms*0@(GNa(kyw{w`Hu_FoD0u&17y{{v53!f)S?5FV!ZJFucueByi;_$RStMqea>)3yD*fNQScTe#@ zc-u{2E&($vm!swQKEcTwt`Ko68yG`S!D&~m>Zrn6MZm8%%TRUaf4^XJWOln0_P*%YoLtS)5>=|cCpM!M{Mo#C&UX}B%P8><6!t4O7}G=oc1N zeS&4OJM6>8j`+tnlIQFOD`Zoe92#TK3Di7Koo;LF!jmy=li3?PbP!AAGxI5910;Vz z$zxnq9up7>(~WIE3Vgk&ZaF zj_gcS-=jF?TW!7(#^II+O0AkH-F6Ynw{2;61fo?km}ajsa*IQ>{0*nIz(?IT^qyi9 z?SURIc!zi9WAM=>%2?46T6qORZ`G3E)`Uh zvh+ChO#Wp87g+r-LJhy52Goh~5jKB8k?8ntQBAME7Sq;e7@V#~`JhM7RhD}2*?!fa z)vs6Ga{~-yLC9gDHQ#!p=sEsD!_cO+Y{}I$@&5H*zmvnG8 zQ7zK{e2c{hJk1U|QA@{RNy|ILzFrj*+rf^IX-RN+`g$GWiKMiWw~T|qu-1^|3)3@v zM^B;O$yZr<+{MtQZ{XF}%}Pxj6nUY2CD1g{X{_Y?k=~uWUz2i7mD@s-@N5~QbSTfs z2F0ST!o7v-WnAO_!~K(t&V8Jr!HHn$n1~A7qyxbuW&%*wKNKo7)kd!R0=eP5$~LXZ zFgO}}f$)q5sq9sTXyb<+^m(Ko;u5dizyp}k?p*bg>zh$}oV5>fJsJg7k8!6e}P}j`A)2RUH-TD0LLcqb)V)fr79ghQ$TKbA;O27v`27Bi{wWtdyrS9OkWKOEUQGP|OU= z2C8qW)ekqPpQx+|^ObEO*%zIg61`eJS2LE5{GjG3Ezf!Xb_=hvb8v~y1j4TY@lZ$z zE7FGIYtT3Gzd}#6I4QBr0b=9m@#n(mt_s$Px5Is6)(2%y8N61dP8<5J4t$x;@G*r> zU8MD4DGqn3#$Dn2cDsoxS(ujU?dDRv6gta*bh+s~WJ3&hFP*IMgHRL~i?OQ#^FTsx! z&k2C9n5`S<{vIgGuR|A{bJ)cqK4hk8WuYW;w6L)nb;>1I*?U8&GR1y7cY{(`wif+&wxD>pt*px1#RI}_S zmh-VN0Wn#&7NZb8`A~=);x8G$AD$nB(R~^{G$djS&rf=oh}?3aAYDeT&wdutkDJbS=t8;BGe zsQ+^|C-DJl!0U&jBnrL|a$1(*aJ2Sb9#JR*hMeuww%hKh&(}eXl?fjI)gQ9aCn$~$ zS)eCA%&OW*6iTn!Vc9!+=9DuXQ;xNUA=^&-*i}EUyxgkb+cpdr*!6aXQP_{NwccVa z=v+aG<-|0r`vR11Ii9E&DKxIbtp`)%q(Kx6zo1|}#ilmuPpo{g`h8UY?;Wkx{mhlv z0-9X7EHp?)-6Pt^atm7;PcN0Q^(=*K;fp&m!v3Q^Z=EVcZjHD>9jf7cANaG?&(0%U zEVVR(fhfAA4>ba@`Xl4EB=ukU9E!Yc{ZRdcz<>a@?dCyzbB@yY?9q`#P&zeJZ6BAH zJ>-p$@trA0?n&qj8Y}rigb}lGS^AXM!J4U*N9rLid?0^KZm#!QHwPa|SdUt(?FZEt0w( zZeYk9As&iMuUCrT7;SR^Q4!e2j@nTdA$_D>{DC*aFxDCb=jOHiEGd${655+E+$c&qh{5bC39A6|CTVnruxU- zIUJ9)-{|@Mw3qnr^8VyNK@7qY%SJ7=7HQnEt~uFozZ3fk`DCs5mD09%votkJyu`!K z1au#8QgrfI2Z#vhkxMUejnW#jolh7>)I*3!9+pQ(8}@U|pEW95FB;#se1btTtO~oW zn;l;tB&+&TxVg^7)jC!}pNP2bGo!U`#DTb;c8^E!0lyyH9$xU+{*eCz-pQ@r z|M;!AvZ}%$ohQVijEM{*QY9TqiJajYKwvM%bE!H;=(=3KQ+~})`n!wEyCPsmv*PNS z)qV`j(4gX8NMjH{Ux@3=_mLL@?}-vaMn&?Hj+|dAO#+V{$_V+!o2QDc7v$b|(69 zpNW7#X#`mQBkV?SXL5mh7{0^^8OJ`r;>Qe<^GT^)5$^-37>(i?QCv%s@uV1$C zXC8|B_x3gKN-?x)MGnx>m8pugbNu8G%WZ|ctg*vRQ}$#F(s^cvJ5~wX7hTyUGy^XB zgLm!^5V#`_8W(cr7LrqkXzk=+Ivl)|5c%@@JBm--dqAFNXUxxw?;E%Jvn{HP-vD#t z=lV7dX=Us!wqevBAqs2E_mi#|28Et!cxy=VS6LGq?;UYQT}c0x`FZD)#ML+kBB%{}M=tY}iGIOmf zMggL|{2X@4);=b`pp-XwM>)zoo<8NCScR^n-|gfRPB~u_j9zP#%N{aRV5#R&>sx|r zajNg)*i6bgk*l_M71czJ?3Tb0PMRo$LR*dOcy0i!BfP2uM~%;|WB6P7*ZkBu zF^)N|T7`L56+^anVKcVTnPFk8SeM$}UdYJ&8GkxAKbd!#r}bglFpE2*Ek?C!=4Adir02T*H~O$e?!STqaPq5q`*{eVt+RMg*%(utE=Sn-MfAc9*7@30(Q^tyUlijq0A`u zTNl~ws%}!9eg{rXwMRurw;m+96}fCurb)9@ySME+@FjE>0X1ryGCbA?A7_#v%#eMB z%1jBzgt+Z0D0!dMQ@Dyu>j2nBXHDC6VhgUtl*PemZuD~@G-AYCoBLDa!vGoBWT)b= zo;#@ZG`F|4DgrlD7~BER+cX!Ld*W{UCSA^Sg^&XSuzl|f+4Hdeq5Y*OW~shZel+MR zK>JwyNfoD7;6lagBE6p4xAsA*_@?aeKIU2e$0aMc@$jsDf7?-tl?;G}3ffE(ULE4G0*83H|6Cs}3 z0zxza0Mg;oLGQr=C)X(fY@Y4-aR&+->~st{Q5<2=ohB7Tel_IQObb4dj}*w7Y71rW!qpOQHup4;dMH0zl0oed@8 zL42b>l(x<@dUA2Z#hUA*MS)?6^7cy?bL-ZC>^VhU9grHx9!uJ_@RLZ`mEvDb7@`7r z<9C-1o05wm;U2fP-cbD;Is${l0r=;}ZSF_61z((8Cfl)jcGJf_BC=t5alqhZ%&Mg& z@dRz)FDPc;!gC_CjCnp^#)eU3)^gyYk@HJ|z|37Fi~M1FdkMpzIr(9?ymQc`N|QET znjHA=iHF#KP_aOn$4f=~e|@SW;%5^_&r>MEtE{bpk<(C&r}#8q5(^Y3Z$ICnV|rUX1gv$MwH)I9f7)JW`%jx7C#Q^l(>n#MRlgv~qvly53Gf zW}FrfiT^GNR%|++B^f2@XT`nj9A+(3yg|e*>@9ap5&2|gDGnW_-ZnWM8;iznV`((_ z8c{nX8_IiISXR=I<z5OUNG&ZGxpLVoHU~vCl zkd?e2FRiEO7@y<~(iaQ5<_L=@+)Az|bWlhStDJxckJe;h8u@V$V0J7xb}QaVrPcM5-@rI$s}e9ESx#_6c%B=^UcjHgnU+RrFi zj6UBRK?^@^C{u|ujowodXAzc4B1)4+C)G*&@2wV&vQy1AWLuN&6Pm(?=M80rwb9W= z_8^bexlp^A(a~4(tf~|x2ugO}9h=Po3jr zMZ5LAI3t0yHLIJI7LL94zo3o^!<2j3gmwMbKJJ2&UPxC6G2np5z8qC>9P4Qq@?XihC+VqOwydcP% zcyyfvT?=R^+k)QM(g7mW6r`ptD3EbmKkkS1*bN}}-j@}B{RIV44d%+W+o848)^TYH z(#Yl{vKn25=CPo4f8fB`X*%(bpBrJn_21XIHE+dPD-0LAKiBtiug#?OVnl8|t@;|& z?EAs0cGp>=A6d?fblmEOMtVhJ%}N{-u#}sd(PXD0c5dkU%C=Wp_1$?{Tf29BQdPTT z+DW0wF#gi%kSkRhTJdW)c>jMr@u{rt-^ArujfF z0zs6H!y>oU()#w5QZ2m$acC{hY@1m++UIG%ERImb28dp|OmT~A>?u=_B)WGz3eIZm zfZBz#HqpLmSyhD@eFstN=~h+A{M(7^HlobFe$LpfqN)_H6`*|86!}xBDLx!S++B(O z#@Qg=XaZqTbt`CI%$N*2C2T1VrXPZKD|gyV*2no_z}fCx3XR^;ZPybyXic6IB*vR82%$ixP%miB!jqIYx)<%~iM-iP{v9sO7hMBDNh}`(s zb2Lo~y`SO@(U{TV#g%^d@#mGCo6STZv!$f*XTKmu`#uLcf5VcO4rP%bre8xY$U@1*hJ{l285*Nk-l0| z_Dqp^Cb{^rSayITNTbcdPMDg>PbsrVow^(~l8oadQ25aGn{&_|f63UR{=-yzM?qN5 z|Cm=))1vY%6SO=LHlvF6MbCCmfBmWop4=rr`VKOLLw>U*%5p2F(ckZ4my+=o$ZAvP zDP4~i4&*ctVj5>7y5{X9H4ZE{FuQH03e#|~^`=(EFdD_Nl&=8MVOIJBN1x=?6|uji z9E-EE>Zllv@)qX(^nL5h`G8s7Jj@g4^#1dr&XLf|Nv}LoK+Zx+{Va9%(Mwcw=Ck|+ zX4+VZ3v9FBc8EvfBM5*O7u2}jo8k=ej8(4JG;9LMA|0V?jakJs-&i|S(!#h3KV9-0FjPlbX1(Cyb&u-aPs%RlSEzMBxeF2_-4DMsX`6ebi+fo&#IP_%Z z=f~p`LLIRGfM??F$h>K29ILBXMV)YEXj?( zuJmgKC#esxsmUyIz77Xr5w^f|3?DWrPdghO0x`DZ+}h5DmzDSWQ}-qAm^a z-(eojs|w*vht*{^dPkKZK1)$E=o>)2t~4bs8E?x`7bmh|?SRYjstEP$KI79=JvM{H zj%-0mhOpcm>}8BYnj&Z@NIJ;4t_1Di%iOL59elY@0=-QR?qzVqT64nA>5VVij%DPR zllIrY#l38=9B=6W0ZWFd) zbz@1L3$!#&U-QNlYIoG%AYpgJuc6L=CwB+p;L-GjQM~;Hb)zUOH>hRonlNZ9m4~{v zkMG<1dG+E<$3t1zjXWPcdQ-);g9i*VwMG`%Lbt7Vqg(wi06-m5HY_ zI{fTik=_kG<32}2^+nt}B84!b5RMTsz#VlOh1>DTLeZ-=I7F%s1(5`(bJi78BX_x6 z9KWEbznFZuOYvh54N%d2$s~4|e>@NQ-37({U0tX1jUxMQ%b{1!MFuY@(e;lr$PmjT zOn)vbho6=`-HEzDriypQ6bDb`Q5%X%`fRHuw);n(7s^W2db8V&qEtbiO*_!B=@XXt z>My88QDh!+i*T?$d8+`&pNU1qQ{4FuV{%?cl%)5E&wUK}iAjVf{#E-s|5_~xievSY*iNSFJPETeb-9|-a!A&bQC)(~AirqsUjD5Y3~% zNMG&OD#?$RmZspPtDJW^85h^J#|*;$kO_oOwa`Kat+^v4YY>KTX!U_Q)s%`1*9vTaN%s+=c~)EY?|V$}Y3;ifmbhv&q^uk8Kj77rvW~^$p%_4yBD{wsM486| z^G(tl7?;gMrIDjC3&yu*T5LO2@*X;V=ANe7TYJs!Zen#ywOQ-RCCq=U+>s4=x zf^lv7C3c}tb@y|AK@~i(3&N4UE5E#WIHT~n%6djnI`>Z}7WST(XX*$k zs`S0&v)v6iwVFYyjBr23<)vk*!qX&1<8FY+MYeqi%dgPu zmLZu7cr;o!1X`)|oaAx?$#aZ`Gn0m$#H9EjkYL%H`Zy88AJtHEaZDR~B(Uzway7 z;V$AkeO}C3mLE_bCUJ8@>RI+cH9G>>wE$Kd5t2DKZNj(9I+h)s@9db>YL7T;Id$x$ z(xTZ)47v-my8Splgy13)jCUuxDGE~A8JBmClk>{9Ve{7LPZgM$DAtJ^G=FzaI~^lF zdLbQ|C4w*>P>ySCSd@(Cg;G@ey==-b9X7M-c_CbMfeXu?W@+-s_?84KV(J$~jWX8E z!Jkp zS*HTpZKX6oWL*+tbK=|u%1jk{>t~4C&~Rdtx(?$@3QcHaE3VOrC%LgR zPRgglJvO1I<-ta2J{fB(tvik-e zUQT)-9gK)(1$Ecbr^U=rAGrJE2#**f*08+pM4Q!ahrC7*$C(dtNO5N3DsB%y)p@&r zw^4RMGOT7(3O>HId72VijiM-Fn#%%#R*3h$Hf#C(cZv$?;DdEiYkO8(bx;0)3gel1 zHs;s1Uz_z8sed9L$##c7rA!2{y3!#V5oj;+f}Hl1SWJfNNCQ2`fQ*?ves3O;;6=2GTX#ThCmn zMK*}!Tap*_`R28=<)HGH>opS_{xE9Jjkb@fEO78YV;*lmJx3kVG{TvMuFdk9RPGbw zvEyygryzdW@FW6!a}{{-Eh(Uw&+ZNa`-iu^?d(x?Op1?Kb-`LuBf`ibbBeU|QWA!8 zlx?7_)yj(t^OGhp%&&Jy5if@(wZAe{?8iDsZ;tKkvi_PLb)*tC*x>}R6EL4@Nqy<~ z@_t|@KUqQ>-W|5v=FUpL{Thq1)>bRi@nUlMw5NiZGfYG`x8o)sqMectvm|4Mh<4x7 zL)VV`M8+^i{Q?8axX28?d|-h%LRJaND&k-C`o0WS*MDbxQYBu#`-7%}M}ZtlSHVdO z(>d?=N7(^0m0b0UTbB?y&#HyY>_*VMIW=5zk_gtCH`5g>%Fl$!vOcpwc!gSRuoxni zo3e7lRbUjWNmlmrB~BVJa#Z@F-QzE`|9A>NQou;+h3KiA3sB>9qwSA48m)K0z9S80wZVlFtGqX!vwRdmD4{5i*e=+LGY0*BkITytukm*i&tdw*)-!RqjK+00 zw+ls7teiCs^$S%ERlV>tZn9jMdP8shSLGnwjB8IMw_se|hovEjBD$Ibt+$)j?~bk1 z9rFU`t6#x==}0xm4CF$E=&I9b$9itflual1jz-v9r>PF8k`(6b?6FAKzfAIi`jngJ zfS<@*9FS)D^nSPK7TbkG{nRB9(b~wqy%o1$e^CZyE?+i#%E$)asLET1pKg15GkHHR zD-e&22(l$XRo5dkNeq4?Xg{;|s6%jxkrMZlVTABD>Jx?P=q3>nk^510QFt;=-vsQ# zqq65lAe9M`qVn`8E`_)bC(+y4BJlPLapt32d-DCK+}bN!lzO@tv&p@)dgMyox5ZSO zh0yzSNN9EGy!D0S#==YM=B&puPAVh$-RXpd)lGEtXa#zMmkrw3W3mJLCPBW0r4;0- z!IOKZ+j_TE|5R)Ljn6PQk*JIhdAGG>b{y{*x>Fjf^f%rUSBBmLl7ZPMNNTg5%SsVc zKhGh{GzU(nB3l?!Q(PSi$~b)wzNRFWXkD7LAOXOSu+;YJVAgsC=;O3lpA=y8)%;B1 zJ}ak_hU-Fg#Xnz)QMAA+$NsUO=FQxkVy}YORE=QPC!bK4e;Zp*JLxgPL83w4p*)CQ zt^XPkm&4CVhyUOb?r|gra-0C8olQZbB`g|SergLq2+{_(GR2bUvE3n zJT;T?@2kKd}2z3`ms167@ zXOg5WS}vBxPjn}sjqsx)t8>Hmv|$(TB{g=DqnlCIyECyO?6kMZ`koso#=51mOw)}N zNjx;A23hfVqPvC>Uy&UlVpd4?T{QaJfIpeIy{G{z2IkoyJ_@pQBB)khaS@ko8@X!j z+c*i1KlcL$NV5!J7TX5TZ>5-cO{`z>D)o{E8vZo;K*<(0u*;$NDqpFal;F3;Om0Zb zDAIq^?~d!1$+c#|-Hvb^0~6>`+SE<+`@Xgdj^rzE{$}8CJ-O1!ttZJ8cRx&uRoO1Y zHg|;;ekL{N5RVVh9>D8yX-%o&)YO849448@dBbtklkso`l5%KiVS4`6bUoa^n%>U@ zion(aU?wx<2dRT=A_4`8r|8)AD5%J;wVeaixFWXfswzf}fbd#ir7j#uR8sx}>bU;V zxW+%&!*A~b!r7S3HUijO@JJIpI~DqgvDb9KfPJ~ZNJPTIDgJq~!mWZYQ=*|7+piD* ztRX52yr&Bs8K}J+xZv(K2k*$xNVl04z6MH|7ocNi7opR=Ndp5r35k-3n>3(`1O{Y5W=oRiqmo?|!nc$#XsiLRgTMD{Ar zQ}?58Dbh;5We2!CsZ_ekVON=*5z#dxfAam|@=@DxpvWSFZXNv{zP~j!(5SCXtTLJB znU<#YAXIPuJ3y@}J{?S+&RBmkdsjj@{;ee6ChyRuX5Y%t+Sx7?WFz7UTo~y=(n~8m zItizUB2@RZ#@q-Aui|_33A&L5c)hwh<&=k02jxOID3X*%M+cuz{~1@g1XUG$C5>G! zsUERTF$1hh+*_>LWCNZta&w<2yPAEdHJbAgHCfzHv6Wn<)HZxts4onh#5vE7RF>!z zH*JW;FfQjGS>||06(PE>H9ZJ$D*aA6&~#_Pc-{edRjpFH1JKH=)nK0{;HJPk6}5=YCHik_O>Z z;v~JT^Cl0;K|e}k2$N(?3Cc`GJ|iEN0z2*xvTWwLwz1{;(~f6Du_l=D**0NjfZg~x z5yGLKrSg1oH{x61Ty+Tl6yEQ}F>i|bJdC>tFuHB$o*wEK#TRU&Q&$Cw*-R6bPbx{j zG1J)MtZ%w5+${tT{DPt^bk&9oh1|?u3z&zK8t;?Gi=)R`mJAw`2ek`@^gzuO#6ZQC z1Nn5zeZzX-J%U%%de@59m}l(P84Bg6gnY5YZh+d8AkcJd`hKH*sKLsAB3?Y zODCP_-q3Mbh*w0D&SsnC6m$Xth&vwGZ_H`Gk4~Ek?bYU}n^%QyOmxaTtzTV8eh8*8 z`FvUv#Ba)y!*11Kdd~(!Rw1@e8nppFtn!u>?ok_z7%BF->qQz{`(6saXPP$AV2VGM zv%gaokMGV9RrtkTOKi35P(0JoH*u>lvD>Bg7&^-b!f5?144yH(i7?MJ0J<9P%%srL zcb!Me#hV+skK}g}#0TH@&|<7bNQ*pfU?Xq_PM1%lKyx;TwmyEXi4vPAU4=VABq(Qa zrP44=8nvac>L1!g5h2D8)nO(va275dHAs3B*&?$R`euL(c+R{a8n}bI>p~=4s^?B{ z9f1?ilVr$-QqKtO`o^&tmA}?~%W<6B)pPJWw#T=XbM(g4VWjGY`Y1~!PtrLoWrM`p zCUwhk%a#kALQRaLMbV66Rzk?D*aK|t1nfk|$YN?r7)N&MW7syg9fK%(73Nx()DNs& zP`o>|tc4(+*AxyK6oO<4!SP+R7^VRWddyT)BS-RFae-VbK^a;t7hErC<7hO=TLL)z+?vX^3#8k?6v$em?_`A#%{X7*HgqD{ByJgo?ZjsrB!`>tR_Rbz+jNk3~ zc8$_KTF4Af)*@4fW(c9Izf|A8WV+B54F|1dfBc~@fp>%fJ=$cuEh}Rj{9b?CzkQ%7 z>}_zC=FW_hdK>huG{sp$?b_z*{Vkco)j55P78VWUsn>gN8 z)PG;)utAY+T<%1rbAjI0Rv$3N)k4vT$#yOSiw1mcxOgLoP4ZV=gY9BkjL&r7`(`@_ zz}PCA>u=LL#B~ma2ABT$RH^Ok@^!^mds9>IwHY2i}aV3*7x~>xuQb3uz zV)z`H1I?-SA>G~V5XKhj`R9eYJ(=ZqE&z3~2Ysjxtx&JQxF&jfp!C=jwTeDkDx1ukk!-^}9U6_z z_!Z!7sg}AlC4lwmOCtlHMdpd2{Q}l)=~dh&T)V?+8}=G94!OP?SFmhw*O-e=$S3*{ zS?7nzP!7|=-??g0p0{+kx5cNZj8vo87B+4%_!!@{SehJl6WL`7n(aa#RH}g>@_CgK zgGTT*4Wtda2PJdYf9nwQApX zsfBsY-j?ma?buvNiqO$GG~(WS^1+Wg%a#Q`b3p#> z@G;Jq^Bp!Hs&MqTmB==NU6n1H3Fk6SChx??g=pKZixi$+nz&sX%i4PTB_D6;x#d?I zS%fw;hrAKwUDdW|xeg8#9;aJX6>pkmrYhiMY}B~eqL@DFs!cw%1fRFLNPM0x|BcU0 zup{2bTeZ4p{gBGIDv6bPg@={GQ?9URd;6Uo`6(;9<%UtBtm6Vs&dbX@UbCYa{^x<` zXDNM+f`0-2w7exy|)aGt5?=W z&5SWK#j#_?n8yq;Gcz-D%*>9NnVEUa%*^bV9W!ITdH3G6&pG?RSNGmux9V73C6AV* z(b8y1tGl1>j?z9EoI?5eTh2O-PbZ!O;)f9jq~*+rwV32BuYt_09x8tx|K>vRDhA)L!xK8RD#|6!k$7qyZ3$i_l|9zRIC9z?H=9v`{gI!u^w z0EHc&_vrG)=Yfjfbi2)h+lO1)l+cTb1GtSK;{%?J5QovsCf+^!C`G1okCgZr# zATl4cV6TE)TVLqYIdM984dm_4PxEnjO>%aegIUroB&w-YwwgQuWByk8P}eC zkC&Heipt2OlWE)Q-QVUF^jjc>)T^Q^53|Qi6%!4Vi{2U8p zgk^}U?5MI77Daldo=hp8Tq~9D8g~-PHNG!pDJWrDmqkTeuQBdI$&2@4F3!O3;5i0U znmG}Q#cKVc@i-OTE3qZt(%VcXzK`tuh*_rs#Is_WjneQNbB`IvyUF5a{$8=ExK;?W z{8cuXjhquvh;`Ei@~eY=v$-*Pm|Si)x!)N3yYNB0(%t46RxV@@d&5)ds4Q@B(&5XS zYgyjPe8o)nfN|7!*3ICQmDI6R3Jk>5t!<%n)5FmXUo66(RyOj`T}d(biQ>+{khLXaA8N8-8zLsL ziH2j*HQ(_aEiOdiD`m-@^ z-c3;%cI`wb(NezZT6D5b9&~bO(ET@?+J#*TN8m(DM;ca~#(zQa+gPTj#3)50AQb<9ars}{ zY#abQ{&gb*ZC_?LT>k>h2km2T$^QYW|1Ucm|GSC0Y2evs=Is$%tEke~VZ&cE+`@GZ zNkn8Ttz$7ie`}kFOSm$y6cqB{;3>=zMMjmLpbQQvJBR*n#s8h2|F?_6`&S*#?1*v8 z&)M=!bE+b-#^_VmLja5m`+)hOOsbH&@_}}rT6d&q_5zoqN?XJnq1Uf-29PjF^Drmi>U@> zpYH0;{6o%PLG()kfmjFB@<1Pf!v(mqC#+`5+8cz`*M0Q)9BS@uPb~B$3p{UEmw8I= z$l&PYfN~Gw@ty7VkAU=%Os&tMOfG&Po}Bn`v}?Qlfgldlqq54C@ovpren{%Z1jCv2 zq4I1tG1$?IZM8x~_+T80u#I-nH}Uc4pm#bM>7@2RkQa-sa*KcT8EEKWT~8!Jq)$dE z63;hhg}eC!I)DCq!En!jO}y9ijjLmcv?Y?lR=-Yw4ZYP}T!#h6<8wXeK%O2Q{T-`* z>!Q}=rU}9{{}z(mJoBB$dz~?sK{j9E#qBKVDK$wZl(S!QAXW*1TkD-D=Yy=0I`;v0 ztBl7MAqgTqK1?8puI;cit5kN8zSp@@{_WEPerH3|Pe1Zk<2)Z(yUi*K%T?3i-sLof zm#QtFQ03e=Ztg+w$2c<`W&a%m%IA2$>qLC+pbn1%1EOnilL02Lo-Y z+CJmf{#v&x5iOk4S*fw2XLB?!;yPVWYFuP+9;VXzOg0=d^w^ZRCga|c>r}GPYUOj^ z6}=>0IJ@ggyLQUSY}nhpv|;_?g$<^K{D@S?FG@D8(yLaQLEsZ9`qN6(Z{#bPYo#zi zOMR^M*czWvk4Ib9&VD&%C`Ur;w$5KwhEr{MbK z8>=ZnvB(r6H1PGGtNed_HZnf@f?aA?v&Yt`aR+!s?I54|C_&kE03w^J8FKP}sNu-X z@>N8Z9A|?9F5k&n?w!0)H90uHW308d`-Gos>+p*_{BOnoou2=Xi$WEi#MB%6^bgo} z2NV*cFR40}fzdPSdx%}BQm5dqwvw!P1I=YgQbAVefpZ9+h{s-^%?;wr$P)_lBUU3uEjzyK6aXQAlZj zLpS+L)8S3tZ(?rb75Xf?gs1+OT4uy3Ky_n9CscFj#RJmArj;)eK#*Ec^0Os*9I4WY zXk@o7Jn=?rrgrQvZ3jW>svMbJ9w(=ID397ws2rx~b>qq^$HLdGT$yb3ND7DA?!X6) ztBr;y4*N$cfP$+CqpkC?esnd`!rnn)zuC(Avv&G??@t3|V1gy!_a885dO(#;OP;dC zwNWJOMsbQ!R>e%?g)J3F0M|m?IDzJ29+WaXQpp>qa{ zs})?3ko6s7vavv|kZN2SGL5Xuwca(Ur$ghejs1L=ZG+kj(q#Qo1>$v-qw3LTEOWTD z{STPOhFvv)#?I_oh4>=(uY34!dayh9f<-Mtxno58-FN1Fsyg=D5w2zGfJP$IrU<{2 z44|n`I0|B9;=%`T&YY^o?+czJV;{yo3CbxC--L~^$U!S@j~UVaRX81hzj}`>?7lT< zB=6k=B^CbpoF~=Uf2+2=QzUpJGtgd?a4E_X5>6(b)vR#?6HkHRTi_3MHE<4@hRuMHj-!Sn=dPYA!Z!UH_n!ip1B{Y_fIN5tM9%KFd*=E z4G0lE4GL~k%Lc;!`C#ca`|7>>7d}j!U6sE#ynrk!kg1x@bT2}?jOIMuEdNo&nr%Hx z`<-eo(n8bJjX@Bdu8{SZLw*C|>vyvm*V;hKbOSdA1Ld}mbC%WsKK?&o-%Wb@N#>~q zc0MP@((?Z<3J0R6Owpq)usV#;E{=wQaAYkzRl(Vr(7N%`RL?S?#cUx~6@y2TiAVT` z)Y(ZJ~KAf!+7qNA;~^43M(t*gj1 z?UhVP5#)Efjw~F$!6_cu9VbG~-9{>fcL!WBiL2cWR+Y(6p zxP9yKu6FOvPTbHQy3mbzuBGWH#I;87W&8~R)v8X^sK#9BM|m>9s#peJ%dL_Oudhjc@d`vO4EnlM%CvMRMG{2lWPXn5dWpN(Z~HivMvWe z0tn223UUm`ga&d12Mz%R4e|*G{?{MKF&sJ>vjLi*!WF55e_S3@UGKHPti1lNz2DE= znSc0w1Lp_DLD*f-n~Y?muaSk(77Blxzns7db*9R3tki2AzCKrwBBH=91VnPFd}Sn> zGj`zyIcr>qfdx~XYIpb=DC*B#^v%JJS~E)re&HqH(;cGO`TWDltMhxi&nAbgF@N7q zig390ba=(sH0)Dn}y2d~JK#?p@U218Y z51wF*gN{rE7B%Ik$GPawr26QMHKQ@~FKC#PcAyHlTlEF)!18l`O@Z$e89B`#US8&9 zVUS$N0ZPMUuzbb89pDy!DY<91@8&e%M4W4w4mvKE5W@TDGL<8d3Ds-a(ocPN{dhu6 zfHu%v0C!%*vbuz~NYLTJ2@sXo6sCKR@EOE{4YvzF6U2CUHX_GLg}gxTN<5y?+_6@D z=5l(UinQ0Br>MNI|Da+UhInyR);@{V_a{wLmV~S*#lM7DsaQoB(+ibe1g6nzF<9u`aqDvQi5~| zLBtjOnp@PaOPzYqO|W({>z)Gk5xFzRHctCwUcWpeXFiJWb*zq@)D>EUGtSwHmDsv` zmkVnToS$3PCFY|S-!{KnCDz9@4YiBd;8i}KHmmAuV#q>5VFl;q?ykH5xnN7r0uRmY z#||zX<75RJE!HkR$ht-6i}@2@Ha0Bz;gfx6%ysmn>#lt<65ANK%s_6kqlq=#G&@+a zs<RtxoAycB%blxLneg zwFCEuWCK!j$wW;T$Z%91o4zu^lvqv#yV_4G7Z{KOd_&H%7`;!g)UbTr95Z zM)X*wTM$kIGI?{Uh*o*11V5eugpdXt@$D#3ejwpzJZHY|Hcaqt8=Mg#s(Loi$O3AbZrkTnb(KIeRJn<&?U*=rm8N?HX{jvXnTBY=V?>d!&pCv!M833) zf!Fia&f{RQ5U&fVi>3FwiotoV=!Io&{Je;K+Px+jI%SDo)4(DNAvSyH85|Tx@|74- zt(`Tk*i4BCMk*|BjUZ?HImDHTxP?8TSW$<_3DMe@aQ-9rZpYt*6HVKkSjdt)u}ZuA zB4UwKAYr$JU)@Labu&I6`^>!v^_bjCQ6YoCRBi2?MdssQ3*OIV@+~XP> zQ)=p9s#$k*3B#jfvwtR2=rJ0(T{4JD@F_IQ`mFB4io>z_S8m^UkG#VA_342@aO3jv zec9!^seez8cjIE*7-T{@z9n8X+Pc95oTXZX1LRC5m{X{)v|#fj`~tvgyAn;z39C1t zgx?x;g$MDq0NT+>i=q*wo!0#e+dU$`?+JTyNW=C>y2vemn6c$e!o&ayy5w)-D4i^0 zHhz(djpi(5m#pcBe^P{YTM(G}(xuxIwLk@!QxJY-iQNftZkPV)Wusn&0Vu?C{Q3c{ zXEDw@kn{E$KS!3%PkQ&9u+xM^;~B?=)!*JoYsq9dAaTQt&KaTZ@EuChPp|Ie{Td8m zkMNnPG}2|UfRRU(0xFDK_4%3E!=j;LerP9g1q69291p`-wU$(|D!?CU@A(lqDZI6bxsFZ$h19~~26!*yz>r^mBv)-1tvd!)bE-}a~LpX->p zgLpfzVp@ug>Qivi{DC8sX3PTPcQKy=eubRU=>^~6=k@~7<8L2wQFczlTjVAuW(`x! zf7WB^4d>6oP9(dkc}0)?zOi4@k#s|N7qx&)Zv0{zjr${#Z%llkE5(w-UQWn-6VG3vN`A2~fGpH;zbCiVY zIyImma?ma?yO{l_zxHWDt-)&vI((U^>cH`<_qkR+FpD6M#*yY-lM0i;v)NpEb^!b z?}L^4Kc*Z$K_%$?{R`V}8DsVS0Wy5vsm;fCWG!~uj`=m?F%LkUzb=XMgoX}GMNygWw>I2oMsJl9ZKIWqlvmgzo=mNrSi!Z>XT2ld-z)T@(VnL zyd+$OJsDVg`M{@aOcxwHN+e=Gb0w&nJ5+x?jJ2Ml=mA3L}{zPt}*%w|0&q-Mu>PoV3bgEKFh z&v~NZED=^j#RRzh0W)N#w_xMOzxRCqk-`{oFrIQBEtR-&w42|3Nqj;8=jfZSaNJJv z3tNM&VB_Nt*ph!N>($%4OB4Y1a{!Fqf*|^AM&KKe@2RGqi`vQ8K4?{uiyN+Y+!;BU z9|zMYhxt>RH4e?a&>aaMbf6yD2?JgUZDl*NRq70DR(G{gJW9}j3K7Pnse}$i&5xvV z8+hOAkDS|Wr_(yaJw`OaK5Blo#`~+sy{;)R$H-@9(BpzJ`UK=z=blc?>L}DBQB z%UK!Jh6FtyMq$0>ce%~f=!V1^stW9N&*ZvNK3OOvO@1_ zYvxe@xcbt=?UcPN_z1)+j2G;LS$_(r%Hk63(g07rvTwVstr18zl^ zi0qRTycF%8%4DjoBs$rC_N)9`_bWyLRsYV9L-wNF8-or(ON3-na2hNG8E4O{p2_ZW zqM66^%&5^5TJ*I6E0{PXz3Y7ExjkX^hpo) zJ65-thF_#p4;`~H#8B6CDgp%4uHr_6wU$#-QlF{X1FOg$Wcq|o^psuGJ*DqOChsuf z>X)C^fZcO6f4}`cF&uBqD~i)^T%1vt8$=OY;;yiJl9caA$_{!)8I zwo8(-%%RkN`+fxXZ)^dW>`{S1Ix}xYtG>70nq99@KdNhklFB2H*y&Ybi z#|qHmgVa7Dv>zSw=@Sl-c9V5D;*m+)ex910&05a)vL;Ml(1g?zfBYoFjjtzo^ezc< zDFu}W#z(+T7G9}uHPN03n`bgBM`ddy4E1=kAY)Wc{i&Iq0l6d$>+*#NiS7U_8 zbUS0thiDa{cnWhjHgAC)J6~xjdFA(CUnG)ewR$YUVq&WO)a1Qj=2{H9Gjl!TL_g)BHM$b8a$SC zxFqB5$ic=;FTXLSU7?0EBF3Wc07(OJuz&qRVZ`x0{Z(=_5TsI#S~tK6ITfp)e7`KP z44m1TF*sp&W=*@0lw-FloHLq8PWANY!Sw^fw8+CVffXQfp%4ieLC%&|lSs%m&^}Bf zOpiJaVL~I6LvxjDAP6SzeM8&=@BerZ`# z2{|#!ZxF^~Ri)N8da7#NV9wRvt79}z)g-=L``*VVDs|Jb>npjP%!n!Gvi51!hB>vd zm~8=*UR8)HMtP~Q(~Y`WR5XducexXi2T5MysNI?O#424A3n}?IwaJ*pt8Mvc zRsi%6-o$yYC&#fa+R*JOTY%-L3jiP}usr7&@wXDEzhz_p$h_VHW@{=pyq4q7p7bbo zNb(atFLTQHc&`R0K<0L%g0hS+!H5OzSAxN2xj zALPK@X89{uK=l{gZ@yT^pje+Z=zFCFyY6VhK~FGh0ce8#K4hc9u|}s?jMsk)&%qe? zk#GwXAHwJn?xVb-(04!u(|@ug@n3oAUhxqRdou3*qy`>1z^5PB=k7m9=p`Kb1H^$C zJZD1^bA^WSf?dt-eM3QDEY!5WeAh)d>ugZfa77oQ@jD#KpEcyYzC+==vDM$9VQSp} zJ$B$ZFUOH6EIGFDf{Id6^YhmE3m^f!f-xoYq*VuYRG+*brp6%#vqj3mq@W^44y=c&9?u@YLyv%v<{AK7u-U?KR>#rD7&lC=b>wv)ez! z6L0$G#1LKvA9s~ofGHa=C)jJ4Gz-Dl5Ie{N61lO-N9IM4Zpj0(d_WD{6|fU#A}Fq~ zLq_QC+^il9rxV*+lZt;alfFzAKv`!iQgsU_zr?(ZPLnLO*9Da*wH$ePzzV-vCZ|lw zd)ze~w*;nc#YD8DY{l!pXjEM*^-S|cKTpwqB#0jF28O`G@-5>og)*$!ZwGl-(ZLna zSJV|v-YM&oKu&2rUtz!$9c+LL4kU9;vHFc$ls?Slf-AopT<>F|(i9?pBgD|eo~KF} zTB#cNw;3sA(?srHVshmge}-!)oJYi;=(9wlONo?mm@^v9T40<2w2WPmAW}gNg!kH` zKw|V@gca-&g71>M`qV&+$7A7c$Uq(%w|LkiKb!3_nwl~BmqpfoY1B2F$TQq!y4A1) z@)S_0%UIr`IE+BK-xjAot+cxOq?NYT5^%w$)?C=5q;cH24TUiY)X{#{BZHY{ffaE0 zfqoP2(!^ckzsN$ah1lbCTKgs|QLY_Bcao{*FVoYaz|E>kLFI;@rgBaXkkX%P8Gtf> zCg^tmFD`g{`)GN-dG)JKMJWB0rfNU^T5ukgB!8Bl{2bf7iJ_u#R*7#BI&rj0O(0n8 z**b`YBIh+D!%}+`yRPoU-XQaQpSmpQ+_=*m7Smk+CayX(u9Vup6wewbe0@bm79y4| z*95p0>%FUc25j)O=;A|guG;6eOeo;Yw?KLSYA}(@UF0!=sKD895^eZ~Z&?l8HYX07 zxdkZ&VP-6{tC>ZG6Smo$u(LhbnrqAim3*!P5F)Be^%{pV51herFmR6<8ski@gd%QE zpyp{&Jl^kv%F4{y?>y@4*&>9y+7rt}>M2y(`$#@<)>rGZZ_CT%SpR*Hy{YoRdtc^L z{PG6*Zu9acwKK0H@GB78j)a~9N9w<;SR}X?2!;0Ko|RKEP@a3(t|0R}&IW3m6R_0+ zx%0IOSx+x)oa?-R!+kbgL(yf4FUJ>(D5uzPpqqs^RH^hXAmn+QComDdWphvzYrpEj zo5%a$-c@jNuMsNuQ?RbA-ZF$vk2$kMCvMw;p(b&v!74YF3EjP}67Pz~{^)dET18|J z+iO`L%JlLO0#D2L-|t@f1z%x|G9VuxW4kL`awM0?$$2C0dD_)r8}51?=SLW zH_&BwnCXpcL@44ds4S?LYmTp8L+*(J>Qx)F*=nP}F)_^z@CUvF>H>~05XjIAhd;z3 z<@Vd68ju3D_K7&$1y^6(GZgTz25(6)X_T&y?^1|&w;gSaSiTuve`_0b|1Hd*J zk0kUGA%mgLy>dr|zp~fA3g@9x^K+^c?U;?&Kibu?v=XZ1Le+!8+^vvjBmjxGjQ(+n zwGuxN=JqCa30XMK!{Z%#N)Wq7l{O=1an%swC7F-2i#;jO*@?KWPHL@G%pC%ZE!*#q z?Rue${Ej20jMFjGxw!L52}()ys}VtgAx@JblJHP-oo$TZ{If4;U^wnT=OhS17$gOI zBhX1Zh1&~348F?U8bVK9Hxgh?Q@J5`dIZrHfO+r83^TbcwQJ>(JMImuZPkNutAxe& zF%mLY1ujPiFv;T&*^`wdacT%cbpCX#JNSO|RUx>#5e67OjhK}7yn71o(--3_d=MVetvLlw;uukCsp?U}acTY1xE$1)+k1$4xb%=G4F}n{x^EPXgOJgH zE~d$4Tz4nW{*jV&j-(j~6&x5ZZR5!w?Jm6G4mT_`l(R>T<;nSxIwB`?yePS^pWY*J z>CS^+$LNb;vJAn8z�u>!lMR=N8XsDU~T>oV$aR3`9-${(z}buMxQ4PtLp>z!q-!+f<2_UW@!N)68B6u@YP8k=3Mpc1yFXR|KH!xdtd$+rtp?xVKr zhw@TolGc@4W4q(Dz;yg`&s;E8QOR%)m~e0-C{(=!RB~^*gQI|~lm<}Y5*7@rtY1ke zbu(a{2^1On-~R+}zR7_YeU)X3tqDEV95B>*eMRngeQ;=`f~c_Wr&n&a^$A-1d>=Sy z^dgJ}FUlH@(avM9wBhai1!gLxqluAGD6!ZPGYvGmjzMvaR>T5q;*z4Ufb8m?wQBs=p zSTF~pl%|YRqVp{Ci%b-+kC zXEjJGdZ^ELB)|zUJFk^B591ot$<7&mzJS~@R3^Q?2*>U3sTkq{Y0p71=iFjyV5r`p zONe-X-qx;4IZG4OeOs)UZY2ncl~-}Aa%!mo`^}#Tlkr4Z&U)&vN;vA?L(`QE7uWbr zUQjpNVu~Wz4-a8UpVNG^O;I0eMrw4yJHJD;x%2!vwfZXj-SltDABz_>t!;b{6){qp zBEALYeX*HauFCGULHcn~)4V&(jc09cnSibl&RbHmg*C>Cw9GwDb+VsT?t8vH+P_NT zSdHO@l9N1_8Jsfe1)a6uN;qS%!Hj9ubDh6v84RvYmdoV%}o?cAJ3ax=_y3Lm7rq^_Pw6-*gmny7xIGP5mGjW72Hj(RO>&s6B4 z70-Mnj}lOk{84H&5(CqZm@ToH2@=`lA071L ziw!R74JmxaaQ<}1niQAP+-Wsm#T`;Zg4 zidL9#319k}X1^VEI#3v-Vt20w##*S8IM|qJR}Do61vk|aqzh>B4#tMyBc5UToy`{_ zU%6#v z6IQF#P!pF6gtWBV0wqhk19QTgu|39RHM6fI6ALI}Y!D(+?uB@(79Nc>vugRg%2I;K z6NrE53ew&%f_W@jWJ_bNvhmA%oeb6W)LK1-5@cC(otRXlYI&D728^g;o}NaFKS$vhCsmv1=>d7Y+f6TsFbC|H1xG{@ zv8%rA_N5vo0IJlTENBSs#d*YEVNzy~x79_Gdoaqv*L^`0mib+?Nyf>s%46XEmVD&a zY)Y$hsTv$6EneuPmLN=uPrJ85S1tYp97y3Pal^9s+!MuS~R-$s{Ef>A&u>;wXWp- zmR4?Db~oF{K-jU-pGS#jZFZ)0k%A7cpw>P2m!I4qH zZHZ&#W$xU!I3XJPNFR_{{pXs^;6pyBk<7)jz8W^XY1qRZ>lmzY_dG0E!IF#Q3UL(u z@~3e3(ZZTsHQ>qD&#$^am2fZKndK3x?**PskT)$nlU>A0UHJ#{B1KTp@eJ0D zpm%|X3ebL@$w9tZvN_KR`i?s@@0{>*Z1m9J^X0=mQU>)de4LDkakZaIn)!-~Y1D9m zE*tekP;;?y$*#wk3Kn7{T&n3nd5Zyqi0s))G@*E~>0I&HDf67fX>{t(0vXhEFIp)D@%5ODiSTDz@ePgR35DlM{3t=b?F^8uEZ z8c6!1EU^{x5=*_1u;})i%D(m3ISH>;wH>y5J(ROzuhsjlq>X<6xYFwH5-eAe`ujOA zuK@p=!Uswq5mpvCB(qKZxeGsIs_Ym}2)D9yNvbCW-PkWm*_1glPW8HE5_8OL`kGW! zpbJ7{X4QpTQYT8?y)34}ctYVsOeCzNYs`G7yiebc_$}G;p*khBss$aDZdrwun6EAe z0Y$-{m(-i{bIj4acH~PhJ(@gwHMA<1G`|sN^i+;|;rj-oYF`D4pKZK)ynms^V%Hh{ zn&z%`=lWo19wjS-;C$vij36BEj|zYz<%1U?p-8bWu+g-|x1c%Wmdp96$$pOAlU3J>I$(6_sbLP42v6^Boy5~M6B{v(|>UBoASKk$j1cG=! zlffYIdUsSj1NK`I^6P4rA1Q%ZSkb;ytwz{%>UFXBNqCB_XxEuANMyU`n|flWCtfpJ zcGo|_Rlza@aen|gWDmR~35!#-wtI_p3(xOfRMe#Q`o?@iRh+x%=t|xYLztty*l7oZ zPtdMiFKWQ{tLVSHKTW3k1{P#IFdlf(OPP+m ziqa91D@tj@v?#6FzK=a;<^!WPt%6nNo@(pUr2FgW=dztp=|ljx?nDoxtuqLiGqswN zwfX?}%k8MAh=BG&*08$r^Om?vXcWwt!D8PdXnMBh5zC7SBdqUTu{0?PQdYz+C+K`y zW5=1r?*fczOM%}~n2S-oNomDYImj0CU+wGqtX%kt-_RJdIf#aH_%y35)lw$wv1C*P zO|4*A(-bat>k_C2M81~J*>AWdUBgp3z3wyTkv3%*3wT{^!Ft!*vO(lHw(wam*)UdY z(%GkP%2{+nAs&+c1!J+UxW4>AfJHLGy)IKMz#R^UvoBKwe&*G=t>_J?3(V4dCJeVv z6NP376-iBnIkta|qSW)7#Wb_@D`&}X%RA`bFk^0pyqE}@rnkdR)Dj#6TAffNZRS&2Cn8DPQFKoj2R7xm(kP8LCR9fE;RFGEk4mm|aHXKc9x|Jl>rf#KEtD^wzREQJ) zr#Hw(E*TLADjsL_8~3VFW!lF^LQ+VvlJX;X%v$R9zkJx0Qpe8 zb+MmEUpq13$#ycW1kG2PulT1mXZIiPqx>r%6Az6I3&;{rd5Za0wb&98j&t%T|>r`62zaZ{nmS_ga zza^=)(Hh)X9Au8AOp3~;y$Yw6YvO#r5l~!`30{!n(%`~Af|TP0nv_M9w#f0nDQg}k-JU>w@^dQmp-k4Mf-Zd-gBxMYMCQF2YbnkppK;534AsSoeJjG9SeB5S z20~FBMf=Yt=N*l>*%2#|F2}3r5W<^adyf$g)k=L$bC4(_wYxsZv-OHE4AaV?Ar!zW zl`=XUyW2_k6f~>unvrpoc%YKNfhB+TS<50f$$(ro=f+7<%K6NYsAYU+mZ`5Bw{|5f zR^^P2a|nTcJJfSLu711E(-Qkt71w_&bPL}jF@$HMi;N+cWb&C>yUh#tY2}K#erK>p z_(Z$S@nEWVaYy@lX~k=#&ZHFa2L=tSpXJ!m5mT-^#BsH*QtD~??-F)TS)+2R`pm@> z280G~CxPB8n5+m+lhQs#$>gln$I^4P3@4|$Tu+uT_Ts>m*qw9Cxbwo|@CzK~)l|#; zsKpa5gtGDoR<#l^7-X;-;J4ZtXFj$J;4sk|^Up`P=JguzKqN5Q3&CN0E!a42F^>Zs zOWW(NN|%KnoZ-0aU;vjMa67mY{AZ^AUs5x7sh>>5(zu=*o|+DgX--ZJ z`5*WCEhnr<`^Se;0DKS>RKFAuQl2i;dbW+I$S5nMcYaYu1zSv-o-z=)f}Yg|=Jtnx zVLg(Xg=B`7Am%N#cgBzpAq${piCU)L0E}Jhq9LNAp;-}N{TLz+4#05PAiA#B`vqt2 z=3K>2RnGeVx?v`L_WcJ8(O7zBKELA75h^kjb_FrZyAR76zCCcq0}y0pZ;%A7AcmR+ zgnD2AP4}BHh_R4}hgdK;W2jvKu_07kxQz~H2Xwi}i@sBg3NO7oB)Pc?u*(M5Ic6#T zL)Y-Yl=;40_nt*M96X%WP2%^ z23PM#IsUt!KIa*GefV9CYp7udEmWWh$@*L2)qf=t8uy?Z`@B3=uVBY}^D8;?;6nxGxg5W!Q=&0RqQ^joUX6Pix;9E& z8trhp?7{D8l_>qkU~|8UUvvol@WDC6Zj&4bT}v3T)yv^1puy?Dj;~G$NUhYk(i}h zE9`31bhX7ny;U{-tjBx}uG9%59zg3--Xp%N$9#+DO>d~(Wgh=xafT=5=vgP$0B=X> zV@Lsn*wUj;$`P+tN`4Lt?oU$2y}g-4z|%yEMSLqqzEx(I@{F^fiSz4g*Q|EQMl|T7 zV8bCT^P}Dhr07vyM^=UShTEdYj2ZrY{7EO0S@?J%QbSRMSnPOZ8rK9z^9>nBL(aVo95 z3Xv#6oIC>4yT7zcVX#s0QD7g)we3p(7wT9t zlQcWJ`y>)grniH=I_J)|Cv+GCRJBv%ykBz0#1(AN4LDtjrfBy*#U-XV$P+sB4ZV%Y z>f5YJ4Tyee{(K~DE3P|bJSHsXw{(`%T&`az=B3tt(O_B}i9gZ+8V#PuMGa4WIPE}F zhw;(>L=GIS>J#g4Q+pTNh0#A8|8@YQ(g^bt{dlOw6bF7nhoRV=5^h%J7Pqle2;N{+ z&Eo^3hW(M>4-C%>lJS)5LBsuHce&U8ag4@iRrE-pMH)S@yU9b;u|05!f%sV}v`euV z%3zJbpjydeVgi-&%Pd~kaFi$^r+of zoA6_W!acws`DV*rwZH5v2k2W`I&L6bLGzZsfNU{b*;IFO|8ekhn(S&&P32iuz0Lc{ zad7l0pt|BV$g9dWE6^5c5}I+M%o1IVcRaL9LFxH@J`0yvQheb#L~Gn*@IQ`N)FqFf z*|m7S(h++6vRB%v^-bExE2LT#+ZVy*(B}yArSqd3c`%A!{R-Nu`|`~!pg;atDuY8; zKBNN#!~Inp)#kVh3-KoSIRFlH0E|as)A{6rL3)KXuYU~ccBgB%*_(`~F!sQIj+cW2 zi9LF7Ks%R%QBR8xcc&MrREwW>1iy-^n!nHxufT049IS){zPCK(dJnwoRc{<0BTPCR zj0&%E(FqN=j={1GF9J66T}+1sGSeBvOls&;Kn4DHzXv7xEg&kw;NGY2R1v1wbbk#4 zv_ER(0pv-3lVAny7?aUf1ak?sO*ys~(5A&~Ae)AQgI(eSB^fOu2dYbl>f})z{ls`0 zt4(*!EaFgR~gv|(#fc<7tJ;IjR)BO zP_2Hd-i3VMtfCJ~tRY=%CiMj4$KHR}=YRep#Gl_ESXlEul%G+_DWNQUS-VGv+~q`SI$t&6KVC0wdZ1o%}|cIIJEY z1&p_#%S>CLD6E4@*4!G$qm4<(Y*?C0Frd!8p`K-4Tw{QfLU-YWZI84A|zM+$O9O+?NQFAEQQUIPw`Z!@>roc3K{4EDm69 zilMw}yVbj6w%)#vR;&y&eQ~{a|FVk&nM0e1L!OHLU3k%5v3SdiD`>B5fa%+J1BgVT zh_l-x7vt}rjZz|g{hIpl7%Q|vHzQ@;n#3vli}Vilmkq>*Ypa<{SK3vH($ zK+bRt5v-$tRl>FX#AZQs)d2c*@vXG@7iOQZiB;gs`Ramc-ii#?&@Lcv$eEvQ{3DCT6u| zoKnNX$9dYb^pK)ovB?q=1ss?b1ktBd$_e-^A*FqJ@`Aci*`CgGFEki>{2Dsij7wEI z2QzT`P~b8ac7+Pi{fLsLZ_xz{*LB7tB~}5YMuiuha`Rq6WlA|{m&EERG{7a%3Gds( z1=)py5O0RmeRL7Tj3D1Pd4~>5{d3QZ-t_(Js1)rSmdF7I5F10j7YP3NmU z?0*cGl$PWnN7IJk1~Sga!JR~(Sanm;;n?7$kQ`K>)r>jT(wUqBi71Gg9#Yn0lj_6V z*#}h2zc!y6?<2>90_%&Cmg841P}DQXo$}_qO;0QFI?{}FMvogUyBhD)XPAz~Z^}cb zJ6y#0pl4iB`sD(@hxv`xw{_Hyg~FdQo$0`&=j8<1rn+%%EJ7>lH8`$2yno>9`#fxO zeT>xf9dOv<_OuYt&d~_KCIJ?gD<&#^U{OoWZ48t6-VOy#B3$8M! zhxvoXkJQH=WhsMdHZKXYkDt6dD)>L!(&zd}*pe$aKHB|C561j7@AS?fpD}kTRE^7N zkpF6f6l6zX7YD})QI>L~_>|M(X7dmOD@ph)atJ{}qOP(xEn+d9Xqs^%2J!L|_}~VM zx?2Et8HvaX<5!mvA#;}@y#ah#Gr4~mZZ8rp@oPargGDCa9JfENcm$&~GNYJxf=k3= zFS{wgHi}uk8?m_fFg!v>0y*^%LVw5zMSFkbmC4qD6TNIA%v;@Z_%)Hpx!KYCnaZ=y z14n>PBVD+q`f12iWa-24M<@sK`~ZC*EOnqxPF<%Nhudets_y-OeT^ z-@Qy;Q)397j%shxXcm6V!bM+sErzz90`&SRN+130ck9#Ne0HGOs^~zUeT1h# zLV#RB=qmJcbZb84UGX>ln0T~mG3U$2N@UPpQ$D%4o%23KX>9k!m_+?;G}@M9h`_Md zqYzt0XDD$Oj>tPb$>5QS-TM`l5^`9a`R`FRdK9-g&!(c!qFy zW)f-cD3d$c20J>%QAP;ZY!)Yqh}lQ+WRJKUKQOln#Z!L|umY=lVZ|t_NHA%O)VrV~ zUXDxHPW4I2vC3J4Ad(zh1>Pp#P&SImMc*<=-fi*HlnKFsr_RFL?|{KA&#JF#YH#_q ze5M3`=<-XZ-QiQ`-S`jCKf0$i1sdz~b(R@JrpDW}$Q83~ZrrBP0bBO}p%>o)PgPLP zeGu*v3i%R}1(R~@&mjBmFlk@G_QK?SR;}$G>6X6(TC{94`*K!&R{DKjFh7l1_@GUG z2W((EAy%ptalI`{nOg+yaS!|TUuc7ef$Xt~Gh=Vl{4>PDgO~1ACFncklP3YDd(ek% zzPIl(vAsZ+HM%?t6(TyEL4x?F3uAg11vK(c2Y+5uJ4*XPuzRpSmDP|gUEOTH60P4o zF#>{*M;}8rz_zq|;eWuj-mJ#m!Oc{Upe5m8IslNU+W7&toeGV~-welU% zT3lg}Cd2zg&)dfxei#G#2-j7AJQgcA_N3N%#@8n%Cf`>`r@$`)#yxX^NBj zLkwqT-F)L?sN!i(gz6L9yA(m$%mNu(@OhXA4XpreBAdgn$eEIiyL?BNhhQ%WUsqlV z^n9qfb~N;&*ZDj&2x+QDbhsIRHMxO6=4SW!G_j8`6E z;!-evJUoq(diZOoS&5Cq*K?8t=`+W#LAvqpHt)X!Od_xZRcg~&R+QoeU(CeJFzfHu z?!9*8AHT=xht7n+smqFN+Vdp7drD-`76zl!PJ>8srwpsXO-i+f1XS+SZZ+m!U;60P z(x5PX9Nh1Y4@s(eXP~qA(A-(6aO+mB#r6<%_);sy>>Dd2r7LyHV^S?exW)aN{Dlnk ztL)=3$4ZxTDQMOD;~^tStjWtZP}9B_DxD><*26M05=mJKrPuA8wk%?aYF7&88sxsG z0K-=>v*dJs+78keZj79MKo&S8dlz6@>^GKP#H(Il^&mmjH~~mVZSRlsUx%7;paUq+ zFu`9${WbOfsrUxU-yr{iZH#T0rVSKX`T`;?>Wl*~No%gg1(we~{zT4${?AKmI3`A@(0sbTvfo31aE(-BtizWHn!W0p2UHfl9IT zp83fFtWx*~VB^$_q>msfu@CSn<_3ElSd$$xJuWZ?{FUYM4}kqDr1l31@fXRC|2*3- z8U7zQ^Gp+a?-RTo{27-24B#=2!f83zL^B&ox}^N^k{CYmT&tBWN?d z9;ZWZYgC~Bq2YfT#z4lDvcvh|>~n${RL}38KyD(RE7qGherw{bF@Qt+$c z4Em9>Wrd%DhPBl@a@Yu}m|2UJg}*Hb0s>A#n_!YPV}KJS4JF?JKm?(WGJ|zj-5Gr0 zWMRLQIjr{;n?qcAl`ntBWGNq65b_5!*nbTTK|K2L%7#3dSAB?vqu ztI5snVEBTCciON-pPEd6)MT3hOP^R|*m8K#_JemAUg>3QnwcPXrFS`wgoYikrMIp2 z3y^&f@!LLwV{h60m$Gwf;KLvh`>_Dq@h?haHG+l~mjGC~UR9mG$zA^)18DgFiYNL< zWcn}I#=_X+il)*1OnVG8`o>cf;1LYdO3JwCZ|ZPq0uh};Jac;asw#{PTX0O;ew8p@ z9CKfy(JUhKxDv|uLI?!}iRmpU^a8&QMzRhvunsa+4?;T}1K$q+R_J)_Yth&Ip8HU7 zf^RArwLrjPIJQSXRF11rjvwc7;5I180k4pLV;S?+*bkk{AMQ&QUaKg~AQot&Ysqc& zUlf?K16h-cIc<47dtSEe;V-#mKRW*QOMQluVf0#@1$y+44d-q?CD=}>ILi|(JlkgmNshIu+`J+GKwyjoti-2P2p zz^kEAQ=Ha=iauAwUJF{c$uA6-y##N22^uq?xKLxF&xu!9MecVSKWwLpb;v^auo$IMghU)nEs_QLmG3!lB}5QeL{tT49bu%hHqL`kW52XTVQt|s!HCSwD#G=*O@jbEdjjj`5A!(4U(Uc zAE*EJ?cv{I1KsKT7>0i~^n!p5@!zd`|M^h(zl$Zq`!3V{Zry!Q-}?>}{uaX@mU3Ii zfBW(9q{gyxZJeU<>Cdp-WqRMPzX7=nzgY%F{!}S{C-(0ye*hci|GUJ0ecAc5^?&QM zzmLs-k@8!g`P;_*A?II*es&Q_OBcCKh*zd;6EDpj|Tpuf&XaWKN|Rt2L7Xg|7hUB>jt&07UkGLH#4rWz2sA=Pyef{}smJzgqD6BN%_L z%>PF9e_grzZDsq_lu>!|vYJaQXrR;CD_H5B{bXZsft z{h@N@hkB2B`W~rTmTh~gjLayl*K?ew(F-i0g&4PK~&J9uG!l5g!Lni z6Zni^;CDcM|Gb0#l{a(#bw|?FgTBn+@6kMO4*i!$v!&|IWQ*^DUHAC~H{Rf+_RUkS z=Pr-fr=?O8jpr_ZiYBv?G(zvKJ-EGu6-Q7OVa*`SlxQTyfn{Ymhm7L~#Ua_2SP2*k zZ|$Ky1!8Prw~Qgc8fnFf2Hq}Sd)kwJ&>q{992w&ih_M6H*)2|;Z9`-Q5sYb;8}0Bz zQ+i?Leq7N;^?txLn@Pb3l{27}xFS}nxx)G~4RqBfO%6>4$D(P(D*OJ)o9GdBxe>97 zvb!+=8wtdCF4p?ice#;=>vY$4Ja;`Hmg{smWotE4qB9J2`6GU!d4Q`o(eo>|VMMMy zw>uDf3d>F}5QOuc{jnQMq=#MZMK*5lOwZVDgNP&n?_{0H}?~(LhZD{^R%KHTcgT z7#b?5jaY<8eT5C|-~ZA|;6GaF$$i!9#cnhzwqSPWhfZn^^v;Fn(jL?_(qmXT!*e;b zb1(EFZ4qp>cwqLXMV&W&&(z10Kv`f}IaW+T2tMiATHRNs&`b%MobbN{JnPyJ|M=D+ z3iotZW(Z?nCTcFeA~i)& z>mOZ9@+=*lwe$j34TMq%Z=45`f!Mv15^+8WZ(M>dQs;%*9vh5NUXi-p$+WL+oq7}L z06z?MyNqeK;X(!n2a?)q3$m@c6GtSLnY!Wdven^*8Z<7hBHV^%@)y7c_$foR)^)x73VbxOXUF;D5P+cJ>LP4%r8VR zi``9TarP^ydlhKBiZ3Ok!ot{WppdF8tZf>xs9~RTUOq?x{k?jh6q0?4uTVhW-aHqM z2+kmXnp505>g*}#K}-F-l2Bf=Fm%%v!lBC`mBlWbBqv9&Z!DV>rzzU9ai+BkS>>Rn zhZnI1yJ2&15Wf6Qs_gmF)0MryIz8P*-V`bTw*-T-Va3n{z66Ob>yvm@*k^8Y=n|a^ z8ur{;UzTP}{|ls1i=*;t8h!;bNC>rZQ+8y;NUKW5NdtUtZrE-S#8UM>)zOsTH$13B zk7ImiAueeskF$Pftl@{TF5*@;mx_CZIDk932x#r-8~Uj^qQeT zQ6iPn&l@y7&i%>IOS1Q30D!ty?_{3M+&}>v$Y}hBQ#LUjp%-;{Q(tGI+uvAsG_Jqi zo-C9|~T&F5bh@oz{SM z?T7`b4JpCMVQXpY%D!HfFG1ICLDTK$XT=}k(swpq4BrfsVj;+!Z>4SMopsj^Kd|M` zNbZiq7;4po+;!b-`}*ZuC?r@@Ix~Mhldp`Z;+~i2Qx7M;#XeF$qH9jv2fq&6_6L$7 zHfdDYvWb^?htRH!6`bJ<5?EsB(H(?9y7*0rP|R1?c`qpzLZEOGoqPTRU4UI zwVub#R+Fk2TW7l=YezpdT18cMD#YziR!z$x+HC4e=J~RiaEM1BQdW4tcrfH>mE(h% zR$H_T^|lgvkF2h))J|qy@dG+y33&m&td~|K9d$$g3EJGd5$(H%1J#!RQWu^2S4#)W z*j;xO1rZu~vfTBYDUp)KuyYA%`|1WUluh8XQD{qLNOBS9uvcSmo_paFFISpJ=L>HS z8;=^jK>Og7CiCl<0ur8cF?hi57MIbK>8I_>Oo21c`{wT2#g&$;!^md3*LLl8e60H( zh+OUZj|#ULy+{!q1V-Krh6!tfs6Y-;SVpfe@L#5@^&g&B*66;Vw%?Bj_;_^8S5UWw z&yML_L(RT7<8(lfZ4Xf-6wDQpY=}3I8{(N^*l=2BEa`DtDLae^*Yn$HlTB;$Fo(Rd zg^`VfPA;L~Pd1?h1D3}RCoeFyeOS3OQwAJ)>}t7`x8-03aZr~v&a>Yxfdvc7@5EJ%RZWz@jHdJIeOo+B{a=^@RiO(+e zwu`~PETa*eF)J9y+5l*GCU1hhn_vI8e}#fmoHi)gE)I2z&O;JSon}EleGQkZ_nHast#~SoT9zj^bYxP&auXY$ zSKI>e;%bEXtdY7-=7WrsZg$p`aofFsW1R-4o^=}$(hS~COMC*}+(xLdtfn+_lhvJt z6NQ9<=c|TY18K30GxV{TjTX?E8t58f{8Xu{|&= z1oIB2J=M;6QOqyl=enx4Qsn85YP;YQo&!r!7F%(p($nQZBfF6pofKsVyMY3$7F?MF7yos2go~A#`_m6 zhC)sb!8`32sNnSewDMT!9|sIA>-XRh5Uf^VA8%yrl}BBO#H;3FFS{|ioYU4FxXSa( z)+Aaq)BF;T)Vj^vzQNtTW#xc?Xog<*wF?np+j5t)OXfG-4N;Myy4}8-KWCL*ET{4% zOq2ApXB_qKV&FT$jd)N9uJcaPXz9P!_Q%r7;Xab6z12w8VPO{&(MQGs?E*b}iHjJz zBm=pn`k*3IwfBW{t$vq_Kp)aiF09lOII5|o2_H3??;%k!D#ew93!!3LwunV8If&f_ zhsQAgDc2*Wu1^sRcN)OtdZ108&C>l-R}Z}6%>(souD38T9kJ8qLkz$>e?OW5acSz_(yv9ExIE) zD=zp%q7z;NvQ!8mhE%{bVr9ORH8)W!z%sS!2g>oxsaIv#wF$=Rq5@DzfLyaW+Vj5t zf$MHzfu1we5^&G3@_CWDA~l~{-{!kPl0Y~mNjsME2~5&x3IhNTa==y1UJYCE{npny z+U@j~-61$|xzHa8U+~1&N8`<$46G`z$8rGiY$&?BKN3bdeLiJD;}i`%8CZwKpi#`V zQ=HfYlV3wzn^o0?x2W%9cNIc6kPY42J`{7)Pe|TPFt8+<m3hooIaH{a{QL=1Wt7 z!D9b*8j4-aPj(`Uwfj5Zj9o{OUL^~^$~d_kMlA|?|6X8w$(3lj={9|^?u@_i?I~Z3 zMMC8f{ym<=dwIM!G9TyO_k_wqL?F}?dA<^R5odnwJayTa-RK_MW%SM|U==zombpf7 zg{li9WX6h}oAbbw!;|CoiPyO`fH_kACh5gv>mzNGyiXQ(HgUAhWY0_D$qCM|VrN^X z(v>}Lo#*jVpT!%yZvy2YPg}E{Cl8HJ(a3D16`3{GR!~+>5H3(KIaPdZkL(bnEfX_p z1s6wKA&+5V@>O01;W+ne6J!?%5Ofx4V`Bop9;~+mVy@GaDvprt^sNt02rYa;Jf)3B zsG`>C69fmAe!3OL7Ow;;axNp*vLoR+plm!V1cg3Ol=L~YA8;$fS%v4URPZ1Y+Mg)l zxwr}+qi1#}r)(bTlS2B-4#@;M>qPGO5NC@_V8S~Qe?Hq%-R|x}f{LNmn;hru|I81? zvW%J|uPEfwSZ5!e+Zi!Gz7RwsUAO-cn8si1S#UV3YVsER+ z=4g$Q;U`<=zQLSmFZpSw16KWn56Y0g2qKQnCT1BlZXUfAiN||SHLI(CsTUmRb<{tb zu`^JMsi}?QKwTJdRk-yW4kg6sLKOmX&9pweFh&w|_xY21Au<_)ov?Qk%{|CKkOO+*E!_eKfR3E+rT+C3D z?blwSTeLPz&y&ws+!5n&lJw9m*c$2y&+&RPjnKI~lzoN%i|pd$iJBz#SYNeiw|NQ&#iw$0fwx1X2)@J5aD z82vI9s^ThMu&%Y{#WnM0tppxhsg-}e1Xk_I`XxbCVVhE;fpDc+$mH*J-u$>z}GX$LuXC(mE6~e4BlV|2p0IU zHZ@vMgeX!yF9*We<8vXtaZ2aI)YS6;}X`K-RhY?Djr@0_l@ zA^c-5)~W7c+|gge2)RTbqG^1&Ld5uO&MdH?eo<}{hk#7IA8 zYsS>OVDnGRsQ^h+uUgx5sn;keZ0Yp`Es9mMZq*CTGlMDH zsG)?qTv^S+R?xL=#+EvcFW%=VT#9kf78bC`JrqoB1fv@?a^QVRHjR|SO;-^5wAU1+ zYORg`80Zy>Bh%e3?YZHr3k90XvxfDkx1K*t*{Y^)F7ok&m_6Rma84D-uxE)nLnXHZ za6K(d2Tb2uhO^dOGrSGlX>x}~V!%GucmNj)@)*6(wOkqvUGKGdz1e;gxhB&_6Pa9v zkG3GVWM_&R4K~wNxSw0}GS&Vg`TIqZwPU({rlTeI_S{ORI~lL&HTIPHL#nCsZ3|7lOo~DGUn_ah5Yi)K{OhVxLO#l>-*F z(=*=TBraOPSG^F;hj9E4SsHx}~AZtR>=m=RTo`rpi+ebA;dQGV`%u4x@Suepm zKb*8@QU^jEj7VJ+td3J}x;CaZ3bTM70Km+CgJix+eX^Cop;kOX*OIA`1_-`06+u4}n z&@mOnu5|?Axa7V*wv`9#G71W0CT2i>FXRo0%P&~<=@6Y9{qP>>E7)h^iNO)y0hVV; zZL<+#_0P!SVbN%%loxBq1yhFy7X>=-+OQGGyVh9wbeQhuOXEL}&wcRH)Or2L)ljA~ zqq_WpmU&PO*;(xnF&nehBNuwm#9EedZ*m&~CZ71d@fLX`jqJYm!ulYAQ@R7$a>9}ZIwMlwAR-4)uoI0m9 zd*RO6U^|i~FIXe{z5^8JO;0oBpRqbq#KOdab7tVBC5B$);KiSD66=sbl7l=AY!cFH z_26`FQ}73*Upo>0u&4B}()`u~!%6ROKf`_HoJOBAUc$jVVy>0^$xXm6 zt`N`%z2#+DxF4S41sAL!5+xu@&#HyV=&LAgZ^yPDE*}YAJt6@i?x)Q}a##g2Yxyn@ zZzzmLxwR1OB0`-e4GJuL;7k$=zKbxZ=BiRMID?Y(N_US1e#|BFobeQkhM?L`_)+2{ za^KAcbI)D>0>fP9VqI(^FJbKDi$n+ERXg9*S`o+u)cJbA&daYLK$S2N`zYk!NSTt~ zIB4BBUwPGTG$~~49Qa28Zkojd>!Qpt+kh#OZ2n1PJJue?lnu9}$75j!5+j*b1tIIPI%k_x%tr&jMV(2(1nT)5wWbba_iTRwI_r8;|@yE2{8e ze@4+^27rXJ6iw*l6PQt~Na^(QbpikRmk_63mRfD=0CtM$RCIBpU_9q`?VI84KsY5z z=>!3UO#SY6%c5VUcBK_3|dA zqmWWA9CbYY%9NF!*s5IxV>9%%zi1UR?ToEk~ z_0J{ix|* zRZ*&+usz+rPz*gcmNZg?lg$ifua*c!1cxQUxSW{>$opVEuJpns*%&HDO_Is1(HYko z{L4g#1yz=0_otRsWUWt*ZGS*cWCZ&IfPbqX|{FkTO)3M`MQ^rfdTY4w0tOjLRAd;WvpN=1mgPOiZmt zU$#TY2Y)0uV!=9L8cgQ+N`_|yzp-mZnU)YMTw|)Y`$g?Jx0I9Ke%6z-QEZ3V3V`<| znPt}>2ICWEJ^fM+U5_Rw5O0=Vcx)o&UR@P;!i<*e{Sf0!64chEAJHk`mOlGzzOl;p z1DEDUKbd)+pz_zDpFUE{p}=0Hn>vaxH+PzcXPFzP*QVWoS z3WidT>>Ab4(!@tQKxL-fq*g~4HagZo1FIYI%WtTI){w+Rw2ChSQ*A$Lmi?`~kMWN~i+OdUuq%$g)b%M$^?NCTTj*=4tshh)A39{jX0c$vUP zxl}!k-t8;M_y_lq1m@Mg#JCC5RueNT;mjxVz0xEj;7X!QcEFHxypYN)@;c~%WtS+j&u^Uxq-n&3Q0+s z@~N;)da8t;4?Rd5K6QLoEKUp{mjF{{U9s|kD4*Md%3#MAI`9!jeFb_WT7xk2Zof3R(hbuf344sJA+V29&r%cI+oINYz*J_g3>ap?cAZ z1g@slXb~wGbO?;mckmV^+UJ^_UPa&3aYW1wh(@sBnCF7jAE8WPwX{}wCfhj zOb~Qv(^MMHX93SZU6IW<03sonJW{E7FnJrxf|m&#c1CURUrks#l;&`|l*Ddf@8}Cc z0^d0;)nm{vV%&skR>Wmv1|`vH1;4&l2RP{DL?EM(ye30x!2(cLrufsyxPRb0h-%k} ze-F>Xw>1dLLVa>pG}4s*dxV5>J#ZA%%rM z2x-Dbw{99L_tPs)ww=)6yRLYBf-p-1YB49DJT!@O6c!mWXlCXKu*2yqdyD+p9!|ox zp4-4=z{}MQPF;V*A!%Dk-4hQ=w#VvSN)(z^$)N_V;P|-U=9o{4=YHlk2D>7}*F6ha z{1{inFKQ|3#QmpevZBoC`|fNSlit*K%)5mq(IQP6=t!|PgE_4ZlUK(Dh;Iv+t`0Lc z-P?H+DUREb>m%2dSD5o<8kQ=sMA(os7f@Jnta&%CIO~<23 zv^(VIo_LT&rBk9yeVM9tV3OoT`i%lKs3>#;aKsS&QlWA0r{#ZhJ` z6^54Tk+{0#_{UECa;?JDO;+zzE<;0$>s=4CH@rnqs7e{RGM;jgrI{)!qBGP)H!38Y z`BQRQ0<@jp#;H;7OL-O8uvHucYMaLRazS?)ka~hGK{-HI4W#dTmpjlujo-^U(hjR1 zFEh_pHZ{caoP_nidU5m$)UONT+Zloo#+s7yg&=yQR*jsiUN(g%Wtk z3OXU}li?MIhFAKU8`AZqYJRF*^?LA}$&EH!WOXXt&gu^9uovJRWNh3JeD5Q|Fc>w| zyaaSb4SrTj-5TkeQ@&ZG))9vYPH2#Zlg!buE!Q-EXsQ~fwvuAYs=h`%-x0y($(~Ekr(Etv%*?|RgjLXjw(`aV1W^Bb!+ZwDE`faGq>hrMP3PAXN|2y&Z0XN zFwX4@4}nB->e_GkzljsX>+0$f*M3&caca6rD>&dh@IbD+h$Jt5HJz$FrRj8RG|fKx zGIz2yk1hYzxyd8;QDZ%7J|1~3m}-tq%WP_kps46qNfPO>iQG9Wu`(qmNM`mWow`$L zmjv-RxNMF+I2Yki=jap}j;o2O!*v2m>2pX`AU6PA;x;!#SAUb1j#_C{s(4D5uh(JG ziLvfmD%khIfMs5%J69rVtXmqn< z%GKIT10*fsn#;rDBuyuBEM!$6u&T}QuHU4YE#{?CB@+>T%xuD85iQIhu|d1d6(U%v znxOb<3I|Z^*_RnVu=vE0wYzb)rC|ngYGPv@@cI?SF*Zy(*j{WNbQiLkU~~eL3;ihl zjMM^e3Ir_y4DvbNmE@HXN}ge(S<2SlY6W-}d=t2S8<^0G&uX~4gX-uUe0om-&fSRo z*tVXA&&r>ZvtJtY_~^`^I;v;c9#F7UBms}7Ijx}2{6*mp9mhK8nMQ4pkO+eoM|w@& znBO4eENdkWovTm52sdmZ7YzpHQ(-Hl*d{y;z3! z&{h#a;&mc~=&jW(5f&eGhM5mNBb9)Q`-Hi2N!45?$T9&zw>2ByRP1_v_k8%V`b^@L zEcxe9Yu~ddaKIg$298x*BK#FXN)m4vIk^F1N<`o+>O!`beHe29}S)R88yKnSpyP~N{r8;maw)5T&^@)l(zY4z_0|sdLVPswHY?r>rkBh`)vw9b2J8Y=%Ok*n}YDIXh5U<0l2JvJRY05sm zDl-(>o~fH4S33$y3ex&ae5zPzlqQ_b4Qnd=zTal}pXU)0JNmFwA=9QxALUkQR{zik zWN2tEC!SWY7>In+bWM3{hNOKsvUSt`{yAP+WAx5o0i_7G&d}mx zR+kr*yQY#0fZ5v5DKiV4Jcplw`6CH-t}nB?m7-{R_#5m-wy+OT=o-$&d{+JM(O3K> zwW_Lc)(~Vb&<(n?)FbX9r(AvOs(~^p(?K>)R34AoG8)vz;rVycp~ ze5+X!pVNj|CdQRC)>p~JWsfbtdrpMYFdrdaV3?!WwT#ohoGa*}lJi8pQ!C8)n+mTg z)EEgG3;`;t1{G9z*yja~dZdW{!<={ReFu{>gwU%3eK|_t`QA2l8VpgnJkn;Ya(e#D zNVVdYay(RHS?7`MWaaTQo|G}B2_99}U;Ecb$al3h7iJ4eo0(GjOzo%cTIcQFkgJP0 zTbsZajdHZ@15%3gOsstX5AK$>p2 zV-21ku(@p@y4@7-f0YDICs=-Uif=hm;9V>Ds(s}T#Lu4X6#m}B*GH62ChyLQnp zwSY_q7Lo@;_Phw)>vb0?MYCs^_?V3#?o!r`>vEV*j)e%uEQg78Gver4u1~jUt2F}G zY@ZdnH|9J%0t<`kDp8UgsmTJ_&Y`L^&pNtR?^SBrY|cWl+v883_Hv$?^{AOO8=*t% zY)^$(9MA+EukQT1pVhpeJ^GEg*A)#qaWU$d`625|;coZ#ku$V%jYuj9QjkwB8vqtl zK4vw;RB3Z7K&VJqiz!Z8)|%bdy5=2{uS4`%*~aqd_^>lvx)?oNP{X=dxB zvG=|e5G6_J671=1+|}Gpf|E#VR%&IJ8f^*fxz56(t2STkz-vE&lLr}dTRM4^ynV%RTSAkP9o}DH@M5I4lJbI=o8}$M@v^Zrnn!w^81AYnkr<`OsV{i{Oilx3 zs+ude0W2mgJ>`_8RFuI-We(+-KIQ7Rnb=8s2vJPNLrX<9PO$AxBZ^%Ffd4h?K#F^U z+*+FJ7Kd@OgsZAO4=aa1x7Z`mpm8Y5(IQEe?mW~|(kgA=_yQ;CT8&m4lToad6eVCF zK}p6h_Ji-Ln6BeOq{Fzbr`J^U!j=xNICv9sgI&>{K;NWBS?jEwuWzDN8KIoW*J=K+ zND{1uZQ_baAm()yIgbaYEUA|2m+SIi!wGXp9<#4Ehg6n@91q4)jo0bjpRwh%M5DlO zEAUxI5p;A}GkAbm(~8a$Smo?;9G6vci$@~}iSN01d_SxWQMn9vnoe#USt*k7q=}mM zTw!ui0;(30va}ScBvnYlqPr?Sw9bIX=LgRV5kMc$T&+2mU5m^%O{jfC7=C`aGJ8iX zDs)84nBlvDDV;}Kct4|FIsc(pcl=X@bv)Az}nGz%o6*&d>HMGGy z%m|!JOkV0+tk1g%zmSu_Q>?<7M5XT#?Pan?YS&I`xW*{L8Epm3Shd$AQL0fJY!oo) zQ&H?KfFA!BJ%8(@v;q!bfWL0feYyoXa( z6*#`S*}~B3bojsE-#DYSKP-UFiGD|EDMGs?|1&)`i+6QSv~p z8BUF3_{=^kkmupzL-`ewkP69zKr2K7MpRo6`VrhHiHO%Gab#LOj$tCzn-p?++l^Q& zh7^m9pjTqP>&^ie77E+k)(eMPkta)gSC@)s{uV~v_>)*<2+QP6FO(+TAzab2R3dzp z?h=GrLuS^KnHy}i@0NB(X7T;E4@6=mAClY)@4plsgzneKg99UfK(39GE>nlNN1RlR4V1ZF%RyI zNm#`%1FTxQ`;W~CUF$V$;026vRh`-Sa(8{SR)nc3PAUmnY%M*EzrmoA8Fp^nrM1B} zY$BUG6bV7w<|@i{T0ml`hO0=GFMIBZ3MxUzD-s=pfX52|{Jgx@ABGxqDhI4=R6j?l81Y7DU z$Dvt{NR(D*DbS=|byE86VPjeT{c{?V->cbGDtDe{JW0fQq4*0WOk4iFiU@?Vk_mIa z`kuL4Gnm*oUAWTWN=teZ$@P~+RdlU@%6O6nF~j^tA|qwZrzqtZdIGD|>slpJv-0K1 z46Dr-iotncDq7`ucXkO;N#=yZ)gQ>qcKr_OVU%Bf4&Znoiq zR;Ja)#zz`0TjV8}!ZWDph9Nid$rZT11kAoMI=Hlkg)V@8Zv)vXuOOL6<1TO2Pq}tS zH9-JBvA1A{oL;GhZEcOgtlD9$F~(sH?*u)(j7_K=8?Q+Qa+

    lblx(*pFkxrMM_F-&M!e5zx3h%JEU72Nb;XxrC*JNVw zA#8$3FVu#i_b6l~k{_7zjP3vYQ+&rS#|88;fF2or=5`HzIIsEd~kc{$C-@gWJY|UWOWzjn$ z&N+ZsCX%^*4hFWHg@9JbYaUp>X;fU6#v4)R;1Sc>z7T~NFG=lSc91A0)^4Hy;3$4x z)6h+s6lg;?2KGg$VQbJ;*@IkI4pa4`!xcyNVuGe-g(a<59i+GfU=nCtY+RN(=FxM@ z<1#$$3R|@gl_^2#`uz%1x??OyX)TvX(**1qT0eeP9TGnbNZsu=x;V>!4)W5r73^EG zyFv{Yo$ssYFuIVxzp#tc-AOn8shz24NyC>p%K&+eM=hpN8Pu5mjjhs+}C zfSteZ0yBIUgsfaX;%2K@F{tJ4Z|UF{EI(!lP2d2Lj{Mbr#0L=05ty_qYR8|z#i2BX&k zK;#Qlf7AC7|8Jx0*Ee?+mdw!W9@P;YQaSm-?@dtD;!>zkSG-*&1A$%xFmGvJT(!(Y z#qDa2l#gG+6w=v<4&iDm`o{h1c`hkfCz1FpB^Odr;48(J-AYM60|ryiv2tX7IW>uC z)j7-^DV$p2TW&ho-I%H~cIXPWnd?Luh1v*uJvZkk_jNTP0!2v+RK>*<2~hyv0=GIU z2`*ynogG59N7N#D@62rJS93DDo5{_zaO)czkS$-xXqRGvw4( z65(&`WOCokOVcEC`4)qpJDWW9$GBBe3aHfm=`a$_7cy_FO_%6n>yI7kVP)dqLvcNR zLugt-VSVsC#M1?cYPII0YTs17tnF1#dlwCE zJbaQhSc0bVF*TDfk4{dHRM;xM+zA+=LB7>dON)unASFT_D4b!eOs%z{j3lb|sI^n4 z25og}>?sd}QXyM01SEB=sfh<`TsNMykDi(pdvJs@!V*91?diO@xa+#)ZZTI~o7n+! zjXOBtbs05u&wsjG^V^V$_n!6pFvDOJcOl!ZW6N+RTJ8f3HrJnx*r^%M34 z8^&e&gPEajgI#~;92KXCa%EvI6UWje(3y@(iib_ zsas3lOYYe6T6~E=$ z64Ewa=ze&qyNy{NW_U>r$p%b{N{-Pf&XzLRY29TYFt+o5`{UBM1NG4HV4 zQgg8>Y`k%Otuf$^VpC5kjyx=XL9kA_c&P_r17RhhbE0V==-4Re5lSWuC{MJlM!W}X zPxS7-^4l53aVyI*=Aqi)T!O85AJ!!t$I0Co56J1d^H*Mw>Bus4&x^f)Gf^s4W7*jI z<)d4^X2qo_FYEb2QF5~-^0M-~jbc0X#6?E1NaHipG(3Y3H$Rn0(J2N&Hmr#{iG9u#~Ja2t(V0~{cx@C7T4sm#rqOZ zO)kC*yOzh59+nhoPjBhxNrEMk%Z6@R)T?RS$aM)liRVY;;Pz_!9uG{gFF$P92jIS{ zb3jZaX{&xUG;qv+cC!2FvGe+SUR+n*o|3oi=amX7%yTQ#vKMFlXLhGzHYRU`fFjYQ zegE^e@Jo=ZO#hbY$BF`l*XaIj)geKhO-0qEKvw!iRN(@IiIT9braMHn5qxUyjHGqY zq4<$8WO^pgNc~(P1@9|dDlrSK@(r7$Pd(@Ckkt<_>5obeZ0#JBjc)4}GlKl(nb(mB zHa=q2;8a{fbwBd+Ea;KxWg$=2$!!+gM|V54w11lxtarD^sE3_7`c`+~(=^Of0r5FI zChqvr(zlYKZoN=ehc5*WD;uBhJpsslMl*}HKF2rPP{1j%QaYvr1YgF;4vBj!v1+cS z*%e78Rf}PF`;hMJX!$F&cn90J$h-C@O;rR(5sAz2~ z4Fz!mjI%TAEjN;G91h<2V~FUdbI^OxH&&f!x4`@P)0Olmfd%8cr|n$AYxg?uJCB+a zjdZSrwjZG`i^Somh3Lt#>#^lG)l=l&g+Y{>C=!2aLQvj6RW7k8=oQtKz-pB3xl75? zApw-<&QqWDKJ}{o_xtxJZu-5JZZ+ZKSjvi3d^;NuCLB%pzm>wkdxxzyyr&p|lHs3f zIKXDZYd^f?KdWIqDo_mv-^={C^3_Y@L0Lwju5McI^($7*hFz}J%>ifMee?o!J*`*w;k1+QmoDGr(g58DL2l;jscA|_EX1wU6s4P#{T0Q}KJ`C; z>zEq6xvlM;DENa=7=SQ&I3fXaYeL~~9dmoz?@YG<_v+Y#&+5NtC?dUwYXQ>4)1YAv zEek=CzWi`r;|NlV!GG!PCG@;C2EVF6I6c7j*lJGwbT7OvGgt5#Vo0UF-Va6 ztU86meAz5&uQ5F89L4io`uUh`1a>*(&I zyGG4-Vu9iU^!1kQ9HYkZt-1ZRYl|NIMe#L+&ItJNwP{3$-9JQ9N8Hb;lJ(dD=H7t_ zBbkK7E0(a2-88|gxsjlD(4x2uB=SrD@&BWU5Zw_Q_F;_%2b)|+zX7JB=QSS3lG#RW zUPBm1<|nY|xg(X){uO2qncX_6kLr@!wXBBPYw7PF4LCxp?ELrnpZr{D5hC^s*u$KuYg6~np^766!aZ|E3* z`R$az(e7!Ad!@rptbbvhZ4u-A64Ly&bdd0Ef<0;EAs6tnb@=A8`sxQH@Yv*^8k++;Rpba_aT$#u_jkwt z_}3^A5V%55n=^7N?)kQ{=ufJIB%D5sgsc6`EXGu8WXI+*k#J>JG8qbfAaG9VT~G=% zrk7qpcu?sTrRW72-s-SxaXF1x*3+=TW^>-?{W-sSb@>vR8YCf>qB~0OF9x*tCa8WO z*4B=$2H>N#AgTgdSo&NRZ|1ZNt0RI&9_3r2#-PW<8$7cT8T+!!+y_fK&;VC!I zDdc;bf07;?ar$!tGTP-ny6+jP1niJosli=yoh{7xPN}%KId&YcJ%F^NQk5hysh{ru z`OjA$s#=OQHuqA%$58=-$U(-h<1^T0~P;FYSw#A`(nvUv$;yh*rpf#FUHb3k*6ax+g^p!Ur$oOx`knZIR zD%G+_R_60(_1KW)@hXcsMYrFx!9S@lwXMN9P@f%1QuQh4%Z`+r}!KE7-I z_CsKO)%<%Y<=YUzv8Xi*{u9Vz{YX?*EF5u5>v@S78kXr7Bf*;1EE@-K2?q-`^131J zg8XHjrRc84!B8X1cR@&^g1QsAm{E+x4J4DR18uOgZCl1vMwt55S6#}_-W83~xxzkT z0n2AdeIMuP$h(KT&j-y7mgy|*UX7cfPKtKIj0;aHU7>5a_X{n|jMLTj{>n8(M0;J! zP}i&La}Ny{z0~L~*=C@1geyJa5qc7b95S<=&omO%O&4?1sObt!icr#m)Cz|`TDfRU zKCjvUY5-ghPo4sys*O-uWywfaoU21txd+GouDNmRI|XjtMSkQQ7CVzi0Yr zwp-^h+GT#y%Z|ZB9!$FTWU+s<)fcgHUEYEtw4`N2Hf!a0Lss3i%B)-#BY?_AL1ie+Xw zHykv&!28%U=6Ozy_R!(W>`^30+#7dfv`818}R+>llsTXta*Ao>%#N)9# zt$)?>zmx^W;LC>`nXs}^^g}$26avLIeeSwx{|P_|MGDN_R=7E(%MWN6$#7i%SvgyS z4+NjhO{{f)zuSd6soljhF)@F{vh2NU!JE56`dN1bUPqhuMb2__sub8-P_E1{S zLFoZn5}0tMbNDg4nXf8yM_~v(={nJ7&CH=60*8O!@Z7KT>|T4l>1l{dantl#xy?z& zHzgMr=Mi(j7&aT9pY#E_&I@pF8V_j={TLzZFgWI?8CCt-+^$#S^|AZJm%UBHqvCKu zyfNc*2^;w(SEJ9=!tCC)DFSIUf zlU`Q9Tua{I4IW}IsHyH>z68eDΞ}OT?2LuA(s~MsTEcmy$sn-U9FT{rci)JGw!r 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 J0*5|#{U6sHRG0t& diff --git a/.github/search.jpg b/.github/search.jpg index 998b7753b0254a5969add5fbe129677a40c5d628..784bec892550387282d3551e7ed8d830aa0a1cd8 100644 GIT binary patch literal 152135 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 !Xcj4QAvn?KT(Ckvd+4 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ξ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¬fo6H$>`HJu94^y?IZyz~1FI9t$3e%^H13R(+ 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

    A>G|o_W?$Cf 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 <@me+(7^$EuTj$y03CRd?O$tcMh{ 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 ?DCi+W%=cYydk~?eY`4RLH-CX{Y4B&z%e%_> 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

    ~Laz8~sQV;-bsIrd=-tgk9FV{A|8ROfJrB zwWf8TNI62SXg@3O8n2XaNejVX5=OI+ZO#-;L0gtQRgaSQZcgIWT?ia7(3DO#^VCZk z>ch1adRG91DWvQ+V~_A6Vth^`y0(B&56MncR31*K53xEhNKa3VsHR zUHvWq(Z!!;1H2jGRKxQ3?|iQWE}HQ>H=ah-xj-fw=Pt)}Sg7&85lE7&6*hUo{CY>X zj=bP;ifo|e$3CM~%)EXKJzJDf)-;v6)UjS-2LC(>M@Ne5|N029C#YnROM+QPcU)9c z64Uca>(lDAizDEjrJBX2@-AUvREv6PrY#GC25f0#wFcf{x)I)}wc^YlBip!Af!m}^D*jCjwDZ!y?BR9Bn5 z(P3eK5w4u5;Qhrf<6^>`f>KMN|Fs$Xy*K_VGN1=>j+2dMdCURJ@P4F>i?{8!Br<33 zW{lg-2EM`x)8XYGF2Au}9Q#G8f7<5F(ez5nGyFOkgElLdV$*L2L@Sl^aEk?g~)?C3m zWKyk5@-BFAvldEUk010&Yes{2vI-h~r-z;ksZh_0Rs`~6-?rPX%@(a%y@?h6LhMcG zSqZWbN7+GIAwO~m@Y4XThZJ?{%o45IeVG}a&r@B#1f$x7bjFOTMc4+Ltx^z~ zo{wXY)(#!0uB0Y+&qcad*hc1|DG{qaZTYWrR;z6VUyRSLKQwwf^^`()Fj=7U}6JfCpvWREeG%C|NdK|8sdz9ZhM>x&IrE z1B=KJZS>)4y=uKK9%9u_26`e^W~py&7gZYGLfYv+Ssw})DiJ1B!c4;^(w#(oc+p4o z%{q9s3o7U`J~e>~U~14{EF3OYT(h3|gPImYIfQSQaA3Q4`b9Y8&+nlk!j%?TJxGg{ ztk{k-IvlbR{3>c`DT<(soQ0_jKPMfME{-U^AD$6|oHfC>3q z^j$zA{kSlj;2z%9=;{UGW}PQF<|Qy$6~;fVr|`6Q0jI=J;yZr?(ccSw4nOI9ot}k* zl8cH*(z$0rLmmz?)cy<$3s&GvH~!ttDiDZ%W~1bLO8$#7o19w!P6bT`2DhQNjS+oK z?>$XrY0S$@KhzFt&U{iuETq=J2=x$6(@t>PTBwkYru&y88C?E}!o2Xypg3h(=T>0* z!KdiN!u<>5U*GmbKjmA1n>R%+twOF%PrqG$w9g{8j~c%tgRS?RLLBbDoqmku)FSi8 zw!Z$KfAM;m(|N8+7H<{DQ6ZtSc)GOopJKEN^^q^!c0wD`vt-7wXxDtf%9E?#m&(k+ e)nMo=IIKU3QGsfZmwNse!~8A&pAazK?f*AYvF5q} diff --git a/app/src/debug/ic_launcher-playstore.png b/app/src/debug/ic_launcher-playstore.png index 3c4e788ce6a3c3f743df7c0007eed016a6365b91..8c374dd98ea98ddb9ea4c322403f78d8f34dd487 100644 GIT binary patch literal 9642 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 literal 13033 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 diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher.png b/app/src/debug/res/mipmap-hdpi/ic_launcher.png index bf8e595fbf9c1b0e9995c39fabc850f018910218..c947f526e1324bbf88c24d9345e118e1aed25054 100644 GIT binary patch delta 2730 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 delta 2878 zcmV-E3&HfU6~q>hBYz7ENkl43q6+ZDAJ8=@PvEyxQ$GbhY<9LhhnXyVX z8X6qiag($^Xb?z6P%1$wQYrkPF{1oJ6d^%dRjo$1k6lg1zf@n~MXh|D9PMoxj zlC(`xDPj|p!})yYWZrC^#WP+eNBZ=h-`sodIo~_?+~vJzqJPDe6&|F7fc}2n2%Jq7 zqCoo+qH=DKa{tTLo?U-;gCG zxQo`1?-M*E_(;WkZq)_dXajAjz=kCkQPw->68wsM9kG(( z9}&^QN}BaL+H{dumP9n^a15yu93@|)gWdIb0=oT)f(@_*VzqC*|2{JZ97JrN+ZKy?XfxJe=BfrE8utkZw zAZR5c2`5Pt-*z%#3 zDJSGep?^O7oVpUUO0I_p0?=b1b9OZiu^*ACl+4kiP#>}H4SxyQ%{06U$!wUTQZkKPp`bp#FDN4; zLA#nVcN_UuydI#wevXU;jUx0tB&y?N3NJ|aT9LAXv#M5c-VG&eyQ`6#9_-?#hr77+ z_HxeYSc^T0QL1Gh1m4h$256@%VY{CJc2R`Guigl7Vi4>4t89+nVs()VCVa{ z2!Hl*=Xoc$zt+Kx$LoZwLQYw^BA|X8p}yjgQVALHd4j8q;lUgVCVb>t)0M})FW<<{ zOZ(Y*MexpnYXmt!(2Ni?wV6AnHgV@vJ2yRE#jEWr1N6iZ>hq0c#HX9-A9#9+LUHL{ zsX1x9rZb;wzuC@h$6UPWnUAskh?DE??|xml9 zv1hW}+km#>0QLD^3i1$AANpaavlfmSD=V_O>482Te07*zQ+wGpEjTyMt{K6Fo7wf& zzK{eBzBk4l(^~=v>Y8fimZO!Nl9iC|raohN<&%fNmaau!@+%w@)^-XN8KEF$T6GkP-CipA)7LFRd zFG=!!Z6s!b`Y(@go8+Ic1fAK)1J4$-<8VH2{`NY~E=vutB}%Bz9}4Qphz~(^hb^zq5B}mZr^>v)vn!)*9nY_9x zol`QSnhvPXe-kv3ky&nZ6o11MJL)8zS(?rEA3E6a@+W!d4|`%G=<ACaC(rngH8_Kz%+$hKqp3DlTBD?_V(_$`97FD@uX}X7+OX+1*_4 z-XYi;H9>u+syxvX8A1JzlyK2NR)FnuU@sXidRRh`4#$G1g9 zki$L3oo7e5e)*3n(bh7QfHZDJ8=M58fE}3YV#fFI{E}du;G;rBOJ(o|^32M1wVk1{h)Cj8B zHenM~a@C;L0TYt&;95gux6YNiKAoE=o6eRNtRCt;SU*U7af?Nbf2Pnopq9qRN_UaHBU&H1e ze*vS&Mc*K!ESYkV`Z7VrM=VaG7R&{}EOr`yK}KORbT#z>gHR0_A4AT2!U@6-FI;1f z_8j>(upFVbV^ge?jBgPq=1_vU0Y09^N?-HQa)0b@YBTnnca!l6zQskb!&a7>ntB^~ z6WnqlNp1ZoB_-vvWWLMSUBkEt6k(NXlLkIdUXqqWcT*cd&Yg0!k?C4-BS!^$Bv4!} zk@RWuK80P%B&ls5dLjn{4%S=xs4MOQ#rV$$RYKBDWRe{WKtwI2d6Lzh8L@Sk%$Lxx zJ%3^3sGtGdg-Ssed0#jOaK{#NS%S8$5&ayQcfKnr!I9%H=)c%~EETj!_}(YS56ElS zLKEdr%m-rAx5#|V3mai;+;dJiL4z13u?ntBOH0G|4%Sb^0gN7r?0V4cKboEpTkrud z_LgBAY+P`1tb)lT`gVn&S^E2@98_pR4Fzjie?8FsgtT=lnO9cOwoU*SHEKc$b^$N} zLukX;W(oHp$p>E}v!1(1flfvX=y(=7p_@#^pe?kCwtb$6E>+R(65P#lGVdO>iho0c zm_vzk_sic;l6hg$P3Bn~zLmh-3cxw8;Ww0d5_M1)I>nxRa9XfU2-peW9M|Nx%_xJio;s)t9nb}x(7j+occKN3;E4h5 zHs&OFX%u@g=o)Yu(NO6D&T$RDp*IZ5q7LdpN79fommrD4QH(U$azHd-lMcW+uHiS7 cS+s=ve{Uv^YILWZMgRZ+07*qoM6N<$f~qEO#Q*>R diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png index bf8e595fbf9c1b0e9995c39fabc850f018910218..c947f526e1324bbf88c24d9345e118e1aed25054 100644 GIT binary patch delta 2730 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 delta 2878 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 diff --git a/app/src/debug/res/mipmap-mdpi/ic_launcher.png b/app/src/debug/res/mipmap-mdpi/ic_launcher.png index 935b7108889af93b72bd8c9d26d9f7427410167d..e841896f3eff8c6bfa37f651c8011e9547584c97 100644 GIT binary patch delta 1763 zcmV<91|0dJ4)P6004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw00006VoOIv0RI600RN!9r;`8x1_?<-K~!ko)tX<3 zR8<_uKj+*#v$L~1yRNRA?&@mpYONANgql%7FA}{JBqSn11%E{Zim$yD1PRewf8Gj8 zd4U1T@dE24lNYKeAfwNfRubL068EZ^R5pVp+ylO4)_+}F<>X~ATR)Q z0ZIA31Z07$z<+PRkH9J5(n1N+=txwo@&Vwutgda6ax(V-&{2iQf{jSeqx;u@ixq$j z5H?7rV(vxxP37!{S}5?IbH5Wf?Jy33vRs?pfw;M+g-0Ckd4oSBdLJ`{cw@N#|iPV zgQ+3I_T_qTiNMDRakv6oT|d90!eH$Zk!#qy>%|FI?@v1hYnPZJ3_m#-buHC-)sfyT z0|AV)6K_;grAVT*6Jdj80Nz$$xg!OnG1z zZ~^dqc^Cpu2zc8nc)vTrz)Qmn9^8g*Zv(BcDkOi~()CO?eZOWId;b~}C-SWpP*yNL zDFSHUDIj*q)ix6GbjqXW(LM%V*-Wax0~DArq<>>m4=Sl=7ui~awRc#wjilN5&H(Do zzZgF;)yhsp*mg*kV0>A9C6!cTOOe!UIJk}VFASm6K4=A=n!CCjO@Os#F46Bzuwi9}xo2Hbcl4l3oBS|&~w7(F^g@n%z{aHn9Nh)|@Q z0=(u(_O+2(k!pxb7?ugj#dvRJ!AmLnb|)EpE{$p~<4;B%55HD!Q8`kZGW6~lXwcjY z(=!uTY`jMZEh;dep!bm^xyvbLZWyMo1b>us4ef^K3Q&|lQME!?`BXncuWuzim}$sW z6iU;Sf?`#7rivk|Yyd?fquF$z6B8(=uY`;q&5<81*J4qYUeoN#=cI2_#bx>o9eRk) z!3#yDliLSSX(cRwdBGAljSK) zjg`k*yzv=PpZHPAntJ`Y-$jjlEkP^6b^_o357Oxq62t&hl;Qc}mcDR&Y->sHy&2Z&3w;Sp31(YaQh%XZ~c+~>GhmwB^|VB;L}x%18d`-N9>ArARm!%hM{z=+oREhl2f8DBlB zoOelU{Wh>wcqAJ&*k)a0LUyDFSgW;u+8DD3*zP1)jgH&EFIwy4#($Wvfos5ov#Z<- z0irp+P#3TQ7}i=pY>e3^y1PoU+k{iY=7C$lpIYk+#+b9f9|Ah-9JQKe!OX`tqCnGL zL1_`7&1o9srF5OCpvWc`?av<70-tu0FW(Um2VmetcDLu>^7t2d`u002ovPDHLk FV1i@nGlu{G delta 1811 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 FV1i@nGlu{G delta 1811 zcmV+u2kiLr4WSN@BYy_yNklR_y5oNzWbl^FLw$se#;^_2`>FJoqwrqx$mTzgOF|fQnv!a zEJC#ozUJ?e8T(*g8M9=>8wht0b`y>gB81C?Uv=;`f5-Q@4Y%b!s%1n754|*gqMHcs z5&k6LD8YTWFZ;-cxT!HF%w(R+>n(&4NF?+h;a{8JwrXGY#Xe* z3QPppC;OIvbFoVswFq@K*bl;?%wJ>RiG~{I0K{v-wg|O&UIeq#OhApd2jZM;6}Ft? z9|W_rOhS$O2naK-KPHoNa3>@dtkHR9u|lLg7)B*Zx;U9six z+zp}wtG^zz&1fMPNWQ)ggqc!FD!KvUE9^wh^W%l&5+)RZu!K>NiZ+30IGK5G1 zuoSiP8!-6eU`&Aj$_8xxwl6B6ZDb*~9$$d&V1NEtM?!Mj2Z>w!=pP>&8d<`Tm&|POrw`*>!0JbpLQGE*$Af5YRc|!I~$_(cPVk4wu<~3P^6}2qmD{ z9Dl+kLnBLcA6uuh`D7BQw$48ZhXeB0>x?x zzvwqp3dkwX#o*~RwgfD?v>tuo-lPJ$&(xv+a5-wjrC7hY0JEItSViS0 zv;y*K3bFE@MtcG-(d={nW^4)fBp2{iEq?~yE<^2LDfaAfV?{6zi<@%LRhV)#Q~`1- zjoLgA!;)M8%^2>*v$5mNC8&KikXC?30=h1)L~kTuDWK6`$qXGg4%CL8+47>Nt zK;PqTEU0lAi5ms{3?ge{#sy(n#Exm%*l~Cn_7nO3FIJ}&(0g$Wk?%)u*l#JI?|;Y~ zBCiV=F2lfU<>)^^*k6I(t!^srEF*c98y9goD3(k3#Ly^)>;e}CPYk3Lppk%{3#+jy zvILvLnx%lQGYynJrIrHv_En&BT1o-D-RF&G)ObE+>@_rs!I|$u|M8V61q9BmrxkY< zdLqlPF}&DXz&Fj<`_WuVpAt&}9e>Z2qcb<9fLB4R!qK&WFL)v2y*A(E*eY|33)b zAS^lpay!kd@e#ezRNhV>BNT(M*ik^%!Tow8QyNV&jOio!#!Ma%=7Ko3al@&2q~xi- z3WS*s_N*w6upLC>sWJ*GkAEE?IGPUiY*G>bn({e_4pX5PB!@2vl_1RWH6ttIMQs(~ zFAyCkGnHg)=CTe1H_I1W(pbcF!Y&YYAeF`7K8&4$dsnU+xF z4TIpqoNT?^W#f9_p{gbvg1F;Mq>~!sT|y1m{|Pt2xC7@LZ(I32y?=C?sUJA_$=8A4 zU@LW!nJnrmhr_{ncnuPRO@t7muWJo~r zeQyL2i(`&DZLExohaK|4$3stOC&X856|(r!!PqZMKA)n`CJ-?=mhFNajd3yYuvQRS zDJZYnyt(=f%%swR`+pqMeeh10ecGDm$7^yQK8-Mwuz;|Fh&%zJ@c6XEdzPOFS9S0; zf5-QR^|mWOyjfr$?2CPx_BYqlI2acg2j+M7Or(n7A+!@T!crZ4&EN4oZo_T4k33an zl(^A&M3@BUEklkD|Nldw4!)L8S+?Om$R#0@8bL(t9tF8UX`R0@6Wx3!g{{ zp(+VTztQ{a{37R9y{VfQNTS4tL*5d>8lc zHt@v|cfog1&{n|1Yf64_^@adfX0uf@(8j}qaO2^9h`__Uz*T)f;oz;|PRrHB|w4w|{@d@Tzp2FrPX=!N`C4U@hQ1Bep>N_*y(R-ONkr-RRO(r7=IvthXD7KK9K+4!M@J3oVn45x9BkeN&aF0$ z%lUa5H4k}rfjZa3*A5GkK1DlpCd%+sS}ye$IQl%bSdFDIEk$HH`f}wK#J+PV9nNtC zbLKL|s;HJu7dp1;iY;y@eeyZ1hH1@NR-(rZeYR_)yuM6OLB$X*iNDAL={Cfo{1at? zWyz*{Z|6GA^k^SA+bX#673aLFoo(Xr8H2`M80+^4TMVmKv$MI z9AXZcopU>C&#w%UODa#4w0EKzCdpnFvbyFoJAV8N;>pt%)oWL49M)U~0%y4cozrDX z>~xuOF~ubCxe=El})^l zAr2$JZz&|E(4u)A$+ayeGHy>_d#+L3I!%rjZf8nN{%3nE=yR4@As| zDC3(QGJG3oJnV!i97#>_KEGsWj=KZrtu}4JuIq=o3fY@Iw3)KpgqY^MKv^lkJAcFO zhX(%2Oo_FE|L`i#u7Ysondbc?l^1)}Ac`wOnLa3hrqP*=1XfdB1`zwL+YDW9obsZ;E zZ)$$}7zhllcajIOW1R`0Z|+)^INR!B$wUX`K@{i;ak-?%tJsucKP(2F3L{ns?Mc{r z401q;O<77q#PTLJ+Jo;<6su9-V`x;McjzhDwR!c~nbM6cj+k9@3E?h{rcGPK?A3rc z?qZlAq~cqM<+Ri=Cw0Tkj>3_}?wqU4^XEMQy))bL0=Jlv)IgI8vub58TirGDsjd-7 z&hI1JyJ80K@4!dr>HsX}<6-yjE4SIM%PZkVH4LbI4pI(NDL1fwgP5CL8KHd8itjV?Uwg${I z)@~tRMCb_MxQM`cMH;?79DigzWvK?|z7o6ZdE7cCp+cXr5X}@V6>i8?y}&0`^7V+O zl*KNH0P{ivnku2+>b1rd`IVko1O=1+ZgPHlF~66Qz@V%vG~mWD8(%;30U3#9h|P|3 zi|iop-Ar?iK0So&#IIbT&lhS2DM z1r3=BiuET?Iz5cSGo0m*zChXrl2g;jqBP1mk_|e?zwWoz^&HO0(X>j_wimg2YBz)- zHRjC4y~em-*`y$$H0vr4h&cUY5Vy73}az~@E3Byo0pDP$qX|`N|iHh+g`2>N|n>jKUWm4S!=y}>SkHaoPn6? zLZ6z#W)ZoUqi3k3zqOzROckFL9BIg> zMn&MhzZ2+OqF&y)1DBq0q3mH-44PtNE6#R+@NbUdJ4emq{Ufjy$y1Qz-o;6)Lk)!+ z*=}e>?-HZ7a)8m8R=NjD4?cVV7VfsG1uGX5K9l>`N8xJp?*jok1-4?pGz#QHLL7nt9synqWtG>bo@&40+X1|t*UYWkrBgPNI)gd$A%-OAY8ow7P2cu9q{UP*@M42 z?4|Umz4aKrgKJ#_YU*jC9Gt3pn@WX$7g82%Kg;uqb09&_2-k2r5V}G2r1R0p{ePNQ z-Vmr#>uLTY(4M44R7dhC$_o@>Aem6!Z+rh8UHmJVI88WLbm;>gBEmlaktkBfr{lk) ziH%6@!{z^!FHGz|{YCPO4!`dy{1JlkZRukTg3x0XP@?QR( zOl|efR;avx8En~OqEDKw&rOexI6@o(Uv`-L&L~KA8p=jqh-wfjXcAn1OnJOh$wq#I z!a9=iavg`bDY9Kn@69pK>xn=9_*fP~96Z&!yNs+0QMOAKhg8OQM^`3O80P4p>qU%H-ExWLMT9CG>3;4R(r8|gGN@OneuIG7Uyel{a#7W+4bhn8`hB3+p=Ux&+VI`1?15m^yPK(`wUA^e?!Pvt?7zv zCH9)onGCm)QEQG{6|7&otluPG7XJBs^eb5sew`dNdy7)Nmiyx<2@y-xPduZ`V7&`@ zP&Ab&fW6*(8bl;(o&>zb4l_aK+@2U98t2{{K2wa33@6zQPQ3b@Bx`R|%5d&U?E~Oh zj^*&){#j94APk0Oe5t6`P|}QY8Wyi8hzhfzx@?@$~uuw;lK4d{(pFbU4Sn0kjZFp5^39UWI&oKXWNUQ9a zc;(Mv${b|zL@w3yXU(k6M*)au{-bE!3J)0yk^|X>#8*C0$vM!ZNNMjq2f3mBWd@^4oF-`WFcleILH03qVC*CswV{m`Fp^^ zdEi**i%f=xZI$1*;(=+c;CtKk$qpZh)h%Y+@!{vnU$ER;gD~?>M8$&1hgsU^V2+PBDGRx z9zUW7qcY=soi>L$Kt#+z8tiLD&vSx4ssu|nnC?XF?Zb0co2z<5QIzzQ5q1zK^puoxYXvUsDDhp3Sth5{t!Nh=+#FW?`RSyT>`w5@8Rz+7k7b~DEpm)@5ZfdP zG~)!9u)QE2s8a&|$h8(iH^6_G%G{nh9o?R{vO!=W*8+z(IntP1t+M#(x+Uq_XMyyT zbhK`uMoLQ$sADQb(!zXFNawQReAifCb;)wua%3B*WCE{QvspHiN}PF%vEb_xAwp(H zLzigpb{y2TrYoh4I{4*``$;ja8`Tk+UpXMx}8Zx~n{!Lf=nRgf*hDT{tJ|2^= z?iQ?EWxChddAY0mpaOPz(-Q#A9oL0gz3f(lqnq^umL{{Lj>bLH2GcNLDle__j-gLi zS+&^+kj>kZ)B8&%4cl&!<(V!sxRp73<17RbIT~p~Wj1~A7RB1zS#52YB#2-uNfT(V zES?twpFMSg9mSB3+#?Rreaj?rAU0f(V>SD#e{UtLgFDwUtcd}@J)fnk+udW&0av%8$IAN5o z+TCg|2IrUbCb}-&1k^y5oZKGeJX3U->-uO_I(x?<7}9}Y$E}Ti0GMfY@5lCV=-27l zC4r=w=kY6uVp`K5WR|g>EU39o=%M6=HE#Fvxm~XXK_*{Gpsu@FVrp?( zfauY7ryVNo94K)8XxsL@t!QlZXzSPxtpTS>4UA$cJDUa3=m!-J{c=1x!J$FR8Qo__@5CqIpTuV4pIEe@V7}lm2gnJq z4SluK6X|<19D@BDvpo|!YKEmTX_me(+@5cMqX&6PxdL(L7JM4cPsK*9B3SRY?JJuf z?a^E9?{Sfb2OSgRXbYlxK-AGv{Jq_|LxvM~@-dV6CJR(S=0IN9IZuuSC4Z!%wc9M% zXUh8;)@lbro2S>D08hPRM&YZ$r@4Vqu^-3%z>42b{XajFeB4pIaJ1R(K?4Z;={*u) zQ8kNJV5(C8UW==pPcb~R?I5U?|Bv|9k^SY)Y(;(BcgI_90&QcI`@5E$s4= zb$%TpCHjrneWp06-mK%9B0r$)y22POuV%Tx*GP-V^Y^$2oW z{+zpl9ha6^>6pwITg;Ozket%C{If*}djJdu==Zi#DjFo8p2pW`I#N+@>VUOg&HHZh z0o-2xa(V8SYzm>kcj`VkP)4t{?;MT$-E>@Z$`L?=dhj5YL#uJI(iommosBKz6_PJ* zD#333{jt&P^jKT~s}}RImt5bYg`E{4gSu#8 z{Wh4jw?tISgubC)xZ$LM#TX)7LZ_;5G5>-(CBVWMUGztdaTA&eq}cXU)9oy$l%9`g zQ#;P>mx-3m(LFjPl5;%&ZH;#Cr0cv<9QO&~$pBV)_B|3SIw=(DbPme-8YT=D z5A+F5Smo#7IMI&M2gGp*QhQ4Hhy3K%Qa~GJ6?jVQi#1Ul()I53$=oJkD)DeNab@ zI&x2$Ji_2yX`zSwe9(JGDdgbKGUA&l5_GeAKA4y86ZC5tY38OYI!oEGTUd`2(udn} zEQ+z9n4oB;GZ1Ut>Pz$<-7lX6{}ol~R4?jOufz71#(BR2{v(Op^(OJ6Cb5F1m)&k| z{-ckBM~y<3%|b@>{6E0J4o@b8-Y4)_;n`fh_Kdqd#lYO#PY@y}aFChuP!-h-193!om8 zQe$GG3-NJ9LsX*f1b*glb@~&z< zdw577?Bue_T1FRh4t29aQx8IqpL49D4U0$|-xkx}{b5L~bzt1XFf}MIfZtbT^K47M zhiVq_uTUH_)o`KQCQFEGp%BsNUq47rgwtU1ZFvua@Sp;YzonXUVLo@`Z#(9jcA5>I zk1>jD@8igQ>XiNF7@qEFdE)w`3M8K8?gvegCz}DFuMm_zmHzMm5*(v41Jm5-ah+J- zk@>efrOT)1#>@4kCp+MsDZvz|}^hhYhK~tQyuR3>rnxtz!(%Fj7wcsw!L;Cp2 z0|sA|o^(#~1Pp7BU#}@*KSOEEiS+ zlvrVX0htbbcv>t(^UH859-RCekFtj7F4vjVu5IRsV+9A=5D>(-#)T%O-_V}G#|?mq z)W-}*VS_;Fxb$G-S!jYuvuZb_Zg%>e!(E)|yb=|eB#a5O*TAh|9&CQm)?P!3w&<%W zoZp)j9rqHOK>@}fd{HkjNj0pO2IR?wBN$9cHVE2ftnC=~u*?pIEz@bjK0%bC{Oexb zfv~6a0XQBq*q<3Y1EKSXTA!xk7ww9W>k&s6geXp%EXKPtsOsC@nJ=$xV-`?9=Pv%l zp>bWdf2RCv?qE3$duAGYHhP#rNz^VT`r)s+=@pwI=M$}PATei=Ua1A|iA~#&0t>@0 z^K@kNKkF)CDy;GTRe#;tN-R{M5UiSclPTqu-_|q&fn)3j(*L@sRP|f685ex8O!Bou z(gH3sFlOjd0b7!sJ1ii?k^9*1=V^CTO-Mg(*O{~2PHOwkC_K0lH1k&>HgI#3;t61p zfy}aM(bf%X!c%t8?Sz|5o5YQ!QMC^Ra6`3NriN)Z;gsTWz&R&Po1aHy%DP(UwtHIE zuf+8iszH1RcK(mVLeU80IeM@%@lx_};whkMx4}pScK%m+uyQ#^NaX3XifZd{s!cM- z?21L|B2ere&YvC6%2%!itwmqSxm+M>VDohA|LV!{6$IP%YZ*qHa4C_c%x7S@>^pE? z2m_|^Dwl|xE7C$^->%wOY^~nZH&1L~30vgFc;u1iyW#`OofAhNOQY#{O5AuNNzLU_iKwd4sxz3P9maB1j+x^<@ zlM`lKT7rmil1y~$G}_^E&*2jNF3{y~62k9UM;Z6h_NCG{&(D1xJ?b5r>~6h6l4`sj zpm+_fIDsf;P&f`@a?wVqToMSeBdaS9{8Qw+!)Bf16$A z*Qi*y+a9+|IOLRl8c5>wG%8Nvrvb^+wwgnC-{kgy$`!NDFW*;e@-*D&iv8}hdvvG= z`2-naa4*@N_(~hhssNmX?#(trX`~reKV!R+1a8ay(<;r3>2y$KP zXo`J^vbs_=yUGy}+R-uXBfNo2X0fu#VcQ{( zok;ItUPw2%)xPiiriH$|m!RNxnuC-bOl5GWeT4qxq;i5GXM}7WOB(zIDZTew1cVL5`Qw zw-E&6d{Zqdv#c+kEhR?kAH$ulH0y=}&~L`|;q!QE{t-uSlBj8(l$``W9tlW)pi$`ZE`CFSYPv@;2aFx-)ULQ zEjyJf7M>S+q)@7C1h8-LgF9PW8*4TIrXH0d5-r_WLZ7CaV?Gpr=`>hquPvUten66; z>z+akhd1v4wQ&}!xAD`iuwjEK#$TNBAhZ}^^Y(~CT(8?Sy6yf@!@%c9m-bCQeGr7$ z!Hu7<(Nj$TNS^WlsvCyvP*XcO&0VJ^TYEe2(mSM$lBEA#@fH=KUQ#k2@bOw+LltDH z{FY7n0qz*4kkQ<^^*Y8f46;<~n6l#$8brEKRi8WQM>y2wlEzg5(_sGFCJuO$P7LwP01N zKUj!$zUW`u-_gs3T%sKm1Pq+6Ri?jhWdm{f%B^i$+>xqcO#?8`ebiJqTBLLz?FQB& zeOV~r19$()jL^#VgS6$T8r%2KW{Ed2S+!hjGtd2$X&W|}U!l~<>I8PVo2Jfel>xPv zsv$GP9a|S+U0fcW^Vk;TvYmh?%m_Q5v*B9z%nELDFkTl>VqLRq?8Za^x-q!3%VSTv z5)Nu|YaPJ4pXg?{0^!Y7f7X6mLBahot**KXD9Ct!kWUK^#p1=Wq+;V)jX<$A;VC*I zcwMn+#~VQV?$a2y+a7N1*fok<-XLsCaW=nR3vX{*T-pq8w!g_O$)&-3-KrqRx;Gt# z+DWm?%-XUc;~un#0G^M;=@*OUitNOt3HWp^R!A)(d1Cl4>P6a=bZ^HjQS z)LiA+Uu)dvp8iqxTSFPU)1`u>JJr52blR$-Ttob6FqONB{#BYrpzt$wvJRk8(I)JF087!`VE_OC literal 9281 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 literal 4152 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 literal 4152 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 literal 6601 zcmV;)88+sLP)yhzq!?HUVm*${0-mX8eBUXNt9R~p%O^cBMe8FBEbs5#e#i; z?+YFiyexQA@LR#hg8vo#QNTgqGyaC}a1E}-J-8QT>?2bq%0?YSiMGolQ=G|gq`@yA zUgHwM-wU1>oS_gYoC4~2PH;1sy3q!-#VQ_|;y^S!Sp}hGjo?PXi)1`Tq=5nTD8L_r zz~6xX8wGlu-lyeQJ(d+{1KNT%p>1fRRW!_b5(62^+rR+l3BD~jN`nokMplx51d-R+ z1tplZ&d6)fMznP$h5rCNujH^qDz{W{rQkIhY(zDllVph&XoC_evOQ=!`cO(C(I1H? zHc2FL+5~q9KB91Aj1)%V2^v1Fe?wo;C-hClBhmyVGE}V+{40ekez-7^C{WL2{TuqY znnDt(2Tw*3{PL{1L5tua3Rm(_;UJNrVb}UM^tqKn0-bpI(I{dij*pC6A4$o{h{zuY zbl{_qM2VH*&tDe&jzUUINF7nqn*%0Y< z4^ennoAkL+hUN3uD5R)F8BxUwks~+gO2w+fNh8)FYMJ0k3MpqYMoRX5NXbO(u? z>PTv_PTTJk{5yq|GnvCxw6KOX=x!HGRttVZ;T`ng98|~e zk=e@)Nw{#PtS=Rurtpq=a2{4qlyKophmq3-Jrv#{53z&l9C@d1^pE=?zD{IesIH?e zk38-{b$?KhO-AB&vQa0p@b5oScn3VV2erY!P>4Knx$L3qF;|mmus6FLKTuozEyd|p zS9cmLiSzAFyT=zuQyhpcWc%dtP zp|-)3vq~OU^C8_@`Be&UpojQ{+UN!f-%1>F(WJSFLXGqCp7@8=MqT6*iPY_3Scny1 zG{*Bji37D2_E>8&9n(;zq3cg6yg?ok2Wqn`DaKw1UI!Js3@in({}vT{ z-Y4;)HvBn-qKhM<-e)D53O&!0JWyM1BnQ2adY_+?smxohNFJyyA0>ypkTv(wN<9yh zJh0jl5yo~eq^!J^OeLQ8Nj|7eZ6A^8yw4o+=6#YGYEwKeT~5a4wvY&}3?#aoOa-3z zNnWUJ_mQ#rg!c@Ag&Gg_+#ZiW$qTjZtAZ&Mvj4b6bDwq!RpKSj$qTD(*OIaQgpz5v zFpvm)X;G->eUcw)<9{Gy`*DXcbzjpc^n6#+C(kLVDV#Yoi?hq7a?ZkB&Z)>Vkk45q zS)87q#-f!$_azb3#(iWC!x(oM)9|G;&q3lA~rjG0Puj1AtTe#z$9o%_l z7k8fB#U1bN;N=Hec;OutTyjMT7jDSs^xV`z{2*z7<^C*TA)h>v-9LrR>{xF6Y+g z1j>pmKY^jP#ydTf2V)X-TX@3s8452n;gOP-5(r6EH#c#6zYyo$i`ai=ufYfeYB+g* zkU))sdS2dF$8~+nx#pQ_UU2Ok34Q4j0teTZfKXfilFSpWV-91w?uCs;dR}wVjK1bv zx`10=x==jMMFvq4sQ%5BLlUU2ua@ikmhrMjE4b*wyg~IPAk^0XA*iKs%uMU(Yd4vK zk|KFdKPN+SoLcrD-^pF4_l%uDC;TH42&g+$#q%yN;p%xYFD!l_L+NQt^4a&L z#oYMlYWDZ-;I4l0EJt@495?Wv*v0L=Te#`@b?kq0H+Q|gXPgAu%e6;Zq9ahBw5hj> zOaG!Mk%#hIno?Gf%>Ys;a3%0+?|)GiM84shg6kNh!>*@Tou@c*Inz; zAaRjEBU}|+Fo#z>vWB~QcNn~}BPIlDJG+%@`o~6~6@68_{D}peb#D5gz9azD=GgM; zr!mY*YrNY|;RU&h)G29P@~H~;AMWO^p6xLwQ1j^xLZGHG69}mM)@)AAO30*IZT~4U zoQNus27z$lUy`}m{qQB8XWr+kxZ~g!?mE0Z_5}LvUT!$KikFR(Kn*XH^Yr$d!TpMV zsO_&M!-=Q}go}_se}~M?t|!pbyJmC8p{?BY+ICk6)cO8yUVglD+yrXstK`a?W)13B z0zhql2N_O8MIg8;WZgIt&02^n$ey3eP5ak!*Q?#G5vcv_b|Fvmgb395ayb|8&gU8D zPvvPtwLLc5=TMYGd0d2xUm$a{dm&6h*Zi;48uGYEpr%vn0_2$pftva% z1Pi&Tr<@xeIF}dy*)%R}%H;H%xXz8#_Ad)^$#7%Dp}elV=27Ui1g;Ti+S2LVvVXn1 z1bS}|*B$rUM<7A#vvb*h?+os|X9m~q%jf(>8Sy$_q_#gw=BQwBW5l66hHAKImf&p) zFC^wD`E(`wUk;MTB?7hndK=dqX|t6;ZO<42`R^@Y|Bni|<(3&dcT+Z}X2hL0vd#sS zQ4}llI@X_0=BRvYAu&h8L#w?X~LaB|H+{$m?~o-7F?5YYaE0-m!rn^V#U>%m2+ z?eR3u5{hC;Ll?~!ky(kw&92M?rDUYC|D|qM3Dj|RH!ll#ADapE_?$rm^8cuiJMJpr zqSmZIx^NL{`;P?mGzJ1K6?{zLg~SwjO$FTLDuMR$inliK(*9Q43DmxS_K*bX6x81^ zopVak2I<2ksO^6*Xd%Om5eWo_VZ4t$ApcF_g~SxIKUwZ7fjZ9Y;@V?=`w8@VId}YG z*02QXyr+=Mc26Co50_wF&S;}3=7N+!%gJQ|m3+3+RRT4fTr1>hvzU{2eplCz_b=+0NGux&FhW1FRQ!`WCTG3bABb`AA12;xoP*noqC2=2;xj81IFs!ua zH5Ib&i%WRXRrTEX;A(dWbmk&nequE*>2G(0KrM%S?7y#IL;`jGu!xsjkwQ@P^O zT(10FJ}bGzJ1;FSNd8&`|<`IJq@5xaM|0`=8s)U5B>u z%3ldy+U5d*E|SD~6EE)XaEw50PwNnVWCC^G1I*-(0Tgrloy8K~W^%=4`J6K+Jr+b# z+v61$c>Cd~1k#;|b14R!$?z!5%nRpn%OmS~$E#)wa6V4VY} zGFad5?g)W0in6%r;dQ+7g&=ucBv9u&*sigLtNZK%O~>=1>9_V2+J&JXMAQVrejvOW z5jWdDkvO$HpSuohb&Wv&Q@gqD_$FQ?q6=pGMvz3?}in8iE;i^L8;&bnL=z0V>$El*dJpL2?W779~T#s$-YsDt%-Ej+^O9B z*!q|e$p7Xpt~<7wE03(@iv9~?N}!elk>1CC0@Z%CkTddaUwpMb+Kf3Mgs&0jfK)I{ z!?AXFwE3G9UYIRN$x7vg`|2GhkYCVrtedNjY~+Rg>jZ0JN}#60mE7?l7EZ0?v6(;; zzI;1#omgyDo8Lx;3*f|vLwFTj1h!$^e+ijFY|Vjyyhc&flbakNkYCVxY=`7JTZA+l zxI93f7!&A?DsFuOd!Hl8V=sZ4ZZ4Ma<;Vz3ZTy8+mN1@!R1%gv;W}u3FH?7wfF7d`u^=gifuxeEj+*f zLVUL%h?O^0+=Gm5@ZT80>~XeW*DXogQ)>zg&}7IWJ{exVakxm4j?Op zl620Von{Ya8B8foTAketOmx_+YkVu_N<}G$! zGM#*|CePc**c!_h;~ITM3S1a=DPl$v=LW^a*@+%(g>~~hYz$lL>GTs8YcgFT*h1#C z22|*Ip~Oez%rk5};pEvWC0Y zfEU8*EG8EJlT5{)7fM{H?QjxHHyPW)`@q%{N}eM{y$}{yF+TvN-bSW!&kH3ktRpYj z6yXatwk3Iv6zj}1n2O^*PLpYXH!qZU2-qwoCFR#-4v&IOvGP9Qq5E*6LwYb2OvO~U zV-FvCa2#s0tI62XQSYOoxe%84=aMglBIDT;u--PiOs%6 z=7B*Uh4wr<>U~ty3+XvRWn|7&e2h#3y-`{GB48WwK2MXe8EmJ=w#3Bys8|zfxIZLe zIK>l>!45RkLtH`0gX8Kt$=D2QUXCZu!-*!;SakCVD$~-^K1rc4=7qEPf#yAbl+g8A zGNB9J2exxOaUM=Ilwr{gb3>Sjs+I=gEEzN!vz*>6wfh*bgV^RKGNB8$g3ZSCI&UY$ z8p^PL1P#MmUG5{(crTQ>4-H)plCceJ1Y5Zlx*|nG8FsHBrs7c$ysYJMvUI?MD^T)0 zL*|@k*ak~cu$60}D^kEJ9Pj19Yk6c|~;HL54igJ!}A5#B8a; z4p9;z+s6j&3c=!xjEp+@_unYgX>YP|;(!hVKSm+XQ=;Pr`Mj8n&Y^qQK*C40%){NrYcRAhDK? z)}*GUeuF{^@JKXvXvq45=<@HNQ!)uNbgZ5yVacOnB@yB6{Jmse zNE;mkdJ^)S67qZ|NFL}ELv`pFx{jNPLOVorB0cpC`)|?VrNMcM{S;D=H`E^<1G*9N zJR!RClbQ9$5{2$**3ni%d!9&9PlS$PE&>aA*hYzXy##rY{E}`ErQikkP>`2khr^mE zeFdQo;sp9nMiYH>x@;@8(~NaSB*pw8=>&{kdMr-QbSvz4D=l_)U$#!G}wp=HMByFA1xy9jVxbrM%wWV+9YlJ6KP{(u&o-VbUp`tLf@1) z7@B*;u|cdvf>NPexOMDvL1KyZAIxZ5y%G#mC!yg2G29mfc8?+g1M<37^^vUx$4vLjX$OkZOk4ZF)OyKg7aN}u9C6jul z0YV9yF)bj5{k-6M!R>P0Lu5|j?;-P&VI=2g$-HRqgCOu3f5UgjgV*Aohfs##I+TgB zu@5|0SAZ}UPotzk8_`y@8Er>$jJ}{x9&utIN+cwd7?G$~f+3VlbIGjwV`38XC;F?0 zhl(T>01wd!<74}+V6Bj0gJ4q-8}PT_cOb|LL4)OfD_I8W3f8Spfuc=T(rB1MAJ7+% zI58F|JJKsz$%L6&41cj!gkL<2h%KHN;V7vPQq)7J$Fh1ZD+a!^-V-cC$)X$BQ5Wh& z-Dm^aVkJ$axABPMvJ6Kiga%B!VdfUeDfY@BQN_b`@Cc=3jE!6bp#{c=#{dxkgd9Ns zkMD2|uEjmL7iFLxY2kJtds2gqYNRvQfB@;pejD|3Qnn}f`>q8 zf$@>h!fSvGR^V^=4%gsX+@nN6Stt`_qYl)CI#IVZJb9!^K(P|aN-8B5JOd04F9G8N z@ESuwzsI$>2lpybtYq;BljNetjU<;9AcGZ=-&;vCY02{ci+~-_SRS6J00000NkvXX Hu0mjf9FTT# diff --git a/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png index 38d6ede0df26348a1c04ab0eea2b638d938dc563..f0b781bb9cfdc32b24e48a8e1005a25a15790e1b 100644 GIT binary patch literal 6012 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 literal 6601 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 Hu0mjf9FTT# diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png index 81c5621b22463b138760a8cf7c8dcbbffa0ec336..d5fa9d7010c8324e532970d34c914392b8fe096b 100644 GIT binary patch literal 8413 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 literal 9182 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 E05UX1+yDRo diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png index 81c5621b22463b138760a8cf7c8dcbbffa0ec336..d5fa9d7010c8324e532970d34c914392b8fe096b 100644 GIT binary patch literal 8413 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 literal 9182 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 E05UX1+yDRo diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 88e4735c71b1d706fe64e5bcfedf1be17905062c..d959673a73e9e18358b58f2e096ee9a40a1086ab 100644 GIT binary patch literal 9654 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 literal 13532 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 diff --git a/app/src/main/res/drawable/example_poster.jpg b/app/src/main/res/drawable/example_poster.jpg index 6d6e04ee5f368efd88d3487ca11c5dc1e42af3ba..f5d7345ba9c65a49b38c3c5af7e14cb7653e0764 100644 GIT binary patch literal 55971 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≫qHb@lzX$Y|UpT4L+U(oEI4Pduqt|lku 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 diff --git a/app/src/main/res/drawable/subtitles_preview_background.jpg b/app/src/main/res/drawable/subtitles_preview_background.jpg index c7cd5f2e29e5191aa79966b029c8f0a9c1c4fb6e..c140e9b3f98170a3c682d743beaf450706bde68e 100644 GIT binary patch literal 1655632 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⋙fc7<=#822XYmx9<8fs^3=)-; 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 z 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ξ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 z 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

    jBNP|D(PzR2a|of{<7uXJtoQ?mXvGw4zFK@! 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 $pwM$F7 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�P)(rbqq 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%0A?Lqwc^Q9yksV@I^rbJNKYcr%C?+!t;y$ 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%0A$ivl)$+pf*vzB`uZl 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

    4Ao}D8o?=r@l5@p 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℘oM%tlQpGK?bB)cm3R2Gz8e)a$QFX%a+&5J` zzis~j*^mLzrSU||V_p~&Ow6s=KX0sZ=%I6QEyjz-#4hnsc6;YCkTcq??zQF`O7z$1 zn6#VaudFzrS52QT`?MNwgPKxn>=mf@B4nZk)o#{h@ zifJ-gNmAS)hOIiex zph0wHe`;2pkPX}J4jPM4UkB7LBK8m{7YtY)Uy-@CXvBJSac@;AyB8=fU@tuvLZtwE zfJQ~G4M!~XN`oc?nUg^;Fewlsl>^5qj5}B&0b0d~t#=(`mlX13TvfEFFAHP@am5NZ z6NAZGB`M{2=EhkMtน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

    Q(o7NL@ueibIYomw7t%I+T(7@~r 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 `s)?pHFLm)w|kv9BghA>ZXeT8 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
    dKll&8BPxNm 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ⅇfaICLCg(dAfR!*5#N?CDUj)ZKY5Wg>e-!>! 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 a1$KTdDtH;;BukY)OCMQ5oNG)BWi`Ni45PX*g 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
    -z7f0T>HHy>E;Ho?FS52v}ebUguu8to${i zFKr4!ybL`f^v);|tIEQh{EQ;(m;*s~&t9n@VuL&a zZo*+uV66lSaYJZld5RE`aM_7g5CEj4D2S$Ad~(aWB$U>jmlUQPwicSNx;a5b7gs!~ zuESFY96=H8^8;2ICITjXku|~Rb7TS(G@Ah$;Mjb$2Ozt13n;7@TF{s%pbL#jT#N|H z6%m%VJjQ}~mKC@MO%6Bnm2=zx@I-`J2yCpd_JlCtQt?e;LU4j;@Eql zjD}nN@g)rkYEXD{*aqY@>xM?e6e2r(E>Aqj!oq=%V8St3ILv^=A~|L#XKZ-gT}@e8 zt5DPxqrppBs96^9xyi2_N^7AKNNHhc^y9}PLvjK$16si(F}^Q&Y9nnxFp8B`uO37M zlpPILL>>2@TUmin!>NdP!g#~W4AQC|>=5+Id(QwHH`FpND%jNm`AUSyW+}s4#Io3Fr&ec1P*iQQ-|XS9Fseu(hiGWK@19_oPaKHs(c(;kzvL_%~50G z(~EyVO`?>0A<>gOw@^ZLE`7Jpt?(EcI5zYYCaz9ISYAQRUC)23js&9y5@GI}>%D#R z&w>mxe9UX-tZ}>^EsS7Nm>rChZzBw_xBdW@Z));a##$5rC0hAOo&i7=?_rlplLoj5 zx`Y>^=NBFaGnCN<<4ed?F1P>zVt^3#@pv`n@opPH7wgY{H^d6cBSNU@qyE&Y=z&r? zFnsu~eaE?CDIXVGd!IRZZ@r`5q?>A7NqXlAoV33;+xPkO0T`?(&Sn-27hje~v91&+Lch zOzX!7Z#;@2n9=4R*AsTXA>j2szqoQ`cINNTG1L>SF!x( zK6T&gm@Z=%Qe#<|{rPx;O~pxxT_CDTH`u;thjjpKgqh7RAlqr5TSCb(use9MY|(6H zEJK3>a$1v`#AF=qri?zEjYx#5Im=!SHY36{8Z?O$Q3N#}7!1e+lrQaggzZJAa=tOw zxXv)32VC4J{LsVk!VY8>;iWzh{{UVk3bs1b$|J1;pqwZK%Hg$-TU_4Hd=#wM^Nw_m zoX)Y1Od7F+&@0;6_&cU|{m7x|my>V%~H{PU`{$ zmZrMoQeGnqR#uH7Wk)=6)Hn1^C$pz#64n`6!U+znj!f^gFNb1eNvozun;(DI3DeK_ z#g>}BI=`Ri`iGbM@0XeDzl`d8^SSGu4SnlBf7d_PxxngRq|rQY#*J$l=CuU?)2(&* zxW4$!tk0wjM;I`6zIeJ(j8wuLE1JuTyobCXA-$j*_0``7?_8Jnu8eUCNgX2uR=zUz zu6g~cqqnys>f$}}23o?IzIxxk?Ml|=Jp@yvy4MIZBOZ;8sLxL?9fs7Ci+d^TSloI} z0>f5V6N?Fpge#{gc!OZ7s9IyztK6Rt(EtvRgj#H#IGiRR0kCTw+xp|Ih)#&Mi-C-O zIRFmCO3!hCx7VD@A*RQ&>g)B$!6XyJ4@Exy`A7vgl5#$3JG7I>0}5&kD#GhB%$ngS z0w2lqXqdbbr3op-YD@7&NA|>-p65c;tvE!0;as_&xAaxP@*62788SEHHwOcB#hRu9Z|+45ee+i@f!k;Z;Kd(8rA& zw$>mAs6nbX98N_J_-dC^l|gjUF%Y%0A(|19mxff}g&N2gB?u)ygf7nxRYQwG-Nf@= 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

    T&`d|TCWnF|MPcf|cFj5Y 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⋘;xuVvmNY676T##MFif1WZzF5E2X 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

    I3Ukx|vVA06IOi>`%Q^rSWLjFprm8c^eKST7x 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

    wr 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�nR34pB$<743)qdpzMNNO_E9_QoT6gG?9?HB;Wb+*w;G$!{06ZWPG%U53@RalI(S?-hA+ltKZp=X3UglI zY6*bL0G)kryPL)l>ZKQJM ziu=lMuD^?GX~KQAh@XZ5rcpL>#0J+oIHAu-hivVIN+~D}z!3I&kXf3X_|hEDE#YxX zG{!vf%TgqX2ANq>`8Cj3l0HM_#c_LQ5M{S}t7)4t6{kITLPNH(lV$it2+fZU4#OgD z{Nf%rTMZ2wtfEC}<8_HZ7F8gC0rnQR>%m(&E1xhfRa9z2lI8Q^dU*&hX5psd<^`d` zpTuAMixO>G^kI0Ys*;U>cu6uBC5bxbzGnFlZ>MYhIJ(IbR)H>Wga)9#Lhkl4bdrg( z(3x{UuolR*Up^Y##1@iKC5FJ;=Wq3}?XRyJAO`}#kRybFys8ZSTjpN z^&9b!LN0lI#3tfd;;gAt74s_F*K3jozT(#YrKTALOy?jncBYi|Jo1IOi=KRV{L`!s z%OsLV8YGOxgn8o^ouqqo;*1li1cmj}iRWT)_+WRa!tQxxdfwdQ2m4^1Y1CJj&0^r? z-wQEGmLJ+Q(&wt95~7jifQv9`?{Xv;^X=xiwXMYyYj&bsqO{4GRH;d39!^edGpAOB zSgp4zR`j|Ole*@t#De36oSHtZ7nd#aW*f`#M!`i*X;x_`lG8*%TbSce4U}rC2o@gq zy(1a6aX7S{>5QD3`tZMyik35KFA%f4XFg8%cLW!6(wPyerIuKX?G&`sX;9S7RTA2s zDybB_P&m1_QV;+K*Rj)u$i&MgrPV@eDppG-} z(X=s0BaBEcWsX|_>n`?&R=HFDQ^Q$Ug@8ACakbx(JphtM zQN1$$*s6*+Y7%C{pe3;BTt*UDswm+Gl4zbVY3j`WV&#kZufkP!Zv~1`Sv4m1Ah@<} ze~n^f;wC1PaToY<*@SUax6V~tZfaJscI%ba!EPdlbuTqGKc~h zSu>XVYwvv8Gmf5l8HBkk>zeF9Z$76rj*b3n+UMn{lJ<5saAktcsmm<*+sHwZ<OM-gcvo-$@7NhVTL zTOIWN5^dVtODB&6l2_T$o!V-d$!4S{5mo+`(da?#Tdx-rIv^2k`* z+}_%o>^EJ9!S|}A9J^JxJr257kuaAmx8OMF(V6B7TFOL{f|ijDX@LY&)Y8iW=ctm? zN(s!e{{R#U!uJEdoN_jH<{*+q$sF9XzCrx~e4;g`Vu(-pf*7`5eIL(+u3DwM(NI<; zO>Avh8%rny;w6-sdP?A2EKnN*l-kN|ac(5VO%hg+3tOntl)nnS6hO6PH@(B-)K-&^|MTk+Hq zi}Z^Zk;G9Ngp|T2mNL*^M#{qLdmlnH`F9*qdr3bOt>Yv*Ws()012;m#^!xKLBi6h* zXXWh;Rh3T^YO=V7>LJbBKmoSfopjLdc05;bvQs?RS*@9eVr+dll4oc( zl;Fr52A;rLw6Qu?Ay;Vjii=7a8w zt1sQdnBA-hRK13PaNB40lNE+Z-@_813#jIGAnM`uXlb*1Q#TDJYOy$THDh~La4rq+ zMy>BxgEW2?a@{QotzoLJteywYJw(eKAVna%(uMK|HY|$1QJTwfz<93K?HoknnPYOS z2bM(NOu14KVta9qojGABI9Xf8jVIpBhhfPSkp0-1?DZ04@^vOA z_L+j_lS>yTP84G?+d^W1ojt_Lk!#;KqjheOj~BJ^__yzIsZt3fGl#gyf$gjp6$R>y zY6euAHtYvlXs+4~2bk-%j)Q@4m>ga|5{xvtN|;ty7u2=tJ)e{TDpJ%+l1$TbNuhJA zpWZdggwfF9_=YKsh+i!m3WFiMF;EA%Vc1l4tO*+C2Ik{mqI)^mtRBGGgJ@&G3o>`e zCdHkAB-V|@w>Y!x>^#&ID|NS+v)S6`KeahU507<{u3FgUjcKbwNeVaOmMMXfH?{Y5 zV8`Czlf^d~io@fv(-ns&x6j$jPaaMwp3XxhDBkA1d2neXK8SIJs<{h9yfAu>dycF4A!>$(|qKQdi%B z_WlnJq^EX)fTN0Qqv+JHSdX;0Y&IH7f=iV>fw6mK{6hvS%jtvjOgId9jW#hyCKZUh zwKyGJ9Zds3^y*A>Ar4VIGudhtbPNa`#|fli@bY9kwYk~czsDr;id>0(-WhXI#_VX- z50_JX*ukpEBf_b9a-NG6ik;}FVw;#@t%9N%61}RKDk!L#2Tj_$4-wQzQt4(ao>Rwo z88We|n2o|&L;_s67P)>|`BPgp2*)jGC?vZYU+~=Wq0+DBtZr<2wlJ{81bB3HRHNbD zrKV+hvms?ZUZR)aq4lqWWu~(0cL4*xE91($3%kN^(H}5P6GSfxvZwwvNz7 z1urclc!5Ka^8KMpp1E==38I4!ho-c!RAy^#8dF*iy@P@;>uUfkEBiYdne#izrGxP| z&yjoDyWG+rd7+zGoBd(g~|oA%h-0X9rV-t2aQH|oIQVNjACoGfEt~F>`$QLbl7qp(bz5l z)<0Pz)bF|Z{+-U3`f<42e#@K84u@U6b@k(giawvjXn<}3=Nj_F&PtoIEtnqUUgzl6 z{D&N(=a<|@K_+C^(=MwuaRn-jIF@7@C~1 z9SM*hDHaki8lO#Dw{F9Z&|H(Ke?MQGp>aFJoojdXG5V#%5{>${6=kU zJo9Lkj6hk1c+c>apc%>%%kd=Ue5~GP^D(h)_cr289OqG%&$voUR?Wf3zC$*WRL#&+ zW~DDiAOtls?&*l7O)= zcmZ_KS&L=G-lMCSu4-wqN?NFK7nNpsj&7XisUAr^A{Ps$wl??oa*R$McmYE}mS6*} zy=e|*&%(`0f=WuXr4Eh{6HK@~NUp1w6^*G?;aTaJ&j^eaky-VTVqfxtbX`W;9XKjX zq@abRw^dLYgjuRS<-KEaQY5c@W?qLXbUszgzzHeUm_;m%C5~v#o9pwoyg;?f z0gJm-R{GmLM+jjj5h-CJflb4g!O&?MY9nH)8)!p--o$Bre^PY!>`4#Izn*Zy zRHe+SG@-3{Qr3*i)I_~9BFJCMe77TEx3}x--cvMWSY#Xah-P3;`jlJ}UjD7d@v`m< zysQ~=7~@5?fUy7zYo+b&zrPvY{{Y+5_KrVF+*{LwIDxUEhEm|C-hp69BE)HN+S>uK z+lkXR!aP}N`$ua;y}$?#%xTP3hF1PW8=X>?MW`+e87G!d%4L>8(p8QsW*@o;Pu`7k zi<8Ft-}`!g-#p-S$d;mi0Ck~uweqBUEj?x%Q}^;xOk}4?)u>q4Q*8iz;ws3L z{qh}9>FvhmnQBT2zGj|wwtu@kSc!|=GScBP$O73^9P;(j#g~^bs%&OFT5pb}rIL&# zOi56{q|ho_WsQ#WXV48!Yx?mlsVGu8hj+Pc8va$J2|sA90z|MY;7R4YDrkPfj0RDz zgO@QH*gBD&BIa1OPIoR^tBvzpPJ+$H+?1l>!z( z-Y-{si?y2IXIjIjhg_?QV%U~3fgC1D=SZnU(#}spo!?q%jP~=(Du8o~T#!$%2Vn3! z>eiMf{U16!D%$%-P7YFM{-hv~;<}P=lee8B?4Ocp=x|FtNW56@uIZjW`>8wtm#__0(fAvJ9nf6$d3YQ>YM2JNZ`Js0wQ7 zX&@;Z!XDCd}M*);lZ0 zpAWfn#NQ9`E@#DX>1w%|Rj_Iq)5%Fn^fbjNriz<-nPngPx%C0|_enYWN0Dvqxs2F*R#dqdkTCPtzcCENCwwHQkRH@AT=F&t%-$aOp+O!mONim| z3`U-X=BgD!ov7#0>Qn$%B!u}jAT6!v0+EHpVR3Ths! z)I_qY#wDk$sZZQ|K#b&$CLe;Ke77X)Yw=UY>=lBeC|4}AFGj5cbbFSMOxZoP6h!%~ z12N^BK6>)A2%&LD%)F5+*c>y=g2DF zrtQOgVNGJ~g4yL=$2rqH1NLNpj_C zx;R+pP|bXZ+nukc4)FNlFfn6iqx+6$I`ah4@tvCe1m!6%B)Kne+EbMWI%NxS@)P4V z(qi1rUtLvIP#Re2;f%$tfAVt7EO|Ey2S0v))VrO@ zNDP!P4WJ;5h~?=5=)66b_Ps?a)>JJFENUKCeyK>Wc;hdwZFJ425u70lXVsp=+egG$ElvStmOzJiUi2EHVPz=>2fSd8tdBJba2TE zE=ez959ZoJlx@w*_hjevt6?{wQ|*~53w35Wp$^5o(Ne;hAL>nMH&(1NY>X-0T;h} z>3vBhGSZOEN?MuNH{JonVlIhz))T(lwr)natmWi<6wjLiuS$xk2e>RVi^Ogplj zUvDnHoMCO!)?(gK#E`5~`?Qn1m3Z3V-n7u=dfqw52juQ~@yo;k%lw^(ONwGB%UJTM zs9ZY(!{g9aRn(}-8KsXg==YEjZTPRx{{VA?+vZ1KQLl5BPoTKAk(Tmh9nHkB05$hJ>tcBb0eSiDNd{{WL`OjOJ%xm2Qn1HNy) zowAB9EHX-r7N;Ah#3&?^3_>azoGrEk zquP7o5 zfYLivNX1BZ&epltL&U0|F&-Ba9E=xV`h87RSwVeSa4P042-&7aFy=(V;^Ip3OQN z3v}(Fx8q~JpWmk)Lo7mjv=f&?+8>_K%`6D??B_zjlWSW0ZT&vJ+(1mtQD0(g@Rx)*0n`knYzg|0{2lGUn2zzSS2{EGbItXOHUUUj6))~b zSMt9)zzXz}ps|noa%H*F`UAgx@BX&oWW*8)H_getH5U6thYmLsR2r_wgL>PK3fOHF zZD)}8Br`H#oX zv=okkNR{)4`^FjaWCSTIaHiJU*7els!0N;?XCFEf=j{+d8azB_4;(}@Nn9axI|f4m7h>Ss3Aq5lAyQ!L=Z(a2&aIK9Z&0(G$;-oHV>>clZM_(%RP0)#jP z>tCN9Jop&eP$W5-MTr;RQ{PK#Z_500`k$W@5UN`fmGYtG!_Ge?Jvl#9Z=oYwjdl9( z#&0cNA#3IPA1*>V0e}Z6&Pbt&7$d5)b|Y;qsQ3P-=f?Z#iPxYn^PFxVtvSjra~*Zt zzoo~p`f<`H6H-{4?*{w)ykuh0Nf{+}`Tn2Jz3tzL(>1egbo<1~43Xy=h){Dj=GPym zf2Vy&@5f}hePgK5^5u~bG^y1Dn1KHP)Itr5um08qX{E;+jD`+crlS3zxaK6aazTU5 zO(e8PdW}6(8AMDY+(fZ-!}cT_kZr=;YUeC&AUGCkb0&{drTN0_ZYFAyaOj{-23frb zW94=N8)`8+TKqyPn4+a!wT)ethBuECsM{-BF-KX}U_=olO6 zXARaMpMh2ya)6dd28X3ZJoDqlHmwm_Ym!iPEW=ysZ*4meM%#SB;gp$_6c!e*?R)*9 zh7C(J?u|USRsK|KA8hc)O3F%FuBL=uqirf_w*-Ptw>B0R*z32q;mMm~z}d;k+ydMO zE5m#o{rN;1lS7fH2amr?!Rnr;-AZls?Q3tox{pn`G>+^Ma9CC8dTYYrqb1g9$P;}i zczy>+QpIpu3YyG5u3C7enuipnsJ;IH#H}C40r1p-Z(dJs+uMb>oG15pgBN;>`{}6R z#Oihzeo>gtL$!h7$15D*$2`zYL55)*(3Df*wAkHdCxcBDNGnrKSB3uojiRvA@eTcK zZaC)^FLq7Yfz6(VogMk-oK`lv_v9320noD_I*-J21x#}O)y7G2FJ60twx`W;r>*UM ze!Nvjg-3WZljv5AYj4}r>-5u(B5^dqtS#bH{?ikwb@LDHz3_JAM#uT^{KH#XC2-@Wa}q09dOWD!Eb zwS2!kw2v~GxSUF=ZrO@{?Wi8)9bzUSM-jOs=x%ke?efz5{P*HfFTIqc@HsunukZ|Q zYTrpuMi({e_J4TduNHh8s^=_vnx>UyqW=I91vWO&(^J$Ok$*NF$yV}Qqu3x+&#bGzeFINPSO$h7c@4=&!{B7mFRONnS!>RdS8#vt@ z_+2@vmKmul;H9dktNoK%O$}&cU0ZvcxOOFMR|{fp2-k{+)RTvnSQ6od3siC7&JKWPw=D6Yo7Z9^Wnx0X_quJ06?Wf6I`>sJ!;WB zqeRt#e!2RbqYiz>MQ$xv^>~D{QsMCmEHeqHywKAMfnkMHk>+P4oTB8Z+ScQ|T+aG( zK_s~stG_oiI*K=*=V!&e!23t^f%XjW(ub7(&YYV~P8sFIFt^7sHm;_srud9&5Z{n22d4J*Ud~}}$qkwd!nXOMc z&{zsFno1bxsbQt2h8R`|dJw^|3`VAxTNb(g?S2|c0$0)pr|PH4ewveEe0zi8^>} z(z8e`KINi-)KnJU_5)pY*SI=gP9dLqUajOlTCkKYrLb^Xh4bJW<>Q}uvk1f*Oh*}l zg1VWhU^UpCWoT)!X{gkH1a}!$+X4s5$BI_f!OdTIu=%xk9KEc41PCO|RL3qwPIl3r znwBTdgXKSnn4T-mn5|7VCq+?)VRZHOpbznDRM3_nxJy~4dw-3t+BLSoTaOakDVVHc zrMr-#83{);9b03Q%Vldc4 zQff=R=~`;sj3?t&2Cobfp`xb{GZ-Tz3a5;d@rJ_0i+sL%9tM-*IsAT}?OVjcTO9XK z5vD-;!fMD%-6hSXi6=22SlI9Rd;G3K^6U19&(xm2(P{W^gJImy%oJEYE~R3qr<^;& zNonL4_(dJ{J%*O-c+|U}$2|T#M~b3L9GG-&qe}9;J#$BZ9Nz(kZdAi+IhKZ5VyBus zG#9PHY8t3z_>n$>jDzND0d4f-MrPu>vHn`-_0F1p_JKRv2UeMW$K3OerM?UOhq+Ie zv2IH7Qo9?g_|96w>9H(V0b%hF)N?XZ=fmWtsvb~P>AWY=t(mF`wwsFt-ElS7Tcx6 z)cgIR-VSR6Q`W7>;9>x2f~e{{W%>w%+=I--@O!f`>BwA1Z-P5a$ap6>8y& z&>b6JE5mISOmYE!!)@*T{uPIK5#&o2(5UA{KFhwL(;yQn`|`D_x}5Erx7p0XyE6`y}2|IFFv1mArX+Y zu#5EL^Ao=M-(5)4^X^j`&ORbQ7Lnn-os9bwfDBR{y^A| z&}mbjD5xwch$Mz0g1HuFZ`t9}CZ7$#VOQbDt9v|jM}$-uA2H$U`%1az#PH(`Rg}|# zki(kPpi;HkdPURWtF#LGTw8!}_&hqM9p-$?4s~u{YDK4JqkIR=vK7>5D@SfHSDpMf z#H+FFCHZ+MQx2x27<|egr}&&MDO{5=rJmGP^v#N`hUoqh|Gp6^E{)CQwKufK*G89I?*!{o-*h!T3;o_KODuhvAvfLlQGgC!T+Z0y&mT zD3+JkARBB5;noFgt9}~R{utUPOu7t)gZIx^dyA)$tZ%O7#^U>*bH1A1*Vl_6s2qn% zWfI2F6lwq$?`?lQ_}dL5BC6-UT}tRiAwsl|I}-pEA94gu_}U7)?6Q?5j_ySvzit#XJHh+^F?X?s|3y>g3}4y&42W1eS) zG9z6>0-%Fp1?&#D@2CUT{9Z6in18$fmW!iSu3KigNFAi=pt zlMJ5$7?vB1%p{md)nb~eC_K?Tb(Ft`s-67#3D@|qzXI)DoQ<@TD3UTY0mC);RC$X< zGqsqH?3dE^48RkAfHPV?FY`4{7g!9mDOj>GH3>;RX~j5eu9vfA9^f$>_a>3Gf2U|h z?A@N~SY;O^jpnbZA^oGm@wjV4w2KNQmQg#kuAsm^ zJZpUr5H<&E+%`VLoiAsJIN-no!%AH6I^MN~vZPFZ2%zIjiauAn(k=We#JpDorc5?W zK8!?UM>NKo0R&X&0=ypx*QSywE%&cAr6io@jkVQ9fowtXBG6&W;3rAY7CJo@vc|IaN3w+u9A^eDXMD)L{dIQ z%~J!`xcJEEBSBla>+|A6$JIBuBwg-8iLbPyh)I? zf()Qq39}ekhpK&(cnR`lW3X@DB?(%_i($ME{-qmrj>E(GCWDx{QwyfV zx=%^bt%6!q^3h2hZe*&NYk&Yr6s7ZMJm8xP*eRVc$;=Z&%dNP#?{iKF;;`itfJ#wL zfrVd%G<=-L&(9dV2E%zb5Uu5$LlB&Djv)jFeK~smxT}>ji z&rs}E2rYdF6Jha=0HHu$zd&jVU-x#SGgRd9=9_n7qX?Oqg(*g*=uYr_t<=_yA1f-n zD2`g(dlJN}D2+V}2x#eWxoIVO8a7wyVj~NsdddWg6!PY+fOTRhOQ>s(8;P6Z{V3mO zX3~-7bMOd6)h?GN+-=A|#)=~urKZ5@N9@X`t$C!9GP6_CbzqHG&ouDJ7P?AT7fNXn z26+X**MlYBre?Wc^ZA8lg!3?|%vBI$wDhvod_Esv5$VRXsK&Z^R0NK$N@>5r(xa#m z=ah{{n_V~|7d*av_%#ak{Ey3=$%a$oFFj2)T^VXhtWh$-nxYhQPaL#paz!Ut6_#c4 zJY%T35yMGS7QwAcT$7P3UysI-7e5cr+A7RX1B@cBBMwPnP-c=tX%WEkO&K4FBm*)Y z>cE~GNm|*6`H*4IwoTF}Mb9svKWMA!dGDUNQgK1be9w+x_-j=?YvHSj)Kb$=Qj#l2 zSuH9r!Mw?m@n<(HzUPkS?ERgJ{{ZuW6O?L{(Z)b!VZybJRXmp(I2!rCt>J%|d7~HS zPHSv$nyc$EY(lz~R%xrJsFFb>Yh@_0u22nu0equEG~uQP35US|aHF}Gl8%6a1&yd( znA=DkmoI2TmISA)u2C(bW>Q7X#$$86&Ykb6IvyFyEO(vvjZX)^-X|0S9{C5C=y6&~ zlQtzohBS3f(40^1Dc!BRRqUXUO|PLKX}=NTXYPirM+#7i-=t(%hn{io4A+-A-<3Q; zrH7fYTy>ueV0kA z_uq}i`>*=?{_z>&ig=OIs!=>grr>G!_r3Px^~<=x?phW9@zj6A-Z6A6DdbiF?i- zzqA;`<(3dSu)_(KR0W|UIcwOpuc7tdzt4o*Lkx+I)OO=Z*|=dclF6tV zXTrI?v||#Z4J@sI0`5Q#L-}#5>k8&>p(57QfGupdJ7u-N9-m9_*AIpWwEzLBqcHeE z)+8aRr6VdRW2vf+88i&mxb82f{to@OHwF~~bN;Um*HlBtU)Kv)x)doxy=Fy#%LiGjzAR;+ad z<%wiBH@UW#J8SapPP{4F*yYFsoa_TQd$w6OQ^dzhoib0(4%a?We{%i>b}u9@e}J$8luB>#*u+ zs$g1bxQaY-8%|}C=~&pC#SZ&P466GkXDxl`Dd55ykR?^ z>SQrGQ`F_DrlS)e7U@GUZBkRMnpm|v*^cDv#fxF#w`PzHmd|>Ee*>PPExQMPRH>?! za8&ip=xt|yHD(lw5LDGv8ETBO31S2?ui;dZEct6t@vnsWRzVKs48Kow(Ts-sm|7?b8w1(@%vel2ae*MZiVl5PMBt*-8UxgHQ~ zyg-=A4@!UcIo8JY>jYf6nR;R}bH}a7B){G3w(YK+?eD-dJGp<{Q6aPB<*lz;$8!ly zb86>7QNuX*nYmLF!Yiat^WXqym=$TTqBgBgA>I60Qin=;nmerwwA8wKmNBRKtdn!H(?%8V0L7+fGI; z7a4$(CI`$$VR3VFeJ!yY>*?ESQj}7?#X6LJr@Nc!e7xykf?xr{$tr&n+4JJ`5#({l zQBxEX&M2XqJ4q{%EK*aY`jA2fqG@LZa_$Rd15P`eEXYTC?g*}Q038J$l=m?tfiC$5 z^FJD=uH*lwSjik{^bx!^E@FI#WPRMTD`=uE#l^5Jr73m=JZ)d0g$GK3>%` zT!bcZ_cS?G`NgXa83}7{3pWO}EF+k4Y&Kjnx~hhzdqXUj{{RTLCRpJXu}Q3Y z-G>>pFq3g9229Wh6@0i-l=}+lq}XyE(WjWDrg@rp5}37PJD8(BNX)ERkt{V-EL2?V zH{XeNN+-)b-074C)o)*ZW1itru*a)W3e(FWFJ@RtnDs@(LoVQZAH!>H#i~X!OrTRb za4g}gXP_(%fXaYU@!A$mD^CqC*0yMuj`D9a^7a*h;<)Y{Fq#fxg17cmvr9^AE8@fI zS}Lh4Fw#VkQ$so*hMe0nWhZ_a?A%TkWbh@+E3QPG>uxpS(W7fd_m}3>y>AN@l2|XC zK7;R63rVNr0dBT^^dxJhmg3+nDAW|vmg#7kP-Yq=4`|fBXwpD`3lD3bT?fn1@wn}F z9R9{8fDf1fax^y9-#z$%%amQ*`qx`Dc8~Gt5sK5J5>1WE9rwAo+v&!4aF>1ZcR^kl!hQMy?PiXBVfUE|N?P zqG*&`V`#v*Al%%Gfv?bTMi&n)O;BBdu4kFIJJJYEQj5*C^^O9$4m~h~e0JS7KrS@JtnrDMz)&(v<6;PbThf^#vvOz5J6Ab2*6Oki(`PfZh908kq>#rjYxgl!b3c1~- z2A>03BofMZ)i>(#Za#v=f#;bop1nWewFVmnEiI>q<5LN}P8gGXGf`sFPW1^?(=q=5 z89rHwc(3PcjgGYqsfbyaM{~b$2qP!uO!U4{P}+FBY^kI($`;kR5XA7{Ts$oE2P9!M z@={S!{B|RbM@>;vjG`q}@zp@m5|wUHT9V(qXhF1JyV-ar0kpAl(2$@)KmZF;oSnSS zvDge|`epA1pt~3I;ZK4WA;LvG4r!|-%Obi)w=*o1%n!vx5bNcflotf)W48VWPY$;`Jl)}%s4AzxhBq_sp9q(Ic6-}u%dP&pe0byZ`au_o3$S@2kVI&k7r z%~p|9aO^Kf%+L-nT$M>u2K?&Qy3<-vRCx^00;1@fp9E;u9_cF zRV6>%l8J8WAQ8%(vo`8lu%=w4nSm+Er?(TAnN4gz90VgfO_TzH94~WD}c>|3JBsN#I zv}cOmBW8(nO*5!90)EPLv1 zBd}e>*&nH$QWLzJu{Q?(d?2|y0&MV=24yki38h|-r%hruG0#*OZ^FtYOH0#`G)x_c za0o2JMmmFg-L>`B{{XS}X3f~CmpL-R$N|ec=bC>M$g@SG0oj?dfMMxJ?md+<)&?F7tpztfSsEDh9(21^zd z{rzca+4~g|7F3~9-KT#bRa14G3rGNj2W zS_2Z~*W3m^Z|2Z`B3z`M*0zlQ01XSjyk*jqAO=%)dlR9#2T`T_f$8$?#{1psI1iIH zeq96zw27ObWkBW6H`lLN!^t&zQA;{U1dkN8l`7P_=x^U%Fr$8i zb@ccv=>&-;RJw|EuLIK8aOMEiR;pId=8d9~d0IAzS|*ISF|=ajgezi$vXD3n6|j5s znX;RBmpV74^2xeDnEuX7#vv21>jGkcT7Uo$t~s?mq8#Y5Ni3*NOU6Ow zwbix)Qt-G_Dt1)Nume{-O?sT6?#qy@1_;Z=Ok{v+TA&WO3K~)^{#=@$3&7}@O(J75 z)iqqvq%uzw^wOTB0nmSh9U#Lnn1f(*TT#VR9KQNw&<}+QP!!W!TO;aY%KJx%n~KG( zOC-rc$WCB@LlR!TpuSLMOg<`#+RkD{fMU3uQAJxkVj5Z*5<3un8Xvj%iEWwI3r1Su zZnomRh@9uT4tdZufwMnTNI^3g6qI3$0>B)y0JwKL`DYvPYDsZS9h$O}s34G($sfa* zl0jseCfv#v!~>xDZywIX{+kd<$yNY?O+)hbq(`$cXu)DsNi5_w%gU7n ztqn_%BqBDdHmhicl9uew1@jZTetcdLw!xMX39xW@@gJYt(Ij?)T*+xjCe1^0p`aQ+ zom#DQ6m-zUl$7OCIAdyRc{Bo9ZFydz+c_#(zshbnO0uk8Aw_Mvr8ot(7yG~O0ZM#c zDMe4XR7ei=dsq_T>io&bbxs>kSc)pC;WIk4LPa-8BFmLsZ+|N-h(4Z|<7&aB6Od&W zG@zil7V@w~&odj3c#m+BOS76a>+_68RlVT?`tYw9*1bH< zeeQ3!srr6@P9{vcR-WgdA2`nBtJ^=w_|YXYDr9{XoRO};?WfAu9{fqT6vIHmtZDD_ zj6@a?NHl6SZB0LYVr*DLN|RJ9bIlBHsVq^8%(T)SWFC-p2+DOOb|TyhK6mNe^|2nb z{N-qhZYU%c;ti-PT+a--K?$%Ksi&k217}OsB8?J80J`buNdSDW#;~}NG`^+4ZCa!~ z2!0PuA~_S~;ugU8lS>_Mql4z~UkIdv31&x%QBF}pX>b?;ZS~Ur_wDJyIH_IYX-YOj zQZ9M^V=1#wCq#i8 z!^tw`p(-W74jkNZ{C^2m@E{{WQwYv>1l{@g~A;Btwb>#bw(Mk?iv+gqPg-}|+-^c-$72w`kvs6(gl-+jk@ zH~Q)Nan2|sxvg0s(}VeWRAm8Td$0*TdDidl`t-WFY6;p^k!e|Bs|_7RWMc6oY6*=b zI|kShp$FHBJ~nz1qQ%^rJDb18(X7Bzv9qP2L~^TsKRIU(5Yi*(!fGv&sv|8pLDK-J zxXR>MjjTn7eRu&AL00l}uRA+hx^NJ=D&8SU%(%a=0iOs{mH`Z}41|dyc1H7F%%q0% zY;^|YXn1QXX7CTB$a?1 zmu!YrrwwX3h&EA}0!=qsj%v^CkQ||EOfFdw7A8W?6p|TbK6H$=?;hmXUf0&&ElH56 z>!L;K;*|E|=M7{}LO|bOcsHA5*XwxQ6%0UBNCZ+Gt7^BnXB5DxR?|jcE_S&+`#r;j zO9?7{>JlB>_^tDfCSp`pt;;(DV%F0?n#Q(*2^Xo*fqeUS8-AnZz58%sS9lxwf0<{- zBMY3TWA6Q1@8ubqLsyn4ei>#HD}casnk<*;<{JDkB04;*&HyvI*gL_#Eu44$}G7*iE}(I)NH-j ze5^C?kvnFn<15l=VTcr2%l`lnlezDH_8b~ztV-#a6ddk2 z3On`=!I_6m4W?O7c!Qi|)R+?DxZW$h=v(hWm zr%IToL*DJ_nYoKHjKPo5$A#h*HB_^;OpQxW0<2h+(qt_ab|V5n@I>1rO*1&#F*f0( zwD*h)IL)c@wev8m6tziA>8P3g#Gz^cl30L9ZY~3R$JGA-4?Gj(-`Q9vHBj=!9s|sh z;8gT@gb>$N)r?6DN`GurLsIflO<7b2!&1N`YM4iuW;|K8e1R+jLO6lKtS{(e=N{4a z%WDmzi^ES}{{TaUOaPVzgAQ4ielFB8&fjTFOPRSsp0k(J1CEme#imKVEJX7qcS;K+ z$zJC0RMP>LdUn-GwwwdC=ctvSOK_6FgGSFFTQ=k(?fpENg2#7LP9$#>g%rE)k^#9K z1&;{fLxST~bkkN-(9iI35Wg1m5{OGYFB1+%9z2Tv&aANFhJydtBN;PC#MGf9i!)YDZ;&PiNC6Jt>{F5Yuj zO!rxDs2h$ieV?9*X+*LaNKWd7*zxxxiLGP9`)z}syjt-{JLs6bHjiVQqq)bQ_Mt>BPoZ6b6EtgV#=wDN@ODNG7KL0Coir;WF#<*GJ-7=OvLs_As;sszMyqAO()7E5QxA4uXfeA#6q%B0geW=S z;`N|y2yhH=XFKv8XCY&f;Iq~(Y?CWZPg@;7!ioIX=$_M+TM}1OsN0V<+8ZeB>B>?` zXLf&aS0^iLlzXPe+fsJ!8535?oRon|Topb}&DQKIg05 z{u>P~?Y{t(Z+MN(V!)rIQvSclg)U-}8Zh{D6p#l8&92K!4oCEyCWhhGbi7ro-n@VUH!TLEy z86`b^9Hm|-1)b!|B?`h-j-o5xSY~7cUz5qV{P=kzg{3$)Op7Vv#Pku%#*I8+MOi~*@ih=n zY|=Ao@-&{@A;ih<<~c7?^=Iku`A33(P!8QjH-2pX`whHEKqjf)1+UDw*Q70dr}-v6 zZJz?h=xQ*!I@}^rg7ZErGfcGjB|M9s32|890!X5hDN%h%_27&w@;8%aq2$`PEXSM? z*j=+T2#idr(#v8{wa67LSWcS(KU2yonk{H=T92QSxPEd@3$hE(CRRb`qgdbQ~mr!kgUB9XTS+l%UL?ZPdg zP}7I`jXo0$flxEuc_xHKe+qW7rOsRoe z&wnat2hDE|2|}fK%}q^t@qa#$Zn5N4PzUf2{`4KUCx5Tf*)X^yQr_eFfJW}}LRpBt zgJquzzuJg6lM_@NkHUiBZ@K>fd;b6~0Gs|@J;%IRFlYNi{{REhroNCivRLMmHeQ(! zg)L#`CqQg$3EN+N^xzeJN9Iub2SlYt&F|@#2#*Cj2kC-b1+XH-8|qEF>TUkkfjtU%-_u>1*=vML)t$!vWI<9b4F8Lbf-^=N1 z{Jl>Zy}L$sZnXLGk=!rSF^>@n!p1~r7-|UC zH`BO<)Mn0sbVFiPUiR02Uf(VtU($Me#0ruRFPEbob%K=Bw8iZXRZ;-k{m$PruNzH= zC{>G)oj`AE)`17&#^@eONogHQ@Wd&Gf3N*d1 zr*6ROf9t}j^BkJErbX;IUyTGUoo}2ueeKZP_fM-U*UO7UszoIUCr}sDe52F#*F(VT`g*|g%Krex{{R86T&Q?KRa9b^ zz0q~~i;_)-`(M59#?$nUPylxEUpLl2Wk<}w+#a64{MjGKYin`TZZazn2e+BO`{IAw zL;3NMk*$K{HUi%-e|>n!$ibshw`l+t{62#A{{1+}jDNZ3eqS4eMW~PNT_cuE%^7II zi;SU&Yae0`*8WF{5uZ<<(Ka9mdPj+DL9X=?rK#x})COV?N0Y#S#P5uIbU5^GkS5- z=66m_JcvIzedAxM-L3TbOrKjtmw-H2J_$4!oh;2P6th%P)<-;Mns}-zY1C6xqF!Z@ za{!^d)*y=lI7Nw>GGz3qSw+T_;6E8>Qfpg5V-bpU9~SjMp`#jrM;i1w!kR|0s=73Y ztu?{`_E90u1>eka=CA|}EJl_*HhG=gzx+nJ(}qUfA)K|WB@(7s=qhXJ!nPSgCo?^5 zJd;K#nW1GlCvU|dW0;e^#E@^WA0fo)ebD#LFFOYdgmjbjd9iL4<;-Ua1v+u8k_{XK zsPDF*>~y#~X{h6Lh5NiW%$SiaxeQm$jh)l*&51TQy zhJU|EgA#zR7ZaBd$1QV(>iLdSEsT)$Obu_~bLJhszgzs;;N}LkIKRt3+bG|6 z(ELm*{{YC6{uVZ3@j4PD8|dtNq&ik}dw>i+=p z?KHTz(*6E@z4()VbxhXRRylcT1^4pHxnl0ZfDm*(Swzo=ilECRM*jewo9kns;ut7T za1(wOw@1VtPi9ucxW7UDsTh*K%EqtQd#C%rf3?dk+BFC#r^=YN36V%kI z32@VziGB~!_FyazeK=w^#K}zL(VdAo<~*{stsX11rgs>{yOX?g$Ub9;v(dczJHlTZ z;pUk?W@4fk4_pd)&+*gLn<=XU@ca$#+Whr5;>WV~{JG=>QjB!C7cZufE)y3hwJ%D! zw+}nBa%XwxZxH!AmZQe7USOUYdW>fW#A)P|)Cz1yI#50qH=_-&$564&Z8g*j>PgyI z>=*fv3a^n5o=;NrG#;A8%$8o0GvfTkgh7ns zRGiR=YFR2TO+#5niX{k+rmmI9Y)cJ6n@q=Dc=NrtguzKW@-bm$PIp0edbMjuIb=nE zg!BIZPQ{7dvA`E!1VR?q%IGNG1MFP7bCXXoi2Xmr4a2<#C}^m`9|gE)9)RL_H>KF%vTtP4(EIu z4s1iBBI{K~XG(||*=wn3Ds?rqdj8PE{{Rw>2?SQ_#DEg%4b z$pCJK%Piw2NMZ=iv}fT`G&X-cxsS!1M-Q9C2;rh3o;YTim|x7)Llc)9i-_wI(w{gX~{?R7j->V$j zn_u$Si)eqac*xB4<@SKs-OMpdZ{I?9)7TyEHNRkOdw1d#FMV&L@uhV4_loA)Ug}SE zQd!A0qnneKdOUN_iykyk_+x`q!9`CNC(N}F69pCiA`CT-)z$X=H7nV4>`xW_x3>lX zDoB0e7&{u7|SjYkr0b*CXf&rrJ=gWQ%DyEjc}%np{+aEk&g4wD7Ks<8@a`gHNa)6~v& z8EvQ=1FnZnPTTP^upttZwaQZ@ILv{>pRwnhCRDkT7RTuXH={V^=V+(!$T1#v#Hx9F zmT>y)LlT;PwDs{LLrqIePsEabAPhdh4T%T*+*gJgb~1A1;pI>hY?}VnbMFj9xpJj~ zr*`SBK+MRs@4RAqOcaZakwYAe&o-Q?O+u?_3fH z%n(2|=kr6xDpHaFEkGWEnpM9ScwdmnhC>|FIkD7_UHe~M?fUV|xj+_RPF!=Z%ESsn z7GA!8u!s?xc?@RrXgKIXe_jGOX{LHesCO42 zU-|rq84JV8lA&wAN$v9-*7apZh5ihpwB{^S>?d$o6I%@QSoXaML(Fp~{l-IKzMu2U5 zYCeaKu@fcBu1A5bD{)?Y`NL^AjnLnKGrLr9_|8;SszS;?2#DBj0JfTZh}+v^!nuPD zH79iCb6okcxASOaCT&FyT&qqu`0Wf-*o26kO$EPu2e8xU@9KD{Z9&}=x*hBfC(f4p z^?4#=02qJ;-OVkdAB|{z!)xM}HI_Lv>22-K<*B4Ia-DV~g>xkZeH~}) z+3Ds;Dvw0eMKwL|QA;=$wJ}}D)o*Y|6b-qz4$H!vehy#ig-P9Po1;175B6_+E?~K+ zX3gI}=YPa2g$_cf-uVOnZ+WaSIWhpcZ4wWYCt>zTrFhNx$lhewz zGs_zp=@$X3sK9<*kLEGg?{3akB#EEIXSp`D2hmB#A)+`&?Qa6$4)}zFXec7CK*s(z~oVQl(Yh^P`q=_h;!y*7*Mbi22e3W4MeoiCXkhL#b8? z8`VzK<@LLyz#@@za6F>K0b!_fCQ1qHbY^I(WUYo{q}0>GxjLbC3q8UG0@`hR5~FBi7KAbbHgz-6%UHIW&_G~a||AinmUTQA#@|8wAC5TN2RJh zRc}o$52cOlcxj#bZtr1J)sIgu5VvSyp63l_{acIf9xDW(g}H zoPi=FCZcGjB;}~5)6U9Hr)F#EehOFiK{lmF><)a3b&9sn?(vh9iL#r0)hViE4Dv}OTx_*E3NWCCI{+>6 zl2>+8Nj1*Q_ckx(t*+~_NRx(G3YOc&%~(~oas{u=*frV-rYER%v|9 zbz`~Xq5bKp!vaE-6MC^OPX=+MUGS1{xNwk(f8q-4A+o{6cHpYm**>e8QaY8t~n_k1!Xn;Hi7 zYV)SNN`_XqkZJcszpBiNd>K!PAs^7 z$th^w0n|qE{{Ym-fi>p9j&QdXf|8`9%)=5?RQ4dfb8+SPkD0%0e*ihV7sRr&GXlb_OdCGr_#h_qcOz zG$o5ylzHE3`#*}r;w1i$3qsUjKf<1Gan~sM3**1p*T$a>ar%rNUQA3vhLT|&4mp6K zlLnZ>14~&;hF4Zzs-6lRSW2wx)lyZ6An{kkc8g?etWq!&c7X4uD|DohMHf*>y_k%x z9&fcfDYdX^E14>UJ7-Yr+1y-uM-<{USd|=wW5KBwwpoNTOJ7-2RaY~Qxr7RUGOHO| zU;BydICzXg(i1r|H{~n^B(|U`h2Jswd(_0W$yr3nW`&I@O*PT)c1)$~0C4E}9!g z8hHgNn&%^(dcVuYO3Rt{&sgWqZouX1Gp#*Qkrv)n7BlrO7kN>k1^-v0pG)Ao({ zRt-^y(!+#J4ADthGWneKrK!(rG-wCmj2yP?2d=ylsj`(;9*3y?qdVXGdVbLZo%v_> z9cpE!j5R?7$J|cH&7>GZv#ZLoRJxzVRZMt!oQ= z@yVE#DKA#t6=&mf&&z~xx{=5?C{&jbddx-|HOW50c8inq&O0*YkmN8m`}2NKFgXzF4)PD7}+mImW($MX7cLN0kk3YRU; znG##xzYI-^x+QTMxPtc7pXz>}UiaW>fQKqzIXBz$!ZA|!MJNEzOqjt&rIC|0?g&;5 z{%qSHt?%_3@Dk_Y(oXrS)N!ll!|@O)d%jP@IMFRMgc(1|1-%8ozvag$AiG%9axdkV z!5sqN9YetCh|(oxGFY@M#Cj45w)=~p=fTq0j)0GxIl%(Mkoj0btHh>~zMh_Tm_`t+ zQ6Ih!7`Stm-Rwxc?df~lmB;{-EC)3tCbt)A>umhs^nd_h1qZYX#b}HfrKHy*B%l$L zsBbU?b|Us8V06*L}N20jW_+b@%HFxR@fEI;rFH)(3Dc-7gs1 z^Y`0s8c0|q0YOI8ihZ)IP78o_1M>=IYKU(e-B+dpi)a)LH}z6#L4QXHl8bV$*%($*5@K0S>LPs?4 zLvT95m?%*m+Ad86?_dwF46xfOLU5srum|S8hc*DgvUYT|pewp1g#|?zd0wHpn9rEG zhCEps-xJqZp;)8??y6iyqG2Kb06u)dud``kt>oF;EXbIp)whWi0))7(dbIr;6WW_697Q!CX4%$BbzyfL+daWC)Azz0~`LpVfzO8e|X|@KeDDdD~nSiJiw;0 z(RiHjW0bgERV6fR4AL{g>B4~0_}phJoh;Q4)s5g}6$sG1t8_NFsMln7Hu)UKHV_Ek1e2qahz z0$w32SrV9+(a5`LUMF0j0#n`@vOwO+>zQj+`Lq{DntGH2s-*P{YNJCX&eqbv*bd|M z;3dpJ-de7bT(*4r`SOT@O1FujbLX4<{p8luVib|Yvq968+F;~v9EZ6FxxMXf{*w|O?sprjthnq2Q$@@G^n2JY2u~XB>RWuljz|4*s zgbS;rDom5FmP2uAv}M4cq8I^B*q{oeBO_S~E`=sCsyS=Jwu2_;+#UYBTG?ed+P*nc_fuyXZ zcS!oukhRevn0a4?SkBY!$-6-akPhzf3a>DA`}8nkaLAV|ESKH_nb+qhePfgBIeJIL z>S>{AQYd6-o@$8Wjx;d8PL-ute&#xwie(QBaGsE60SQ2)`xeG4#o;9@5(j!x95E!4 zDte!kFuWOSnnw~kla>6eZKPU!g-go3rHjRi^937X*l2^L@HJB^NiK0ANmxJ&hmLCo z4Q2!!+TV?BZIz412}#4ONlI1$Kk@>OTE0)iNSzA+vrrN$GvgGmI8@Jx;#rW0vG!tcTR#kwI8L9skVPHJK^o=_AFYga zGG=tPU3lH$6o3MbktXt762$09-1&~gTFb}g%&4r4j_=;a2$FVBf#g2IjMM(8oeh?T@k?I&J zl=ghK&2hc_yjL+;x${W^mu4*9MT^$8^LQdOJ~vkZF2XvSqQo9%%(29yDh%5-llZT# zudfSK>V5086QR!hVpV-3r(bsS;hZ^g<$MhRnxw3Wmq^!D1G0nNY;?Z54Ndq}ijlle z7t7^8JSaNsHGiLIN5^UnReZfLI%a7)VD1yB*?yo~{Wvy2-AYIO2Mr^kVA??G%*cQf z9C5;96zOh}5=sYJW@GrS#F9?>owNm_=a=F)6W)0+=p!*#B=W|8aGw(`G;z!>CKX6B z!!rY!g6J5Y*5V}p0Jx#X&iRJa7PLpWNiJQ_GGY?TBS|sMpUQ-}V&(JzxpHp#wKH6G5C#nP35xtSa1XUXdc6y`Y{s(m3YnK2oHEe64E{VccBy*K@=(u;FNn}a50C&1TzZM7_=3I{{UrTw8Y@}rWrjcN{NL=f*Po$ zU}?~ssR4942q&s^yg*Vzi<*ENoexX57|rF&43}X`7u0lm<&yycMh@6a3sR9cNC^t& zez-4Vd#Kx82nOTl!(0|BY}M|lHFIzu&GgN=)+UuVy(vrP%|~%VKsdgQ0-=_oqde0* zO*K-55fD_YagQj=dx8M59gdy&uz-}HZ?#6CTt1*R{{VO?Qo;j}^m_0db>VoM7c=54 zuwm4bPfCVLIvb|4r%I+w#N6NE>Ox%!wa|?(dyFxiwE{U``aOVhI2>4Oz6eyiUdO3JMrYNffIDkV=TQ&_7nz0RI4#=skyi7hrJn z=PWrc?p;^Rit_2g1Hj>@;->FQ4`NQXV^dR|L?X`dy!CAXY_A$Ssn7zz5-qjC-%H=H z;`4&QO_YG52Qn+hmJAd&hg;iX$U#8HQM3BUu zo>B$I;CDP7;WXG~)7N*w!WfB)vQn zNVIV|`?PhHmQ+K3GNp>C_P=w*Z)i;uCM>xisGOKx+@4ty&3Z-qXW)Rt%W&;2B)c<< z>in9}zb#;zMNciEi6a1NqoxArPho2dX>G5k3sefwYFnARQ(b;h%tWA-wok7bX>W!% zjMKnljCq@*x2Xc;f3Vl;c!F}Jgaq7x#l~O|S@rutMr5=lMBb-1`Amc~LqgQ?(t}8> z^31VD9s0F(G8llKM2Hh=c$(w`vT1wk!i6qVo9FMtK7De86ZV9pO;Z=CHP2f(1lo;8 z)(ukNIH|%Vf(R+mbxtLu?VG*Jt(DnVz-{3B0(7b|FCrOZ+V6ctfXQK@W& z1A0Q7PSwH6o|SiiDMS(pBBh*Z@1s@}u_^$pKvTa%ge<*T%h&bfhEm93X3FJRn78pU z8rx9U_8c|B;uDAfCA6jb<*Vq`FBV)5HeNSyB48qcm|Qi?pvs5;Z`AMF(_wc0#1sY}986+UAB08au9IWg86 ze`DekEj>hVAg5Op)i-)z@JV9&V)x zt62o@sFe)wYrQM4SSw36>=~-)F-Zk#v=gj!ktpd>)~uvARu%owjll*jlG!%lb~a`k z6dGG*-8a{a^MKJmH23YUia#SzraCXvzQrsmq|teFB|^q-<_@UnWeX zsErPJ{Lh)KU_a5FDhY5be~`*V6DgFv$urig}S`CR9ObdXFXAaujS0$pf&k;kFfWh)c071*k2K${GP;q(*g&WjcTq+Sl!GPAr&JN+|?@ zTn44B!v6rhV%>sJoT`8=lj!;6c|zmLtQH!SEhJGaYR$V98A~^*Ho3Um>+Z=31h{5A zt-#i|v1)LJE0z?c5BRvSHqH9_K*xkmjS1@McQ5d+>xZpu75Zt6^an0uSGdxe$2VeFB$T*@AwyJ%W`?4m0~!0WQdR_}pM=`u zUAP-|Vtha1nq1g=bJvDe>^>q{lPT}I9`EQ_c|x?YWh7eNE2X^x`FFo-8~UH88t{LW z^0m6bsZ_NJef~EX(URV9I(e*f9`^v=-LLJj{J4QlyjstrdPgSZtmUKd+kD^mdi&|b z$*|--qfko@>CZJXPo#27Br@H)qv52zIbefPX_Ic-8(WB`*qeAwZR>x=S-_L5qnn!f z#iN4KM;%C|lz_Dqa#6@Y%6e4{7Uf0kdZ-1r1HHDZ?E+Z2%&{kl>#5Ew7~(>WTJFT@ z=jP@aF{)&mI4U|hE9$A$DjLGYkwKBIr+b|N>}`ASXJ_W(6)>cLP?`cm0yuiTco^Qx zn6WVAmuIPbo{g2rFIWLVLo2k3t0bxxz$o<4TTQh64-c{Ui4s)vZ&#=_zPz{&4Gu9F zscHI+cz*S%ElTA8@!Tq*9-6Y1BrcM4R43EN|Hbg zo>!}oI94E$j>Dv=uEd+=@|}7ZS;ny6hn7mpnkgdqxbxxh$)lN~1zuJkI}?4aw-A23 zPb`||?SFRY&s|y!Mky0kKTlK9vdf8af87@&TINt?O(Z|}ivoT7o(f4M0%%CAGEVmB z-lChtIL2j*CEYJ})cX7F-{)>O9Yo3i%R7}lCGs+{)Q>`S(!>47Vl?y>f|B4{J7&!F z(vHv`GjVd+>H%@D4CqHXyHYHV`O^`@p`)ROp*|i1nxb+5s05F@iZTBH%1O~l*-77i z63p20XYUmny9cKVuo)cQ-gVV%#7|i@xu7r2#99UiLIPel2L?;Skf75)`z|l)V1&%3ysvEd+9Oa_be5t9 zj>4ol&Dt8X`=+rV{qpQKH`HH;7<8~_c5vjqo1dmx#|0b2t99I*+wT!nlpP$oN@!O1 zwT{=mwm#fqzuYaM=~&L}y^g<8<#)fVXAFTDCw6oBl5O?*9x)$LB>w=Hx9#m1%}qMS z_RH}t8II-NLJw=6{+IXPe_kY;Zig?PUznOvY{+6O^Od1H9GaQ|6iF0DSY~NkF*&nI zzW)GSdtc|qkb+VPHv=l4ftv3Ra6RHejz!DV(C}|w2BqKxD?MdJJW)i`&si$PPZc`k zaU&ZA&$DW54}I_ILS?WSd-a1REf{%9nyWE4V^H+@``MCsaf?AlhI&j^lCl;ljvD+q zt0`$<{{W#SHA0I`1m@or9lqhcf#JRv1i6W6cOtErt?g<)wrE6-(#uN7Rwx9D1ZEft zYV=}EDOd9AP(@KEGn$GyrKgZ`>~O^ zTLr`MT4PNuG+1O9e9=>&YUpZ2p%o{QG(~o@#|7?53*N+4+pp#kuNfl^HD?nyyJs!y zu3U35W%6HuohSdI|_B#YIcx2;*+-f(`HdrIVwlvo}h7~lAtv(NO&-{zY7#0Ck^^+LgqUo*B;cF-=ZB7ZD62sKX^OJk28hIUsqhGt&dHlgw;EH{!*E#)*pE zYgvmP9O``S6^Zx-Z1PDeT2C4=qxrk}!N&X@hnx>CTMdPVUoE?7rw@T}4zM=xUx)?@ zt48iO86UPc8XsQ#L%cy)%Xp7L8N9U+gv{LlSadbln|{ii;mg>6GT>OA8C6FV^3+gO zM@2n>o}RBMWf7ZP83+Jajr2XZ18CqzF9^10YS3AUC*k9yIM_QzZU<-~=9X|T$%9Z< zr-!V3wdUGvYYX_=FNKzu5~Z42I=V^F#al@fY*0?DMVdJPzHdY6$CS>)2{YzO74Ftj z2{suw4JpPxkHO=UKM9ANqr7IzN{<(C>;a`d7^!Hm+3{+VOJ6A+5K%70$ph7|=05h) z+-)-5u6>`K8~Bcuh?WgCwqw%Ko*{%%P&r{*GE*nRv_N#(q}R)yMlZNzH~qBy~l z$XXJhC`0{^-U7!vMxr2wB@7*AI!cdlRHTI2?b)sLZM9OKXtk#&^1X=$8YEqGL&4l6~8xb3D+<;4(+i4vD)fAK^Qx-rcTvXuLr0f?b2ubIRV8 z>MdUVRDcq-(17H1zM6SP+L|Yl8B(DdGz_siH=UM5BH*6-j@%R`?*Je7>M6r6P*5^w z1k6PWz#`)OX?@!~8~rdjK`qZ^rj`vVJ;s{K1C`waXi| z4bLN;8_2?xrzG}!ul_?0#sqjJ`Q z2=8110@6dWuFmgfwz1hCW6FM6j}*sd$Ea{q{h+X$>tETLx8!B8;Z?7vPLScS{Oa*PAo)^Q~U(>Dx15Oic7)49W99 z`g%(ORCh|RuN<9)V#}H?Pvp^CJ|~Cam6(Mk8!bFSN2Qvf)l88{i%idER#5F{Ci@+2 z#0gsF9nqB-5)NGRr%b@28F-DYwiXA7VaWvqll0xsSF4&B<9`!z{8OCPY;zf^lB%jH zAf=;Oo=Fmm4i3d3ib-uFlAcTN!)o8o~1xqUyB$phID(ZPc z{w5>+wMwEuq_ox_Fb$3UFRk?U<8V$L4 z*8c!)clYC^_nXK5FX6SAeg4l9Z*Qaw%|Ods?Ee4@Mrf?9a4he*8f&Pww%dN%pH4aO z{{WTCJx@&9-8|wIEJ~?J>q_#abAz~iOf;Qijch#R*tPw22fc^4Z%Aek$8?r@9RvLN zbokYYg-gjqmbOBIl+V|zO%)^zb4Q+Qp|DL?zSp_1Bi~WL%dswU&!i|L#4Tg?{Q8*A z8Z)2plovKexMkO4w|#H&`Ekzq-2$#HrQn3veEIR=iwszy6)F#(G(h~x^!X2#+Hf4y zxh-+!R(Mm3u^e*s%O6?G!vSE;W9kVf^4ESjNZm*pK*_M>9z|gOU≫AL@Rb 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

    *62dV{a8v@n-2xO(JU*URm!AEv2rBk2LD`Cr%h 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

    NFBcqS3|xzLv1$7;w_TDmOK)YS}-eMhA9DxFoi1 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

    V;Z*E2vZWhbjQMHE zQT2s*Lx7twpeevC#=eGvmJe=GS=z2xq$FLP=s;=P)+4&B+7lR6S7iM%PgbKBcQq>4&zORzeDspJ{|H7 zWRAZn6VJrR!pjOX1ybx=Gh%J`;Rn6~N=z=JtnrBiiz0^nN4}#_JKs*+C7&z4m|HWh zd~3tbDl=zF$Kygo(A(DIz2t97+2TD1Gh&!^a$;2Sb!rlxu8SFMdW7_Sg+4g2$n0>Y9~;lTTO^UjpD2*V&%AP@kISe-T&xZ7KIw*btMymA+C zN3(FZq$0#&isqLOT5i&h$M$;*2$w<~BVz-M@;VYNsAeFW`}&*f{P>ow(h%T~cXgxd zaNOH4@Us&&NCsE`09yb^MbMPG+^4_bqKe)ZhB>(oP$^uDMu? zb*6kdLWN_dNO0x3oQqfn{Ek%@S<7#S$nr#1WRw{gD GT#y{-b?yKg+QVt)V7GT_ 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

    5=eTn#~86R_dRCfvF=(P}kBKbqs}!<@9Vpf- z1c)hpMfj<9f3wQlJ))Z~ZWN^`n$-XT(^iv9RiCT{gv0lWSfOI7AN-9u4O|~s=`RF% zBbWK>!;6t%|-XWB}?C)z{q~z?^)9(&^zlZo+;s-5aQpG}W zoK6Z`)Wc9Co}-uXT4B>%R-N*!)fDG0Mhb<17AH$^EVDX9!a|g$IjEb~)f!m)$5W;W ztxT>!dt6`TqKK}p$GIZDkXA^wm||3{)2&Qa>c-8|O2`}lhMA!PrZ{bxWMHl4zZNM9 zl{Ql)B}*VXIq_WF~@-Lm=Z!>&BD z5|Ks?;h+pHr9K)oTHYV?ZZ9q)`#Nk!pwY_FprwSYX(db9BLUlC97r<_t_}4zfuBL8|k?69tBfFRa=R{NE((5 z?@>BN&rKS=$@qdit02`gF(F7CaFotB%bBRxFG}T;^C+4JEcWOhQ>rE5gBttkwpB`Q!LR02cO zP-yx=(&b^$LXPP!=9PM%dlww-7N&V3gQMn=#6e%FE3pFBB;21fTI7H(M!R2u3Xwgu zpd15>H2|vt)vFRO`+<>cpGsY<-x>i+BvZ)|ctnn;psE11+eH@dVPUSe?s%R|pcavr znLOU{6v<47AUF-JNWUs-8X06(No z@~U$w<`-j7;EG(@hmV{o;zCIxPrD#7v9`n=06mEL>7~8+RXD9mEC2<-pag?ozPy^E zIzqtS6951^P&;Z5wa+-+g<#W5G&MDYr9&A~iE9^OUSNwv@XW12kwbgHOz{$=4*fDuC~3PrKq(!igksegrE*dX)Lz}`hjl1+*^j~Qe^{)CxC(6E z^1-#YUN^rH7MvWy5*uBMwhFBabyi1ufi&$6{IDD z4Fd}f41Fu^%3SG6PzLS;n!di=e4#NphNldYJSz}pG;vDL0#0r&SlGvyn*+a>a&N{V zQ%N;77IF7HbN)%6vZdmsg&-v)hjf50)o|Q2yHvxCFTvtHD#~*dg&QzX*D46rMTk3S zcDU0}ZNuCeqzOQpkgAiel_y_IUMo|j;_y<}EmG7_RIm%0gKNJ7&(|?MRJiUR3yBsq ztEVcgGk}WAApu3rv=;M}<#{U2h zSsl@%KAlhr(%PHYc6ousj6w+{kcSO%N@Yr98kB{5PXqcgCL2txZBSKUD`8OyUMjLC z9fm@Rt1H$_=3Duof|?|ins5%0rgLUKm%itOJ*ZrnC zk{CH7miCmBvHFY?oS>2yBYq{Z(ciS4D_WONCa%ttqFfg=2qCmnq77@r&%Lc68nJ zm0iVdDqQ4Q?Dg~!%k3o1pbBOH5|?7Y8dCYt`n$VDUE-DwDLIOuO$^U6)?-mMg~?c< zDzg?{92;f~Y&98u=f)voKuQ25n4TiPmcON5?0i>wI7^mEsHN&pI}hfO&zNj5J4F-5 z9CX`R2~chio9n*2-->s3O4JQb@eFDMoep_$v5!JK$(Djieb+2+PB-C~n26u849Qtj z1dfSL(1|HgK?zLrNfDV%zX_Hzl<9G;#~PW0Dz!OjN)I#cDDk;?-O3u&g7x6~XI{Ec z5?)GPs`;8s;k5oO$s^YK_CB`Lh4Up5N3kK?--tgc(i%vb7NDkQr~4-%@R3q4*vy8#-tS4bzRj3)$m7LYmyeO-|7US6bLtH{j1T zDg`RtfB|r8gk4?wShOxK((7)&kU!aDKu)0GQIx*e6tS}q+-O>B1`7YS{BZ=$>?q@ z(NEOTimIky5J4?$_Iu`yO*nt{pwdc@1148plmzdq5fnvoq=MvOQxw6mkJOpas?9G4b3P4Duz zw;Nlq_4fPxXoY03sq-%1kJ={n?;vS1u31_HGq!QEP#^c z!0}_t$=&sZJaLUZKy?DfpiT{i?Cqa_aKlf3ehZL|7gReurr_Tj~&a^^ZxS*daE-nYDEJg&4Q z)BqjJTHToD0QwLO$lzrnrnP$?TER(JYh1kr80K?$7f+7KNgR_zB6o(KQvhfSDpe$z z9a=H3Qdom9mAs{nV0Yt#v(+)w0R{3Ut6YZ~UpSQ*frkXuTf&>w0Gl(4XYCKL<5+eh z%H0}i3eQl|OC>NTJYNtxLE7JoDO0avZZteVsRl>X_pvT4`P<`X0+mjgFw9CrJsN_h zpR=_Ztno}@D$Zt_HtGOYFyxb()&Ym6U`hFDzYZ|0$zU6FHK^H&XPa}5W)uEbCCz>V z{4{IBSp&|~p~{{0)jf_J8+zV z-x>`qpgK+6*WJgGpQ#QnNRhJxQ%ql715{MqtfuzV+vRVO zCj%^;QblO19bDwp5nt^ZyNo9Dm#q}X{zT|y)8yhcmBp~YEqW(vow2wjl znv>qn-v@M+QR#kw(ZDrpmw4{~00AcI_$kV61%gn}L2ZD^MF6$0rl1>a55E0+zQDN7zMeiPTGnGfI+l=8RUoF=P!KP}D;r%8UrHX(A>yCtS8$*q#l? z1RNC2;`AkpFfCdd8;w0&nX;etX(XSig*I zDN1Ziq)8v+s7k{$rL7<

    *EHPEpl`hs*LUI8-0B#Rce8nL^B^No=+8BJy_dys5- z{Ja^%>SUIdYoiFHreq}flcW}%6og$=9*%G~Qgzgm$1|mk%T$4v3yV0VjX5+IE@wZ% z8hp~w!OghUKQ!~ANeu9%79v?ftW63;uuw(O$oq8)g$$tOCi+<0z4x!$}ej%wA)Y|>{;#*BD0HJD!`!}m` zf)g|xv&-;*Fv|sO1*2BVjU++pAdHZ(yC`H;5?VbA0hvvWv^L&BDYOTG{xgE`f~4e2 z^l?g17%_)bv~r@e>Z@05}0#=?S2HJm&nLTDtqe`Kt>U68FhZ z7`QqX$znkFAYAW${75w!);XJ>{y&(EB??0=q?S43EP}*{<%k`>`L6!@dgMndFZ{m| zp(a5jkqd&NH?_`SH@B|W`RjiCKyG=Tc#*t+`o8vt+#;kjvm4wP$rnAWNWZqa?ca06 z3c0<{&c5DIS}b|~B5aaeCf|jBA_m{nVSDk+XcC2jU7hYt0D(Y$zcj1UQP!_r4XG#8 zllt$*M0-J9|7ayq!6osZ%YPhRL}7<6doveg#5{Y za_v_yV3Rd24@Y`;r-oYGDjU4DbTsLjmMVyR@w)&RFedim8M5AD($xw!XQro&4cR&W z0O)%oyvAbt>9~{$qEg9PkW`<=!xwubeSp(o{)T9Ir@PhLQ-G9$2Q36sAz)%#&SY zNeH_okEar*V^C4@Hh-L;h5rDeU`x$VEI-I3@HcAGuK7iW%RUTZxPpvBovWTDW)mhC zPR~7UO;NK%l@%lphlS%Lv=N5Maz0#4Au0{vBOE;m4K1~OQb0*m*T)y zl@=VtS`=OuVYJl<*cww|7>ug)(8yKgj3Nus$2_hB^x0Ka-K@@{?S9-&SzNLcLf3jW zw9JoDq*JH%hZT!i7@3{gUd2V3-HVb5(C{GfEzA7#KP+RXm;6kiijNVV1f>|(9uYA1 z4?C?sArv5#s;7oPsWg&W<5mM+6i-6;4PVLp_~-ekj#4GeCSV~!PN!jRG~<31;V!l$ zFU$3u*rDPAd3ZWa;>UERx7mJ?J>U^Oa&{VP+@$tm!omX5#O9 zHJra+jGXy{Vimw85p7#3K=AxN_L(ay0e)iXO1AUYF)r)VRj1bsnL%7IZCCjSRjxHHLKaL zm!+NaiBhfhdV^MG%cLTRhG%pPvE@UMwd@72n%B&IPuBK4NhO$6+*F#kJN)Mzu89LD z`+mYCl`KgH!Hvhua4n$Ix2Ft~VawW(G|alkhRCEeWsAM@df&gu_xb%e+(#ayXze-! zZ0M_$Uckp|+tIZ2zrPt74cIrAo9U<6Ui_!+Nj zX<~1~EG{8(cU3G9LsjVc7WL0sGevtJfs;JUruk7NVXdtz&CX0|Na*fa$9b#787gob zOPQx!HPFjk)fHJOV~DpvJx-~ZIRwNM}slnn6YW->FO%YS%%Te6U=Q- z1W{djNDD2%zZS%7-JXmt;7DA})-wPEERj=Do9p+FHO1}Cr!!~;Oj4xbyTRSca-GBi z2uWfEJ-nlrF~17=j)s>P#JP7Hf{uEmnz<+hGA%?k=uc6o=TfCaps`dWDbnMLzAItl zWhP|&Dz^c07+XN&FMgE0?B3Aer_PZh8jkT41gHW}iJ!%pd%sBKerv`#wnIgOa}Fm_ ziAhMMDdNOg+O~}wRFZcG%Gdlk?_xm~;+u+@js-}Xr720FB+%yI68tOge^A+YEspEN z;X*;0O41o2oLDe51Y~Y$72_m`>l~IMa`J{YVnOq6G&l7G4Gp!w3Qbh%70j@IKfGBb z5~L|9uoSJBHqNezkBU_*z2wRzI+Z)zVMLcITA-q=xFq`a9kF1N_llU zM#69Yo`chglBK4N){pCW)L_F^^MC-`O)gG{`_s1)sFHwM?Cf)+9N~ z$ho_Mb|4@2`S{UF~eS4W5Q9tT%d)Dh9*l=I0TRWKA$l@?Ou zE>K7=80BCrcvFgzy}YIs&}GJ-DB4F8cZ!HkMwH2{Jcu21r$zI3KT^?S{Hu%0ioPRO zvE$O>iAz*!qMDBsqN|{zq{HbVycAI)k#vZK09c*R2^WS1MDC6(2g9aR6Y^03NCJ?&{2eWNW&M8yPR#_YlgC&%Gu;u*mgaA^YJ5WFA<>Ip6Z zt+b)F@;qM7oafKJDR`aDt122^9=# z2vL-iYbw}1mXWbB4THi7K%X8VNgv)8Dg=S`2YipYIIX8E7caV*G;aaAuuW5_tp@0` zbB5~fS@GAKJR;|QdF9M!lCf+Pm9ZG3sKcYFdR}y^!Doo4#NilSSP6;XaK-}8@#dN! zy4u5s+e>V1G%Y(iP6SNCtHQadKnZQ&kXQj=OB%82AYGS$*nR&1c&u47p2bGzscMUP zRhonFJHm{6nX#@;<|w&)8^w8h5Ur@8=6Nvr*90tIsDisk+N>tXz|NMPqb)Nfg(gA{?(k%m1mEhW zb&swz-W2kGhURFnJT54c5>Zz??He(grd7O>v0;@R+WCsAmfY{hu3-BwfY~xqa8lhQ ze{;gkm#{f7KEE?#J6E)}wk~q2YG z0y5-J2;eM!O6SLG(-EeQo~7k^ejWnd7}T*KM|&KgZ*WLrN6P(yN=_LnmR?v$VoR{8 zzokB8mo0;bH z8P>*`R@K%QaB9gaR;DxNf)mwOJNb@+=UZCZTzi4T4Yh-lB`8%ArmF@g#YO;YpYa7_ zC5cu6`3@lF!T9CP;KgG|Vg!Mzi|9Qx9j{@nh}>^|Kzlw{c(f%Xm!;fL=UsGf#4<>j zmSF7JKNcrUq6QI;)nGWJc+MYHJtbu$DkSI&2;2)v)LlnO!PNemadDJahAfe~)Nx1Z zJ`qSEcu6?4CQ^_I0D?#iYj-rwve4-kCoJ>jb}e3T`skvndZ{WTjzw#g&eymm=ER+} zwa6XM5=}EP4D}>1B!k7Z*X}6Ln;Ws^V5OA_WKror9GfxWT{DIbVq7l^pbb+rly!+z zk{A%@r>N@1_W^CFsNB4FxV^|cEW}`tph5bm?S;>L>-b zX`Sf6jIHOLFK5V3Eq~pXJHS9$0_KE28x9;mio$8CF)0I91fNUfl!sxim$)DuiLe@z z^5JTczLH6ETh~55d}7rp60q$nyCBk`-h|kOdU4>;w~KPs9xiD0Vi+f|p3E z2_q^@8}S9ukd_v|eh2+Lzp9(Y>&f4*W$i$R%G>x##?8(vVb{Vd&&FF8=^Mn=3$QsuD_W zoX$j&)=MjfjemGFCe}KyZIAVd0Xx|wD zriNHR5(y%WSyo9D1C%MT17XZAX+Nk&m5$+6hpZxREg}T%9ft zI_h*+M3k{eVv4G&7M2CPQcnXM!HKz1YXS|$?|pcr?JP9OB&i~%;oqZ- zvwPG>(Vd>#X~yAYB~wH008W=T8i;S5T{?jEV?nUe z!ovOg9tf5G;RTt+If~Oiy-uPR?HR&e6>|UqlUEs#NwfOLa8%*+6u31W7ga2;G;<_W zlyIR`h(!uNT1!}jIS4n>`|y0l02M&N>IH0R@{#1`ai5HvG0QD`z&|g*;P#4ZnP+N> z=x2#mG+147Mo2+-Ww$1SzOMvY5eqSCdOhf~T zEN*VaB7O81Ew_C;?|wO)UvTP|i)J2)YJks^eCje3&7YL!0;3T?PnqQapG=>px4ppN zyg2^YJO|zvV&8n|{{WNmqkTI_Dx!qm#-5?9PIb}T{vE)-WBGBqg_2MCJ@O4tOGZvV z*-or0*Vj1TU0%@%Qz~ms4Ugd>*VHY=w*FqcWXb!rH5Lx_t$ttHBEm@DRal)3xMf`V z9#FG9(bP*!gdZytC9YJ-+rP`T_U@dz0} z0cEfwT>!8*K7@R&u+$lnCFXOcY%6LwubcINF*4PVT-S$(hS)v-IxI*AY9&$6#Z-^bAW~-&UI$Jf!kfS z?mk;yz)eDwPUyQ-CC*vttX?F{G;>DEyz1q?2GTI5c*>B$uGeFG_W9Ub>$aEEh!~58 zHZ=6DVp-?HNO0tP!+kPDu>ocLBVpd#=svoQ{{SvB5Y8l;lb&y<^8_&Ua$U08G-G4` z0BKNue!tUO9wrjqAxAN-bRRwI3+H`Jr?GF|0aQO#-_tV-{D~V6>+<==wUju>Far5g z^IXT93@7_>>6O=^VZ=^62_N(1mnx2o}`q zrnlct-!IFKB1Mzl2628Fe9xfITUas6p!TrR-r9WlBm7hU0FT_pMu@bTt)+;yw6?z7 zaEl&)h=pXi4@y&{7nI#m0A_bk0L*o}8+ST(x8=bBB&e4l9yL6Le$YC|4?qBG3d6Py z9FWQ!MtYD^Ix2#72%*@ETm0kSP8mrGu3yEBNVvn>ntPA;<4ljOuX7YHO+< z6dCGLnot7eYci%|oZ9+>?X~;y#K|R76?&aZ^>9o6BZ(N(E>H?y>QWpEPy+1kIK92% z;PC$d!nm=zfmKxmf`m9~s)9g-#-~`7e-%YZa6mEG1+XIEo*iu50GLCiBoHnfn~dL% zx(W(;{{U+HV!SF>D-Sep2LOYeeOmtU*Hl!LxLqnz(bLCCO%zQ6Bq|c>s1-{U0G1=n z*|iKvJ%<-8JcLS=gl;4hhWb;_A@5g@6vb@}UeKR5bm@yGY2HvPQ3UH(83B_PtTqZc zY3QjPM^!2#PLnHVWvFdBWp}yJfIHs*03snI#Y>ej)XodkXVh2nKnBlict^^qi1URl z1~CgoOfm_nXN)S#@oMA%7#;GGpy}q*ac0{q44Knv9G<_OKG{WMw7WuX6AEz{Nr~Q3 zN!=F=Sc-;r90Xka-Qn!KrAv!P%WFqjh0Y$ns{*c=Q2Y|q#;Gg8R!^Kvk+Up$bu3g~ z+&#u&Q6V7MW(6JFD=?rB`^8@aw`OBeBu@QY$p&-OLVA3WPO!F=X zxYZS9P9hP~G_FMeVN}yNxQdzIEmc`L5;X(273tHE0@9R*7CWG6T#Swrik4^0OEd>9&bL*|uA=7Zci-OJ z1&J%jP*iGb!M`=Byk53KRWU(K?#%vNw56?TMS08hENR0`&LX{3E=HpYDq3UO#r<~9+et-ffZ)89EC z{x9ZuON=EGRF}544fyiEBhf>WXdi`s-2OZztk)OKZB4YjwIkot*M*^Vs9_u5-Jx>X z(*FQBzOnVM5$B9oo%|K>uO8+cUR-)#4zR9Y=Fp94>1Km){W(BbI#v*=RSF=ucO4|h)qf-_*tXv9oS1A)PZH)8FZ4p)lI{?Fkta}3GrBssa>t=g}f=Uc^POC4Q)DTbv* zXpW^NGDBR@w^3ui?&erC2aj@5?zgeG7%>wbp};w@Zcbk@<*mD!vM^HRiBb)QKoI#- z*SD2fpv`6=yxCg?Z~VkLXA`QHd=D0)r;<*UG!!eAiRfv9=9-riL6)Md-U@I)K%&Er zr%VerH3L3bTpoXD2Md75$eS?>P!i2vgTfy+bMdlv{1e4ILkoip!m)^`F^n3LTG~12 zDW#G>+H_UaS>&gdLb;WsZC=D?I-8TJI80EKKwvGEwPBvTw4`xAVwFjoGFBmKn4sk) zMVz>%g1j>53&o6U2gmXJD-oxukn+63oh8F5QY6HwR+@+5UXHYu&L@qm)RioHQ#PkD zHxg}0(x*;9MNJZ!jM_qSJQqNKy9u=*@R0>)>qz@iv! zG}Y3K_=m<;(tKi5&a!1OPe=vka6>oo6Tb(`T-kCGq~rmmDf?pNa~elRQsH!z^pHUnDk!Fcm0?(jU_#!&4?uMt zhihxWB$A?2LQB$y*QRuhDpJ&dkQ@y|(0~imOxl^!1Y*?|qG%;F=3#L8ccFktQ)oO*B^s0>utY;wVj zQ7q!|$6ZV+DVTMC!%l6PgrIAw7dHd);w&trO(jd!szZOrk*6+}9L*|}(hMzAVBsOUly+EkHU)kWc9Z4iruMJGCSd_kYXw)kd z($wut_hTitBwu0%oEIYwP^WEak>u~A()K)a4S+j-{rd zfncabG07ZlaUDUc&{VF`>H2AVk~m+Fm%2#+ame#(HM*927#nQ~Sa9hYaMM=u*E&Uc z(u}x{c#=bX)SWGDdjLO?;coa!M+^DIU-b)EJA#aFQ}Xo8Mp%q#QIteU=*4^9=Hm9f z_aKcAbD-mC@dEX3n%7U`&m=E-LB-8%&JAy+Ui!VDr3WeuTMLr1jU_qdr&vcf8H1lR_gJtP*!fY-+t11tu{t?vrtE^xFNe zZudXeg5}KL1CVWPoqrC;gfzkssU>tQ92Thn(7zX>J2OL1Cy6O>Xy%X&VxOyR3X5D7 z?ks)B>&DiCs)9%DkZo&tuWizCQjERhM`tcBIPh=cEm-jieDN5BW?1GOWmf5cHMip5 zQ?8cu?`^4JGM#`R5ba(TueaJLAE#OYe2Epz0?y(80D+aDqg6)HR)%p7SV@Lvwp;Ie zcOdU;Tx-}{Ql=9qniBWVseV-FOGh$F(z>PVW1&1tx6G)OB#ko5B$oS$K_=GH{{V=c zbUJ^j?h5}_MH z^dqt1W;+6vq#fduTM|D0j{GPfgy7z~=xLt^dS+S8?E)sLix7C^bRb__8w2U4*0$&M z--z&YP6xoh8`zV)TKU(2zDz4p`-zAEF=os-8sh!G8P7h&tPOQX>>J9bRajD>mWP(_qpEdKy zj1;+&@c~DZdrC~5#HebjHTj}K+Z;B zd6PzZ6L!;$?+b|TnwM+fEKb!nFB! z(W1*E5#J;VnhL!=`T0^6Im!qtnrH(cevCB|yMXheb+>LM!pqmx zy-r!ZDmaUXGh-oB(4ywASG7yq?De>X9(kZN^+{PB?tNp4Q;|xr$Y*Q=Msh^nP?Ok<@S#rVZkl79OWfKl6X-!ogw6DNtUV-2Uv??`zw> zw$u7-eYhOl{QUcv$TLqNj^g@h{r>=C`S3ZE%Rwd44~5H-}Y89aF^(z;pq^ zn+5}0Fa%s}<#6r+W~4*zpY6V!pX@ zKb}2cbSzenz~Ap32g|(0PaYfhl#o$mhwiB$b10}P4p0du#@>fQ4-1zpF}ck#8rh2+tsG^E5*A~kUqh+%{JVR>8{XZiZ7Lu4iJ;m) zyE&{h*Ft-cHTn)ZQ_87ok4kch!!RHK;u(227?TOCkR{4hq-!ZBZ#9V?o%QYOZXsC{ zUn1PJ8kpQ%-yKllOFES?F%2i)NIQ(F-?g;AZ(avT4yrp+t*^a3<7t|=uwZCgOq-^Z z;Th9cO9ZUTG?8g>b+9Z);sD$Nepeh!grt(`Ne!46`0+TKGfUCz-k-Nv#l&pc$@3eW z+FxDlZV&U~DWGXbKPo-jmYD`*%Oxy%ShE5*B=aDedK(id0*^q*;%xt-06r{X3~8_2A{&2|+GuZK>3L z-z-)c6V0#PCq$!v-I!bh>wEY58*$0HdHs*a$|QzNI=ECi~Eq17{hB{53G(=iDZtRl>+rC+A{e|0y}A;+zW8JOvYC0+LSb* z7a4liGiWOeQWlS?Koe2_02g{QXZyqUJInY%#9EuV&0bJQ4#A3!57C$V~r3qOCW0qVvaUx*}Vr(&278r2M}%&Np^J- z0OyvRAYx3Ks;uOKY+d}TLrk7IYZm)pcwvCntrEwH;+-s7rwYVsXnG`2#RZm3Lm_O{ z5CuPUP+g_47d%WQ&{r)yzjz9MJu09KMJO(61#_g5Cs?tHEE^4W*t!|?*W>P(qk=lMHV;^Nt9`Fj@V(|X}o!^o<#uP`Ij~1e8ZeMt34HZ8u)XM^i1!V7(#aSBk zqjDoRRnQ>0l1r9hcVhRkFMd3u1hb;9b0hEb&OT50smPqk;qNu#T(^#4)6-Q^8ad~zBj>@}cVMdxI#kd%cZf8#Q1#svxYh32 z$5@GL3LpTH$Z^azzO(_OO+`ahPi9f1;onPr+BTmn*j!%SxZW2HGYf=W7%O|G@dP~% zuKZ|YB_OyJB!@M#44X0PauB;WE5 zk?2F15lX=`wqc%02>|WIPIqp$KW6rZCSpoE^r=*!@r9C0(>Kwx)-;Kjd1XMbE?t8? zN8h7bk=$M$_#Z*xFC$TMe3QO2T@n{nPjbzGCIaC6vqg-L9T!uwd3Yq+IGtw z+6}Wm7?cj=Du(U?m0M^>xq;`5JpCV&mgAMV-K`sOOd{PF;|#Jz8|BW5*H8!=5n>3` z+e7l=zbk7_Do7!PEkoCrTIlfxBL;;bEke}FjKbXR$IwSEbJrr`7!ENXK5|3An3Xy` zMlprJq*B+y30j(npxDcj@zhflAj)bXp;?#0KuA?S5>U2kx8d&YU^gH zdeHu7jV{I{OI-lmaY@7N;Vwoi4~|)w=3oUxs+;1jNo>skp=W@k<0PagPMDT+atObr zDNs0wa^#vGY{T&>C~*o0lL&-KRQQX_o;seR5tGcEpNhgx#GRI_J+t>5HN*1 zpzFoxzhXQyBg? z7r0Yp-Eo+w!w1up5l(BkgNibAN zdy51r+y4L%9mjBQsNlRj#Zi*gtp#glYGsvAI5Q86O2YsgWZgOOH3K~1CP1)OWu{V) zptVar>oR#2*b|_m|pK=cXO!7>zi89B9$^~RKSb1IRNwmw0rtdwP_60 z+2=EK*#QzU%;Ycx6h$KIYY;WR&fGmpyWkib46Hb1U%O<{Uz{dNnn@>DYI3OZ>7;5H zNC9McURc$VIAeb~kjMs8lx#>h%5@jiX>e4$87fIOp$^8iccG?k*@y!Xh%BJy#2%Rj zYqcL&rfd`P+n5wfFoo{<%Vkuh8F-{-~7q9r>Hy`hY6O&N2xCM%8vDJWX92t zpN3ck$Qcut3s}^8+7aZ!@vdEw>S^Tb(kroLgp$KjY`|Pz+l!q^zT8M>F)XTN&-VGs zkoH#5!DCVoLQ0#&2p>~c@1COEAf6q~w5G9UnWc(!Md_IV5{(B`s`n~x0rVQ1>BhU_ z;P2E6)#=CVIW$3w*y)@d1=4@S+N^9T%AQw?!;t(;G!=_pBB;mkni)ga;ptW=C$!{7 zVWp`1*|UQ<~fvGP8#9%&d`x4qYH^lvc!0scc?D!o85~=PZ`-fH0g<4>^m}n z-T{fF!4>w7&+yO153tlcxy|^GKUMvpITM=ktYREb4TlS%z|Pv8 z!eG``P{wI;0RWPt$lom~@x&M@ePFzW)Fs256OtQRsMWp@-NA7(9Lq;nIK-aZ3yfS9$YxcO}kc+{c_^(Tdw^ zRwo6D?~<<<>A_JIG#jFXO;L|MFeKt9U)zMec)TBX# z)bUj+PbzifnhEBQJS@v~BwL1w#B7bG1lbb=^r!$pV`{r`ahnn=#(S$=k5kDA>)eQ8lwbRk)8j$IM2U_)xWn?i)CBp)a zq9iv~U&Mzn^Qk7!>PH>zH3dovcW?{zzY%>rnjpfB$%HusI62kZk*j=o=D!y3`C-Jd z8o3B6-y0-^M(S2N+A%FT4BBdv4Ml+_`U8Fv<3Rlj(fm$80Oiz++3ObFg*+!3mZ5Mt zRjaK};mmQ?8yt%|fg{?HU~(Bj0a~S_0Goahx4+MiISE&Mt>Q?buqS}96!)==Tgk(VC`&`AQoF45IgoU>oo&rk zRCJi0EqX_(RB2?p*(n}Lsg=XW5c9J{&2pnaMYq2RaY+eT00Cbs{PO8{*l#fa?_6eh zxv99;xpRfyPl?+W6{{ym&_=ZLz?FrE&*{~lETg9dBz0J0%`-=unktpiRH@Aq0DbN)X7uhjvtqy)V88;} zRoj60H7y=Vx};+z$ppHHu_EU^Db(;c%F06ZX% zK*FI3Ot4KrNF}tnetZu|4kAzhcJl#e({}zZ*86Yo#0t6QV$~>161s8gTIznxUzn0bol>^Kb@ zn28c)6$Mo~YU`O$?uy$f9m<1ae&b#sO4txZfqs;6#=e5gs@+w9pHD7HY6Raaa*c6T<+f zdzC>_i+$}Jtcq{zl|{V<+HbWNQ9NUrQr!T6^c(>E@r~2Qrk+HQkfTAq!$5m>w!YkR z1g2B_kw$(x{rW-{XIw&9p>P97C?e-jGXMzG6SuFvoKBKiHLwlB2Uh;^3=L?_{Ea%( zD3uDmBULp(KBqgqCr;*c`^@5HR?u9#&9OZh^pUJ%3K$xIfXk8}1n&gsf zE^mErz5R8#*NIZMVdzCVe0UOMwk%!hJdU5kzm#f5%TmbXgY#_Z))(#+XgQr>qyrzqK80D#!c7IA5rK}zYEA4#)9SyRw1R_ z+gD=QKT7@_YQ#Y`4-1o)H>hRwv1TW8+*;>L_w?gYCLX9HGmuF-+vU8XTxY5(WQda> z<%~ZtVjOhEZj2Oa4TZ(^A3i4mfS`7)E>Io$Ev{63UsxGf7Cc%Oj05-4vCsj2oy~`D z=lr7vYW3XaA5Yy202gP7jaX{!z@~^|KR-m17qlNkn zg}AIulv6Q4m+?N7>HO;wcFs)EHQMSY+;S{hwR`Ih*!?hRDh!f=9P&WO_p#3$SFj^p z@A`Xi*8;8GSXszAP!pXU?AlaEpH1%o1c%DJs>IceEkYuy#pvS2DdmmZR%qhB+Vpap zTl+d`!Fa#!Ntii?Z^i5w-jOy2aF>Xd_ufl^&Y|m`Uk?^@1sr&8KV40Jq?9;}uv&jF z+|#xnGK5iV>(g)nBT(B|>*D)m0$wR(fClj=Ct}$O`qDmz?8?OKB(Uz`EY}okYW+>P z#UBt6`9N&RCPLS<5TvNg!&7}N{+urp0)PR$uf^+LQ1^FsVv_bJU3vSwG-35YDCR=> zBI~+^xy+{22_*wJ=;q(>XFHtOf` z1{($kMz*&HUqK}xC_7h$G9R4u^Ri*UYYRW1uQ)4(;xb7+K_fcLBo4*3wrIl}4Qv4- zz-(>W+zz)2A7Jf(o$nFkbohDjq)B?O@gia_WI4{jd5&N^ zXfLLmMJ}cIIP`*3G13VRTKfqaLENnb>3sHa4=`Q>V8OEHEGV+;z3J=NnAKm4xx@(v0~wRgKx& zOJx=WXe>pAt_8Iqf%#wCjwRKezAWpcMYIvUEraVq)ikz#&d+$$CSn4{zG&n|Z8sq7 zeMXo0UgFoZs8I`7{$hux@8=a|gr-``&iD5yR9&1|%d-v-&+2zjcfmU%MEK5OC8jwF{)xyfmuXSmHsRqCYICJ=aNHV`6{W?L2E%bQPKcBlr4{0wf*|-f z^RX*ObGcBpiYJk;BYflLA3pOQ zBh475KZv4`F&ex_5|~H|1*xs9l6hl-5<;QRAy5EaEw=%wVRJQeZfD?Yu*yDy*gGXV zCuQNVGM1K>Yw;o+%h~RX! z6%=#FO;7hQ^q|cEh(#1@mLmxY3{M&W7CALd2G`>PK%-djcOQuJGmFJdQJXbu-6iT& zMR*d`%UXyZ1eFlfJsohBR>*&7O)9KqS4dE{-xNiIfNz^i@!3*V00@21&K~^8Bha>` z;y|Fk5VEQ{MVHI`yM)Lp@eXC?C~ycUVxy>ro<)kQ6~$_6Bxxw=uI8M86FhUlJqz@+Q}pFl30kiZXrzQAw!qrfgBOGog8%?8kYm99SeiwG zTGF5a0qKzay87|x&k}yv{x5T1B;y>pi%BLuPaZvia}03e5EyD+x0e+t@cLr_0onz0 zS9KN)!#3kY^0poxS9>*0yh$ag*OeXLK^?7gm*52MCW57?I_3PHPm0asj<3%4b^9-=yxF0G~;u1lQNce=pS|asO zVfbgpyYy;tHM6uaCzm#WfH+yS(j{ULQS_1-sNkR6XHJ4T#Gxu?U>=Rk+>IMvxknNB zgGe!cbf}7+fv}2PMxs1LUarPbNmo-OYYjwTE>jvVRV6`UJx>;l5$_~R06hiAl?I%n zNIlXW-<@*vu=ri-n(AbRvZ5MiY3ZYyREk$lo68!pRd$ZvRv-o|+V(s*LM4C#g-0z| z(et6<2h{6>9MdP`}h3&@4+b&{eb=tO9^%Iq zRwEGQP2+5lxeM+T+f)9hOJ9zQKeLMc<7gjOHnyKF5+D|3W)@QJN3bN?8%7Q z+87@F1a73g3Eda+cJ-y>viTdv&Pc;BYM+g$t~li#By&qjAu=yWpv{rCAnRsZUyIJq z?G6(QgI9R1<%V!-#j<;Sn3g$tHr4EYI~R`LmXKwVN?1@0;bD_y{IuHN7qA>-m+;JM z4mBSMiej?iCMHglu~Icl^JGCgAX~)^ANc1c!CJAYn#L?|RpQU)-1+mPRz3!45 z?SC=t+vVGCA$P8|g8|-U5mLm_s?nbr5SyN7-Z8rq=3o>X3xT(#?SEhIUNifa7NHLL zY0HNQ+aQXQQD44MvJy*(L|t|+^2L1^&HM_M{AyQi#>aj!<{Jm*=ayMLMsXPu!5gQm zpM$J0(P42-MLWFRB_OnMzKo#U)uho>=3PT%bWP;}<(JV!QB!X|L-(D+g6Q<$}lmPqL3Tfs)EFizs z_ekFQsMO=c@xL1}g4mxdV|YxY&qmIx5U3I)W>4^@0oIYo(gGWB*30e0n4Oo7l*(F2 zma2{;C(6Eh7!^3|JjF3*xo!hKXN3+_fGE=}sIeTgyM+yVG(|u}`^(vjl?tR=*zmqs zT5$+MOOR+BkSZwIF#Xx0b<2@7cvQrPBcaa1nq`z+e6!BDcQZjwF*vGW#PE?-NZ3$V zqI#c)iz%Q&!ptu{2b&IN<_pGt zK?R)$)Rxw|Me)nE6&REht5t`LHKeDG3K}+yE3&WxI(mv=%CJY%)28|{{6O5EEqF{e z9%u);1%(di(z#}0jgK<0D>EcdB||4Zy=~Gula@JhmzQvQHNvIxN{>+M9X&lLrl^pI zo}8d=oXoFqN&*|C=#Oft&hTb zn7jTSJb#s9teCWuQAH#{m<3>nGJ@b-1{&C2<8Can(Jgpo0C^jW6W6YJ~VmS*Pi|(=#1uQHS23)W4Tf zc=FELZHykn*?7ES<^H5#$(u4jZRPh#RKgQVI0P`IZuO5%?AFeov@ud}vYJ}40m7|v z5(wrA7iO+edU%`QhcI|QSBGKq%T0|?Vhc1_L*X>jB+itDo@ADjDaq4KOM#at3_#zC zPxSlx#o3<^(&MutD zb%fB>xZG50A3A=}eA|U#ej3owa%Kw#YJeLM#A1#$$D+q5s~T#YN-ReCo{nZ28kMzG z1wxIu`Lk|dKh%3^wUu41CS~*4S4q*fE6oa?Bq;COhy?YR(Epw zXn4oY99I~`G3-uER}hjZDyoT^ev)*7b{1@_Ypv~aG_fS?c(+Q!cQR8VO=X0!AOOPL zo~Hi*Xmj2@-_8BnFjfs3JNZ;fQ3bUt*dJlrh{|^eO8`I5iMm#flgkzmNhM| zUx?FNMzzq05g0oD1|-?!{wo8eh3##>UJS$H#vFwaZ12L2S7(h$o~%5_NCm50*}a@( z#eonYtT-eINgHOCXC;W#p5z_2J+>D1;i4qW+KWkF&`3~n^!@E@_=hy1Si)uyM)`KF ziMC;_Z%RRoF-|E;W9gGu*62o~dsG`Nhu9siKo;+A4ps>mIjBUSH;!TJUOD=_1vww1 zB-AmXyK*@SirUnMTJHn-&I(1uX=y$>g=uD~t*Q+ieKyOVAk4!yPyiPmz#c6)Yz8rM zQ#hs2r0)VlxFFZeRn6`pY_8Sd5sMfl&PbWO60U9quJv{r>dza&Zda=2er%Tqiiplp z5oU!X2M|;fg(jAxs;d)?-XsKt+f%8S4VW?W#D$&GPDQljDE5r)j@Xg2FamI$MTY}; zP*+_@HfZmDZ}4x!%qtJT;lu!yTWF zZN2^n=7?A>C>l8O44KrfXml$fodA?6!I}ncxB*C zXC`wEUo+y^!c7vbQNkh%(-Flh7x+e#agr(WQr8UrN zYHJovuiDX#!OFs>NL{>xFoU4 zYzf;=4xA{U;Z^#zp{Q?4ba)45%TQvVP_ilo2t4y{P`^Zlr3^^S$Vt~XZtOR=^V5M5 zevsix+*NB^^7u2?N|gwTF4~Q359^`7`g)VcD*BH&g-Rrn=gi0Ei7v86#1Jl2XroKm z0jKwExYSCL;6ys&WmR*$atnKFt-hV~JZXl5$|OM`(2+x*&$J7whA8Sxtg2#?Fy$J` z!a_e3LwjDt`kVIS7-&3%5Q0gmCYqm~aQlM^r;81eBQv!;uqYvHvPfnfD2UkJ_OZ~L zn{Ie74J&;>Wz4nNn%qOvDhs39DoR%|X;|+PO&CzIretMYqdyhAJ)xw+7Z#zUk~ncW zD%TjMAULMPUBMGNSeVvAb{00Z_rDWuO_En3*i>DpD(nchpl194hCPz)6vSfFB4pYE z01jzpYWnK@VN-JcJ5@-q{m+`FgD9|Q-2VWG-&-lYhhevVJl=L5W*T`x9u%p# zWKA=-;<5Cu&c%#g4G9iPQ$fmU{qqNV65v|O z4X>}S5~gAmH2{{YP+qN&YCd(zq8+HBotZfVl0g3e?p2>ZwPUL5%Su$qNeg^W z#}yLAB+#%DD`*HSmo2Oy@u2ma*?+>#C4{Bf;1NQfU zR^bT*U-eamX?p`uZT6h%dP40W&zpec@;w(qgr44iVFLCJ%c6Zg&M`{Y? z^UeoQ)uX0ajihh9T@A^#^|h~Uw;TK0fhErXl$(cVuRU*jhHD6Ahzs7OiEwGpQF8og z47gQ9lTLt(t+YGbT!MA%LZ6?d_9jZV<_hX5m8}bL37OrKn`m5)t{+}BFmAqzD!3#L zGcrdjpaRWcE(QK$YuI~>a7@qvRT#L-mSO|KE^M`jv$KvgBHmRLE+V6^gDOhda))7M zZ{f9+4MEo9UH1oFPYdRgRwnxJKN~KQbivL{z>uOr0C25yrN`Jp`RX7FFQNR-nv?ZD zpG)x)excXe8cbm*084I`&hPJh>*&EtE2MTYD`q+tHYd~N^x{SRCxj!L{!d$dp{|Z4 z6w|R#q{PQ6odK}0A1>aP(_SSX?G8iU6|9pwq@NaKwbRBD8qv;3+11Ft-;2;`rMJ_8 zCjS7JPq)vF770uQu+$@^$I7?b7N0Sxdr50tTT({${#*jDsQk(uBr-=YgQcTfk+hMs z7aB1qUF?6;>!%W?!;pyA^&Sk~Q4!)+VoATtZLR(OmOAm#vUz>a&N0KCOVPy z$}}(#u$2kCWU~)ZlmY#p^gKr^%A&u&4^FUS4aZ>m=Xh^uP(@26hId+aAZhrN5H#4> zjlb81DX`@g>GMZ?v{k`o*3I*UsSMaVssnqOWO>y^_U&tHaba&x*YClyYAL{bh)Iu8 zmI=Fp^?P6A=~j!!ki0%lW37u7#A=A6pmc(#4uslziIo;wWqAjdDpE)cq}`6!zYnlm zITI9_xu}I4!5;-c%)EKGYCA_W1BNms4-(uGD4<;CIo{cpj-{ZZP>|BmQa4TkWP%9t zEFcmb*=$J+4V!k+uVclT7L96SP#q)a%1M${BFd#~nu}O(*qyV$Ge963=UlY;Xic_4jviqJxVsl)o4*3b zkjQnxmky(>r{)@pIceUPDSDV4<10@drBEv6V9Z)V*Sdxv9XPehNKWxc33HGFty^@D zFqkJ|6E_M?0MA6aDI3j1K zcViHnO(a!dtZn$vpMDVHkb^aS(NUJUH)gJS`|NiN*Qo$gWshp z`p4%tL^rv)8LR;|Bz|JwnB$Q_taOQlBvY%__l<4%kN4Y&lk|_7!AY11tNK4!QRYB; zZ|4AX?pDJ~f4;w;)i%&rNmT=rLO^3@$dg7K>I`0rl7-Wuvn?1iYVlQo;ob_6Gxe| zOH|Ev5w+~X;9qQxO!iTu^w#hD4CrF2=5AwZ+**$s#NACy@L`eTi3rRqYoPpf$}B;h zzltkmZH?{05G>WZwF$FbxcvOWz8B1v#VDC-Ofw3~Zj{cU;;f9vKy-304Xtse z++=czcP&xrz+R=H-h&UW#A`8VF&cb3E*~vy^!SKaS{QK(v4(sbHC${eJ|4KS=*5(% zxw4DvJb}Kk-U>L=i#M3Iv0mEyLluRPvxgh%t!_ZI@9$9%`I`ua8hkEHD$&zn)WBkO zhyMUg4M9x!gknSg0IRO4#6IR2(2}Zht%nEVFynFM09+b?)^qD%f0(W89leU1iBfS+ z0+iX*IRcgz8d0GVP#RK9krLTU689~Z!^{b}%i84F>@R*3gefX=YBj$Nemq_hvEB*P z0E++`zMLWN0p`Ei{IQ7g($P~p;&l|YM-eKF)n@|9HdHDc%^t=a+!*5Dc-6NY3PnkapeGkDgs%%O;E=iA08t@CW z9%D~9*-6sNYv@hCE-kX}*_4fbxjh=(0LWg$Y$LFdF;*5h{1io8hV z3Ys4fY4GZ1gc`{y;i0ao`>HuqR_PT>3k9s!!89XKG(1YYChEZq0X6}h%|#EDc)}Iq z06_~ov^Kpi_xs(;!`(k2R`Q)bG`z&rbr?P=h|J)k$s)YQr=+9JOzC}$gdZ@}{=5J&NSqAm zFT4SC)`U>foNvdA`&h-wS_Ii;_mXOASc8-D^K(~tu@cIbTG?CR&-i%RP9ra_w*-EEpzqta>&D8rYpvMu{xYt4L~2UprAliT zCZylvi~Ga(EiCwQ)I$P>T8Tg_Z!0NWx{Z#8*0q4J*l=u#;08InU8_o8EAizCSGOie zT7h;CLP^%a-;ISS57b<>hSHjBQhGXbT`PP=^8p#CABJqUw@=kT%k6$PnPq8RUEQ^* z$hoy^dp8Fueua90qGDibOER{TKN-+d3_79;7W6?}FTMP$2N zhAi#Hi1l}Oh4>}SmovpNomI}|>&f})c%-rF7>#L_<0J3Br)?Pb*xLKv{718=E?e(a ziK%kM%N*&gO>Im1Zq1rih5^shleSJTo_P`F17oRmN#IfD3kOAofnaw8jZMw2FRyFc zheC4Z8wwA8ew?cB9nY7)EVy?i_*SPrjcQg1)8dHIJW`>NejLS6$)OboWhUR><;OhX z8unrVCZN^bh4l|!u)vklRRyGp!HOd|CigZArSHA87W}=kAvhUmI<<6r@D}`tJw-JE zb;BwMju(bkcb3jtt*H;hRFXC7$GXOJ_R#SQSpy7@TE3Fddm|XYFP&H+i*buUia4UPL(XX)DKMCaKb7xs@4-@1sk0d*(yZpW ze9_-1BM(eLU>Fb^D!x%Lx88LY!9h9=2XWiIt@>L08d3pB%pRqiL6yu{f8+MGk6+>} zUR@H)@MBYUD|?fsnjLimu;A=DYMOuz4tD?wTjvOOgSS)cVIP|-rv1H&Wt4)lNlXAF zUIM%JzFmEGw_(D0vkKI(lFUfC8L_u6yo*H-ZDN+Wib!?}P#`^=f%5RP6>8AKRZL?o zQC6WNm#~EH!_e#V@5eIL-H_)!c)!Qi@Q!5l%0VG6bzmvR-3{+}VWFKQgAaR>5}4DF zbs3^2-V{6eXvrLASZZ&p!9NFl5)4Bh|8a7-lq(PNJg;Daz=!8EC$+v`CCD^ z5#yv43bk!sr;bmRwS^tGz@ZpJG!yiwxpyUj=xV?{-tk?o1vYj%+D@lSUEeO-f;-y6 z_u(p}6uoTC%ctzzW5q@<#8PO)j%-M-q|(L)#}!30#tJ-S9oUn6xBj>F{Wye%Ee4`) z@bKF94d;6MK{|GFP0qWKzNGfw>NY$?W$1kW06(-$nbOGtxMnzOUP2mhcPZ9G@KCViAYJgv%mP{J%uctZeJc#q20+m=$lXZ>Kr(}EhL^vT-?h76 zjlh9^Jx{*8xMdGmRZUbGBT1wzB@oC8k{33Q|M+3m* zeB}g$eJnm|aEysGb#TX3mnFJJ0&V{QyI)S^@5Jer!%mgp z@sW1Y)JIuM4MJFDARAmZfO=|2_j~ZQS3J+WA10wMR|frlRwb8KaUqiG4Yk)xi-InF zIMjDHKm2~j&)~{4TCpVP7RE6dzJLSUPjmA29k|rVXLs4CeCXa|k!a=#nHHTRPO91U z1JECrar$toY7`4O7iyp7v_9}auy{3w%_BP%(907j+-tSQme+gl#4A})Y^`2@9sbZl zRV*`{!&nPHI)2xrGOW2&BAc-TT~4;tgX(?$W87t7d&1$t9O?*cx@o4cLS{=9CCyof z%7PEZgLG8^^F(7L*a7nc(0lrQG~jOUbRGn->++nd1VaS~G1RQl$S+zI6BL*DABdFw^Dz>la1@$>GATdFEeNU&(*S`d)1|@^=VV}xp zXaQw@AOnGFaW%K|#>1(3FO@K3MTg^%qx^D2*`ZA-i?A`uS}(*-QFCGdI`A6rtvtAW z`oQGOs|pL{ZXi$(FF1dphL)DTIi_e(va-{tHeA5mSaz|~xf*VG1%inH1dvUdyxWki zW2w^_0l@lb4Nb3?&rp2tgj7|DF+4pUSsqN?Bqrp>fM{=gxAggrHQW_e=GqTF71s5* z0R4}O0cG0s7pwmO85g!u=Z5do{{RP3nwq6*9qQv|CI)%b2+}quR|JAbX4ie}n<80B ze1$xZ$F^|pVS4IGrKD!Ain9Y2+we`C{x#l|D z06}k`v}vj7OtQf&dNPp8by65vfn7laZVuzOZVMFv>l~6+8JvOUEY0QR9BuZH@H+?Q zsyb&_4LXx;g2pw{`TY6k-;823?mWd z%KmQUT5MiUMaC+sXgN<8#xVG(s_W>mt3t3eRKQa)g+O@INeWvy&6|euCYgx_wE))b zOZ~KNO^5{m?-y%czInKA0`bvbVvhm&OU5?mEE}B;DNRFDg}9@u!y|ZSTF4z*8J0qN zYg10{Bvb&O*M<8-6eNO6GjMu6d05{q1W$&O-z?vNt-0L#);nwMS>PrKfPI`O@j*3z zHgi{m7$?GEJjINlY*!Pco?{wCh}41pAmQB zR^C#MZ;%210ElZYS&(Q?wvX|%yT`$*CTXGg(nD0rWmh0&&n9m>*beQex$o=8t?fOa zynOj`l{9{hNk;nf8^F69nwBxSlLEs~oU`O8&3~1Na4d2h>G<^y2IP(J?d@%UE(M=H zY=V@d#)NBvr{DoTG&n2`z8I)8XL)s&HI7Sz!`LV``d!o?qRoPE{n8o3M!q zBws==ZMb)W?KUqAjntq301Oxdt(!euQtw!vRPd9X?eMn-7xj zVu-6*i&Hag7nzdg%u;GRO7eQ!gLN$jF>1=1*ky(ng4ZopUH+ zrAq)!g_=$hY@~xQ5a3mNTr9lB;{`U=md_QdDe|k3cBH?!oT>%#hw7 zH$ii{T#=wRU_H4=mVE9W)un*)>6>%UF=0H-&HUpr7H@j8Ca5UX)Do5Mq!lSB@=FVlL6KBlfZ2)m;&h^BRAa*V<_PKT z@vh*Sr<00t%jJY1W1Pp~jI|MB)oDFz)Xgi&OGy+^K+0js6fYEPTuxfjyu?|_XYauh z@QO()Kjqhra`t?<$h1vTcR?Y56fEu5ug?7$EOX`uMk7RqdXz?*$C|R?#U0k;oBg_;vQe(Js zVZx#ykV?0TaOHo5Fx=`5yPN1W;cWiWO_sJ62PZun`LW88OWIQ;VR0fJ~>A}-Py zZm^ASpucVn??Qu$zHa{jy_@A?;;cGkw)x$sF1#K7;i0ZxSjFk-MQv6YTl+pkl`0;c zbuH)2^2EoY#2++rS&-dW0yW8asS{4%P;|H;mJT>lq`prJ(X?ePW?D^BqM90#2?U(@ z`MyvhdS=QV77C+Kn}zNL#eui2fhP7l@IsPkLy&skOzeL#+JwS4fN*Lve8pV9N{T?~ zDJ6K>$kS3*)&!mIHb2j~98W1hKn4#=YJGI4?E{0{I^{m`cN!|^MjtbQ)%=w~h|!6h z!%1Ax7LAA9mdz%FlfCclq1#RkP86&H)Mo>T(w5Sdv>Afis+BW#dW#FXiOq!^hi)Bn zg{gTDn=lThFHK8Sutr)~u~@?zDJMwFK^(<=tVMv<_Us1|uVmvfW{Hx=p6@gHA4UJKFm*O=KCScgVh`tK* zJHgAG^NnNf(m~A0;i;Zw!nv}a4~7w69RTQJVjP_i?r*}>ZTUMgX-?Y16v_p+fZegF zb`>LmEo~#2ot(x`J^sv`rGrp6l+AlT8(oDs*WM6eIIk;nKQ;31D}&;kzcoH18qdr4 z?i*Q#W3&}8#A2yR>I_9;tEMryc;kDxAZX4tKB?GzRvQ*3Ov21bLdjILu-*t#ogwpK zohn$;-eLVi!(wEnT5%5PLQsUYa zQA;2FBp#Ie#fQw?#mrpL)YEe>Fk;x`xHTD|qpQYhC&VhCqIb;HuvEz@n=F#qzyX9v zLZPr6Cc|KGcw$Z-TU4FIfG$C>Z!jT-BN;Y(1rkeCl{qAuza47|5zSRkI<+-))YAzS zo#2{SO_?shK6Pe5Ny~lLTY9l6MBoI;F4iOhX>Cv8i4}n68IsWMMsD>ZM;5g!>qs%m zuq|FOO;0?IV#F$GtE*Jb@jJp-R(2{*Q@J-Fo)ztNgv$U}BnGn!GX@ScG_H_- z%a^=VROFXFAP@NpyYkMo;v$XvLQb)BCo|IYvQyGgQc*)Bo<@-=qgr&8(?G828kSwu zn|8MgF$*8*<>}!xHF^x#(>CFjPWC*r{-~BT-UaxAMPKag$~kKb!RV?msw#-m($wM; zBTPRC5f?Tm_<&)1Y&RO}De@%CoiOgRg5(=MOdF%{ZDY~#c&U8d4WGSfOn@1| zcsx3B_*D|lL%AWr0j>r8ePUlWO-)IN;nh?x(32Xiq{QkAkm_lti5eveFXm|620w|n zH}5{sR`5c=2`d1d))gW0X6MDP8riZ8*>jMyNmEvUUCShZGtu+q6n{D^$%x|VBOrLI zYhA!w1%_CIQ;;>a)UCdMUMagokuX%*^uB##(zX)OEJ~J!CBQBoxwjjB@vD*W+D5~1 zI-E?H>1M5?h37}g&__wscBx3unrf3V3M0N(ip`Yp43K4=>$!Gpz4Cj+`)YEAB3cL@ zCUC*4!{BRix^N)amnh3lXL%~o9V40*AkRH0G1IAAXwpE6%%}K?xV`OV-tTZkX2!Q` zHhjjM+C29cy(4PMm{J+R$-Z!U+7~dqCZFT*xN&zzqF7BvAdJdson)WYfHnwnb4 z9uXWw{ngz0Vf=ANPP%m)Oskmt4>RiNo$hbOE_g}mP8va;bm2mf^`*G!0r`&!iw~uy zo>z{hTBwV>Fi0m5N3s>0M!YgE&-){s($c? z%9Rz;;&m+2%@sdRSy5Ia4J^vCvUDbLEIN8DI{AfB`X`gS zM>hhjZq)gEJU_a|vNZ9;$VoBC&O;F((X~2gK{p59+$J|X%r$aqZ}7%{dln@G&^qQ? zT6&1yTQ^cwk>N2UYomb{z=NRTWY{$*4I>S2UUm0~COFhat^2tSWy~ycxy&vY&odLET>%3iYxc^Y3<<=YWiqN8EL9OEmjH#2Eyy0WzNcI3zZ!{?E!yVPZ1|fu z$Az__r7{WKNH#ZMZDMsg=sW#1;z^Ujf=~er0DBE8GdJM*v`8f@be++k6L$~zCFuey zBn@1#MXW6%LIF3jh62N0{q1dUeK;am-9~nL-GI-Pc|zq(T4pt?Y@O~i9-N`8Adbml z_hTUWFPHjoxRO@&`i^#UXmci@K4=f*AT>`zG}-!64>i{|+gw|-4*P#D3Pq1Uu!Z=$ zo?mL^pF{2i(yFsNs(=x6?_dDZ_Ur(+^U&~3(_i@W$^lYF>PrWuTDCtp-W@q?gEchk z<|!3cZuiOvvAyqZ-L|)G1YO53xrkR`&+K9iC1c57Qe;5U%w0)f4qLI%6MF;n{=7&4 zAUFntD4t?S64IbY`9EU458#oFwwkKCG z76e&~y{(`-jWzjjY?~(Lp}d1@AXsn(llK%bZsmZhNN1=-;Z+ajDmJ{^+?@!cW($hO|zhJa=Qb4j|FWoQltWN4O98zY0mL?{+&w% z&N=R>x)GTBXU;5tvd$x4O@?#5H9b=*J#`f^g2iIbCK&@4iswmApeV5e%iDx&JL)Mn z1hKpDr@so;2krPW@sd18=|KVMQeS$)++0UoVs&|_nL#e-w2Ill4qQ_%Vn^_jz~%zS zUKrt1-Lnk5?D=sle`xcm%I^ZjLjpku&z1RcXhuy@NdOY6#CwoGUf17)Rar}*s+H_1 zYghJ&FrY4Uw3A{SjL13bZ)o9ubF6x=68VrY9XKj6c);v_76VQVy?*U=_8y#g_h^9q zN~kV<{b@(fjC~2&N0o(^@ARaa+1RnqO7haQ%0vXO5@p1(N7pWMT=i?X9hS2hdn?EJRAe9lTXJ ze%d$Syb@Z1(h##f-Qyry;Yl~JH`rd<_WbybU;r2k=s3YL7FjPs)q3aT!kr0deZnM? zI;M?4GffMjHr-+t&2Gm{^w)r9=l=kg<{QaaBEZt#UZYm1g7ohub!h<*l!Z~PuTTX) zo@@Jq#B(i|(XT!>FII4yhkhl z0J`U=&#|;gh*H%r!U3fREBxc-u>!FU$|F#+F>=SvD3@F8EqyF)sqMiiXD;7S2AMed zSgc}DwS^@jqT$(zC$Hiyj0YK(k{M{Q`Xh){*TWQuA(tgQO&Tn9O zJB|s8PSe1kEUs!oO zK60QVT=5!yrFEq>`1PsQ2-tfe6OR1?1C*A@oD$T}DhN;IK2xgZ>~jvoj4T$SWvs7s zMpTM|DTK34Dv(TlX#w(^Weit+IGqi>)7GDFNIP$1q-^XO<;yOlf*y|SX{q+fvGn)I`B%qfz#N>hR;#NPn$JIc&%k#Cm=ba zJJ(N0pNC>mR>v$ZLdGLWLAf@Ns3Zff`ro;5btz^h7t6+c*6=EeT^-4-sp6hskTPO3SbSI5qTtv;>LZy`Vb6n7h0^*b! z(Wv2}8m@X-YXw?V$ym)bR8rHLP-BXjn2LF&StL;`p)ABLfg{QW+%ZIzN>29ZDNyjJ zi;YJsTZ>(eM(|2qw}1}L&z~4nhLVb#9l$HA^Hk7K<2Y*KOkvAAVUkreb;dMO%L@v3 zilG#eV^9}0?08+ZCCo+_X4 zh?|rvD3=@MJZ7b#sGk+Uq^?J$k~pDmtaHH&#*(~(`OVu>c&JF)*i1k&3ct97Zm3<9 z1xt1PnhsE!LRC-=X_zGFPcOVze{0_j`OgpK9|U>(5yaaQwz*NY%js=Zj zP{)XKG!oT?>7m5x350(pl7>C z#JdvAb6(_|lbG0^=JwZq+%(=uG)Sg&{6|Wb${-NH(XH+25bTx!u{Qqiw|+Cc;p_WH zJBLy0_>EF^ZDlcK8(oMb8`u%3zpjJa@5Cn%0*L6xEo*OB?8~A_(xiR(@z2{AmC8nd z0hA~99Su1A$dD`-QCSPIep& zZGpIW(IzQV{uRv69Zftn5JxOXQduJ>D?sMpNg9mP)p#Aa7u;ACPTK0 z(@T_bX6`irSex40Z>Q6VWgya}jTw;rMnVO*J)YM#fah z1*y=o)Dh=m#epClb-xX;xKvF_&_fkHS&g`QYt|~b{7lR=&GJs}^Rt@Pmo3jIg%^bt zRM^xK#fU{EC&dW?w?;$=*|H;d18**e_2FuJIo)GB;8ZI4jNgt!i&oDYowrQPChHer zTWfsZnB^A?loZZtm7_AvQj*g3WlpM;WhhGp(1ZAh)M>EOi%PKD@;kBunLDBCX!d&! z9XP@XIH`zVdsb0;ldT%#jW5cPOUvOkSM6F^Vyvb(d(^X4v~46+N+W#8k;XwCFm@x? zwe7`KJ)bi1UGYc>Dkh`&r8sGkiwFAgOppdiV@lH1(^~Me!+7L85?oenUJ56rtD+FB z1Q8;(DGJ&gPs$XM;cYPWHzM~OIG=$AQJX94lq%NV4qt~5X>&->+taZU(}$Tb1WW)R z66_5dHWjzFZ8$bNQHjyknyOjw>}r;!DXJ^dB$5_1?k_9~P5LusvN0F2I_sx9Gil-% zyoC+k?v!vG2WmGDf*0d<{M8JE;J}QcWEL_vlqVd(7pNdO};V}tRUNw!^$_3|* zZ72(}<~ou6c=Romh)yCyDVz$syEaGChQ9tqw(ybMPcrg-UMWRahGMli=JD@cn7~Wf z7?~1r00r*ux%z>8iE0Qm%@k8?5PUv$n1owd3dgyV&eRt*0jwvgZwzf$svRVbVLZH^!Wiy6%vq zxvhFft)Un-Dq@tB&QS!U%>rQ*$gC0=wVQ--1wS=owUWs$Cy3P4O)Y&^BUKEt%IPHa zu3oNHg4t0ec4Dd*Co#Y;R;b^57EQ0r-C5duJ{m>C!V8Lh@5Sxb0}5BnZDeqNEd8rSk! z<7GA@GXia}_P=X@J#X8NNm-auEC~dcv($Rn{?VaQM-V*q`EOYN0JNfxQvsN)sLa49 z@`470dW|>t*U%R)2R3F@`E7qKK3+A>7+HB7)7pP&74O9bc6 zOK%GKdXJjoG-=FClo87u6VDx0X_+EsaSG;)$9%FdIR(aHzaFRA>`oIAvGB6768C$_ zNC82df=XTJZcceSN6fot3AJSQj~R`^O)Z8q)DmhuDN5P1`av1#Ti!ge;3p<>7B7d? z@}3n;n5Huf7_~g`NYd3*Pc&df1*Nc8V%ds~H5zem!**{CgOw(B6$H$gx~IL%Gu44% zuA?}hZ9d=aEv%{dO`|*|7J7U~!<)NBC+Z^u~Oor{+-Q)Zy03ME3I(B*Chy6PeCXFExOnZ1XSq^U@B5*WGN zp*%y1n5(gr#H(<)=#-{Lb;&(L7{G?W27N&UuHf4CBVH0>P!@uOJBQc;rk0Ks~5y$J<{%ayeH5 zPGhX6jwq#?T6%=hfi)CTFPR#iV|nSNs2*OVers6UC>&8cVX!7hn5;@Dm8*Fz zW+s+qsNv-v`Ta5NguSOM;V~1z#Gr1@siOP0rb2{Kyy#<-Fu27wJ%TK3x$zuMl_{E1 zFALmehBL7i8rXS`{kWn^n6#)MfJk6T6}hjO%ho+_Xas+!&fS<4;qLF@RYMLP2QwWY z(TSUy>C{U!=8Cc1iyNqpH3ItT6pt^U+T0dO)MkTcp)~+*gF*bgBg|!nT#)rGP#Mnf z%Q|}qrYaturdaK*_6_9S0RSX+ftBqd2!`5-Z<;y72Hv2~Cc zQksI6r}=*W04){#(t#}CT(vt$z&Q*Giwl+9OF{`%x|y*0`vN=I@*0l)&;RfhqXFuTmk^Gf-5 z5YlHFfC+Zk4`4rDC7iI;0;Zf>SNEsd3fX`MwSl&v{{Rp+jP(k_tOF`#O#wQwKK{S1 zzPtjHEk(1;(x!(`ezdF~h&|d0&5fw}=x#nz9U@AaXcfspA}DEOYXKEF2H{13Vo!a4 z)Y($y%Bz;YJ2Pev9(>_IU+NZ62^mn6uayp7Z3{KL=TIk+AU;Tn7_%t5N3qRoZb9#3 zVYwFK8Q6iopd5f{@UivJn1=XGjNnXBsSm@K4?RpORboQA8iLKMOiEbqbG@tufxd%F z0z2>;mAqf4HnE3NFsPEIcOy}AMq}p2k3)Nmynw2@$&@{_D(G|_``DB3#A;hG7Xh^M z)!*I@Q!@)VZcZEHM4A~U>ojT!Mjl+(z4KeS(4Ur{%ehMgkj(AJR{58#2aQTZqFaR+ zdbbzoBFVEZ7~Mq+lAc5)XvXVtbG`LGvB( z7SO~N-Ie^-JO#$%*+-v0u>CGXMqR&7jj^ujl&k4&id9 zCI0|}OT8-&qa%KmhyiV>@AcZ+{{T&O;$*9Joq+=0nQ+oF2mRTKT#QQz1@$)<1Kf7} z!4~3Rt?3%oU80(@XloYvX+u2Yv`EOp8IAO_NEuIJM!RrM47!D1g+6evTD&6K zmM^Gbo!-Y+*I4T>2xUVaD-(nc-?HZJD5&?I6H&(WM?H2s}{VpBL zt}&W(Q&_RBH5DvMB8sM0Otk{FTxl91xgys-{53e?`edeoKsG?$_T~ZC(zbSBUM*8) zsFW#Sq>RA<^QLY&HnGci%~RA>%_=rToHUCB1EUDL8+DAD5}Kl9wa_8&#dj4j%~5wX zv%i~~x1(0i7wwxQNRkN^VC94L&-djIT!n}7mMoOGek)H?Q-}$gT8Oh4`t;xnLrT$t z3`%unmc)?O(2fe(((v;MLeO`*-n9cSl*$!t+(tVNl}(U9K?Hzu$-KqIV*AIr50$@R zS1mRf6j8Mqsfs!%&`MsO2^||&zI6aAoy&$jz~Rm#XW@~BS=?9B4u+5EeAv(pBB8Rj z&d{B-P?^hNyw^I8h4m%u;y!6}Won#F35}DcB0{pNtblbaxx)ENWwp<7zPtJQk`Xy+ zO%e%VT3GyckE**Ycd#GPJqb}gUsah++5qsrS$v&?eo{?!X2btMCwP{BUQ+J-|zQ? zMU_>EEn=kK^|ycgaHctn*O755I*e*qCz_&^V-QtS)u3idN~*j){{U!U&{f6=d1OgDm0D6d==)U`qlB zAl~_}sBOX4{A6vVSQdI^pDX+69Y@Igwac8vi*g*&$5jPCIP$f07>S{(kW^FiS0~nv ztw?4a7$>X&L{Q440H7$)TZB(qNexYS9vwC2&@B8Msj|$a6svi~1D_R0;aU^O(iHid zm3f|%AICW=96_FhP5VNcrxTMTHFG5=$5F&86&5Nw*)5o(Sh4dFeh)&X%?-S!dp$1J z4fu*S&_>PJ6Fcd$2_(DOpQG_Sp?UcS8pGl*iarxZc|o3~>eKFGU<`EB^vBNfQST|% z_p=knD#0x!&i1#;mwd}H$(x*YC$*S7TO$vlcS3{=!5<&y787IS*u*}hL5f#DA}tz9aVI|9)^W{d? zzDAMW+^ag`I4xQSE*xi-I6X4U@b$TyVN*ZG;po|q&4_zif(&vF0n6O!$+5?ZM3|(N z5p=OA>YDWt*HeJ4UJ)&lb^wBw8Lzg3hEkFekN~L8p7-;tFPn-|%>Vpp~*0xcg7P9u!Yg}B|e66Or9m*wZ zWVkt(Z#auav6Qri-57}{x!%|8b^Po!u;NiOg?N1aBLKKSN58yMCfEW6HKX6mafZqs zV4#AmLp)6#II#G-a#CJ}u2?Hxj(MD?wgj zhLL4fa~vj#9)Y2%5J6y}uVJ|xopl%b?rq0nX6l>oO6n(twt0cQxZ8h5V3~%bg%HG$# zzypSuN#SWOA3$A)+L@QMcP3IDtmX1z^)$6x)&td6nPlooag=2n+$hrBwAX9?ymK(R z%>d;Nu<~UAMivwRIlJ-7+ST*UoT8afu_ex8Slx>q*ps;QPFTl(+@eOQ9AF8MXcWBZPnwpa21dm}jTIC^bbPcnJc;lk9ui$NHaM z+)pJ3e6q9r>HAo8j!<=zn}Y1eH}erH@3pqmbH8g3rhwanVZtQuwRH9J5A7EhD^g1q z9wwC|0!U6nn#Fy_);8~@_U*y)=mueru^$<=q&mW+%0YJ}jSf^cp<+02icYpyn-QsU z3I6~P=I2|9+o~>XPN7b{g|y$^Cf)?jcJq7P?r{%{eB)gJrez28O0XpfYt*j3?X~Lw>M-Tbntd=`i0r%=c+*@s} zduz81Focm;H97P7(k|VUn=k?hAU~B&y+Lw)qjoPMO;bxpAw4MN2~agQ_<&aZ`}foN z@i+M?$;*zeMQhQ4^@iI`a?H;ko??yh?akut<(T28!*J+S01CFK2DT?dVRCJ2eE$F^ zm{o;PGcbEnlmPM5(>S(lWJ^{QEEizn)@0dIcs>co8RHrKG< zfUyV!xB=Rx&T_3EPI(xTO80s@ifeu%t$(y@p-7=VWF!`rSg&GEQGC8_#rE8Od<=~G zeg6P4KKimv2pJ}$%jMyh3hBtsj~Eh95i1;R(}?e>VotWVw)&1SU{Zqr06rS}#tDni zic;TjK4k@|$wrbZ5!Q*8!I<2x-R-CI*IqjSFre2fw+eL;hI58t!wAL)t9P zSe7>v!Y6SWnATe5J#vjSEE1XsTPwShvij|A7Eidh4m^DLiwYdK0V>v}ixH}j)GUha zIzcPSzY%z)2k;@dBxuTYAB3JUfkKN9q-CpmQYTUk9Fdsg$3S^EtXtS@j3K6)RDgL9 z-#xV|q~EZ)+-t4-jufx`#brTE{s@Igqne9c`H(5_M42%N@-p7nC#xUvWz<|9{l=SZ z#?kc(pFIUVqosW*{BZmA=dK2^MAWjyw6W#Nf9=p;*58=lgAw%n^!ay)R_qz?_C0u8D?F{>TUKEf?%A}8$bYz6qQLih||69Z*Oh8`f;To(3fpNrGJ)xaTyFK zBA7I?gbMDf2`{DXsJOpjqJt>mN+nf)KW9_EMF&Il6$XB|bk#jS#3ko-Ov(lL$VmMr};S)f4RGQa)O3!QK1I5JYxxm(KuM>Ox*Q9puAWa#el~IpG$YiG{ymH0^ex#qB^z2kmm;}ZYtq92Rt7g`> z2m)avGjmrzpOl9YOGu6?CL=0dz<_P8`uF$Ky|2e8xjCDjXP3`t*6tnbFZ1!qpqw8K zK6t|r`9?u~EN^QMQZ4lSxNozP48q_WTmw(!dP6)IV&aty+}rc(tP82--i>3_(@U4C z$yF&HQ1ZkssGti1ZEZff?&rD)SRet(hNmhK(}qy&I|uk-_KOu-h(t2T1H@5keO1^3 zqU4Wm_x*TamF~-O1#EK`zJ8W#JH|$G$iI1cNACaz-M#&`_WgM0c$&G?G4_ohAd`5z|53N?7p1PW%l4Ylr(p83~3Nx!A42%IbAcMIY@i_TkKbgi%OsX0? zoV6Uf^S+TycsJnQ9pMFUG0jDaz9iV)TvAcIu(!m}P#|((XVu>`K1R$*e4vthcZi?; zz92S_Kr(9Tai#r{_qQ>blEDsNATrRT{z_D5xadyKf z>LiY`z7~mUDygP{QoEq7nmTuK2^(LE>Tx8^E=d5LX;VwHy^ZwXGUf#>fDLL;4wm-h z^o~XG59~GJzlgpYaxaH9xV26KIU(kB$1vPJ3VMuIwz5+`C0SEWERe}pD>#NQEP$#m zia0X^+9gU^O2rbQ1CqgwDZpOB0sjD>UvbkeXDC_ZZ?jJ@_yf+k0Pym^4XE&fdJICF znno;S9OQ9As{lxM{0Cwsz%r9^Ow*_pJ33CF) zRFdzT13)yr^1lPTRMmwkoqzl}@U4zM64r#CD!`1pqKC18+I7psUi2`3&)4=FBDfzaySc(!R@H zGWb7+_-Eo4BgxnXH;H2SWECZ7F>GFxQdHH#&ZrB)70Z>9;wMccTQ;}h#uK$t@e)Gu zG86*>2ysgbvj%o(n9l^aMgvcSHolcb=06Rwi~|*?!z!kRt27H+OjTxqrV=8`#wcBL z%JF8i0ei69ek7mT2{@T1UJ^>wwjeRNwZR#VL&`M!^b{h$hCcD$zhdlD3B#ht@a%sY ziiaA+5*lnOhPj#qo|c`97^9iUQ1VE?WIGZCwByTm@|8HL{-RXrRz!kG(w_#sN=TMn zoyoWsf4%B+Xzxn3DB)d1JwGwmFyFHc``C@ZzZF?vN^(GYzYbqBW`dT}00Nper_1eF zQf#4rPH9PHhxhfL8g z5JE$?gjBHvSg@%)>sW$fW+s(xzLy;`@{T|72gOPbRjR1)r^UPmj|j#oYhIrQ#<5H? zo;Pl*o6y$O)KlbWR#TP=wPK)v3y=xmjkSeT*+O;+Yc34})ur#LYn;0CEow+UL_yf zRLO*gNgd*@DXDtb%I#9jscHbIGqK5^ugk&&(>F9Jp~F?<<#+_| zxiUpb5nIbuAXsV?bkWGQ<}+vE&wQmSwfc$bbM<=b5H3WLew3S30qWqIzP_+lV)Uw% zsEZsB#<4{VE7M4k6evYeqJW~>0yNZ{o+g)x#E?&TSdu^_mU^*z=aA;`Fu_Ys@_^Qj zlfR>%%nzE9dYW|$a~N3?Rc%77mmu24#>Z1@kTu_pCum~Qw(kz>vppTiwH#XG_6~n{ zEya%@J$_!|5;1zygHY5{R88>cki4-}b!C)C1Z3w&RU5DuP)(HD)&olp109H%QWTJ1 zI$Kt1>&HD}57HIXhu)}i{6qP3u2E9|0Q2kRx_WwvE34{&hSc;fkffC|$ewPZU9SvG z2Tfi<=-cgPLOaCN0ZQekM|b7IHU65SeM2~|k80YDn2K*1@jIBg+M>G-!SG3{BgKh@ zA%dD($<9JnBnB_JhEk+;8J$qEHqh%VoHyvaOLk{M|*=p$0BK-NbmFwofC zf;KkWh7$Gxe-nZ#MT^+djy)e*!aPT7&x>#ikO*MoD)O#Po0>(F7uie0B%)Mh$0V)D zpw@oSDuuwYVz$boFefgy*c~-vFJa+@7OK|S8g2b%O%8;By(l?Y#=1(1S4U--^)sT~noL0J$X!WbmRFh6&^^Q^T%aq~7F$d;cD!PGX zsg5IyVY5}pU*i!$>(egBrk9MOg1N=)PY2;8Eh|z$qDcYmL!sy+(YrN@nwcxZts;b_ zDrP&o%nRP2e0Zw)9*Ya3=MGh?#i~U3Q&-c;JP^kjXHf6b_>(CBM--q3y|r7LTKpG? zM9`lLj$R&pFGdej$>!GY&INMiIa-2biH~Bi4jrZ@km{zEPv}tKnKvAy}0x)&g}Io3==##Qb*JRuEyrR zuH6JsHm)=D__a>MlfEV>fRaPhkQx*8^X!_T;^D?sHk}-#K8mbvu}?mPMx>^aRKG@I4ec0LI>@5R$INaG`|#Nq z%p%mungMe{MKj$kP7SPAX7*cZVFHyhL15&P-hP*S;>CikF&avG_)cnhk~UVo?v9F7 zlWlZ2y{vWNq@slZyEV<2d5rY4@d7ItnNv|QLS&*1$a;Bv(k<@-@ajxs#qSQeda%PC z1~1K+Y;_Ycu!@~rNFyU)(n}c@2U5pjek&cQM9DiTb0xV^n=tPKTRCDp+tK02XM$$! zR3c}E9n`SdE5vfHS?5=*a}U~5iiJ7Lo?8r(NvSGvZfE#rmgr2>7@b4UPb4y4K(x%w z95VtEL`7kt90Dgyo3P|}sokg41y6tq>RVF!L%p7fQg-z2?6?Gw37{cmfEhi2yACl! z^0f;l0fNG@D?Eb~s*E&ci*@SW2Q6(0Rs@1PpxlncgRrGbT;+!pQEFPZA++S;L)lnteKi~}+q;r6f~`<_^69Nd zNU`>DMOZfl-t6`aN#V-XYCAxW5Tc$AXTV~S1vkTC^s%FD8$4=>EFfw7wo-#)E!x_z z+7maXVSpqgp&8JY&m(>{%)@PsEdvLRC;tGi&n{X1tB=NvK+Y?kb%El?ac4HQL^Sh@ z>v1(Y(~WJl(&OrV_(!zmyu=W06H9#c1h|Wiz*Mw^l3k1O<-mb+hnu_TJk4CLUMnF%!aM zB?7ysDj_E@2|4^7Z;5gYUKjXr%6OwRhZwG@o?LpWOZ6hHuB8>YeK$zxiAe+>3giox zRwUf<4#?Ucsa*Lx#_9q2fI~g~`PM$F{{Z3x{{V)~pV%MiFJrq;B3YHScBK3~$-utw z?{GqK85Z6qhL+NmFDYT^i(y!s)xy%fYON|FT_lbft|F@E3TgRU62&lFDO#QD=22Bx zpqb*s@)FUtN8yELdoEx_)SKyU0K`i`oLI0tvku|N>i+<=UA8ilkC!hIJ;G8Fz?T8C zV@+AL6cC8~zllxDb7Q>-~F`fGuEL495fKK%IxjJaI&7GNZU;6o^5AGMiYwmz7Pk1A8zeZO2Pl zNU1$sftR1d1V~SK+LG?ha&Z2C3>geonnJpmodctiWi2N86q9gC(&KN>h($m;!BadT zxB<`8-O1JLXi?TkkjN<-pQT2|3aNovBtqVC7`Fa~*9QD#4kvEWosR?L<(o=Is`^-k z3{r(-m6pYZtOc#|zoGBM2IrZAWKB_3sOI)-ic*I9aD@uUWoMA0^uq$ck$Z!&J+EW0 z^WTj_G|ZU6fXVzh{I3WPQ&uRbo#l@)iE^V`@kqCr-%Hr_EI;k`9CF>-g3UpzFwVKt zEh+9C@S^3^9_&aK%mc3tXj%l}ICQa@D=H(iIY^OZH*|OV&Z;Tg8{JQJzY|Qvg-ak( zjcW0=eo(waCRr+TUN6gEKb2>wLcq3ch};cN5zk60-k&Yx@4?~~OCYn*Jqy#91FS>B z)nu!RCLU(6VSnPdy~qCJf9!F{W~H)%XDkdL8G}=xXVRjae3(HHqMI7#8dN08Id-l} zadYN9INDG~!~#hNvGn609`F+^mby(vYgenk-n58SlvBwFszoL`<|~(*N6~Kv=@OsAK3_?+TFgFb#<%&Vt!W|vcFYJCvCvy#$G!G`N|UjrC=#FT ziUQXT^vUgKwOT$`?UwiYyue8@UGhgd_ zuDyU91C0v`Nh&{3tCMT;xZ%~K(Ek9Z4pOR+PVgqBsyyi7&A4XS_HmHGL(O%}(&hc5 zOG@aYNu+EtCJdInnhltbF}C|~Ue1xzAWv zSnC?PqgO{!l3dQQM!sE6zodDy~z*q?Vk<^=L(ji@gte# zV8MTB`k?Ma#US%Xs%S^CH0Y zaNwM;f?|06Y|=|8FtMe=si&1==p6Dq!D;EiCPQVv0Zmk(Pk6rQ0(?qlp?ux`5?Tzw zE^^jWhnA_+9he;M*#XyxwIl5B*)#qNKWhH~wA9r6$&2CmcZ7V7XNp;|zHNc0#f(W| zJvAj9VRK5Wbtn`J;NOLlv6u-Y{{Ve6j$k!Bg-&0@TlRj$+W5r+w0@jXx7+70f%sZX2_GZokW-Afi&T6G3w*5GU z@_NyPe3O&@DgHO%-XL=(BjHagczfV?gL3jOGV(n)fV`=J;qYL1cPw)Q)M52i*p@8~ zI$}7lI=e_@HKL*EqL4VG$xmQ;!eM1%Cij?`o#LgJDM>ExR|1S(s_gcxFP*g}l=pZ^ zLR7FDe1IrJ8n9qRIGpwQ4~^9;RALOQvc`_VCw3i4kTJ_6mC(C_9Fe8i+S_nq_d=8q z2tXtx66^&8ElQT9618tAxhEoARucX&7jjuuY?*THl-kxKupRrIPZEm`LJgNzb~MkI zzuDlmEo4F0rq?C)@2&6Zef~plLCQ<1Py7IF9fS~F+Q(meeCq!Ig3M&Bl1E~_IvR$L zQVEkW(@*bEJMk3o7*IR)`R~v~=vhv!!{uPLC3MBF?TE?zNNRP)$8Oo~ZGcE6z(()x+ThanavO_8&3ehVc83RZ!f^0Vtlj^FVA z0Fd94@JgvFrZsr3D^j)fKq$2+R0bLqlz}HrP=Lxv4s6c1;%Rm2N89D&#QQ^4J}98UTIAZVCwR6d2H6npZw`_{dW4 zx<#JHlM>f9<NW+{?Eiyw3GxN5e zxhFaev@uD;N^%3{NCf9sYf{{!>Rvzgh35YNvA@~Fmpm+w!;VVkj$iQ)m3gZU=OK<@ z^z-ur)bq^-dJ2z@$kQs*H2rv~r#T^zDO6TbZ$ZcQ4-PQ+EMg|8EXhLVB`P61#JQlM z0khQV0XMN9)Lc}#xXqa}3n5a%mn{o2&{R^vAcby|duM%2e3J0H5HaAA^4zTNCodq5 zi0bBiB4L}P9Ne>045^s*T~8Gat+UmJS`_3Z3@JxrSJe79r(0f1X5!{zNc^R5_`W`7O5dBmY;q|DBkMl(dz zm2$AXx`JR8*jTX|lf?TY7cN%QT%uojO1-K;84qI(FhB_;l!966A14e?4C`3oud-$z zO^tZ3;jR~pN-$;TOgkCmiE*G(OhXFh3bvNMpBtKpu$Ee8g$xT)K~^lMzZSf9AyN`b zY6AQ;t3F&0zD~`=#1$p##6XOqhHoKW9C`c24<9Ji&C9sA zF;q(i8An9au+q`htY&;#Nz^r>g&VKYOXiBAz&I*S{5Dj{X(m}7B$|u22G+NYmvZ$m zigi{k3S0cetWNg7d+Fazj~MdQ0kU`rQpskqVI9tZjOo%0pFr)5jASPOMnTO#?BOpX{&!9fMFG?mNYQiOzl@oft zt{#--$08z|I$Wf8vnBwNEJzKXmsZZNKv=gg(04(M)4}t#7e#LumzV(+QWZB zHs8Ou3}wthl9g7rAl3D1F&1Npb}8eyRF5sa@I z$7dD=t@9V$`kwlOrrc)m@gyIm?^+5w-mQ_VL~|u?kX(Y!?nhP}wGoiiBSICNTq>x_ zTr-4*JDtfS3y-I3K!mAN9?o*gpgVCHd4U7ZUvQ1$T>IYcKX$%m9A)KBWWi`^EAb2_ zu9g})$Y|!8RWKq{PfRLdiA#%5(aQ@ibEzLX{a}OaB0dj4L(klM|$)tV>9AZWQ ztb;CQBKndqxjXm$cfS!U>OB5@%F)zMS}`I#=%l)~W-Fj$>tSJI=r3*upT3k(GDymR zyN4{m(uMMItV9-s%n2ch{{Ss2)XY6CPJ$VEe~~Nsh74-E4Wgd4Y4GDdBTq#j#oR<5;Yk&^CW*Y{%$nc~G&;jPcy<9U80En@BVn!NbaPu)iC1t#2$Pc@pHp^PE zjQKN};KBK+`9?{SO6sZ#oJO7^t!R2G!4gM4Sd5m)LH;fc!eZ5fRNNt|()+1>2VCt} zsDU|wFVa%hFHN%QQj#e1tls4i%^0KXLiybU?ps= zo3drh!OcSPQxcXmD&9~c^@jlO)Q+BqmY=0KgED&^f+j(ih0uIFw>Hr#V~Dm&kxF?jE%Bq;vlO zKX^aM9Jk1of3o?CY(pHwC8w*a!?7t+cc+SF3p_Y7rwS2o_KRn1$yiB? zD&Cw090J!m>H)P3TsB_U+7ody(6G{6@S}r&0&F*FkL# zw;Xw8No~efl4kEfC(0uMMe}4XcS@s;6XA2?4ru zjU|i`rkZ#6HsB0mW=fb%-lZjF3$Gp9&iB%s`KYiWjGnNf)Nl z0!8j@NYInM);;a|JC})E&iNQ;spP;40CcO}ouIQdAxbC#&BcSZocICl9be(@ABNEK zZ!zOhPZ^4#BBerM1tVu$IGV!2Gg)JMU5|aP+h^?c%)-o4-BTLGlU>tyBvUsu6p9ws z#w=sNS=~t{`nYbok3(pQ%Dy1;1`}V)T)EAhky(y%)eT(#0JG>)o~9|P1++a*LbA{4xrk z5BZ@agWi3PH#AXABI!p_I-MGdWoNSm7) zk_}QdttdgW5yX6_#VF=zB!*EUgbHn)tN^h9YinD#>uYi4GjQkoj4Jxl+VJV_{{U5B zF`M9c(isOZ#+p}MbKPZNXw-o#$N>goN1DSzb=+Tw4{(_YLXV6F zJo(or&&~*xoI7+ath7s%Oj(3?xJ&H1>89IT`Y4!yr4oxh z#cR(@@769-LWF_7;IQUd-;TBN(l$y6%ou79_5C#cIE2en)Q8RA=jJ;Kpk)#om5fj` zEs$L116@wL+Sk**yk~ZEKYzqdl2}(SPnY8lR2XdUg&LWJF|Xmw9a))5pWdpH$aVw~ zam1oQ?$oQ%>rp^zJ!s!}9aB*nS<8)nt?VsEh|{Wjuxp;O3Hmr-&<)Vn$2M?Cq!5|=F#6p-K{!vCKtiF}Axjx$BsbHdLgNC@Z+NF*PQ{IjAgStTL^30gR3F7| z+xu`*C9(rtftwvG%b3;__sX4#+(x7ZsSbJd_G1Imb$ojbc%;#=%Yfd=ZARUP&wX^` zlz`+jkXgW~d*@TFVEjT=Dp&-UW;z32nfY+JI{E=x@|zB@j+9sdVlxs+9)x{%+m6>K zcr*3SmXHP?5xApMb}jgQ9CU?a3|Mt&>mx-Hl47Y_6?sDvW02cJ?0r8miUJE}GtL~R zdlH2vwXhY+zm0vO9zTvW(Jdqm(=!p&k_+WnbkavU3$Q;!#zFfpW*K|SQbEz`ZN!s6 z=8eV@>!(DKV-b~*LIViA#kKO8B{v55zLvG^z;mWCP%TOhgf%_>2(jToax^WE%xPJ+~ejR#1Wfm4Xokh>3&Yvr7?ZhZ2 zbX58AFwcHiOB3R)fxT{9&LURlNJ~d60&a4Fdug_!-^^?^<8j=iAzIr~-7@C&aCL#y zW=4oKm(<*`xF=I@eeKw3--9rSC0}8or=JhKAcZDaaN?Qp_Wi5I3Xi)i%X>1tjqkds zI_Y~5N7no>?%3a*E9(7TB39)9Cc2*{V%~JHhPZ=CM8u7L9V1_HV8yN6jZgM?>TuoN z91jfQv5YN@UhB5?1KysxW?J-Ubmat)LtN2Vi7BJVJ2YtQ2q5kQhR}-*_u#nzcVMvR zoL08S`-%Sm)$Tmv_3(cj~!`7YfrgyMyGHx$Z&K+T%d_H)LQ=INE8>$6TtaVvXTmm&webfVeM+a~2jEBA9 zNyC}SQU%jOLxY*A&xb6bikhRTC&kdmO&%j1jb%K9q;>F;GYec2-NdPFZlu_7P99)4 z4mo~vr=>3e&cm5r0tq}#Zf@s`(A}cw!xNS{hYpS^*dc1c9(uZ3l?^;h1G5xixyH2g)%KW4#~gG94* zBXsKDeLmHIl?SUFGT3!uh0*jEC#cpf>!pCy_O~1+sSj7{^GLBsn9~*hJvbbz(CE?P z$tuJa0zubZLDt)gTVM9& zGkebq=SqIgJhGvQ6ZDUtKM;|QMq;WeNg;%%Qd<82b_m=MJNMs&xYR7qnVLaru*h6z zc#t7Rpn?sCoGn)|U({06g+ma(Qc;-hKp+F$-%oF@nyHwHnri<5cWN{cl_@_`M^S&{ zKSDCIaGLWLAxS-emYQl&2)6oV8+Hrj9@-C19K&eK5>=(dW-++GU5O)2?hn4BL+Ui+ zBOuI?^=Rad9T|zJn2Um|Q=*LsHXXe+J@~~SyCE&l*5H1@sVQVrbm1h-N0{G$`T819V-VaV3`XPjRi5_4QQJ_0cr zo#LtFKM*ipYgpwST1UXKtUvx<$0=Gd=WMkfdOYZU z@qp*V3s$~{CKbum64Bv!t}LupIDT!QOEOD4uy0KUZbbd!BA=NYB)X;XOk4IsHvsI zW~NZIF;b0w5|TFaG7IZ6oZf_O$7%}+BXuC!gIZ)PTdx8hA=$X8nAxtQ{zSd_KLKxz z4cwcEoHrDTYI)@9!~kWsg;(&Yw&6~|>D&Q+Cc!RXTh*L-9)3on&gboLi4y#GXREkt zYvrb~^v}UgXZ@i`3%PELm04HF2w1AXTDnCfSQJs^163Lece`LzNqT_6>uPW;9>9_1 z9&@$QW=j1^NoOX7xMl62v=PDi^*L9caXc>)NYLT+!jh<5kBGu5zjcXQKx!zzjY#y~ z{2PbICl85hfCIrFDhat(bAUG|p=RNheKdU_Xk-UCm2Jis8m7O34hc+MKF@ zTAbU=ZQSpB-`?7BW)lJ3Q5iel`aRw}`ed%`s0$>K!ub{+(M$5?7fFI+7_2x&7^Q&E zPf^o_iZ`3_ek+Yn;u?GLI9f;)4a4w%FB+Dx2m}Mt@2{gDv_50FO+Pa7{bnC143*H- z&`mK=R81g10ah+F7ub!hp&W7w2;O>v&q^`XseIb7VOo-RKotPc0CVYR`CZ~~hTpZL z#IQ=}fX8qNYH8_Z%lpX1%h55no}RAXbmsOp%eMh-ot-ae;K&=LK_r6JcDuLp9kXWPii)TL zlr5pL&9uL*J);4&q~g#m;sCHY5GwR{cFUteom$8RfUw(Q0k+x??^_F=6`@EfWh$bV zcIRds9P(&$B&3&e?(7Y$+TPmh#cp#YJcrH&^fuUz+xFLOHTrOHY_#;s8%uehJz1H} zneN$W{{WbPjUhKTJ+4V43j^F<*6nL;#z6}H*gQpE@5t)*}Efv1|HR*T`P zCYC5X@hJmJikAKe#+qy_ZDYp^EZu(}c&qJnAyU#%03?#&RF@Yaj%VyNFEui&r%8yr z{6H?*hL;z!Y2SZMz2}uZsZ&bT@6YA4wR(ON5>|qXaC(-l27=Gluu42OqP~Ks6iizQ zj(Qn_&xB7TtB6ejwMkfz4~O`2x*1Dc0(IMk^H`T_lYcQB;U{8b%?QKFDssl;T%68D z?aC2x+C_SYdPb4xEVH*#>o_LDsZ>}JBL~aaX{T;AECB2q=j|66a3bi~ZZ|SuZD9=p`xZItN*D5AV0I7p{aOhv(SW$_X<*mxsetENI@M|SBrM~oAq|Mk1 z`sh8)yN!730g9f57X_a%3pwXnW<3N8C-otICuh{2RVL!J&>k+YG(br#R{sF01+VHz zw)Y*qN9UojgWn_)0!vkcduT>)_KS|snl}Jl?)A)QYfc=*YfTFe*X5`8^5PZBOCJ%n z>@TK#>kU;@o=@db1ZfeCR5}8;9f0q9+h1|mcjFNzRn1>N=GFuEfY;K4u!k;W>3Q!9bMXI!dzJu)dmk}CA07bWSz_5`i>*IV0yB5Vpn zhXSAy;q9)ri*#Xd&av549*7dzR9XYOX|n_0038g$np-PfD136?fQG^uG~tMjG6Q!g=_OXp=`$UB=qG#_Ja5 z%xoZdZcmy0PL{sA{DHQl6DXQCrk@R3@0S*fUuWj`bAnv8^>=)MA%NG^3eT%_mbQ5b zIt9&h+$;4R|eM1b7Z{0-1jXU~{y*)KQP8+th=N4_C z4|J~xZPWfDfw>l?a_JRSe9%nv^)V&pNhgL?*a2-Xpt$tyrkpCC7#0HN!;j#ek@H5{ zoz!l`F@AcuGL;h*mk zUNi{-h}@Wt$JBQHK7U>~P!j_RP&)>*Hca%_UXzK2jxG7n#F{f8Bilj0=zlMJ`gYn9 zCEbYQUI!}|>6p9_CTbsu`S*qnqX&vWY&NyX{{Ua_w-K9|?S&{fQs0OxLob@w7QOZN z^dF_I{+wiE4F`~id?K-tPv9Hp9mmWHj!p>#Z@vH zV=_Y$Ou)dsBPCgsY_#nTVHA3c%^Dv_Mg`hn))f)Q31bAJ*Rzi~)Pr-!GM4EnAcEX7R&*8l%0v=f$vn@`o|Z-vjKf(@ ziyJ0%3noc|#Zf0vWweNZm0Rp`jRouv3#K5Is4-`K1ANLhvp_Zbe=$Cx)@a_2C{R`` ziX_V4cPs>5ttNz8_Py>18}`Ip^7&t$krWSUV^o4Q)1xxzgvLO>;mq6E_rAYV!3fXb z`SVD~cEj-*<7QZhXmXA0ZKlHg{cWb>iIa!9YvjQ3{x5zpw9EpOENx?-oE)TN5=T)H zIpiiOt$!$Ezo0&veMb<^NKe!UkaLjZ!-teknVAF7{PcKbX=LalfNUg)T=xO3^|<-p zy|@dzda*R)>GlK4B=0zS{?OZotwl^MNQs0q28K(5x7^%qakl5vw-{v)_@7hvjPE#l z{?PA-B&w2iRx|f;oei}usnCJ0{=U8LA9Aow+0F8;nV+qqQ8)g;^YY>OhH5Zbm#gJb z8yFk>pl=Z*pELHoj=qD9_{B78H>JGW&NIC~@@DzVQsXnkLq--NH87;=WXwRYz3g?d zKQCQK%Lxb)cxE8whE#jl zIs7f$Sl@0TRvWrC9CZ!ue>V{{r5W@Fmv=tG-hYU~gAx>VS&1(c(l{&VLjM2}*parz z-H(12Z_6rBNf$3h%#Td+;|3XS8S>Bb?MUdpPVu^*1`<=&QKG{YGA~|9WM?T0BxV#v zT^aA&Q?c#9(~yN##fx6_*7|kOL<+)h+l`&xnX`Im@nB18em>i5>Bp7O>?bHe%!S$4y3JtvoRF0H0UlV ztBAG5OtVm>LofqF8#&J6A^5VY?go7c^cwMLNpz&@0rL>V1^{RpBT|N%S-u)*+{qMj zO=4r77mcipRf*gWO)tN0Hyeh)4(-DKodl=r3UYm!~U03YLk5KoSTfdYVv*4Bt@%VGh$tGb1))Kx1>}T{8o%weNGL zn{bA7qbf!qfJgQ2Pm$mQhc1hOMR;dULr@0RPuH?2Q1<-VBFI!9ESq0s-}*< zpZ1_-cp|H%av7GWpoyhlEJ|}55Kj&EWW-6ufru<9;-oPqwj+TJ%8?|cObaaHxl>!W zFM5Du;jh{c?Cs-rEjBIA-1sp1Y#P2_+IamWm0z^x<&0G$=@q7_3ME`7yeX-M6wE2a zf)QZ6U*+QPW>PTtcJC$}fPWBhH-j6FG}J*w1k|XLdg^+gNW4DC7%mNscnMU-n-Ht7 z!13&EhL*jJK%gwp80c{dXc(xh6f!WAAPmZ&4e!F8tfPgWB{OOk5^I~IcxP{S%ol@j z^0RI)UL6Ui!C>d??~LHQlZH%R+ZSVPYMqGPj$=>%#=qsB;ZN@9V5tn1_ToAB)_H z%T-<^V3dcPFz}T0nC=}5;MMdL)bmGG1wzCT9vYg&K^1f^t^+gV@`1oJHpJW<$)^nF zg{nqojp$=YNJ}^r&<>aK&Evl6g=F|8`q{lQ2af5vK;tz{$k`N!@?=oT;W+dqe?yrKwh? zf3#S9z4nUaj%P^drkVLu5|s&>8sZv(+TV!QpwN0d*{pop>B4FID-$Ku5=gG;y)2W> zzGodu2r4e3OOnQ|*V><$3F5{9;io-v%TaT5m^E}&iW?5ZuyIXUjhc`_f$&jATC%26 z#C2n+v}(6*{Bwd{GF;8oIRM#2vj-Vc*Uj$)l*_BLwe$csUTvLYi}}YH@teYm94?<6 z!fSbx!o!jpd_9E8jY)=6J)r=jKwQ6r7oMF=lzEj@sAdEq$ZiJ~JT4mnjs#00RN{O} zAQQez6$h|zX`z7$C?=(Wdbzy^kfkEQ`xYDO{jM z1w}9{kcJjBOg0(Kn*1r+8w(hP5``J*{{R%HEb1GULNxv5v#0ZWeYA^_s<5nHBUyrD zICd)wfgt!gm}*&+Y6;5Oj$m$c3!CZzxB*HN<(sy+kq9m5hX9+D96Jpkc7z*znR`9TRCTRavUVo27Z*SPu}9Dx?F^ z>MHfGA6)2X#y<@(j}JTv#`({mIjfiO%ugM{f0QR0SI2GZyLtj|6 z5G_>=ME8aWizJjTigH2=5*SNhBsS2KZH4>^AJu$r&&J|q&%&v4lC^+MM(CJEdT;1}Y-K1m|7So4YJ8W#xBu$)_EKY{M1xFg1MVDpG!%G26LFg=BrE`1Hjc-Qc zSY;E^llnJsCq35rNb_8PFRUp$u#p;%lj4_?Q;ljxutvi>hEm5RTh)nZrZ|eE(wrrbfdn!J zurayM8y!O1g~5J#?H)_ik_9rVL)gYbp!aX7+t`t=YNNVQ3x*^ zN?EV>amW_r-(3J7BfkeDyhyom@{Y&J&loEegqtj;T4=xqW`0ebIOU_opNCW7ver*u zShB1EoIr}9nd^g*2r8Pa2_2hlh4;DQ$+Bc5B+Z=nCF@GN1AA4q;}z^|+(}<{inS_i z+#jx-%SD-j$rde#O-n~Kbv1PImI74)r8l#fl-DH3OrT$Rzu8m6CiV9NHEJ+~y5!2ooqZtTml6`hI*XlRhKsFZQ#z%cEjUOQG zVMgPgwbm=@G$%cCsn_Gcj$`F~8=UaT@H~2%D(NN7EJPy7EHWtkcacLajmXO0!-W|A zmxIR1G8TlTM3KF^oW-2*0?_Yd_Jbd>l$n@yOy5SRO6R*v&+geM)Q#3c)GimWp1=_Rj^cKA(}GzNh~kGxNVt&9Qi!<()w9f1$@C2mas8*+ zcp#yS!xXAzQWP8q6mVVc*@JV#=ud|{zm4+8B;YtNF|dyorG!0P3nNrRO;y%q0J-xM zDh$YuYyq`}tSCLHQ z9V_;7f_k5{Pl1#W)1;|c;y)}>M3S4z^3~!o265T=HkH5H+~pw1Y^f<( zQm11#OOi=>V1V^3`Fa5HaN0Wy6|?r1(U`P>`bo2A63sxe7?F^$6<|5XBvkUm_)jSK zcT$M3O;Lj56v+aTLp=^RQ7qs+fpE9V7~GWrld0kU!X4Hl5MRUIED!zVh%azBk4AyE zlDo-LR!7$@B#f$uDpR)e|NEQqnWN&aa6*$OZC;DfmI+iLvpI zj_yDKN>dV=T<33JI!Eje{{R|$D+@pRD=u`IV2zuDROEn=$nNlo19Ufr;fS?bIbJLh zmj$N4u$l;J8Rd?iD%ymGMiE!k$zL6+-Y{W~2N9R1>bizpq>ZiVm{TAjUM~=Lz3F#4 zdcPR{dM4oZ-aie9$9|T7=;h)jr@Y-H6r|nH4mP!-q2{O{ow?q&vePf^>8ObTN8MpY zh{p)abs3a}aHOfZ195c|m;Leq&pQ77ZLV)-*mGwChLVNN5|&bxxV0Hq_a|J5F;(F* z$6thV6*MuV2)!!Ghzaw=kipYi0c?y^0M^`#Yrhf9v*!NbyjyWta*4@e;l-#+hI5tg z?+A-WAHu^r7-NoZg2xFXG!GmL)RnLQ0L#cO3Et>2FRVmP?wSsE(AUC}WP4ks)hgomgF;Pb*Z2w6U_%HU!bQ zb{IQHBr0@Vs25?}SlsS+B%R2LmKtFTm=sB3SQj94uD`I(zpIj>BJj+JBe#$XFiq}&iS+gnlm&GnbbUyWQbp7G61@t`*iiOxz~+BOILDS znvFT<>Gp+sh)BjH!m6#)p>a8uP29Y9=^_$C1=w60fIeJyP~qL(jedQgQ;G#d5Y-~@ zokMdx8#w$XfN>8tLT%*0``X*l`M_)Uj?Ee;QIIOvI652hLuP8)hdy zQY?U+pc{ayoXSe;p3yU5IMb9s|gz|sfFaH1{XdSsY`fBvcGoF@}rNFBM zE1#uPO$cJdGgGW!BbB~|)B?k7$Bs?UGw%lwj`cMn$KKRtez4u)wBAbCBVpBdT*^*t zsnQ@2cfMUOx&1hnQ`3Tjem-jocHl)TR{3ikYadR$F`cUXG365g23jmGriH)*Ri>?y z6=F9g%WzJkwwL4RF3%nPlOz()he)CS0I1M0>%y%cCw8?x*4Ug$aH+~5kY4<_Kb?(Z zoV;W##{h+kGl5#!n3CVWZ{jyUOZ!`eb4PbNW7RHbYSlLAImf4ePe4SK%wRku*EeD* z(ywk6F=Kt5B2W2$oIyKt1{GnZg{c%Zw9uWmzpeOtvCE=irAoaV_+VRKb+21iVg&o z6N`Pt9Uh+_UA^C#@OI-0XpjbdpE(bLq;Gn$y%nG`&0l||4MQV0at zdY>fPIETir$HZ<81Gg8i8d0O!_BJ~WfWaW*aVVC_4Ccg8-;cst3{dzv;w~*M6V+f( zf>Tt+uPsg~D$_^OjR6xFz!FI@Uolbv&2eG30Zo-GkWgJquK-EVYx9S5`(Lr0LPYUB zX>db=<;56e_UV;k+~kk5?hVX5&C9%+ab(7E{%yr0rNU@FB;ojFRcvw4trZ-zvY9E? zs-~W#$s-VEs3jCxh%E5iF_0$Ca0nXY9qKg7)a4Oi_U0#QOzxy0%Sk^`apdBce?CL4 zKFeQgE_VAb^G6`3DdI75zlS`l;&(3NJ|l9@3x#3uV%W|L2Qiv&5HLJrnI@(<)b!^H zjucur>LZGuqbOoL_wOIs{5B(JPnm~GmoY(VY{4TUPDPk|#q(g}u{bPbsZ$aPTyH6v z&h=WIKw@iqKlD@o01)r^;rKuHO{d4a4*NQc7sQVoXt10v5r|UAvv_ymz{hDmGX$u{ zYbgsHYaNP`Nbx4Y;3cTcohrj(z)8I)%a??g zhQb7#LXZa%Y8z2sSFUmVdHB8di}6Fo?t8~PQSnclF`jwx8=5K)#q$n1Qq@vYVe(O= zRJe8z1D1mh!|>sFXmILyVxyy`M2<$NnL3Q1h^e!ut!tc5dZ~n{ zD3Z!7_kWj)p0^(*7Bs0>k%(52Sg>#ohcN)M6RO+}+Y@dkM7BN=T-t++vtGBpkjhJL zr$-)4AzGrgR+h6{sz#uX;Wqs{ZJ^WgBuilAK5ubfnbtX5ZzzD((Y?JOL8uO-k)eu4 zwX8pR*mkzV)6fn&3f-%QlIBkK>RVVZ%cq~HPc-Nzbg(p794~tb2Lms!vItTFU9zg zPAy28S&GMtVl?wq)XfYr`~@==Kvtb;Wem-*UpEq`= zMz(R%Ut-=!s_}2e?os7`j;3ro4XmNXxvFZ37Fnrq{6cYs;YK=jxeEB441rHz6q94a z{fUE?Hk{HxBMmKc%dufBf@xPA#%)*&Y+y|JI3$bW=Sq?Y%*{KXKRe$uc={>-01^)j z>1nXuZo??+6Br!1PaYvxiPD0D4XiZjn-8f3u!d@9yiFLfiI*jT(~nq}JsVGBuMnh} zVF2zA2hagx=}}LJR0n<190CXw#O%~;4%14*p=7N~-Ixg=1HPAfL5bZAo4xPyYa;N`Q7^!lNqD^W~I! z^6+TH%9*)YszQhcq!I`W3$-lFdYamjRxLxBAvB~i=Pd(=4RQE|j#8wZ#)KU=zZBq* zfw(FYKzT)A;a4R0O9y!abktlAK2BgnvUN&C#R-!;0$73x9mVVj2HJeM$iXOsKy9mO z%j4-z)8wvjTz|qIK;)UJzVnsen3*Jq7|irc>>iyY(Dg*Nkz5lOg<^$RJfGVPI9#^ zJA7?40i8%mKRwkqtsY1WGfDDKzWKEGB{~S`EQ0v ziSmCx{h$0rRgqOFYC1_Fjc_=#$0Dk{h^HgXVy_`DeR#jjM2{bOO9E~w zU%PVFI1BJ8BQ50J=moeRyes(4gW_+`9NEkDz|+;kQuMgmD28~`605{|wJ^M)inFAJ zmo@bpZg^#anu&4`aaI{*!zLUk&8$TsB}iGx?(LVKya(|{vkJnoJSPTh1Yy*;MGh2| zb#TV7E-@rDXt5cbv5q=?${7>@%niO~$(Ff_6BJJJ*s(v!6>RCQkbuh~w0oTF`Fz&# z&NbC9Us)|s5yrJls=%yyS`az1@N-6KZlnfHedP?FV9tdWzNp#VPFHMaU4NZVa_F9cp| z8uPAUzVNpdW0gm_`ABt#1f99Qo=62(!q=z7)g)2pQ}BYw&ekL#u-{8*+k(GNl;a&# zN|ne5A@e>~(iCFxQszlil?U7fCB>QZI%MYctTS^&9K(&(VfC0oQG9M0Bw|*ssOi!} zODnW1JdiULAjU*aQEbN7xEe9qI3qC#5F7cUz=Osq1B zlQBU?yRPEa85h%=#nS_{aPu(eE1CjAd^)!}T70PX=0hlD>YRW z`ZYjk7&m?&Z63>Q95EZnTY?>lV$Wu`E|rAa7q?p*ZOT$);#1y*c&b5t(nto4T&Y$N zxyxQ0<9xw~;#Ksq)6GT8vEiv%Q&BI#Qpr(?IgXB%9$R%~TX}#dH_rSYfY{TFrdk&4 zGjb{AnE6uE71~@pj_OZ%mL)H`#FtY!Cb{JG&Nn+l>yY2&Z>6_*-VvosJ_ zEcQs2Z^HEs1*KKEz4YUpP8i{efecVsz3qN>dv&}WfX6Emse~Qm5_b()hRD4ubL2%J z3R0I~0$eeUS6EoFM2vuhTVrxI@A?BOXj=Dk2KF}(^3;iE&O%b7F^@YlR)?uI@{XeA zd_TlGURuHMtW{GJ!8xN7d`p*TaS$r17PAY1Y9y$dSSY%r*g{{TUXUNCQ zlPoDD$R#_3*TJRj?$xw;-qyzK!!~)8vN0$MWTdmG2e5DYsK`j*diwKc}Kmc6^hS9JW0yA? zv(a$fuvCmjB2G0-QdT9UMZ*NrnO7|9&LZQyiB-!nJv}@WpsveI3-u@|hFDDB65dZP z!AyW#LU`j9vX_S{LAnm@?Q-rb%PfvYJHu_H<0h3QR9SEhxPZ?~(^~L~`toFvWrz%~ zW0%YUzQKSO)4%1yWh1&#cR2yC6T**eBE*F6Bq-+A%KYyeV76_o+gs$Eae%8yR#4l zwdI@t05B~1s_#;ituB-o1)YI*eRI3mN7nDMHz4xNUK`;U#Mop{Ux~$3)728IQ9U`4 zouHk~lv0IjBAb#lKAd`oW%gzq;J2m(yAKfn{{V})`?W5yJA|%}E{(<0nhvYFX;4A{u6l6J$Mx+8Y&n zV`1Ut%$bNo0;LrK12De>aqp8g&#~RM#^UyJc2+GQp#dlhKjadVS1wK1*0;&yk}(iN zG%^+nRg)=VJ6PYgyLyk|-e@i6W9FHwZ1Nl)2Ah5A~-`libZINi3Cd=dJ1Oqs6}uh&C{swwI#Y9AA*lAo(m&oq;?(x@4mH0nWJ3i(Bijg7WE1vx3iB}G0Z z&X|{Q?DT5!El)#8H499T8q$z=`3l?l59B%*1N$p;#cmVJ{N0IF;r{^g<}*AsOG2PC zt{pkbie)5ao?vsPdmm%37u|{dKA(uf$i}VGl?0j`jb5guEpK}nv4 zEOBs_any{PQV1~r0OH5l^9bemxlb6v>E!89R0XP}o}QL?>S&-*B1do%u;6Eq4e6F|?z-QBXLxd>ITdu2Xs+(fC%47Cs)$qs-RJ+I`)M-j;w6q8q& zDIrL(%9_NV5T<2_Qao@tnIc#~2;o5g0H&hjOL3b&4EU7f9>B6qL8uJ;DZ`9!v>54W z!cE&}8&J%|gyN>|6_;s?0Js6qioIOYye)h%$1Xq1 zu3}rIbZBhG#QOHvzP~%({9EuqexWH%KtD+i1wmj9IQ}T!OOH(RhMHF}6*CuSE(_M| z&wJ$ei=V|VjC_sED=NZ>)D0R&&19*ll29Q)*SM4oY%Q*YcH#cim%W5o10q`0Ac_WN z&Akj)yE8Yr+D}qMz#I{84!Sm8ar0Xq!BUn#yz`@{;5&mV2my2x2?#%_}_RGwS5X#1_^jRwBw)_XGp3zPwC{Z8ac@ZwnI4;i<~GHnCpB z&y=*z5{peCPQ-&$@b?2QG0`8lu*z;+OhTa}fhUdQr=*549JLiulm-e~G_jU2#^yyC zMbD;|u&vA}Y8}wcOpb@n-(ly9!{QD+s$p@wOOi?d02iq)I%k*$D%h$qX|X2w{)|RR z9;Xk&IeuB#)|3oHtD=()Hz(^5i_jGPju8_5ENOrp(`yH@Q%N=3R{q)fuDNCYo= zJIc-Lc05Vo@s8)6EK8?3z7ZWAw!nIKKhJ|DsH`DH>es#g zG)A<9OPGg!&{@TPdilkli_=K_pz?2)r8OXvYbmfh+xm9l%D>r9PrO!epZ;(h&#;8- zFRu938q1KfQpyw+2kyW-gWBHTE(1n>@n^*VP_jU|y=?xT(AiNbOhLZ!hIr|26-9;E z-_yS1>+Qs@X;t^`SP`<8+AFwG?yFSH@7t^CK8kjas2gbeU~yT<>dM z+Uz**5CD`9@5hIeIh5-YzMp341x&&xU09$EgKBP z5(@xwpDFG9?YE))xQ$Ej)y}5n-;dmnXpLzJ3~UIsZeKXtg%LGUkPEsJNd(xNpZ5O% zYurYKjq5k7kCyo2W53!yn&Cb|=kn3D)BMz4jb31<-;V_+QuE z!TiN~T)pMH8@~ao>&H5aLVa@+AXNki?l0WxNxk>>-}!K|aU0%$VSa~~2(aO0xD+Q= zH26z;*@H%fb3(*04o<7+LDS!DPku638;Pb-BGtPvi-2l)^3Yi85Nl(Y!r_ON2n2zy z*VEYVt9LFEj%Td9sUc+{(w0J9s~#BJNqaU90XWnCD4BDu6s z(-xoz@f%sV`S}nb{{WKZi7K9*)5{)aNYde+G?`eiV{3p|>9z0fIF|4LD(lr+8>mED(P1^qepzPOqEdKy-Bg9Fl@hZ1`waJ=3mw18T?EI)C zsDhRn>?bjG#A1j$;o|mMN~kSy8tf((09(+WJu@A!`;;X>H7LQK%KreDynM5#%hbTQRB4jqD@RE=HSpJ-B+DXH_!9Ii$oHL+C8Y=GY23+;aQBi02x zubg!Gz`^p?nYE!b6{#G}{XJm570mO)DQFp^sz};2kb*<5Qb8rNPQhpx6xwH(}gdoA>E|Nf{GeI{e|B8-iBp z9WxxY^0%W!Yl=k28H9w)#yxGIHdO$DU@u{(_2D%C0QXcZ-_J|M-v+P#hf0!J+Q*yJ zHlA?5TuMk)mnjUvg{*fc{SVXfiY&V{x(k;qZ(NOe-XYZ_nR=`EOa|Ke5<4C3`Ef8q zq4K+&iEDhec7kDMI2_jXvw#YgEA9t-Z(0o%-t;04rw_RZPrP zj%xx%?d1w=cKP<;SlgYe>JCQvg;OvkV++yT>CohbsI zo~CMwYAPyso=Kp*5GBJi1KbZ_ch>u!H7v}T^p9(6`*O-Bn=oNylQ^i zV@0(;PqR3Cf9+<>qzo!Udh^9PiV|2!7mCO%G3)Mb4LN(X$y7G&iK9&i#1|Y3~CyB zo{V}WB+pxF%se3StSSwczj|8_-edHI9SwF(9a~{a@PLlm%NyMK@2$_T7QK^>7?gnS01n~n zlU%6=+nh*y}j%|O96DljKu&N5Thbth7Yv4x$N>&5^092+iXUiSQQL^h`IO${Q$;Fwp z%U{Gy=8j2g5?seIc&CKLiqg%^RPaX?d=t~tV&a_s_9Z{zD;C<>j)zTcuMW2o zy));|qs0-UIv?jn2d+0c-_KRc* zfZ~z>NCc1oYgU$fbf*Zr_GfO1AN>rXNj@68-N3E7@NDCk`Hz;8Dz}mZF(tnC7SM}s zKpO%*EqmA-?d7=K7*drm00K)800e+ej9;bc#yvX&w34N68o9aR9Or8tPrYG@;jfdX z@sLTlBKfq?Yrg*g?k#%-QA+WC8pW>#Jp_VOL!Dl{^8Jh}$s+;Mu(-IrtbM!tZ@1;a z0>hWfLv`+`3YIr>cc6EB{vm?|uX-9rVdZH7M=POqy^68jl#SGaJ-hI)5h+s?z>qWr zzZ4&5CY6WuQrpGi%mM>fffQ_yo^h18^<0MPi+!~gx1a~O-$A8-`SH+@xo93EU|r7- zl(w4dxRx4$txz5K8hJLl#LPabt>h^5(Vn6nw2Dk}h`uB#rYQOrD{wAOo?BZ^B|!ie z$-WC_+GS`J8$S<&oi`c&NdZA5(eJ9ed zDYJrT)V6#WHL5(C@TCT$Ev?)^$kl$8Y3uwp~CfE3}(!t>JFd1+~7xHUBhh@}0~ z{7rVN6bIm`#T%8>^KF4h9@lD>61C93*V=m2krNE-!K~9+G;c% z>@Dr@AYv9xZI-X|^Jr$NwWIVT59g#2!XwV|WH)F=ruVj&-(9|T_Rw)0q2ewF7weOJ zVbi%wqZX|IyFEH;I`W1Jcv@2<%OC(-Peb2(i|?=J!3nT@oOu%w%t^E&X>TEmI~%R9Zaiv;1^;lbfoc56NCJgH#Nr_Yto7b~uxd5Fmb zNIhV4)+XD20lmB1Z8#TcOa&$PZO=;z_26L!-NbKf;>?o7I6Q;B2VVvb?^ z=**+q#=!dz_2Ra}PloY92f*gHt?qB@0~p+qdyDC<{#;}(Q}>))KcmE|3Ee8~1bQ+k+*W^gi(OW=t}sirfd_&etP@wfMp8IIGK9G|`eIkOlMu+qR?AwY0vx zFqUtn{%Pgy78FbqXNMYOF3#>a2)g-h0SLpOi5QkJpUi{$?QiLB9AUElKjoHOqTjNp zq%|*MIGnxB?jp>PCP_gjT@JhG0l4q-u@?PKKS<_&UcB3dGqy|s$}R!$=Ua%VE3X?# zXvnP#Nxw{`IIpA zn6gOdzyJo_h4&q=?c0rz9JaUg9+5U0yVY^Wo_uYlP*RdxNMhRZ3tQZt-kT2Jrvt`| ziJgAc^oFW>#ES16F3TsBjm5@<`e;V>`FG=$eJAE)@e(FxK#oW4^U4lk7`&9vFT*_W zJ1OW%1YkV#?joL7`@(?fmL=`C0W1Qd;2xho7@ac(scR4~QGEXZ2g^<;%{YZ*?)6C$ zP9Wg_EU+1*xKxxdD2hP1{J7DRp6Pu>PIS(YLIaZF`VXHuL(M)ZSw&azFFT1AMO2De z5@?ztJlV?k>`wR8X~r(AM zwPwBP^ZAKbe3KMeRw|+cTv{oDn`}VI+*{t=&G^>(4<91lrYA}!IMMQ8X^^1h4)IjU zHXkz;sRAL^j?hb~Tikx^-pBcI91>O$W-b9^ukG_#c;)!2aRpjBDoN^V9U7uKIs}$^ z$%z9`F{M<_RTkucE#H1IhJqkpe>wLPZ3(X$9!9=q9I)A510*$($w~+Tg>^Kr&wFYD zO$ztF%KqE{tDa}xI+pKSfW_|g%Y$@=I2tz*^qw}kxVve4iyvd#wXQ|D7}S_1UVT3B z(So6Bq(S#@JHqbI_kmR!#I9Xb5Huc|cO!zNNiS0FU7w9_$N7kHB(=x`GHuJHAESW} zn2kJ3S&354ra@H=Jh3th7G$uwIve_4Xj`Zn@c_&g8ERxtS$3HTX=lFoP4*J#4Vkg=9t+ zmL+2+K#_KnO9F4-jmg2zDk`aR=S#gZ;Qs)a>-6cbiHUkSVP~MVMFX~g=WpTO8uKi) zH4xQe_$4(I@`;PV_mNT4k1{JsHGpS*n)f%*k;5M0X$~I3z|z!z<}`59xMu!iHWuM= z>feQ9T(5yK<@)|*q{T5>YGsvUrj#sn@JK?sO2vrGZE$t$Mu1t)4Kr4jE?5S4H}kK} zVi~`pLj)+2E(s)WJ#*Ba2htq5KN|4s_RQ;#9CA1+UL>f*usNcsuEUZN0?i&C@tCVA zSTOja7?eOs)bMIBvy@%W2X^530j89KaFcKV4)sF$unm>3o`ScebzNtMUKP>u?PfPm z;_WR{HX9{=6-*(bqztNtNU0`38K&wzl2D#yU{|*iRW2$ThPrDHF&j5!rbw8Lp)8do zD|PJQ+J_@fogmV^79$*3 ziojqmO-olp3keLA?!&EcOBFe;c!p%zg}@929B2-idQ&Ye(zZs)#o!k*M8IYQ5?I%M zo5P#Ea;>9^IhJfj95$jHK6iq$D!Jf!kQN7Dw;ZBWwb4bv6?+@I zxo%+lym{s?4JJ(G%UZ0W9ON8}od9ZUnK2)i$#g{C_Ax=6W<}s%fzrWU5N^wM-MnwKTO68)S{p ztFM$B0KnT(!&&%aCv<{BgLs7qr2~Qu9ifDj6^~loj$WR5HDMN;38AK^iw424>RdjV z-KB;MGM*|(mP2gEry43|HuD_5ZQA@oxn_Ds@|2|u6*{ceDkT2&=QO1mE2sv!)L+|9 zLzs(IfMV3vQaQu41-!Ck(yx0v@L3j&plZTDfZzqI{(q zmvUP==Rr+9Gl5DYcv#D0R^-Jf`~_KsuXed4Uf1^0+i+Bcct5{N09XJ>wwLDTiM(Re zvqXfmJAq@9P`<6#lBBOK1x&D2Kq_Do0@-DgF;H|3<=4x-&c2%tIT)cSM@KE5bR6^H z!tsg@f(_U|Jm7vYRY6}AlyXLo1dvG-l+_BAahRNb;&C#R%Ha7`0B{Yr;&kJ?%TPJB z!Sl~5)CgLcB~v(2s%qymMx`1)Y53E~oUw`Xg$4=Acy0xO!&{8fVAZ(R16@yDiM4G~ zmw2P)^>+AVrMYS5mna!YHUopD<7dfBtOLR512^0%fDMM6aGkRtt(S&!4Ot*`pcG@k zWfO@hRb1#ndmc>O8}49kGs~Z8cxWqd`(iRtRz&pfWEg%Vk;c)Kk*W;$%B>ff9jrhg zi)eV7LBJ+qS`^Ar-XIbPCCg;>JZZuqni<~xyHQseB&nWC zV;rwL$mNwp6tgsbYwCr78iJ#>j}41TKnSSf#QB~rX7!F`WnB1vN3W62Pc8BXjCgdE zRa~VGBRns5r;dX%)Ln@xCjgk@QVoi=^6EQrsgp2xvO>Z_oPy~C?f9vV6lMo*ojwE1 zWX3wPl=&0w1I#!i_JvE=S_(W2kwPqS>)?)aBF<279AGj!Q!tDadFo#Oy3Y_q$_ z(dYm`a+Mnq!+a73DM<_*kmLX>ovD?NBM7#J)tMzKO?)(WEL)k&k#hF)X5f2(4JrX#KZi zRd{VW#(Gg9?QGlM>+P>&>3$!{K_OMn#qFkWoi$N$snv_?=Lz_gGDQ-s5&MkYZi02VDkG_mK# zfxv{^UlhZa39LOkM?3|kXevYtB&Dw$qDYxpNYJqaT%8*)z97M(A%7t4dPO?Q0-bFK6PV$SIVq z?bdW8-P(mGg^U79x+i&XitKU>Q>vEY(j@RY`}) zxLe4H9FoedEK2rPYR1$fG|JsK7S26E;^BldS0O#{-0;=Ks0O}}_XGma3a12&pCDVC zv@F-*Se0O>s7eaB+PbaQjnbNF#Z5$BM~<9Rs}_w?{cg)+rv@p28rk&??O3qv{B90J zz$W65qV@u}EG=F_?H{>%KZV65Sv<1SFotLVWv4-Wmj%FJ_XLz+8FnBLZ7iC*m#%#a z^ggB-?MaDTuJ;V{2pMYC90p4-?&Rm(RpD|$}3Eohp#lbx92BX0-PG9CqdP*}?@`*6>1w=hn zf#I!0435?+SO9ZtV%Pe+!EC*ugW7m>piyN6hb(uAIbS+tO(7058-d1QaT8`v9ss9s zCeEQUZcgy+HfI{WU*e z(dIaWOPes1tdzNGlHtn%TT#YVpfL^#_mP@9rIsnf6;*Z19*t`$wySMH*7_51ejt}R zX_(b)nDKrdZ9?}Hj!dK>0GhaWEc)Jqqj|wZX(PL_8Cj!Mm980$fHB6q8)^rr931XT zfJ#%p$eulNeR6?{CC+InNeWV~4P3oViKwQRh0bmJL)Lgz;kS(57V`EBU4--ZixcwJ z8_Yb{P%T%6cx{KMuBgFqlD84AHzbkEJE&GLFj+1IxbcqBJ~wQpU{j1bgQTAb-Emae zvgFy)J?FB!K295B?y6I*NIo*fb!vlm>&t?dgIugIPFsSy24|a?Ffg#*nfAc1z+@#r0$!J!ysOf__s9T`k$;(^abk2URX)EJCca-aT`zV5Ys*BRD~ zbl~yQ^>Rt&GW5iyQ>bHX$ATR(GZ@DyJX<~EFI7jDi596iqm%?mrQvs@%mwAH_n8>XY z)6+gRI&_xy4AMw)EB^o(wzlH&g4&Z+kDh=40cs30@i&`$wW66b3Ri`e2{b_CU>>dQ zNabE!q~*Hb7rZ0D=Z2!Dva7@zd_SKk5v7VX!D^`>lMTWM1f@(fyNarznOieFYyd1c zuJ)G`h*~F>Hc=T;q_GTgYYPaqc4e^WE(5t|W1lzodh&{&?HxS@7l~ZahT(4-t_z4Y z43R{=IHQi95dxw|a;SJVXXajXzVSfYJWD@Cg#Kw!T1Ccl?N@xw>BP` z{_|}~1gSM3P+ve!L=TmVM+2wk?q=~*!rpuE`;>A1YEKNRc~ct4&JRkp6XBFtUoyco z65>-lkjDfr5`L6-2QQTHzqOdDbMWY9-jgjUF4ZVYS%{<4os4_8{{ReKo9zNSZL=}k zHv>BqWo;x+JG;atUimx6A(c&|>-UK~uP2CHugn-d1u=SDWvS~@f_ln)Dy1l7trcxf zYUXB%F(p^&2o^?EIhjc#Hy%5L#V$_J?~(_BLabVff4FnQjDGcY$Fd3jqjnNcXLimR zLl2MHsKVmWS4muy35-B+TmaxxqsJ(C;twg{I0qzP{u@;CHUmLb9y5vJ%BH@X7p$Rd zwCXXqC7vqEi6W3mR31e`D?9YiHc{vs8f?kyT*=s!fTbx(L$wKTD{q%-eq?{~bJ(q& z{WR=0&+J!XJ19{sl+4BBVKx1c^gWQ6gj{{mikD#9L8wrtN2M_l%(OoOqHoI*uG^=O3LL8xEvmuxV7eyVBDw zGtoDBAqxY>G7k5pgJ)V#mue?Z`GYEnUTh|yhd@HgV(9>!Kx4nDKs)`w%mLQ-J^1A< zyjk}{v)l)#-<@LhwI!iQPjJCN2Li3g+}Ea8FjJfAFjGx{(%`5Yr-!XXc3k*W*XK8g_Cj$fR`kF~1&1JA+P?r5$p(I!GDMor*?J>SHRb!l zKm;3H*y;wh*aAE|p5{!#Ni|h61-<$P(k%M5Egco)3(}$~eFJ%NjZXTJsoz~k6N-Vz zMOia~3c&%~U8rJ-qsF35Bu?qG!R_JAYT6fZ$F%&0(yq7=6q(VSp2B%45Bbl zEOFAJ!oipkb^sE8h?3XV{Bt-mNB$tt>B!mIy7MuZTsYn;HQqcb$I~j4z`Sj$r-o=V z#*Z7LkO^(=e>b7rYCU$`a5SPyt5HkV{Qm$QL`gVqDwJbm*WNc$sYNnXlF+0|L*>aJ zlPDx6Z5#u9r(DBc{79f2&|JqtVciWv)oOV&e$Xar(Id>T#LWz{DbB!W>Lg^4ZEZ^f zm<=!6(o}%Lg5N#QtU|Pv7k@H+{GnnsmPtTH8myDZ4(p!oS7Js|NFIO=+)Sq3O9sqv z>(oF}0pCznS!4ieLlDBJj{~h52~qvzbH;31dQ=&=(HhNSM#PPV{{UVfnPJcK6Myu> zaZb1L9Vr{!LS}2&Mv+LM+e0eLmd4sx8-NYK8+vgR8c;W0{ugdHtLekukoPhQoDODH zP}H>1Nez@}%?d2!Thv`z)+7wKAPy%@ham`NFLM?EV4dJm$y6Q^(m_>UJo30uhV zIjhvuo6u+0JrA(kFBu|K{{Ypb${VU+Tr)Lv9+epi4>=Q`u`W)*F`Oq3p@HVcu_0GA zRcI{G!%0UPLmC7ckh*4DYj*F%*era>WkHzLzzi#uncA<`ChZqyWbHY~n=xTYKo%DO z)cxz8f-I;!Oy-H8t;r=UQ?f2;VnC84Cum{~xj=FaJ9_cl{9@-Rfa%AJ`r0e$?9R=R zK3PnqFLi=~O$%xRUy(WG44jHy_bLRMIICUlLi%X~ZP{|L2@8;b3s4XpAXTg#kL+$oMd7qqJ{L_J zP~p@R(JV%Fo;YIa%Hb{~&Qqy(K5b3zNjl$;J(z!1qc&mPnO6f|fCqfrPI2Y9%tkjI ziSGC2B{cvAsjtAB17@?cn!3ooI7(f=46ER*T2Xf>#dh!nSXrwV`t;6xWE10lK)`Jql zt1!y?98#A3T6|*!09B#7;Ui<|UqHl1llWv{cl}^3PW_I~kIp<&~OOa{~y&F=kk;9l`(wL31TzF)B+7oP)EM za?E)PpIM~hkeotEQj2P$OSn4P;^Nn-gEUpHjIK)=M^YE_6O^ec$_dmcYuFCMgtMiI z6Q+R77DE9?eJH}5JnwIoLeP~k@dvlR9eBp|F2Punb&!Lp+>#G}Tk)ix@PGgrS)9|K z$B85K(z?kzYi3B#aeIs0{-3ATcHO3wj!@*DU~1JgW02%Cfvq%zHf;fpYg+oLn0t%c zwe;f%2H+lXB;RC~;dm(xN0=!VP=Evf0L*|1_wTj!_2LCw^D*4Np**1e8&o=nG=M08 zTVC01d-o%`-1om4f>ZR5pE&V{3?{xnA!xk88U#{xIYcXa5;pJebG`T#Xmu*LCY){3 zB~!9%a6I+(hT2+|njs@x5Z5D11A7~K3*1|<(%rZjQpkFo*fFj1Cyn^QAb)HFaF?#P z_;ZOBuOy2D-^v3W_ZG14?Wb#Lw;ce$4Iw%Vwau84Lxrn9fPAC85anzhznQC(1jFHZ z>uYirLO$gw)?CKER~o3Kj`7E^W*6Uy<=8#9y(t6jeW5RB;FPKY#5izWn7eY~*@m~# zzFMQA<(^r?u#7t-5n&WjqDxU^5=@h{QdUSn1Fu$8vne+v$R|QLVvrb9As;*KTujVn zE_BBvDq&JdB(Tz_hXJKwA0C?##M|zqF@TY~D0WMRA&7NS1&{F#`tgi39zr0Jlp#CH zxZoc?r=1>=WcU%w9v*XVF=H4nJ>YWV7^wJMR|!|dDk-qpX=x^s98Q(sh3_p)kgRhT zW>vcrUxET%yEni?rAJVTPDg0Aw*L31%UPsCwP31)=X~wgwSc zwe2ZV_ptz-!o$ROoDe{*Mcw@&d+jBNaz!;Y7lB-jMI4ma7b#WqZa>W8f;!G%$9cjm zCVW&-)m5nrhT&AJBlVF#b1JHT2)}!O8!lcNT!~wyO9^rYt_u-fPm$vB2V}NRDsC=r zD;k-Ja(lFuD5SeEZR%8dnr9q6$sFU(7$zvVP6bpdjxAXPH28KU)u^Otp3JhjKYI`n zd7?K6+vV-WCSqBG2i+podmS&&$}Rg>W^B~UQs$&4VXcMO<}-a=+gR-Q8cAWMTFaW% zhChm#0THzMK$)Yk(HX-P^&X>z>UTH3e>l=S>Ur*_sVJ6vplDgisn+=mR-cZvjRxFs7!owjyzI}P z5-2-TURJ2ae#W0^-b$Ydrm9F^2gRC}N_488Z;Vj2QvrKYymG0Mox#qr`9o#mlZT!L z&_jniz&%_S6moCw?^6~XoW??dW@B3dcvxF8tbB&%&Qqm6A9y>7PgY@v0cyMk8t8zI zzOEOoM-i+ka4F!GMVMx=8G+X3{f1X~CXzRto79FBz01?ukRqlmOjdNdb!#jZ^mDpUlHj^NmDj@NwDUHq-&ViNtsLBkaZfHx4}pxDS!Z)wHwI4 zN;U5qRM~(q3^ZUKr=ZWJMdGdT$-{FGNm$7FN{cl-l2O&tM-@7e=1j;~ z6&5<5elMFl4I*s7^7oWeQbY6pK)iV8YIfA!pFeeBQo@wUQ;-x1p*a$09P;O5&C7hJ z%2;M0QD4YZ{K1TJ&J7)IKWf6zBvQ=gqYr91N=tr|Eln(moop1LwT}l*m)s(L?4VnH zs6XRIIeU#Fy@SW&ww5MYMDU3ui`j`6$kNW{@0@)86uj96HIG)|;wr2snK2pGnmJ?= zJ_l1AX15EGBbjXGIGJIUNjXm*Q$G*16OWlS2m)Nyl?Mc}OA0;dX3vAit;t>m5-@V{ z1gN4?LdsN96rfy?0}Xt<{qX+)l=19C#B2*3s>diW-w@&FEE%Y9b;IW(Nldiz{@bdl zfmtJusP<<3BK8MeOWC_05i@H_oi7tD6Ss$igum1{2dh+4{2ga$HogZBvhgyPf|)Y_ zQm*l8bpSV13lmE|e$n=84dlF4`5Ohpd}o4(9_D4m>)^&xIiA&!&s#NA6md-m``k5R zkTyvfWn7_V9k}<|8!WE~CG7%*EomMmNh%~4Ahu++*zu2&ChgzTZFSDrJJ@+5aUna! zl%3?$c7W2EznG4D!n_^j4p+f3j!$S48RdLO82Gw+TFO;gig@Fyl5tGZBL{V&Bd1Rx zV%7sGvA+O+qhT$b+{Esl@V@CT2`ubZ*e@^DWAoEsePtiws;OZ#^%d2T$bKT4m5Lc-bOiy_4R6Pq?VXJ< z&Y#^%P?x@U9p88Jck<1n+`Bc}G)a>tRLn{z&Rn$bq&L-SH#=B8^{1#jF~@`wVpwh= zNs098Vx|$%$kU*yeO5UpaG}OfZrdAN_TsNEV`4(fN>ys@nPA{C^lnjW#clj52ISc# z8{&kMN2N)QvE*Dg8#qo8f=P|TK@>A$6I4f21T`xJQa~1_k{Qc4L8?JH3bK&8UfOYa z*;r}P(J2#FQj~xhMxwTBf#piPd6wD4$^AsxlB5+CDMTy_yAWQ6zO@y+bVeT)9utE> zM~2nY&jl1m;VIT@#*C@wS)@~LumFc!+WH%TZY~n0iAWvX(4&)*TJ2Y+nw+AKI$Cj9 zwD*`|9NdRDu`hdzaHe%8Kh9NnoRiX4(#DWeN79O>HY`X>fE#;_h`F_|uAC*s<5a1W zO3w0~lv%+#)Z2jNoLX=@DnzZ>f}6p@SkcH~Prq2ND)A@+n5ATU9K@)xJ@v2~_tM{% zi04fTdsXzlr=_^^5oDHux)PE>=cDoa{vc{%v}ZdR8Z`1{P@~ET76A9Pg~_+{7cW)syp+N%3xD&A2StjHIK1hWPWnx`u<0YlSUy;1}TE!YAPwJ$PQzvoENEt4Qe4@ z!#b$E4Pbr!N3!_YYmwZ)2L-Y(pOveAA2NSXwpJom(N-j3*0D8esQ&=6z+s=a0`^(^ zMe{!{;h4o`6(v<2M9EA40O1s~OtVK0867eI00#k)heoDJGL;bmMa8umO|@ss9ptiV z2}m!SQ=X0GlrijP%*3ARVw2ndD2;IDkF5ZSuJ(~{`^vo2O6n{Vv;+8Nd=mj6T>b{GHCV_wsvHcrwEKv zCgNBmr6(~lg*rUF z&jv^$t;H#$V~69EO22>cwCC>^5P`4Kk#%voBXk|2?6i%r1|~t>oCA;m4oP;UO@KF{ zwPJmNw(%XGn7lmY_tHsZjpty%1_YM5B7>o~9doyVoa2H|XmF{qxFC`>hQA7k%9Drk z^r|Ul0ppoLyO^^mBYr%?Y4%rY0unH!q!!))_?YM_bmLB*nX>y=v++prViPHnPU#`i z!Pw?Vem+o*i+EGbxNj^})f@{K=|ws@%}ivDAcr*RJW-CTN_8~Kpf#_3wONYn&OS~Q zmEo6d3)t1!`IE)rrW3Rn6=J)&IHV}K6)&S)Gjb1{C343qV!Y{%VVtdks>g}q?)3Dr z)frk9Wl&iv8!e;EMV3|oU-27)cuTVOCNmL^lZH&Cf>xC=CC2K9JdNL@Lp`gs@YozI z%v{OC#D!)6bpkkxg6l0`DuN&^5< z`vNuN>phRM{{T<0>dAqcE{?yorncl5TNl_pcW^Dy2PLFuFIbRuM#4ve{G?kTf?;T(4 z_zN>nDVSx23xK4_xFC^Xrh`kC%f>H#E*_OR<>_j0%tw^=hhxh|8gA-RK?T?V)H(>a zd|c)VjC%*e@OoMaY5I(~rFp3$^y?Rr7(yn5h9yphQIhO1<@)M=VCu`giEw>frOPMed z02Vn4TR~sg6CS6tRJji^E<+rjE*f%h`NDJINF!pA654}%Y4YD)J-uzO3g%$W@~Gv> zC(5-UkC~)hHfGT!Xev>4REM_;ukk}KZUA{z)-sNCwaG+S;94^^8uAHHU7#>GRluAkfGJ)kD!?nIf!_(F&a%S4R+_f^e zXRBHLh#0wr!|2T5QuMW3PCNr-I6FZ~)iT@{3KS7y2_S2wuj}YNcHx}4OoY1v+Ho&l zUVgE;lSr22mjbTlzJCit9S#=q$57$~v=P&#?gr-j51I7R*1o)UB@O`a5m(0I_f(+m zeQMOH8J|n>hAJF46PdmWl*V9`O6^M{Wr{X|LmGx{bs*Zr+T+uS--- zu)!f-1vGkL1VO~e!#vOprNTC7fN0Vda=hF)^z5gVHNCP5Br6_QaPV9HwV zb1Bp~B=!VY8~5uMg-RxOhy!+FNdboKd?A3K6v_QW3xL|wRW4+;xL8o$BmO{h^ECBh zpI3y!{KH3G4DvLRIyzIVNc7cCu{3Zh`LhWlH}fAY?Qku{CliNkTX zDx@(98L}~ECfB`1Uc0%XYe@L%SI_xFj9@{cps`1A4=SGx+eM6N|)39n7~i%FHy^_dH-1G5j=@ zA~@<2MvpKowjqywd)SgbmeSYYY4=|`Lw%4YqF9|U5~YXnR0jrt5lahm;8bc6xz~O-r}SX~p^!%9#wZ$j3s* zU2oVAZ%!9Y`nWmaqwDg#BEy7OO~d|cmrB;J9zqI;!HEi9Up{LV@`LNW{&qU?+-hM8 zp0d{@*O24+<(Sh_BluBgEJ!zvNj4;%E_EkQ*G@7dN7d8k%6*7bD#*!~DYjrOr~$|# z{j?wX;LJbNnq=&1=KiJ&PtqW)GX3q)T+0X`X_rqf-lpH{t@w1C4qrZ7q;&;hkw;Bm zM?y0VtWLUo^xS;+)(lM$2-JF76XU?~+WGL$U%e?7za~hnUKl7NqSo7EZM4u|QayOq z3+g{Ik2>3*?JJ&F&fc-m{u}caJ;~l8Q{%k1Skx8q;qg?(QmCOKo|%J0T_4KpAq7h) z2YYL^pJq>=gT)E*rZcDzkXuLV#8f?6Jh!ylKMS<>O0c-Z9o5TFO3M&_rZ#)3=FZO_ zV|+dPM?=qCpIcv#;grpeVX%BIAr(Y1d=@;?#tm9hg>1<(BL@N3N4XXjJbNY!v>&O$ zr5Kre%r{9FvuI7;#m^}C=WTWxZpYe_7l4>kDRUG>bsz@FUo7Id$Lg?&@rJ}OI$75U zFhQQ3*vTXYP^@B&EKf-ovYj>_+yOC2T*-=-o!MmgQfkz%%X-CwXW_9j@Zl3ml(}hT zDa}X^e!heX#dFS>N=Ha>Y&n9uOp?z8U_5UbY_@34id_eodXjyD+-Mu7g5cB!uwr7x zv9T*s)g*@&cXOt7xzm(WLl&TdX(o9ih%k}97=mSD%t3;Q2C6d>%vfkyyIX`yor6e<_(ti8tQLr`fv|@xiF@r ziV_Zk(8I|{Gf<#}f|g)d8VvI5rkTcAmMs)Z8bNU#OkydN>(VC7XWv0~ww{}fxZ3d) z&(5`eG_xIRz(kl$pEV&wg2z$i%buesSg)x`YU%oDdbF(sa*=&TVU@4kIu&9L;QMg{ zg?P2A{Ojiqa3M*RF()FB)uz0jfQ;&Ob!tu$8M}?O_xHaU7R&>T5=}uRE?%dZ zjB8^=M7_Xd^{^i;es}G^bH_6iFd@roOx+%~fw|*G zwNk*#B|Sww5v^)kVIVh@fnq_-MX%|>a@9Uiumo~!ujNs%HiY<$KFHe>0uCW_W&=Ql zkml?|{BUFSN@5t3&{jQFO!F`cIk6-v*Zg9Oo0}?m6lrD905*nl@e>WGbS^*~j+Hh2 zpUA^uuu?`Ce`F+4LStOz34up|vTAAO2ioT(Fcec)vP zp;{B6^oD?M60%oL!8AU`rMrx^V#{+>^|c?+~XBgcn4x zivIwLLVbWeePha5L~de{i0jjpu+U{~SZT03n`mw~9AlAUM0RD9eeAgXy!1Lo_>6$u z3lq5mTU=^Qu1&Pu`)Q{gu8h>ZsiskhGT4IYRccAAYkyk1>r+@gRtq0eJZ_4vqyGT0 zo{DBkq5x@~GT4EAE28OlWqO?=uIthNVRF0^!0jDC6k9K1dz%CrGPFS>%jSoYYsfOQTL}) z<|6xxfZ2dL>tm{p#DloumI7m_1qXHk>vDB*@|6&eX#fEL00Y01bsYJ;c7KEut{cqQ ze33E;>M7~qnhg6I-~DEq0hD`xUM_fPWeNlWJiUu37pTE%C}ev8YU;51--#(Hwb$;vn~x>e@QVnxmJrTJQ&d&UbE$E`fgz%O zgN_(=l(JgP7y@f?XAU^uj3<4XIg1eR@0(~U&5J504S5H+_OhK^| zC1xF0MyhY1Wh7W`q>Vv0zR4zN4X5R<)h(QPWZ6bSiLGt>KOF8F!YH~fbC(FGmX{fx zrda7GXy=fIGYVRRutTO>4KJp>_u#05bw@DV$@lcEWrR&lj7vToSWQP>C!m%fE^akK zMz<@bUgNd6%SLV-&8*IRqNe7qRH(wJYVhgO;xN>85i*8`SWR#Kp%~~80s$AXJ-D4{ z{aOkXJRmbOk0v?M+L_uU!%q@cCOw;l0BoykjOc3|fz2KpJrm1XjLk@9xMn2uy8CA* zQavsWv;%wbOWOUPle|bFHFgXg&YTE(1x->- zE1mv%P&i~%GgMSVh@wEy!p%Pu3DH&$qgaMK+v|f_wT=Z3m>Ng$x4-*gOk>e_}7(Ub<5t-snNP=NQjb1 zl`-B&xge97i7jwJ)cWi6;D*1hMlxzb*(@q7Slh@}zOe0t6EqDQ)wD)wvfakU{jaUB zZ(q}en3r-zD?y%AY`K17yR>iw1KogvYUpIUR=cfMy=rTC(^Ewo3W@NO)R7@F*2}L| z6HA3ng0|#n4&+?$ei;)dA*Kcl-z;CumbknmkvdKiXN?4rO4ZF?_YTGFQ=Dj@0HveB z1|dAz+M*b2ia@D|k}sWfEDpB@;{0oIa#VY=S@S;|)`qr?FKo`4KXVNvkXSWX49RL( zKbg`ZQV41UGDiVrX+cLf>nInzwNc;6F#Z&_wy_<{NhF=pO>BCLdGqI>vt_L--z0)b zCZ>*GJ}vJ{mRF)#GKG*9iX&qul=OEk+UG(6(CNP$oBmvf+vnyPN}stchJaKxUr+}k zdgUINU=qblgfTYU-1_cE_5k(21HlNy%-t_uHGY?Wxx2)Lb%skaguTa<1--T=!@qJ( z_3g$-D8)<*CZt>ovpxLYnZ)0TF^->1>uqhn^7S8{*F1D_0I&&W%v&qweqI@2v0-0V zEWJxT{jAn|7bBXTQK8aJs#Pb zSiHqj>WNG=`^8%WYk_V1Xa%ind+l?VKpKpGaQphf8%r16B3Q}I{DAbfO%>0HHO`HK zP=C`(R(g)$R7*Hm<`>#E2EYpdE(Z50_K(my`7q)*_3ITb(PIS3a)N0}fEy;Yjcd(~ zFBRmHNB{%_lvrO~Ev>fG*ju&z!WJBdv{!r$b5IFmf3|SEWqi+bZ@X;(Bm;A{{{Zdz z9yY^45R}V$d$lk3rvh7qoB3iOw$a?)*SQ{^wmMt6)NwSQtIO{a%9w;qN=YtgHL=f+ z2WGTbm>f_Dl4+EOmU#e6>7w_!w&Un;^=BXkCop~g0A~2{dcaARB_?42xO#`Fpw;OY zCI}tn!@`2SF*Mg25U4c%x^~vyoHCd84Bu}|{?TmN=qXU80~)h6?DqaLhs(JH*lYNO zuYc0RzxCmSy!i*u-v0nPS$o0Vur3H@XEwWEFWKU{#-r(0Rz^V7Utw{!wmK93zfK{T z@|@Jal}=X7)2w{s+sOqxPk1Gj=w z!e)}juUgW%((RwIc&G`-K^ngtJJ%0(KqGu=V*5p1W}*NiY1med1&l07#MP zd*0)FgKbad2j|8x&_*qo9RA-u;hrqEew{;>Wr|q^feNa1u-JZp@5d8^5k~kp4mn-o zSs)bFyuj4(;qs71D#+dx>PaF^0+*+<=Sd`E_uXb)Q!3bla7S%#!t7NNrVUH^GknXF zODGNQqTPD62i^ji6uUA=7?R9M)Lfl)I{IsKrvoSkO)~sPP|JeINKUNq!Pi+B8KY@g zWsPi*#OvjXM$oB~@ROk&Lc4W>A(E25-*-0hivo4EwBLT$(!%=j#KbuqT7t%dEUCto ztYjF%F-O9yBbFH$$JbEn8uZ#Gy~Ouzl{<~EufH8GTOd1+Cpz)>rnE7p8V@M!Ukv&A zX|W7Gy$wA0jTG?K&rMSd6%^QziZdM2BvXCdk|NoqLgVzqSfoI3-g<*X?%>Q@`&7b5W#YQKJw|{rK9jTg>WEY=Y0DYsB<|5w#SC z9nvZr=}(=wI|hpitL;0?+`x+#C&}ECRJq6A&4nbaV;1|2?iA-?u`Ey5ft7&*salUR zY3f{X^^X4l)d{v4AZ9`nS9dJcf4v^?S}zl@3bl>vyfft~*jTibhFU=5{D4Np23oM!j*qO~a;#391piSX6SgZG8<$ zP%7e(#S?Vl2If4*;c|nm_$EyL?MX9BR5k0B0sCFDjxiW+{UtJ-l>tkdhX8*MN6^Pj za*u?VmOoGXcbEiNb{#zo3MXOGsFH<%W{s7=5xf~oJAe(fCtfARW6-H*yJC1XPOn3J z-`vFb4$jS&{n^BXntNCFz#7W(BFEWxz%O&ox}@SzXK3c(P4VSsd*}i&M=c1>y=s z@W`YNn}q$+i(G5D;=nL+*knKy7JS~du5Hcj5vv-~)UD#~OCQ*pgVU@ZiaI}q7$aj< z^}Nab|WGVHD{iD8)uBH-Ku!E!KC+yVg<`h)U*CBKNOV>ZSi6G%x=9L|1O z{C91Mf?)KOe;x2jwJe}C>fKE0FZhdGl^caRdX5|?2`K;&0B{_J$%_WFJ#WKULanKZ zDnC(kQswGRU!AM1bz@4ZY%Y#$Wg1FJp_WNZ$UN{uP$4-qyl=TuEJtf=#G8`SLwxo2 zZ4VP$K~izJl~nH@WRad-dNXAh;e69oTkwfRGgieQX(NS`H8eM3%o6jk_d1)=KW&9 z#VYwvo@#34!Z69XM;^rFmbQF8wsSrSSzjunPSjN=N`ARk%b0*2iM8*>1c`YLOwE}; z2T=?$vv4@Fnexe(F(D;EOa%p8kyk&n#d(IT)OGb#6-iA`EEO_G1ZGUrh!lP%QDM?D z0v18|md5rX@}qMiz|^;+>A*LXR@X3ZC|;@@8Ot{VrchR5_i~nI3Q5$E4wuS(0k|JM zI66{g3jir_Dt_Vpb&fZa{{Rr(J)7?fc&-|?R1;;-*H;s~jK`?VnyhiH_BPwSkA67B zwB!&QKwh+_mbaL@ylzG##?=)rE3STnI%|@a7X*!5k0dO)FSsD7{x3oe?|XOez&J?- zGfR@hgIe65jl%Fu;#4U@TE(5X{K#>IPHV++STRFM@rbd*BP}g1>(P;O2_$XF>Kk0_ zJ$SF}%tk0q9nhjn27G}T-Rnzzj=zn3;1!YSeddY(D;3IoUW_D#Y%oTf;+K%~-vC z&yk1XUoTK#j-w0`!8KI^bW$zExQrMElo=ZhDWBN2sK#Bh zg~MUS^pfVKs=&8FccpI3B9y4H1eE}r6W?1MZg;UZ2Yo$w7Hqx5IHy}Ravdp8cta+5 zSRqLOSP%d_55O8ZTb=wCq@%_vdH(>zInOC`sg`M{t%fM7aO_H^qB%O#PfJo=x{9Eg zBtQ+zSleb8Il^;FG;z8;d9{Z_ePNi{0K}80FL>onSn=P)PG+F4z-cP$xrdwZoI;}x z#Of$0!%|8Tc_5BzdT19UG7Pq0?gviHKqQ_Tot-8~@0Ms#g+C=S_Iy45dt46%s)od&F{%hDOC=;fXX-YRu?AO)OA-8euR1`BM`IU9g(NH+Gh?0iIwGQx_By+P*Ztt>5V zTDP@jB4{JLLCbUsic}uFg`0@djU~VyUcd`m&;hvi2aiXG?&%-RvQrsL(N*8c!b9fg5FC^-JmshE(=Y;~n83e#b6 z^<=1;B)eTul0e+pf$lZG%wJ74xJ_R5^RK_>gk%Gp#~6^>I(TCL0MtyUENY`dWRbK7 zd+IgVa72QDL7aC|k~mVp(T_KNG^_@*yD+6JqN7l2cPCfto9Rw#@t4FL2A>0LD+a}I zY-X*d>D5ummZ4*%m#CM5tu7;~hH_h`q+E+N_Tdj`wuaA}FS!8PJ%r6$ia6w;BhtDK1 zV${Nly-xDcM&*^`BT!4+h6EcEt+)>tfWgn4p7vXi%%TAyfwSpqHw(veu*jNRfxH6( zLy^|;9-0EnJczzpj-td086EO6D2^byoWKDo)TzI}1uk0zt?I1FJ?LqEb(I zw2+aQdI}4Jmlo2(9O^k2oZgn6sy40M48p7eA<BNUZl)R2b7L?U==L4acvwD^S;S6!(l6%ta)k(gvgj4#4Y#k{jb{&c;I00GqT>b;f0Y}Kg? z-U?9wo$9eQAOiNwOs`P8Uy9l|LopK*{i3A=s0MVGAknUn2&vXCfQkztR4l5YTPQhl zehjBl6c58=VQ(q6yn15g$d&;>Nh~*2x*Q7zByTtzW6ea_s!Eg=rc=5}ARSy1-+x$+ z*^!Zu_0*BnTmAGzXwPjg-pqFceNPc@?-OEpfv*uAiw;60W{tHZHeCZa1+B0o>OnpD zkV*!iR`lH${&F$XlX6d3W#xPdPG;tAS>?DQsH>^Q@w_^QmMSWDtC+`EQy8k9X`;I{ zkVQ=@nMKkV^GI#43O4pQ;C4*qZ>1#nfDk-MU=7=V7XyPs4U2=Bj@lBWfn_B^lpvA~ z0CPtqIpZ8@_K(IB8S(GLxu9&6l-%2i;8akS>IkT?Y30D+Hc#LY(WwAwZr3+HMI#V# zC%h|nStQZVJJz-2;ywIJT#Ou)0LD@PP!zISw)G9c>m4!6P?|nm<=7w*<%bKypE5Q< zISpgy z=O*%S69JQ0JNFn_bpB4bH5 z8-nw1F4c1+c)a;$p9#R?qQ$X{athX0>BSXAB`gzB2e2JQbr&}k-~M1!oJ{2+q)l22 zJGx1H>+8YA-^=zhuEzXI#JRVW>CJW_iukpNOUm@p zD9tSuHETnM%QUR(91jHqak8i&Tpx4Ah!oGks&*ijo}BUoJstVbEmFrrX`t+yGjXGcMQ(Tt&q0b4MGcP zMJO}@hKvWynEP1vRs^LbN~*Wja0z`Mg+tPVgc0zGAgF^7l1PMtN!AZA4lc1}BwP`F z4T!#m!@m~ofh;arpfxmSvwJXcn{>3HV|s|Ns=A7JYhxtK95tyKRGAQ*!Z~xIF(d(V!VSNLlC{iAkVCAwtzP!Y z{`yC({{Tz>0H|G}>~iJe_9i6DoRAa=CA=l;S2fBVd4KI2;@wPCcy&)SNr=&!zlW(x z$YGXhao6d@@yV4yP=IADOJySF=ZdVYi-22_mL%4UGU1WT5Gm*M`2PUohx+5O@PbYo zX>8P?0f&EuGYb#<7bMVmWq7>TpSjw#rKgh~mRRGOWcWIqve3NQnNn7yVQ+}W-?;8R13Xm9{JE^_;)dF z*1mZb2IZ;-vM zeFqs0P@p^@4IFF7U$ib#)dj507?oBP>UqqHgmg*F227<-W87O)zYr2!*E8=2AsfIG zpwQ(}cMvxZfYn7aN~xa^H8PY2wu5ODR#E`aXPagzoy}iYh|JB` z0o)cfYkbloy?Vh}B{Z>FQPwfsc_YhlacdH{?SFG(c$X$=B|uj|N1Z-boM_B@hvr}H z1E;8y5{c3>!D59}3!mU{p#E9|zp>*)F(X3JB(%A9XRAJ0d7mLlMiNHojGZ%eEHAMn z5(yUd{eHY^CseirFJHgPS12B^EK?AXoYEj>)aqDVjfRAt`g>S$II!d(WJ~c9z*O0+ z_q=YUT&~M&70jeuMs$tlMBz7k;H@DAUpBWth+kogf zRKvF}{rwGXF(j9zabt6)PTwz=`W%F~ul}h|%;5$v@bT2s9^Euy*|Gql<6~=SaBcD& zK&zf--W|#VyFp<4qOD&zuzWg|qQ@%XjCrKPU5B71eGkkH2cXk#Cln2(BEPpk+b-uO ze7cKshWzb0_G_zWD!Fg`Kan?gpBzlIdoPoH1d;mu{?VJ0Ak6T zvZtoMQh_Dhcx`4HUj1Xl`%#RUv-XA!QZVXSQV^m@a7iTRT!Vqc@r52}@bR#mBy%+e zCYZl3Pl!QJ3&>WJ6}>>~)2%f<&s`B%b=fYU-IR;pher%kEUKSVxx2M*<^$?$4>l)h zq+;fbB*_X))c^}nxnYpZVQ^N#+!h*sp6L$j11ddOs z^v~KX-w&}V@P2K>Wrjf%br_ORODF{t($`f{QqLJIa*`@l)RDO-)Pq>t5`vJjKsp~> z{pe{G&AEj$aO+c&;E+wgV^_Gp${6YDb0c!?D%37nWTSUuahOFNfgrB8Dh=3si}vHr zd#0YC7zeMNnd_%s5#$M!sW`xeTUUf#c65#Dg4EMf zeLmWo*N6OG$EflAXBDZbm!$Z9Ap}&aqRu9$k*Xz$lGYJM<+3mW$IL8vs_mRYCrvD- z64XHeuq0i>-n{kJJsw=LB+CSvAPOEC{{TH)yi+hsBG#@i1S%kd9D<%{3uaO!jH_iQ z{+kONyJZ7Q4iHG(Rv|NYiv!|fS%G|;gW8vCK@z1^+l^S9oP(G1$}Hv)8EMR9ec_U# z%6mvl1K3+#Exo;U;!J$4<)vU2Sqh~nb1m$3<|5O9n0G=;mQH50y&sJS1D&@+E@mYE z01+gO^*8!=H~DYCGXV-q8hAlx71u~$5~8co=pW@8{3G=Db}k%QQr07|9mjiZuLKJY zLO4(%M`$KRa=_ku^yB^NCc_NHUK=2EQOX@BFs(<04cd z#q)c=P6LPD4bn)-DjROH6Q<(C+g--?{{U_=hJpx6w{rRS{$albn7b1GR7hd9j+Y^Q zECJuX!rk}*4J-V5c0#pNgaVplFJiicj;eRscUS=rWt)DS+lm)XD z1Lkjb6xKe6<30jc;*nx&%DlsbwO$Q1FYOFJ5v+LyMtDtZQY5)TsDU4)9mk!3EH87y z)osniB?}Ca&3}A}&xf3OVuyqh1HEiD^Y~(hz_2uKZ-f{sG!9dPns)nLe%()qeMl5pP=JvM^`!$JP2OB1I$7!3YHPnoaIJI)< zw`fU3%q+n)QQZMea0?pR*UHr|7jN3n#H?HY0IesSIbRE^z`y0n@3b!<)#CVD)JE92 z$8h>;ip&}@64Ymt1bONplA>84cq6GqlPF|X7v9lh*bSA8 zN+wN6J=JTL>kD0j1NMC5{i43clYNzb%)S!%ug-O+7V&qUJXZi&RI~uw)H@z%2)j}_)TGs4e;!fm&-W+NGf!y4}t08718+1k1h!jR8qV7r_loti_QgHvWaZ7U?ZQcT zku78z*D`u*TG6l4o^FK|th?Q-(Thhx_!&nrqL51k^5Qg@R7eS8^5POLGs`0#P?l0i z(_8FE6<*TK3LD$EbL-bTUON&>=CC%PV%DX&aM#P}{cj{FN)>mw zu3RZve58DJ=KflarhZ$);uRE}yUJY4SxGc?pe;ee>9FJtTVMbtrPN3W7A)C@yn0Ru z_i|FA%&-k>QZJeHAC;>wFx`rt=RevxE5s_QC&&5ZQ6Mqb^JOw&%P9tChDu0s%He$1 z$&}l*ho=@zoPs5)Yq&KPy)+d;UoupajL>)(kM zSX_$b)+awvqt@MGOhU^Tia>Kn@oH`^4TskIY3tbWB)p$7UNp}C06d^+>h8%jy}ZSr zR(N6M`bVa%Sf)R}>VQes=_cTtYHfWzJMhy02YFyRYTO&|Q`LSZa#n_*^80krn?WB* z{?8qEf(56Qb4D@P(Op$V+FT*mTVCS#&2nyU-0^zZvX{IHOA=gu#(}!r(1$Pc@AVYS z3Lu9CUJ`BtvxjXtit&QqXr5TbsxYYe-i7HXX|OtKmgoA_mZCcRLjziI6($vj(Ncz5 ziHqb>Q#d73+W}x!+n0;|IVnjF9l#))-L$S|w4sGPiP~~-^HGPLx=P5Y4^rCOg-&%b z!?<@Mb5Z$p7|9vrwWB^Ch`G<83< zC&jCAj9(6%3{IkHX1hf_V`h}*Y{5;5;^W!Q)9ox*cOw%l?;r%LcoNx=Upnb}QlxpO zYC8*q!OfeC*{Vv!*_+`ZAOH;j00sh{jjUPx&CS?06HP}xA&IR8J!HZ-Dkmu-NYVZH zZlq+G^JWC!QLzM$F4&xGq$DbOw_I3#nVGa}iU>)wwoWQ)HwGC?n8hF^*s#cO>KmLd zWB5%6HDGa+G-^DOZ@hWRinNCsD%eT5#CeDO|EXmv=R}s|OZr zxYR>!o%*~UDN?2&%2cIpsU^Wl1X7{F&W0$83@#WBCqoqtHXDc3)JH5yO9Mw8C2UX# z=_FD>xgko*q}wqhi|fKUa#1ZxKnXRWAU;C%)-J2WDs;5(6JQ*Ydbu}t=FaaHu;qLM znfZP!Qlkl$lB$yqcq*yrLer$vQzm&QBr^50TII&-MUAg>XJBOaL1u)9Jjt!S4rEp< zO4>7|V|${oqzR0Ws@RLTV|?#zW0~h}STE4NoB#>?E|!M7hcm!5|ai0<8LE1>V*U@h1vkP}9`2RCR9U ziDFnA>vLjmEqmK@u+xZw(#+eyP!rQv^R8UtY-@n&3EeC~NEIAulXBE+7Zbvvsd*t- zbS}l1Gb=|BKXwg>Am{$~ zQ6#Y-1#4;vAD!)O&bsy^h!Zcu4Ik!h_Ui`A#7r+oe|`YjuUl(KV2*)eDlT$_BY$77 z)Qtw3-;TSpnI8WDGL8zSE@P2bVAVgrR_6m{Xld~(8C61bmQeNs?@G4kOP`l*g}4)Q zc4FCSed1Y~%-kvN@LFZeP&?Aqx?F=%kq?k^*W*(c2PN}gFk!g;E-lNovSGER38-O` z10p&>QVepfMo_@4gj}&3o9aP4AB4r?B`kMy3Up%BEvF_o^`af8voKSizm^r4-bhw| z_I6`ezath`BjY$fHTaE&&~xmVg>NlW)=OK=kB7liiPhJd5VI{B!5Xzh6T;Xf`__*0M4uPV^zTvG?brCM0#qgqu+XsW5#B-HXoEG4F$L01Pd-+O-8lAK;1 zTJXzEy~KwCm2zwu`5jo%qscoLIaqzCIa_K<)Jn-gB)c+fOaB0uCw)ygADHY8oDD*EQHZeterUNrX_40e+jj<`f*pEg;c2$=1e=pq!L2`bCcEM)#Pmy zV={vEYTGQgyH5jzmT-7gzQ&TE*DsosmLJQSGC13+Qro~)r z0U8biMDe;(DU~Ua`}F5<*zEZ-k9jdcK)Ej7XE>V>=E^}sB*J`0431`=7NjxFJkHEw zrV|D}R$xY9dtcO!BuJd5R_^jB+rh(i>qqkq5gC{b*@#TUp=qHBU_m2L)oW#=yde0+ z&-jlfa#lZ#j3QL2TKJ)go>pkmo~p8tq;u8u^C~@!!uC6CZWhuYNo54+%nq~^9PDZz zQw}>TfR~8Jf|=XiEXm=XzR%}x{f;?%0LFX~<*aV22E!-DDyy-1r^TLZDMje+04FB$cnfGt3PQ^Z=nF8WUTj^N z+Ai)yoHK?#7Tb8E=g-?bf4ohH#FVU5Qp%%p0#f0v9b{q@4!MS6Mn_$Lg^rD4 zbUwT&m4iL=GY4h`=sh0qL%=y=;!Yw|<$?}bIBi?YJ~j~1iPEsADILgVIZFUfP_LL@ zZ8sZ{+g=&33X~ z>T2q-uLdski#H1J&MXpT#2B1LXdF*4M$O$i_j zfFmJc#+t=T6WT>$r*0`E6f6RymIk3lfamDkNQF5(DW$8$Dlsa&MJb}Gm1Uarvfiz{{ZwydA?X=_Y}*|IBt&8uk_!il`N@1HEK-`w+?vy;Qs(N zQiQ>#flfuH_;U$1J!Drz5$G&gR9yc6=JH~ZC`&TQs#3!;I8;4BuAp&@**J_s@hej0 zkX11|!*-4sHLF10cg~NfSZS)UbtNPe)bBkdUsgz-Ig%D}6*vPaWV;iV`H0jVZA02i zmnCXf+b%rb?@u`OEHs(8iMSvoP?S-b$9OMcn-Tm+%6}Q>!g1=}ddH}1WW@0dM;yWM z^~9t(=a!m{Le#*-*sOH277rk?Ic!Pe%Jz|$GZ%!_7U~BV+`3id+2NcMTj7eLx-|$`3Q0d9?|;wV<-+neW~n+7KJV7P zacrA383@yK5N;~`=-koQV_@I%LiN0B{UJCfncFQ}geN04T5>0Qt@s;jyzMs-@CFXD2omH?CX; zjQ}T60>cbZw?;=??WT{JhL*V(|9c8f>_8z{P59!%V!c?_Xmp10v zLuqON5XoRP;9J_T>&ubAAb8{qRk|RtZ~A67IliX%JN`$5u+m((_*vY$X=`(e#?_e1 zIcGw68$CW{V;GciMNtrgS6C9j>UBZ5*LBwY`}%NNlexZ=ksWiWtA1$tKzMTKNxP7K zQ~1&ns!@tFFv`Wv$ltwy`deT8aIr-9gV@_9J#!g9o9sJorq&ndSM-gjEgVC8ApLK| z@umL&yuX%-JQlORE91)ZAA6zB(SfY6H_ z_$F1;dsjbhHmK5(JQ;&CM9Uca$jFsFOm-I+)Y|v-`f%Dyz0RB&vix$4iR_IvEV86Q zniT6ZX4Kz9f8}ks>U5%{yU_Vlhd+LxEJUOzxg?WtZIK7~*7b)zNyOednjs>E=$Ry8 zd)-LAu5}|*Yx`WCIG<T>>hHJUnem1^i`#Fn9D zR;hYe;$)D4k^=14i@yH=*Ipi>rOgliC5Cy9A8WRe;@zUaV=&Jwq?8~iCEm1mAmyha zA4fa|z$x)wSFEL{f(gHGM_E$URUe9z5TTGm14EX^5h8>_4YPOCk4M;`PL_}WEHncr zp$4t*o}V}N)?mWp6EbNbiir+G)OkIFa>|xmm=#_ZT+}#}4Nq4Rh*>R_i3%>o^aMBK zT`Uyaw+yCXie@c=p`bjeO?i1x2&@cpXQ4ACk`pij7_lQ(3?EUO=~zSOI%LCX>6R*& z5j8_iJVwmQcF5#@G2c^dcvFr^NHwDxJLtu$@|wflkf&Haxt?dBKg4qfHpLjk%*q1X zu~HN%8t6r~xFG5C_u{8Cyu}_d>3cjL?p<870&o6Y&BwGMOH|PY1~O4zJgwZ_$t0hh z_4eO^RQtxZw+!OInFT@pkL~XZc>P+`7L5jQW(s3+Lm7l_z{GE;3uA9xH{dDLl9Hgn zknUUF@1HjXq3+DX%t};9@Rx2?AGy}167e}Ecp{WfH%F&TQHj1_fGep{=CE~TH@G&r z8t4}O`8Cp(75*#4MUw*|6H0++tvL*XTmye7)YZnZ8OxQDWxR6>pixZLD!>pyA$PGh zw-}YQ!k4kg=HJP3)``v$D4M_mo$VMMALC_Qv36&jS+8;xjqh`H2KxU1n0dZLaCn#* zovBdInKy1U{KIX{$qX211uEz7<*ZMx{mB0S=0C3;lIcm*A14h1VaeWAPt<*kC}KZ^ zp7*u=vu(n;-&f597cdU+P-m9`3UlVlZJ@auTR?k$x9@v!2KMr|NOP8MYLf z*+USayi2DiCA0)+{4+4OTTxn#Eh;C(s!LB%1yn-PbSjO$5F&sx5H%g_Z?>?^CZ|vj zC;T~WAjBjBkiwieUJ0fm^He=6(zbeFGs=UevubUSHiF*U5Pc6DluaCyd;H~p#2AZp z`2PSb(Etj`9tx_OWdXl^cKko%J`d@yry7W+{{WXuQvG<>T_Z(hg6~vBrJCY8(I@wrCJ8{2WdN`wXitgRoDU&pyhXgQi zO-^q7sx4bQc6TG=w6r+OQepwAGCa{h7?kNtFaarFJ;7m=Ww^S5pwJOyl`N!+k=OCb z{HsW!PXc7^@nt&#Ufn%E6|8(#z)c-?Gc+hqUMi3~4uwbfq-$(SE!9t9ps?VHRE!o_iQQ&;K$oKXX^pXL9ZKuTj%O|J+BVYAq643lTfvbVZHCe-7AVttx*4v7%Dqs@Vg;+@{B`()@Ip#PVxW(gUZ5dd3h?tY& zM(dRlU8(%#d&NMW5@3+jwDY8_q~2JnC02r>N`h)ua8|=2s2~HP+Sl}>;xG~twIr#D zE&%3idHH!apd+;y%uJNYl|3K;15lc_S9)ZA@m_Pj6%`a!A~jI-a{v}K>5qrgQdnC} zKP|?*F2qU+sZFQ}VB?Obj-!lQ_AL3cDzZr|OOxgfPGP-5di;XnDuXEpX zYkQ6qsbLPnqffTKePZ7&GYc^HYf=4&8yyX%5N-{Iwz2fvTmFBRw%}oi-b$~XX-b}4 zjSmPRyklBFK>q-f#u}lZMWc~vmNcAdGo5r6()!=O&%L(|J|(KOBwC`x(g)fA067Ps zq0WPcxqw)15zG=))#7xNj$ks>Q`7-`xj?W44G0Hd!?(+Zvet?KO@J)pDgl;O`^7VC zVz3kCqY6q>IZ7eYH%o>hp^I}Y*|ZeI-Him1MNI_l3!&+b(%3IrileOzmH_iUn81%okCWT%)@*8c#Bj-{eUhpskWnzvAa zwY9$YIu0gS?tmu8O$e{d^MN*k@rWX6EcSBY-{x?i2e+jqXAL>G0d3+Owq^d^ZDp#CTgNcs43uok zr&*90nMT?a7aMlagT~h_2^Zr>70#qk0hOVOHpa{fWa0sGXiWv);8XT`7#zq5T4_Yo z?bj1TXI_aQZl#}aeF-C9egs;jg2eld5613v1kw*iB{RS>rX>du{3I*z3edK?Uv!dek?snc)%1$0|`f$xRekkQmp|+0Pifc?O~wX{x7W zKfD%e+}P?x@1Q@fo9)BgD#Abv1^)h@wIbWHHnfF`uq;}gGa8KeRpWg4i{h0FSU+~t zLXpBqyisN$+}qbpeF(ARu{;^fUhLKsx7xM*k2f9q+-nM@C7U9^i&Ey)%AxBO{{TEy zitcEu=!9q?$w>v+kYb2tbGaHF&tq?yQ;sCg7q~3+vyUnk_z~@eg zdi)4AhP;?>(LJYMfM7x?2Uj07KDbm8isv(x1 zhDg+$v6!d!s8P@!;F53db>C*VQb;^Q)bZ8Z6F2ZF7N;A!a~*o-(Q@D}Vt75F zAP)PBfv(=Zz4YP8u;e1)fU+L8_W4hOz%23?u(q0eZSA(>ehG);=ucl^^WbDYW&5ht zDPm@bi;>^CKDudt=y>IINqYYPKOQ_=`ip}j5S36k1;DS;8K~#XUiT#elc++wuuuct zMu6%-&1ee|8pw$ytMLHT=zzo_v1Wu#6lEo`mRgfd4W%&`ureXo?*jXgz;^!~bAiG_#H z$FPmTXjU>7PU|Ei<*kplyB%-FMnUMR8UjtPdy95qxChj0-0P_q(}?C}*X;z$n39~F zWI6q*T^c*eP(wvK1Mr{ec+v&pjnLihQzs+NrXi;4^ncj__wfkiG zGz_Pj$eA53Nfsb>C)l4`>H6=A@c_drjD}UVjmv}*nP%>Klgiok(bA1lI_U*o#ZMOtQ){?6e=FQ9Jq*%B# zT^ecSma;h7Cs}advK6V4TMKkl8=7m2NW($jftN3r0>Y<`eR%PR$x$ zYtD6e#Pm3IZ4F$hQ8Uu6FB>d>2R(|dJi)HDFu(bQ*aL001!y@EIR0AIx85a};#qxN zo%pj@jGyxz34-`z$@23B1x7brPNt@5VX2}8VWzH?zYJmq0ia{u$O=u^U$EQL5={wb zH_MiM^|VVWOp>DNxz56`%9YSmS}gki00cP?6lS93j7Bb8#o*DYp_}5_)Qux(B_V_k zKNF1w^y6a?phz#rK7-c0uaxV-N-yGPu0okJdP0+U7td5~kiq*hxCip|XLVy@a_oj&&I0-%@RTPYUrk#AHaXpv<-YWI%^FEtV!tPkvYy3`+t@$UcnzhdAzh z6AJM2kZ`&h3RH!vshmkX6fi^ZvN0E7JzM#hja80qPj1{V6Q@ipQ{g6stHIn6QLRI@ zqSlmP@Tm$3K~PR<1kh5ZwH!%%*po_g&)NcKO1wJ_dJH!Wf~IKJ3UHNpg?+BMUpNuN z0*^106(eiu!HB|{f~4}LUpAnvZJ4Xo!NqMLXqo|#eJeuTjc)diZi2d}nhZ%9UiX!UlHi+=08nm61tSQgwN6^)=0NtDwFqSOOL4Qxk8R;6i zQyTvOmpPLUm!_-Gm{HX&lp`z3u&jMDGnpiIwtE&j0j8WmJsYx=W%!AA2Uo4Bcg?)u z%q}4_)>7IyIn?^oo%49=*TX5ODkfOy#T!&Po}o&Js$yvnI$u4BT}FiMso<@gzwI9I zF@4);Yg!td;<>fKMkMJ<3Ozn~=UC1NmRDe81%lWDFMTvN+T?c~^x)%SMv$sfJHmPW z+cAGAVOj_(sMeacon9>kL^2!3@tr)(x`1>!So>+W0j!wR zl!n|Ap8=qzG}Kr{9V*({>0Bd#ef-B!y@2is^aQ0ule}xI+s{aPj7))fWVJem7So0G zCE)y6tZ=BNr=vtxkpXrfld!usUnB^WT9Bn1DiRA=< z5>>LJ7AG)UfC0GB5H{nfX!Q>MR332|mH>N#bvf1Biw_~3ID3z$2g^a$t*%;@yZqq_ zrV&?R$^QT`8QwNz7QdRu<~@CF{rk(fbrHzaQR?E6s!oJZI>!WNNhS^&;^!+K`+#go z7y5CX+gZGuKgX|}5aoqll&|h#8x`e>EM02qrZ3cpGesz0y@`n@=2S5jzLo>%pJ?ph zw3Rppr&8v=dUCa*d05`$?puv@^*;nxYe^*~RzPmiIu>zdXSKZM*10yns6UWFDnc;I za%u~^n%3MX8_$7@4h3Z-O%Gbp`Ln+pQl7r^{{SrFG}Rb>B=vIQ6nNAT%PSnx)Kan{ zL{l=_++uIzm^ zw~&m~)6*zU!Mr`?PE?j!&Q#^f90lZwsjHt2iDGKeV%HAYko%?d z&8x(@;qMU5o|a$*E?5hCx$=q8(^Ey#hBYMI0)1G270&wi{d<UP56g;0K&?v*Xy0}RnH1~*7r3yvwZ@(JW=hghLxRJDoBZTj zD>5+a#FH{=ibL-PQ5V!6C7astGnKGf3`-tUj#WKA87z{?R?0GbI4Vd-f5OV(-4$#_ zz|f8v?0i(@;}VjkHt+yBp>vTru=j8YfxAnL#bGviMg~|}0ZdpG5&&ZC_XmSRKQwq( z6-oW0;q6R#?h=%2^;G?EXQGu`RZ4j+B(CRGU3&p>$F1RU1xZMl_Dy&k$$Dj<5kVe9 zgY7cYIdb-v8B*20L$$-u9OhsqC6TU_W@wXO4D zO&(LIvs*J}>gS!sqQo(hCxE$YD3(AsH(})8iZoN+De_R}{!_%TdVEU14y&=68jL?Q z6%AD%ltEDlvog$sH~CnS*4v2jSar{mLP<$%i51qD{h-V)B2=}fyxlv+!8I*$e4hG_ zvGTW=c|VwNd`}R;5*mv7=ni(J5IWSzio`2IlN6QaYhAiZz_BC~ryg&#FiVj*l_^TD zWU8RKt$d!BD@4O{MNjzQ4qD@7a^V8c(zbi8Q>2gJXDiD;Y4_ zyh0kf$WpedS+M+)#Nk!Hn{A2qneWH0nmlj+Dmt*l6Fbom#+!m_{YFsqWjZx9vVvZ+x zks3PQl*+4rIqBSu3CX}rO5D^PNwd39u@u)(*+-ph4%h50rHhm?IFHeHsvqwtkO?IJ z0F^aAX1UJ|KHEH__H+9^;NBebe=T^Y%N`*A0Lt}PogXvv#sw{Q2afaBH(w&x;j?2D zhN7An=^V<`;%Na`6#)xv8sQRze`aV2-qQ6ilUlE4BBL@6*Z!YR?MB)dtOhp?kHX3! zdzf`3D|8hA6cWMeFGsarE`Ck%`|SJTpN7~EgZ?Y?&nNT$05kK*{{Rm|K^s@fD!G}U z5!294l;luW;aN;(1!YW;mLS}oIL4w(q1~gzRl>C$Ppj)%LTUR4wY{3!AFkQkKN%|x zgJQLyD|Gj63y{LC#pxd%KGlC`Xuiw5%O^2%cRb;Ek16ALn^IvszH1xyq={BYnFT6X zidtC#SFL5T$Ou*orvqTIINS~B4H@c1DO0UlK8fsZ-yOKwio@gfYWwLj z`?btkYF3hz6&D$oH$REowTjhaxDFFMRn&BqQ_w)>Nalj31e!Hfc%6e?r;4S@tM-hedSmYNx$kwdGC>-*N(Cf}U0LL?p6AP^XVl`mJ% zfsGXyrX0U^CWcv?@W&n4wZ*|Qy`w^IE(y?*IPblZmjZ1?FZ0y-#EHV<<`R37AEDqc zq*-1T{i7%FHk+8alaSL3Zx$;lp8>&-G1Fm~mo3v_RZBEDg+aJ#${bo0m4z)-8EnBx zYa8+A-LS!pzL78Ws*okDqyVyzStT_9hs@UIvFLq^nKxq@)285pih&_(NKvY{s8lF4 zV@gNOu5ZG5s}9F&@jP;k>Z&oi`LPA7jyUTn>uW3P9;RVUQxQIAmRDs)Ccx@FDu3x% zt(q|MQ~vSS-Sh*)X@a29Cz$sj&gev?Gn&5h8L5K$ZXm7f215F2aL{8pnoh zq)Eo;~hKy7Q-?Y;PBloD0DQsh>)H*#C- z<`s|j*+2l!C z*=@&@>|-rE6%$lTo0@{fDZOi$sjt7FZ5c8~-eDS~E(Wyv-Q!*rg!pUV zuP%@PI=^Eq7Y)OeCNEMeF}_KdO^Qt%g?<^JX$=69J2NudF&uf`!~IS_ZDM7K zMMxN_ySail&F@p5ZN@zpYndB235Ho(0bUkTnUg}K0$Sh^NL5 z$|)q4dRo~i;G>0Ro~sjzs%1x!CbF1>Uv+z0`tNQocmpE|C>1HLTpmWbA3KcVpSNdB z#$pbGH*<3BUuLx`BAW5Cn-cxM9R*|(Qq@HkA@Pt+<(`ue6_QgWIY2^(g<~mUpkZ;v zcWq8g^_{@LmjpA?+55d*vM_lS)L4 zL1vGrL!@!7u2e?AToa|q)bRHdu`dlJRjjnwP>s+@r&r?D5#(63pyE^%M1^Ma?X^NDN`hWg^T?ufXaE0J4cw7kA{^TsCieN2_4Ayvza>B5{>J4KR?jDp^v} z2yz0{;hC*VwvcKX&kQk4R33k(=L|0i5W7@K$aQoTNFk6J7D^gSVluZg5N3r~tXie? z;sure0F7O)Y+TmAew8(}?3_SWoep#)Uo(P87tLdH>v6u? zPLjJdEL+bbn{e_5JmyN*E^#x|lP%}~0JRy<2Wma|mr&+OF**ti)DXcXOQ6pq$j>Ay zKqM?|j6Ay$W44-cDL^;m5} zBx>*XEgac$nBzf}&>W;_Km>7(FVCCPm)}}JSaUvIKydlil@DB~-9V%YpsK2ASaseP zj+j8Mk(UufWY1{Y*-*-Y$Xm<-v9`Q$cv~(}*_c#R;BPr{z%kD*9O70f8p~envvi`C zD5_(QVVVt1D`yjT#>4}4lJn?Ui&7tKJ*cJ}>G6Uxi~056`u9v0)JZ#fM5hVveGsW)g$tc{_st#PV#GA;cx zkf+l6YDW6g>)&z~N!Y@kG`WB#dsz2Vct*9*)H3btW})hTY|iklN}VcW3dmm~FK)FHW4(;&vHbByiGK^5CkfnzB_|N@%d!sn+!hNn;%G z6>g^OEu+1(itx^sL$OdIt;CUDp}ix=yK#h>HcrXJVWpKRIGHl$5tsmy4Q%xx z&qHMnW5=e(W5MuBIi!~h<+xVP~qE!D1k;g{l6 z+M1R#duEC+ESYVXt;jdxA`nQkmL`C6Z0TH%uJGPs%*8EBaDqusEQ7TLXkEC{8?bd* zYF;K{ej=iuYn8f23uPDlB<*eQ-u!BCmJ(S+Q@ z=_ILuKTwM3P^lv=WD>^9rC&=;B}$4~Y$pp<2H$ZFWG0GpAn%^0HUOLXjmD<@Q1*ro zy2Kf>stI$L47Z&P7P@8Yxw-y|JC`-bI0VRb%0NXsC5>HX3W9O}8Rk*!ADUD9gBFBhzTwL6lWh?^=+>x6ozQh}8p!0dbQ%v<0 zE5x-HazJsHFP4iEP0?m*ebjg~~$Ae(=P0O6m6}oPfG}Ux)fC!d)RQRA6pTbQ$ zhBmg^=s079!afFJ4D71r?DaLKu3O#>mo9@k27H6xE*yNwg7_rwSA-1 zy}mSgL!M@p9i2=?88WS|gHSZFBG%W_>%4wXja=jCfESv)St;0{vt_^MN8K+&JJ}CM3)ySP7SZKMJHXXFaB4tHodgeaiy#R zfZ$LAo3|cZUd@y!p0EnrQZ%D;4e!;Xt3J<_X@qlcAY#(2K+$8F<(1A>_*v_uiZxXP z26RTUlYKbr7cYAb8m=$I)$49gsG~=mc7kJ-0_<{gSIYFuJoC@!Bs}pp2jfRH2Bdhf zM#6Cr6(6f5P9MwB{?c4pWEV)Jr;22zfm~ilt(!KSC!2zjaKUsdBvgkv+3jYgucUeO z+LCzuwLLoPS>j$MRStNi#f@cET?5F~6+&D-kt^tv5Tj~3RgVybR(BMLLKe@~Dhr)vHuXnOsV+R1{?DD5%LDODlPRlc&_m z*C3sI+%-v@k_PZkcR|C0^}n6tgs4vNPL^3Gbvd}W;dirn3e+AgPOMhZ%x8|AR!Cf3DBnYJ*prI4j>BBrn7%+%kESn#_xVm4ICz0qygwnZe;j@9>} zHsZel@YMeRmidPo%w(>`F>JClpc!NM8c>l%A+_^X{{ZR{cDr0yi}33lg%Vxd7QaR{ zVbav;;r*?iM9_~CKu{a6VO*SM!}FI*a;Gy@$4uP4P~k+?i&YfU4Jqny;L=k@80+`3 zFw0|m+SlO@CR-%1-Jv$C+4cTnwIqf~930*H=2-qCuQ^YYv3^OxaA(9oNx74&8!Cp`*Mp0G^H{nkOQ!A0}8pTK9jy)>{H+otK83zt%KJU!du~|`aOmK%Z zVerM`jXoB$nJC*9<*Ml>>MLf7qYYlWGaC{*sBe9B*Nd*sL*b7tKzenk(VWvL$2y-l zt$FrHF}l8J<~gTfJ98AGh>#g-DVk@=0v(BgEHos2IBEbAQ(!`J91kdxSv6-ByPurm zq^t@Dmc(3G+SddFf3FcDq`hhQg5zx>#$ZOhiWu*2Tip9x>Q8-cd+=I5v^V@i`u*$2 zi?QNpd1SCR6$eMASy%TE=L;g&;qsGU939S=u{wL}`u!P8q~x_Z4mteuu}?S-;b)Eh zeC2rhLH2B(o$%Tto22qrgJbC(o=*EvpN)E7*l>9H-};25 zE^tXDg0*KG**6oOoWylCL?P06rWCa>O0q)GRKg^qs*X(>ITe9c027ojY_{#8;?s%3 z1&|aR6JuVyZ(mI#%FOxLS+dn3!l+yl2(G^yNKB&S4qU^2IN@{&Mw8B!Gtj{DtvRVn z+3Au}S0zQu%8>x3_XEEHrvWNiQ8L=DSa5m(%}m=kV>fQ&rzJAhp}dv^l6Q#&yOZM1 zq}JKguH(2pJf&8eiD9RNM@*7Zpft#mO32Vl2^r)nw^KfV_BtLTorRY%JEB<}8JuTJ zXY!EKW^D=5)E6>gcg(pQuEK{}ht4^BAHi@QLPwH5o*hL|iBHj%ni5Qvl`!X!39Kxo ziMUc1goaihX3bo~;Uz?YKt-*a(_Lcwv+)?6veHoMN@xitw`-qmO?9mKkC?DNVx^A> zovLAulCV!tT+&GC@d0lth=426mrw{ADYn)CTvj$lEENS%Py&9=I1x(a7TgZY#o$PJ zU>3gX8q)q%bNODb=4yE`+%7yarx2l=2T3ERaaAwFtf9KnNFx9d8?J~LT~y^394%fa zcfggXBrpu39A#r+Tlt7-D`ZP6nKpd170xAOlm~JKWIsCA@pyP)h*o2eEU(d<4KW$9 zDwzOwib*Hw870rEB#aH1kU-mg9_*EOh0R=wko`}>@kQ+{vw>2jNPXi#bhxLkpJ=yn zTyGA-Id;0U4y3~|1;T2DJw+1E&eU}EBP!HcP2MR6!0B$shM3GiKvEglv(QsqowNPo zor1v3#A2l@5L7A%E~hS`de<%tI!7|gho?4U6%B^4ifQC|78p|`X_>sJsw{G?$QRb# zt;KxF{ZiNjxj9kBwm0^t5$Pg)y`3spm`8R1zdQ0Z&(=Mk1Cs@)YATdJ82~Exx{}Fo zdjdXQr-5cm?uyXC&`7XnyiY3=D;^1!uMhZ;UX|$CWlvaVKHv72Iq*S2_+hwQhmd{{TK#GExbd zd%F&yw6>ig6d9(dC9j+BhzGG}Crj!#*lp|qy2+{Dm{bi^a-)al8PChZ`2i_HiE_y= z>z0kzq+cA3gRFRS;wGY@YGsOOQ58$Gt7x&tiUG+H{ypqBzYlOYLZkx0$f>h@wtV85 zwK0;BJc3ICMZs$S06Yd!*uDkQN6Pp$dsI`vF-%PiRQQY($ZBBQki?W~lc-670?Pccash za2&<246HnfDj0&`Q^n$U2Uq7(8j#b-xP~iA*rpFtML+ENF&$M>$_bhZ!%_Du8ylRX zaHCE1;QgQ9@6MMneI$l1!@}i(=YAHsgnL?E3vm-_v|SO~9gRR8|}vLyKo{_P>y%E5qZl z8#ZER$es`>WpSsqspS^8f}FF3@{c1yf#CFG45p^8uaY`jo|@0sv&k51{mTMEfNf)M zo4t!9N|q9r-AX_JKIozO_IRjvr)kdGIKR|PA!<^cO4Zcly?zVc+XzyeETpvrwg#MU z$L3MKu7)>A@=C#qgOn&BUt0sdn*DvR#1X(-O%?&{$A{*b9W5B)6leC7G^&pBPC6Z3 zYz)25x_aBw-0?Jz_XK7uf7oR0j%SFxjCKDv=WP-MvJ(v8F34Xp^ zH?^)c;>&@iCR+xmxBf%;k2u@nU+Csn{7)+!>wMU?Bd@U&@l+UvG>v$ko}>bbqz9Bd zY9zjkVs#z6d*0_bkg`rixBw5AqhCnzBuEO!II&&&fl?@ZoxJ0SF##1MjEstAhDw@t zWdN(9I|U%@KpKr~4xj=!smq*1#nh1HjdU9E%hoTbz?Dmu^&7dL&Ghm*z?x~4&WWiF zC4eNGjWoA^L9Uk8+i-pzWoicCkZ<<+Qb>U&VU;avV89w$+#C+P3^TM0Y0*HqU9JJK zB!a*l0Y1N}zYP~|zdl#)AyoO2p7;L%k*^2k>`RkG}nwf*?UZ&_>@TlgH_8=(VIeZg;}tNO66{l0Ye=Hg|2o3O|~BPxzO;P zcxIa5W?!c(5y|pAZWt}TnR7#&?EFSg%SSnvk85d3fn-r)vB*fbd+BlOZ*Ohy#~7(Q zsD7cvc=Ct1&7~_BAxbCe4#dzOZD@anJQo$Oz^m}u%5n*jOws~7WeP8*xj?Y=7SM1m z7Z4?`wCZh2WyJlX&UTcPVR5%R|)tf-`%z?KB+ZgnR{9k>?}gvI?yo)1yycHzXfO!iy`)!7~ts}2DS z3#1Y$ojAh%Pb_lCBTnjUiBSWss9?O~Dtvj~-CB3s6-^HF8gx zzsg6~`#-srE=WUf1cK?K)Q1FA@!}0$uxA8?Y9x*)Kmr-%no`9=!~w_%y@qQ8Yi!rx zlnN8l8{(#`yE~!FbvHM^JiN?o#*TTgx)`BOwDU|d79@mGzj3PD`D%EQXa-eSoli5L z!^pt+0eT>G*_l0;BMZ@klb<195P4wY%6`j^qLQ zWsn2WiwCGw0g0NCjFDgR9Y**EudBGqDO@g7`$eO`)Xp3Qr3t9im)T^S-- zVq(E0Ww9iSi5ll!2?qAQ+7EsN3JFjq_2zy50C;#(=|~h|l?SDLzR?1>1BpQ-gxF05 zqealBMpK*C<*%*#eFjl^t2t%q@u18&GUbv<6b7XG+se?l%x!F-5lwAY3XZ^udi+up~`_I z(~sV|zI>v`AcUl*gohOaM=zfzc(eIFAMo=e(D`KPv}J|vGB0y|n)VmB=f#5pXy;Mr ze*!5RZfE}hL@K$OJqzi}KZZBsh=#6G5R8z<9E}Kd&;f4504?eHao#Be6)Erdd%q#0 zQaRb@cq2x)Q}6kNIoRfM<1TqNKf_~fh|=Q5{3TMzCe*pUp04Arv1dR50hnLh-Zw`Z zK48}YEtGqe2FG7tO>g;dQWT|1NdOT_^*=S#j{gAI_T0=}(D!=zjUa@# zbPX+jt@}d-2xnQ>X37Si<*@RDeFpko+&aQmTbi0w-XmAidV7d15O{#M;S3SI4b(M_ zzZHqt>D#{t1ULoSoc{nGQ3|EF3i!{bvvV;c4qu0;Xt;<9WRp{3``m7AemxJdlfvYXYeRRTBaQf3u zHY;I~N#9$7KtA`jmg1j?!xYU}$^4I=V=Z_`scgsYQN2P1MNMl@ydi{HVql~(RyuF$ zc0QZ^eJnUzF*~KbK4f9svP8pDI62V8b%;B!#0Nsstd(6deH~&zLF_@y0Tv?XUAR|^ zVwV}8pC6!$md=^|qyp>%Q>nM_r$AM*BjMr{xLP@Kp69!ed+tt$YxnOImMO5I&i>ZZ zu8{WvH>ZLa15Zmfe{-ZP{9C-ZV@G_k$yp?($32}4K~*hgLu=o&U%woH-g?(>P^7;8*oI>1eCBA9^>=#Akp;?nL>^(w^>NA19_0K%u`BiR4^|AQeDGIWx1hG2z`PiP<`fdGqTNA)(#9H}Dw{Sq){ed6((iPN~ zt#g08Opl~>_kx&Ia++$n!Mf8!l1D+31Y&LR6;9eDUF~qY@ys^wIC}okICbeLg3-zz z8v1&Lg~`0Ls?hv0r9y0|vfaQU+0I}y8;p%_C;kJ|@ev}5IHeL-RkTJ3Rh<}ShIU`V zQPW~O5Of#YUNR(Mpp6x6QPeE1EhsHc@t&N19S?FR5O8LSb=jHC@MeLI3X_S0Xl2H_vPy(v$W)6x{} zN=sEKx}l)@PwmW}G1d4=#P}u|FhV}&n&)G4z5UMS=egg#`woryOf15KskNI}@$6E9 zXBW9riPrku>rOd{PseIx!>VyPVkhn=A-A;fZJB;!Ox^F_TPwuO5*9(qw%|)}AB&iE zgu)z3101yu#L>y=U3k_zr|fIaQDb;UKg+L>Rbi9$+EVAQH8n$gU?`;A6#$J5?YDEq zm$SIP)Fh;rV{Di`-{a&9#S69jI%XML)HHW$&<4L=JQ^(T6KUiaw=u0Oj{__;xScx& zb$^PdzF-K{6RrE5LAbT8g(NNM?{V>~NTSPH%2|QEz*%YKV=ry!6!{gsJo$t)T73C?bTAe8;T` z&X7FP&fF_~Gv%MGQT*#b*k?IcMq(x^ok==o6N|0wxd&s~{rDnSmO-ru8T#n{hB8ag ziq@}I11=Qz(8VW=nJ958YPHreb;#E%l<(y}U2m?08*9C|t7C9d1oExxoptBeI<}E! zkR{EQl?HHX25eZ_hp;_B6h|~x;#f8G_j?W0ZMFcJi_WUHwQ}%>N`?I zludo=wd&*nOA%4WSikI{8Vx1R`t{dLC%GPxa9fAq--gBp(f&jytDN8}bJi~dlyA1yTB z`5xQ_-MUFH#ZT?mJ!05q6t|VM*XJP&uu9Kh0rVFH>wj;N_xHaGzfPb{?r8i^ESoRi zt@V~#fde{I<9`>7fvTh|=(9OqfJBjP4MZpL6@KSS6MpB0m}DRT;U|d$h|eMM;t8{5 z;*+>b5D0qtyIYm=hu_-Ol-N|%)D#Oq&(>;%YJpQtD=;4vLN-|gAh{OQ9gVk{lc4e+ zh^DJyVdvu&I(9Z$SW#p+qc{Pq?0o%oG`MCZLr$LpkYY0#lFCBB-3?91weRSAZ^p$f zPEfBHoujfbshkvNNDaE>!!fHD6&ZcvcP>&v3OnL84yd=vvCJb>J+g+;Mb4Hw-;PvW zCa=u#t^R2N?d)Rl(!iA`#!?NecXe(yrTM$fPASXyT{%yU>aLBN%2``{z>Ps2&F&Ak z0!m!)vet4QppY+S^cH;Lk0W61nbQj8$x?w;34KTo{@n9p3lnpu3erd-Gmt<4495Cc zlWqNU9`@nl6c;X_6HmAAo$`n2>~_;7CTk_Y$%xLwL34MAlk*M_R~U|_2<2f30OV53 z>A1Ml(BI{L6VAgaa|r~1?f@jw_%pt>(To#2U~OD1zwJy}AY2oW{MdUuexW+ z;d6i>ngYNEHg`3pX>Np@mOc(esf3uvOJjVe<_Wd0vA3k_l?ACp6%yv9?rQn|O{kja9dQb>#IwgaGZIdVeeQJ^8k<_;_Z^6vvl6md z!~X!4Pm$O5;U1ElK$?MxN!}|Nm&w|%ack<=h*h(Q>18(7+mJsk^xNsgtPVq{jtteB zu{{3(l0er_I0pr$wa4=IzqjRU@wmdZ8>D(uR;)>j_ePnr zS&&XDsaTcxSwybaw^&QIU2Sk|NB($WC;VED{55BbhQ^t?kO`p-#-Lv+@XIa&Is*h) z$c#KnI#7dr=JqN#H{aIZJv2O6W!HC*_K!r_=8v!6@eWk-=XoInf{ZS8y{~3ASSz9e)bj|Yh+8#@zWa^u{{W5!oPz2jGs^zsBgfOr zzo;OQscJp!`W%CG&Jr3*X#nB$ zrrw_C=fF$)k56bdGbXhV2&edh1*>NrHS;G+)J(E70HQKRpU`*hf1T}aCWyk&=PH*2 zD%O>1ljU}3F-%lOlCdRkv26{HrrI4x`|FV~T(M#~`}`Wx85ENiNiGWjLB6&&JD&FW z9d_4^5DnvwTE3pvi1jnLile9IB?9ZMz!y<+HWn5im5!W1sR2gesi^j}5F7>txl+(F zn47$JAms$u*n&mx_5Cle1CSE-qvfO!EIxa|$}=OEcvmq?1G}`$KbIKJ*W%B;YbfwU4xb>C6IP4$W}qjlG(UNItPl@bC)?k;b`=7KB^ zajnIh5Q`V3tEi=u5vGQsf~yad#ZZA@B&vwXW!G~dD0jCT!zCqQz%{u5y-(vzvd$^9 zCYuwLiMTdrr8#LA7uk=*4-h$zokuKUlUC!{Jam-?rdqh;km2u;$qhlQQIz$v6ak5| zTxfLQZKs7qwl)T|;w`UTEqG(HaX9IPl#p1mNd%GsVN;s`IS9P@uf{BEmwArA1H$my zIvA*{VMfKOSXEZy3Wo28r8GgHf+w+7mPTDQI`E}9WKI-k4)1frh3NFixF#FT#?F#_ zNn$E9AdCM18PY1wZ}A%$=1fL<+WM(WPF6EZPk1RJQJ_L0Dwi7*>+EmAlH^O4EHb^n zdwalh@$)8bu_4B#%Zp^dTkS|c$Xtq?#W=)qQm=>7#TzXIZFwhhta{ZCeBv#ycCiD# zw=WGX6IKJ31;0LYe=T7?HybiiUZl2Ux#yie0QBfACYl;K>C+3Ojw&eFB1HrdL|q1s zb6gkJ;1hGD{zfnk21naCN>o=;NqT@uEb(G2bkih|va3dX$1n_4ud%ow5%TT76Ql+W zpvwH>0!Sr^71X^AGs-#lp7~~j0p<)Jm=S6h2bUJ3n-i9bIOoJDT9&Rk-dG@zh!LA7 zTAQlCNKmNQrKNYV)>aj*^-9^)<0Iq*uJ@N6B<^Qc22V8OGjsQy{df3`(yPBNLW2I_M5#eg`xr3YR}*Bm~XD%}mk~DpV?N zbgLUvE5c7Zb7mWYLNQ8gE?6llC6OrOqKc}bh*i^h-j!-(PJ>9u0JF)O`;GX>hIF^_ zrw*YjB4}^tZCR>8cnY=H_dH-R)?oCnLh~&=@yRXPK#wL_>DD%~X34d#2V>uX=1ele ziG2f}H?CY@Df1K^sgPk-xB-T_`Myv1FDuevczjUEt5aJTnOWs*t0Kt2xFYr}j7s+) z-@T6z;ij3h2qfP1IgxUF#Wcz}kvU|C>wRkeznsGwm5dm&g*Z+I3^f%Jv{dnzByGN@Q*C|qx4o}x9D?xJS@YYt8`-t} z-Rdt(a(y*XRK%}Fkr7opns^MCiQ78a%7)SMwZfBeu^dB*63n)8NCuAXTD75}$*tB2 zle6(h8!Q<)rRhpL(VNI}&J}3+OBJlfAj6vun9VCLS0JQLk&q-UBUl>{O~J9$jmH(i zA!?d;QtoK&XFBjL)0A8=+angNM6e{C)&-ccrPxuc)1ZsPnfW@BE>xtYYcpX|Q_WIh zP{ODX#K$C-xQa3gFujeo(}pUP2J3*}0Z=j;H99{#MduZQks}I~EDhjokKz-s>heEiNOO2GlcICtk;504UE8cPD9n3yxoZ^GVei?Pt@aC9ed zK;We|>Uw!Ke$YJ3RJkShn%r*pzr%X8X9`P)*V0I`v4V8!RFHzgTLneGrSERq=m!I= z00RIE{QE-eblG^cfp_cAfYfynF0u&hwFsr1jEZ$8=P|vz-0P;6_wHI!Nk@p;G!LaS z7SEQDvk%@N5L7nq*9i?9a5lofx=QOp^dvzs|Gu8LVwvkI!Jql&(T)xP4Y8FI=x zpy{7048gSok*6NPhwiab6S@E?NJ(lj3@!)D);w$f0Lgn%Q;-yrv`knu54;pXu7Qu@ zum={z>v5{8j9#?D^%YYq&y;{zqFswx*Ecsi{{Su+NJPHqr#iE{w*yYUmxdB>2$3O4 zMMYY#M-73!dn}Tq8cgcQfYAd3aMFYE1D>?qcgC{NlP?J#s|z~k>epf zIEh%fQpiS>^=Dx0E^~enUd48fMizL(rcrQ0RHK(C)Q>KrG2~CPM=N--@w~y#7+pBC^!=sE6%W_^zg|H)qn?W*h2tE|JtL_TZh`zNygj;jB z6R@aEtQx?WK=7AvNVN{5*ISbR0P8F8j;q8$xI8v!z-v@c&Ou& zgv=tGOyi7qRs57#lSg7Cri8=$7;-xYat8N%=?oKF|R zWoTBqh|5=#55*KkEe1r4Lg-E9&ogFJBQXa2cY&A$)ByKQz36J^_u{|$lZhYcOG2>; zP$6L{AQC(xj6rH=t!nZ2YsI;0D*Q6$dP+F)1ggX^<->(09|KQcShZ5bYVi6q6tS90 ziio8Y%PO!jh>VKbUyFVXX)}=E5#g$USECSe{724PEpp`J(K2BZ0GJCJfm6(M&{952 zeWf{%8*BrY`~k-~F9E=LSC=Yiu}m7CilQuDqP~|7Lj^<_y?mW%4kVKT)es2`om}ck zH@&Y3vhdDVx|MHunSp0xOSRjJ8tLwRla?hdTSp6wUL5Zex)!vgvWcoe2`uiwWgj#- zufr^B9LDG{?+E#JuL|azHl^`uf7o=-LsuxKgtYasOArr7EG?bmdx5Fbg!^x21wVFx z3pED{*ihcy#yziR?d%pG46pU9VkStM2q2dVtCt3a!4H2&j#KeIkHp!rMW4iYxtd%; ziY1|nvl&{+1Tl?K1oD9ZdVm8nrGvW{*8EXtVP?o)^x7phB;-8agDpj^9*Nn#quI%6 zBVfh{C&5NcA_G}7=70Ossl0;7(G1SXwcNg$?=$tpjM7(^7al`2$P4F zN<1&Pmn?H(&&l{igyyBg=vEiSCabQgcc>L6s#=7hrFm^6L3Bo)LCaxq4uI{)18>fk zQ#DPV@{KrDjF{8!5UaE0UsfC>J;G8wfYzL^cwNLXN1mzjI+YH~9aK?ts;7i85v2BZ zV9cOqYXh4904@?^w$39FF_SO=Yyqhy>T)MuXDit7J0}Y!NZ*v;3WX)~yNhN&h&O?A zmMw!-QphVOY(AEvGc6R1Dv@q)nM|Tgj0bc8gYC5YBWhw~;*uszDh@uc5CY=mnYH6; z2w%1~HX3#sV3jMoCEZffx=Z9(0)HX(G1?rd%`{xgLlo5W0^%klHM1-AE^nrXHT^Z$ zzMkE(HjKPN5&>eQ0$SA-vkyr5+ivX4MiO+w$9KFfT%5442KKZ*QyB`kQ$^Svt~CJP z-2Qj;(}r_*Ql|xpIUR0kmp{oX<;ycq;4P`|0NWzX!!EnDd&ICYx}5Rq*NtDEZ~r{2#%*MgIVZMFj>u$`ayOE-8Xy+{Hcxh{P4+qDH|L zCalUqGEHoxu(;03G&bYqtVYzGhwQSYqG<|D>7l`5!637^G^Gu!L&wmVO_%!q(Wz^~ zk_?m*QW!Z=s{q}2Xd(Xq?V*Bl=ZLkq2Zt3{&KKeLIrC*LM=WyY0sBT*qr^Esl_RLB zq~(hKyBMe>t%f-2DV^OF^8~R{M+|!ayhOQ(+7jfMl6QxEqQ6TB44&66;kYk4-d=mzok{ zRzc;HDJyVy1CM9MVr5RBhg77jqF_K+1dtp#3~75%dPNHZh24=fk^Qz&-m|&P-|zQU z=a7|H%`PA$RgzpX7-dzk0!U?e)aXFF5ps7u_^;xncT?1~xEt@qs#wvu7adGla0D(^ z=rl?xQfR@i*F8*J{{UyWYhsrP#>A7sE*)8tDvbR(UTNy(5>mk>!hs}Zx@z65dt5N@ zH>3exytKFHq*wNY?&fm0fT4V>^|uVpzI^xggf0I7Jo6NRW>;)-PKcee&alm0EX*Z) zlG31JBx~yVm>qaUi)RgIE%3La`?ce<(}eAxHJCb8!I_ItP**#Q;aUmkjx~f)!%EFh zER?fIK(e-Aubb1o#+q(V8bKysOAcST`#^ZfWjJZY&DKE#+3a-X!_TQXXPR){PsJ&x zFi%^HV)Ej6P6x&Nk|vEs?9yg8C5a~DoXM66KSFuiEj2U+hE_DJ zCKXtjs+lk{P@*2Lz_@dEuef0xZQ~Xb%{92ByxWb>PbFV4M)-=t0w-A(Lq`HCC;i9~QKzgj(KB(Y(Vz-daVM7l8v= zhIva1fLX5B7TU~iK6`7&BrzjSvAkTws1__sxO3@l2VGn=S<*bQvw229p+s-@nbC)u zRST$ChNOA|H{(#TGUcgG<-w^YnYRq7SU~11N~!9;8jhpl6jQJ>ss>3_WUvSZpt6Br zb+Ok_c#J!)xhlGRZ%A{6!pKTo7tfaq=gXW4NF|Dnwr7u^VWgI(Kt+@Vkg9omXCM~6 z^Ba?MsmwVgV1L-r$sSKpl^c^mJ?dqs1hd-Ku9Xh_eQdFW$uB}zmOH%l4J3qH%*^Gs z?g1vi3jv_xsj~vtxBwfan~S!bYv~cGDj`!CRFWv)&pK++ryBdZ=%gaS>7zm{EIi`( zI$V%Q+}qUgFqOK8FHrqj?0I~lAth@QUv&C8ujg7lg`!PENf}}Rzg6%RtJTM;=j zz#33CcgngoG;73Iw3%oGivmYBwJlq4i8#&*_++*jnwF+gAe!dNBVrU2eMrz9N52zo z3W96a1LW^$5uL$P3#W3p2JhFpH3I1a<^M_ z7JPsYmzORXL9>qVqX!M>Sn~a&*%eF?MaBX`JQ@3k!i=JPI;}Vq-Y`8fr zbIjM?)`7UJv3yjL5>&dzq!Y6c10Qp9dyUP{&Qt;8vHFkCw>~l695M-078c7~?WLik zlByD$m}rd5S{X}HpjNXMs*9$o#^Uy9@842S&y<1Q0Ku4K*^fVh0NRp!>@tS0(v)Yn zuDY18a70s3Gpm6_x&NwliLiMc0D zZgnJ&;@sZc45c09t?oeJ+Sim7IUy+BV96QP=zdh#Ut13Zyp^B18{nW`k6(N+b9Sy{T;!YkNq^`J|LvS4lMIW z8>x}5gK6XN%bq0?0W_uE?a9yLJwI-LMten%>?!SD6AD#=!~XzvYu&n2FMUDy3;Q#{ z%yO+EsKu&kUo2}CHZ=1rQp+MGW*Y@%eLPh0srZ=Ss;ey>ISRkDT2u~Vj@&07+nQ!5 zp6nL}&KzExMIE|F&zmC$irRSD7&#J9W9^6;gGdMdiEV&(OYdMb)ksS`Y(6<{W&D(_|?vlDaP4W+j5%amj#Zl-76_&<)Z z_djNT_+$R8PS`kIu_LnB-_c@ap=rc`LN^wd1QiNWzNR=Y9^@Q%kf)oIIkpI>v2!@8 ztcwS)qs3yR%Kln;YAB?d2`5$tI+z{R(bbgLi|{VZl$=6JrVj|ST!1t6{6!mW_CIL$ zZxu5QwY$j}iAyM4m8}k$i9RH-s5~wq_mFA%cOS-ZIzD3NDo#qk9~PSh=8kBa50en5 zz$p@)>7d4@!f6>RYh}!$xR^@~dT&)#Kxy0Ay@04p%2X!c%9k$#*d+V_{$}eTBC4;QTz7l!8emU=ZZJ zLyt`BkhCtvDW z%zkU@2`3)(tybQxK4%waDq}B(Ny*i5&5-pfdVm|E!$no`k(oOOl^9stLU*?l32#cC z8F9W|U1F2Aa3yYadaq}olR4>#o zGcAhWR9vKG(}))+2P9@#Q1W4K=aYG+Egjt1i2neIP@{^6cI)s*z9U5r8!ap}x``{T|0{d%o)ipCj#FbDJpsznamX<`q76?xE>c#73 zzXlyWBl=eR6moBl-Z*`cskv*Ayea!KQt}Uo7)5p+%^2r9V7QJWhI0hi6-WHLQGwz- zr-QV09~uoi;!)zltSl8$%PlxYa(JlXakxw#Aeo4mrX*2E)B{Ud^=SHwuySVYEsx!z zOt5zVCvh)ClR`u04fHJbGxnqZ0EhS5ug0GTu&)ex>zzK#)I62RwD^3Sg+SsaRrJaQ=3u4?8&WmyJOl!3*YVV#?`*M{1%CNk%gDIk(VlH!KNz@TQV zQ+Dj#p|Ogv6ViL6_&1VE7N%O{Yo`e0Zw2Y1ijNg|YN{EuB(9)J+SXr70jFsnSSd&q|i7xp#VK(QKM(hNq~K zYJ@VkT1Xx-kVOcNr57;#S)F46Z+04Ncu=I1C>Oitc-;N88O2ykNFd8Q%-3$7&ipIK z>Q^v$r{UL%{vP;!TgkFjQ*-Zyz8-S!0VgW8Iy5}@h+;;cmtw(blv+bqg;qf(D)QS% zeA+4F&G9=raxoa$(`hYp6jDgZoDr3&m!)hy^tH>wrkmjj1(+AB)K^2D>!f$)KQ2Fo zcwOOK{M&{tRJ6Vs*Tv0}Q%upwDrg%IdRl6FbuIC1h^mz{T~a`oYp4KJWXhJjdXR%% z<|C+f*CIoD!yHEXaE=qaGj}%?8Mi`d>+t6nuU=s0PIjz{Q4E!yAM;i*heHttCxR?r zm|~7O3KFH`Rj^=9h&DS8Jx>KHS|!Ly-Ef5OWNUHja~1PYl0XEDSl>^X#|3lFC}rjf zJaV2Wk>3l!>SKyCl?y>cu}jpLpWcQh>NE|o)Ny*iiDFQ*Gv#Jyr=rocWU3m2XO**RMu$>G{X32fn6MHUI0H+1WZ7KAxMq6s_7J%$ z1ACj2Nh7wWas7_uSnxVlA0y0PR{lCPcE9%qkM}R>c-s?5kjSy+$O;BF7hhd>zW37P zdfSXiB}y;;R(lUi=TV)j5lol}DRG^iw{9AH!`>MLH4)LdQqsnAslVbNUrzQq+<)M^ z!~F>-QB%`9!dzlq*pW)r!&SpL7JRzv^b_pgQpwBMbxeRQG+35AY7rD4H9%NncWYcJ zbW?4v1-0AJyE47W6BMF;tLfoj9_{g?z`J~=nzXQVsEm$&nHcNXWM)Z&AYiehU3E*F zd6xQWbrv_VJX_T~E?ltrq+Yy%(XUFJB$I)hnS0Dl9MrMn^1hMi2Wnu9(=05K92c$ab8|-& zwP2c5a^R$`qIxN!#F1l;otC7@MKtRyPHO|RTn0K+sR}|*2Q2op-;w={Alq9L5s${po>l@dU8syLT;dqA_vEN+Qz3y$L zweP0^%ze<>2g=0Podg)2@Kykzw>HbK58DdVNutO`mLY|$^ZD(6T{w+(mI<#KJ&)tk zwTYw|o#&l-Q~7V@D!JpMaBjilkwV#YvzvW=b=>}omP@hDg3nu3oI|-u8>*P(l%+(A z)gY1@#1AIs@%2aS@8DhwS>c5@J7aUMCy7;3oI?(T86b-er;%?hJn?58X=MiKC>d|4 zJbHg;Hbk{xd+CQDd{sY5v(R;qo4b443`Cu``Z*~dSxIIN%K%xN*H(w<`DY2isB6;? zjza`uY2%J*q-g}-zLTN_*rI|!Taj(=VZ*-R2uFptK%;Uz1?u_5d-c=tGiCRQWhp`V zy#qVhpNFp*^H(r1$0_NOd4((DYg0TV&WawH%%QFTx}Au>m>j12aazV=jH#tANOor+ zQ(V7_w0dsL+0xg83s4Tu`?ayohLp8nMl}fLy84RzI-WSHz9l29$ZblFVY|-cfDxN; zx>%BJbHFM`>M8*snhQXnU!K~)IK84Lf|TWeIWUaNp&c7HLs z19C6EyPtcLw+(PJcMwG=0JZ4#I*-K+R(8G&cc>`3h;+L#-T(kCt%n@rUOg;0~B%*L`&F>ux2J{^EI$ zaRF@^ixL=HU2lC~GhC@11AtS<{{TEwK2z37Vk|&8uX|h{Q>UT#;@5%y0D52BnEN~V z+Og-mR7_S5WeK4H>eM3NY~!SBBoVE2ma-))7Cqs4wR~i`ZXF?QY)V zi(VdZT2uZ-v-I-gmDsV0p3%c@n`eG6Z->Y<5{22-U97C>BsrH%k&RRqK2rDHw?4cU zl1iu;9ET?NYejU=T%{>D-El*G9kU!Okq;9N9wbG16DzWUK>?d!H|}j>0Mqjvbh!^! zV$Vj)=N?ZI;dYF{Fc&T;DpWY!jvRepO?DY*tXpBCuR>WO?zJ!N{ z*+&$nNUdG7a0}DR&A3#ypJ-8ln4?B=;j|!FSQc}_ydxCket6{mXqPaGyAGr1%#)#P zl~FZ`fdTFX@80+AryQ$h;xJf=jvWb6-6uhNzK_b~?;>{2%G$U9R6=L00!6ApaQDBL zH;W|mP8D9Q3OJ{&NM(1Toy9w&TGpqUQ5q0`M=_}YZw6= zI~Ih?T(mrrq@Cc-#L)F)Un(?L*vOmUsuEEhFcke*@@7PLb9GmhyD>LmeeOWeaJLeC z3uD95+@FE#7X6nk66Pe8Io<^DG&x%Jpm?DP^Gvl?D07$&4+d ziwni*V~eP9I{Kcx=UE^S*}6py?xpTQwu5c8^7&!+-lg>6$KAu;KDNW9QpA$%cSG8h zu&BPA#}OY0iJ=ualq{k+)zoSSnSj>T)of3t_BPH1gc#-w>uzX&f^fcKl>|_V&L1B3OaJpr{%)gs{(rH-XoK9Z(mrsg$3bdGdAdE(31|h zJG_`!l?#hbAnG`=W4Si$ZKjsm`u09dz(69j%hVkh>-dC|qy;I!q2ez>c-G&riCDFK zbO{s7_o10OnRMLcAP;an-n!o7jnA1zWBlsGXg`*X;jnX6Gyn)mEDmkV3W~LC)QYZb zS>&vr;LAq@bD0(}qe#mOgWE>UbH3hy@S0@CQLAUKA@Zl8i;TPyWys!J8ZmczzGeF5 z#*RqhF7GS2W+-5eReKOfjiV%j2AYyCI}RgvtKP5e0|73T40Jhp`BXqIXqBaC%fww_3s&);occrpaF0z!uj!YY~r1?B$drAS0?AqVTH%eYe_^@Pg>vfP z-Np6yxU5)0N>T+aO)g;7Gy$Cpn=xHQ^aO9esIj@%KsD2bC=8GVxO22F#IJDgdIudT z)&}A<*;+;bYIhsh59j^-`hxItyTrA@_Gk5c{_wb=14`ZW?_v(e``^=n);CsGT#8bf ziVhq;6YFZzFWMOBO6sF&0^3bafDlO6e@~dO;l=@7;Q(-Br5?whBkhn(Esso_iKl0Ee|+r6~!^c)*5URKq*vs2|` zn98UZf>9(YS-K<4+K)2>q1xit9)nx!z}T?KYu7Nqznnuh!18TDdkQ> z!b-GxMQ<_z9E4vo%$7ta@v4J$Q*a5>i^pM2NE(M7ABI`yTA27R`tZYQVg^A==y!v0 zHx;ndyT{lpIH$wYk(n(T9H#13v<>A1Tg|Zo_W4_nT$DIjLA0f|Rsj4*_ z-@{mB^k||!(EP1M%-DVa%-sx1mRh!=sf-ZvvcwysEWO8|Cr!n-;TGP(m7!aqiOewQ zPqR__n7Vc!X_+%h9J7Z6mNd|wI^`cSdCr!4ELo}Qg`N|ZPcUyVMY$(pNjJZ#w;o-K zN~O$Hw=ROlr}MAxA4crC-TaAjMU)dOf{XVPaeI~<> zoVfj-EV4eKXMf}14|~O9iGsB=M(tpNNnS&!jLO*rX8T_#Bj5E+I;taq&sXL?7Zwq1 zz|aPxavAV*@uXWAIQM&g)iH0t0QMFcFt)z+ z<49ShVv->a1GFt+{$IRdVZE>3-`7bM^&W9!n0z9&X6Wbl@)fH?r6?oegIh3NZMDmG z`W_3HpHI9l#ev=1U!JGV8EU_9zWe*x^uMjUdT}zp$NvBk74(wosiCE9ctpjPLTY0u zayrJ!ZKv-of6$FMRXF&_dNBFv4P_S>)6YL>SDx2<4T$|LJMa-fA?n)o&#QSsAiDhg zo9A4CfwLi%k|Md3zH0%g00MT`aBuqY36@Vw5L@pPpw^_?m-%Onbn8-MmWB$?hoY?l zYN;GvM~<8EE5>wXJ=B5^e*8?sK@S*cBV`*8iiRS`D&|U7a$ZQO$M2b=O%KL@(YVm+ zJMcVX2X+sxa8^oWOh%Rkvxa zbsFd{0PTAX2H&QfWN3+eY;MJam(MD4>cFi$r%g}i^V7Gu+k0`^ewA6(Vomfu^?+>ZO6>(>)(#>hsKhBggDtD{>S){;ifH^J$@az{xy2g~5jh?{Rrz>S z=Lvd-rcg+82A~}X)M`Gu4*vJmPSC2=T4|e#zH~2F^bHR-5#CpjC#VUb~5>cpR6A3*#?fBygpYXNm4dRk&G2Gulo@7ns?Yy0cRs!K-lfz5%hFTGB2 z;R{yu;VcGa5>L}jNPL(*Jgo~HkP=Q;#W365qHIj-eai2Bb+FX?@jPVD_Xl78)J0*- zRclL)(Mc?zDQ1G8b_Suexb*|S>EDcuU;AU`e?ADb@OfJb=UR7;Q_;lXrGOwma#{m& za}MNu{rKw&DdG=Pb~LZ!Ch~!2eP1*XGsa||mlVP=e6~Yt`Y;!^YiK~Wm)C1?BQn$| z27#N)E?jv$*lP6Q%=F5=B7^2cY3V9VN-iNa5E}vNH?cMZ{)4{@_LQIn0I1Q;TS0HT zi-w0=F+bg_{{Z80; zUbm;@aBBvjG3gr(VKb5(F#s_X_(RaWFR7)mIK+!AN`>?Uhx1sA_Bs*{fZISjX~kC) z{lu_f*^Zg(XXRsP^h`Y7EVZRDV?#oq% zM4bHdK5+6x-t-EVrKnhb8!vdBNYSK#9`@GO9fAJ>RI#2`9peQG1gGWO;bl3OqW_|sfbx1r3YB2Rs>Gooi)Fv+)j}#s6**TIs4T6 zMPh!;#o;k3#^G^$z}LG{ij!usab8V#y(jZLm}tSM=EIP)Jky(`aijb}02Qb#*F`$q z6JmXK;9m7)nj5xZn6P~ua`c6J5>`2TQenjupcOa@0D-(qGlJYLu94;ui%?e3J{>d^ zm~Kc~Au6y}jo^CliO- zNCkK?hbbGRtpEa3O1f!YSAJ_1FjfyT%G1Nu0Qrgf8|n10_S;F)W#><0&4oPT#fF)L zlCpuiversc2o=bC*O-kkEA`?VT#JwO-umb_xZ@&O;#)YgxV;^@+xgN8NtvV_C{Uk3 z`rg+gh%-HN`{x1f$}}}B%tlsrYkUB|KtR7S`YMSSM^7`nM)nyPsRQUi^uMPVW<4FU zA?|(pR6vvPcyuScRFs;M`=f?!ZaL^$4B;iHF&@2DW2(mykUpYVr`%m_bEUO9_qQCG zd*IQ_Uyrdp359!FRE%y2%0!TSB`y-37&~#}t!o`E%AC)J^G!T3qlA=1sA6koa|Jof zP4+FTAIy_$aJERBB}aMpT)l5oXZz@R$In}DVBRh|(0?&rb5A1F zLtRseMN=53U|OMo0!5f=5XJ^mVcy4U_u%gF3c83nmm@!p`m|kpJK702nJAF5#UY5! zwhhwOVEkg1#thWduMS+%^-L_}0!_~1_wD)o^x_oEaznL9qp{$ASKi$(5r&>wCpNuY z{{TMb7GSCSz&Ew-Hn(jyx%z*($VT?Hu+Q=HgiNVrHAttp=a-|w6p}j~7@L#1*5}s$ z0AJIMCHH{M{{Wvz$(B5m_J)2~C9A3oo?fgaN!zQ@oPHD8fYRe&J8i*;u>LdF9Bfid z#w6V5`L{pBbhZhYp=_XuY4VHq()Jo1dvED-b>hOCCy=j5^$nha*EY|OUPp}~vXm!9 znCMNlzPejdKp(Hmf?VszuCVe9$Iq&CTLQ`JwV-7&3~o%Z;b5llPFGE7h#%ib8-2vm5E5&Itnd8joA)#Wr-Mf~0_#3Luub2Dc14 z=gKY8<_86X8ivf4%su`Xi#nu}OSb3SA8o!}{Wa5tQ&6|FS65wZbhykU~lnpKN+w1=PZHAGy z8bcH)@}rKfst6j`{%5_t4xg6;u32(PEcp=LSyAFNJFC~5>1?A#NIfAF{nU}hTVLYS zzQEr@-uwG;0+4kfvj^WZ1S03#=gPqNB>Y#@^#H$f*!?%t`EWEAEIALAgA@|~0EuAt z1EkswJ!~!hfN`c84=CInKom3Ukjk>eJ26l$EO#HF(%txspw*At+TSe^pw(P!>-)hP zS>tCzea@riNk7Q^zMMc%ax}Glt*lOqo?kxj@q$)I1zj}KMp`;{>7XMrxhG?N$DlVB z+lc`*b5;Y(_l^#BHR;ps2P&#+aZ1ISp+m+d3KTAxLD6ggxV43jm)LQUk!kYgF%+f< z3=2~vD=jm{4E+)*LXM48zCmV;Y-SqBueKgz*p=zQ2$=Q9_N{KlRP zL(5#Z%CzRXNMVM4V3i?_Dk7ZlFBtD==@JB za)xr&WhEt;kS#~h@dRI3ZI=niJS-=1gas`_C=~xpGj5<$&RnI#PK2|zb96rtU z6*z_!%{7%wWD?X+#J+PPpeSyU+WAo2*+qr7;f@GP-W$b_2eX>exp3iFL9`!om#DRz z3m$BLU}K=GT)TwRt}4=0)6`XSKQyXkt;OnE1xWf$5GE)TS!5-E2Z-?U8AP^c zFIT5gYf`Z9v|Xme?TIqd5(!EYf>S`Fy2jTevA-+~rV8v&N{L#xWVz>r76&E#fS2D!~QsGr} zaU_^-Asj|0slw%s04Z3g0-`swI^Iog4-qSU-G!*bT{F*@28T%7n3F6?ohc$vpix3> z%r2b=nTZ%qKY>&pS*oF<#FCyArCRJVokcWeDIJu>NmF8y3D?LZU|2Vy+8MIk3O@qR z$KPFD=lXi$Ujtv-TvKcB!JD{}*JGP+!=5zL7l-RZxTPh_r zeKQxgUKtr;o}N*#0Pdq;Z)3Ra!*q`dbzuHqmx09aOEst*2Vu-#g>G|=(z%X#-Q-zS zQ$VDAyKa5=@85z&gXk~!;{+t{P}YtZwtO#_lxPz%u^SLRcHe)m<);J|mIn~w>h$DC z;xb_q5>%=LJ2jXJQug_jH(+?39tlHTh}6U@s$`j9p{7Cim6fI@ktv{W!wFEgsb;WP z!GD}8S9tBj1{tu^OViFhQ~Gb&`Te8B3_cYhM|dWH6ZH|!y4b_C6m*#VHU*AV(MJVL z(8W;=IFLA`mO{beX9m(;)q*~OfV${-=el}spPcE>?G`*v$~a6!*-A*?kv3$tct9ai z)>3OjLJ9YC4fKW-3HMP(@R>v-QtkV$sC7jq6B~Nm^4FC=8CxW%OLkNK?L1V0N{(ug;dKgt<`% ziLuuH)Q>iqigd1SRUlj%+P?K}ksl7hJ|edaG0;@YPW4L9SQDvFO3?>?omNrhN4A&H zf;8d@cxEPo?@pCAzK_x;z{;J8RIc)0doFCkfTYkQRe=CyKx>|rjeNlZQP)$!L59mK zym*CaiUA)*V}xd!X&OSkGBXm2G%J_ahLW)4=gO`kt6M(n5b*KT(1ek%#E(wXxx zlDoq#De(ekcWm`FP$I6xb&AexVv?R3frv~foSUjvGQ%=w^G1sU+{$EAbY!?7g0}~P zq)t?{sBVu5AUF@Ee66dtky+b+(!ShmJ)*2O)Yvnyf?07oV!R4ZiIhMVAXxCIv@bn% zY^7>2S`Utq)spqXN+=*eeDcd94AP(=VPyXhYg9kF&O3H78?jDOkx9 z_elVS0lW&x0FuNK1AAwk6=aW7@Y14)<7r(pzfcw^O{}-r_SakOYjDR6FL(l2xJ?gA zYi^biT*XS6RZ0M|K{R0b`Jc8>N>e5!14OM*g+!7;Rh$f=03@JG*f!$a z8MCFfJtCvTDb&z2@xMWwQF~CS^R_-FTFF9!Rsl<-ii(D)wpPqXSMxU^;l3f@cx*C2 zB9d2zs8lKlXMz~OMx>801#`p(RTf+JCyz(L;$|Q2ScsH?z;e`9wsOF^az*b$oxWa>F{I+vir-4swKz(EP!34~pn-Z>x`+wLkYVw2 zDss*eWifKC1a%mswX>~FeAUy$s}(oIt;JP3N0pjXC#4|D_alO4s1&fsGiU(JwfJRf zM7voygyH+eq$DU6(Sl2*-GwWu4Z^UQ;-@R-zK%AgxVHfEpQ>c6JJkO@e@Uo=yY})(Nm;15?OX zGhB%kuv=%eSpBl3nZZ&))k-Nhas!ZGmr6iS5xi)?XsNNjTEOvaM-1k~nmjTbL8ur~ zVVH!|WJlyql`1R&j9604^CHcojfE_g_rcL?a(MK~z8?=3yUdc(Al=uZwNBnZI%9MX7^uEgW={s1b3y34VPzfM4 zRA^gL<0J20Zmq)Rqot*(3nIuWC8ETssu!hMhgZ|cS>dUNOG}lRSr}beNIH%wSbS2{ zqLu-P4@c1C^mjc5Pad2ll7N+g-K{PO0zugQzyto;@G48(G$wWS2<^E)BtJU8$SZ_(z*|zhb6*nTkq70$6}Q5Bx`QVYRX1 zG^tSnFgQJjFPTQct8Uio`gJThoFdCHY$BrvhA zdRElGSm@8OjRe@I+Q;nuh8KI)_?v;nEr~yK9F+|swf9y<0fp?qTTnQp{{T_u0og62 zSa>8&ax-L#QLoGQxb_1JE`MycVugg+4jP2-8;5GrwS3K^`k27{CZ>b!XW~zZwNx<} zY55Zi?MY3$m3A;6zq)Z_6?H5kE}nY8y-xZi7t5|Ntq}trBx1~3Gkfm2_X4L z%zxBu$pN}XJczK zGZMz+p5eaMng%Hdmq3*d2=Mv~R>8EXXpaLV{*47?OrQ-(XCkz#*PkYV9Ky0Q!o&>O zUiLYya!COCDJH~RdTMx0I%yMpMZh4siQ}u+r|jPZz_74t3UD6$TsYOc5A4lLgip(S zu9&Rul;@nImCC}7l(H>y6=!lsQKY_z*ByYd;t9CD*@+v?Zw^gXv9pHa0STiZUw}ws%kVW zTDN0H`21?up2*3W{+6Wx;Gx?h;U`a;LRv}}7@)||m!~w*^`UJ#Mb%Zx4HT8JvD)_R zE_|>VB8yq42jrzX%4k05-thIo6`Ia zREjsp@dHv}kimz}^cZ-jf>x%fVLWmzL)6BC8)p!pkSns;T}HPC`~ftOq}Jq7`RVJ^ zD7N+$N?gzH-DH;q$lf~NH@_ns$$>)cElRLgXsOlKG6Kz!qy|<+AYQ`Y5-(sc?EzAp z_>IW9wP_xwi~s-ZK>|m8mDFWTTP5S&b^OGDa7>!yxJ2_wt@J z=TqilOd!pJZvO6a^XJAjaz+nRB}!LS!t|7}EHTGXB9<~eMMKB|i*&dk2?)z;5v7M6 ztLaJ3mCoAv{J!xj49NqiZBNdX1VeRot z7jK_4^nm1}c<{GcU*@o}iPXUgE74J)RzSu=0^Z{_>_Ey0H@9tl$jLQom-)tW7V%X!HiT{K_;%nktOQ6tr?j zDtV3CL9(@u!01M!up05!6@A3e^dPt-I+&kM4;{>^L)N+1U1GyE^qAE+!|PzBp{tyg zQ7aiK>SY#GWh4IpOH%AJE$ocjj>682Vlk-_rhpO#=qEtI`STjq6HQ9wsY?%XLlPSH z&=<{vaHIjm`F4j5XzAv}DiX2j9%|@wwrWX)-6`oNS5U7s)IutyXwFNqX#AueA)T|f zbiWsP>bp4}cK!nhl3qI!SS28UK&g8*>rYW~(E%|0DtWp|Un|X>6>}(7k>$1Fi7l;( z$~|qSwj4r?9tmZHz-rh0&}1{LN^vtmCvZM&;kZ!d&#X_V1UEMf+4Z^NN{W76!)l?Zpu;f*o|$DLN%0uwiF0llKwwOuSqZtZ0BLRw z!b_EeQ>7+_oyd0Onf8Gu{<3f=n~0WB0{{hsTbrJo=>%owrFhaqK=HFSY>efki!cPn zPMWRqv9P(mmfhgm+n^*Mo_V)I?Os__28kFw!s237c{A4e`L_$SX1vc3CoK`UKuFAV zAb(HiW5(6B%E$pNs|Gx3$1j%=DZwNHwGv6KKp@bae5~3-z5|KW)3q)sLn)4|QW+zT zS28NkQp3m)8-O5d+S=G$Uf>!gu5ug-5bsKHZVz*qIoSr#!Xjk_7&R%WBry4uS@_p5 z)5%3cOB+Wb(qZcq?;7P(FUHAGpNjf8kwF7>uHy4vT@N@Z*{8$r4r(ykEJF;yc|Vx>HyFX0~Cr|V3*l^X49EJ2aHn%B3#T+M7`OBZzLrEs4>2A z*gWfs)ZqRR)^ewV__h-z1}WjJoVVfjH_Vucr=`Iw&Jj;dM~Sa6GRa9*RSgn#Dk73r*px_e)KnQNX|Wj;Wty&&7Esi5F_)Gmq>_2XMF}3l_?M4!M)i)C{Mr^{hxl+EM zrMYJW(7n!8uep+lVK8DC#T?=~YS<%=dRY%q{wb=2qH1#)A|-N8TbqQ?k~lLLEZ~oR z3W{%1YA^Qlk0- z{v1JDTLm3eL@d%CXsJ|bL^39Mj9??Xsd6p}wwxo`I5|z?2~$|C0&7=u<$S0d#qa+B zj*Yvtc7JR(S~f1&+E{s5j3lf;P7@NjNM%h{QkH?_1u4slsri#0r;N`}jpKCA@FX&S z@k)sUL=!JW#XHLn!>Aci0_O^zwkZvke+(xAV@q(*6i1*`|6VkhyI1S&j}6L950Vsrz(%!MV)l1@!e zD*MzAHV$UhMm5GY2uRGKDM@`?0BBz38!#?I=FD={SOyqs=%h#LOVn8BK^Xnpih_io z0>$DChSx$xxS0|aJOrc^&rLJG5!Z{0aUD|S$wH<{#K@e50#Pq`8Gs8UyZDBD;?m`g zOz`WLD=-{)$2!bqc|-P%3-bmK$&yB#+W2K1L)A-!U^O*CspG`4XCf&pfN1Eb*oHt< zS&lDcs!q>T)z1jT1iDkH0JSM{HG8)ZFqqszu^XokH~_1l5*QI-o>^vN?wxTh}Sps@wRk_G8XXC8{2a!$-C2`Eqi zE5Z_^O7AcPk#P5`=zpH`z$!Su-r~ohx zZih`Gu|NH^s1jX)(AxZIo97ej<|3K~02N0HJCeTspo?Eyok=IO<8^^cF%Ax+C|4^5^Nbf<|g>r3~zILDK=sThjK1>-*?^u7#el-t^Qs-n`>c; zX3Z8QM|&se=C8xf#mk(r^N*$gWOLWUFhs+qpG6PwwQVeQ76!rPOr(%50k!SKGNku& z0U%su$L*+W+7qEWqPNtuw-XAK^{%lPpYRgOngF3*GFvFOlsVOawa%vJjm!i4qyci; z@$$}tj}0lekkqI&qv>YjceSJYHva&Fgb^p$XTz017cFNn%E1O(ye23Lj4t0F;Jv_Ag#p1p*NrFwt ze5r{%f((C?Ig*bJSkyV67mo{-mXX2yEY<~(e-IjJr`&umh|tl;;pQ{T)#*^I{{Z}2yP0aj*mg+So)$}5 z>_>7q^%(8G@o>OS36vhR<@~y~z!G+=G3O zZMZ*sdb<6o6Q!6om57O{H`mW^rN*3ObsJa6%ykM)?bw^?w*LSw+U>6$pgM!qtL>g# z;uT6sa&xckcCRRVz~^L2WD111>Hm8PQ%xoVezqq(SwE=fat!%g+x++RC8iUBG?s22>@9GH=) z4qG7}FWYPcxvDKyDCTQ(e9asaMiwTK*c`WyMLjC44(-tkpR0WF1{y54*D~J38`y#^ z>2Z@aD{+vh3@J(rWzg~u9z~AX(bqgNov7h3~u1A5#2xZFaivl8IGO_gu( zbaQyDIhVrjOviD==4?*@inkjd4#nBTW+`b?r%xk+`@m3YTK8QJm*5OW%#k@==m4!p zc|o0z4J<4BHHT*Qk84Pm+zI=VQk~Q#$YkYEa;SE-ZDAbC$(Tkng;e1+6p$DM3RaSk z{5&pYxoecNGe%Bk8iK%+e(|dXDr~;xY>>@B#I-7DXiM;DKLNLKa`A?7Qs$R-azUta z-?uBr2y^ZYf^xPqUCKBN4~SJkH6zqkyBX@DWv2wwP^4sok@S+|%c(l?Pue(HQf8S_ zkW^5n-e(HqdcM4Jc=t_*il21Usgd1OMtr)U!iYP>~ zMM)_j8atfpa(Fac{F%tKoU(0QfZ|Z4FZkMN(y|$Hz#pbw6*9T03>X#*9ksq)xNC;l zveHVEKx)KgYJIuziiXtNc+62y@6bW0W*4qrPWJ*EF?y;DClRitp5JP$}wDop9lsidvy9m{5Xow-6sH_09+g3ns7 zBDFO- ziuSsmo(^B8jTDh26I3&IXG)T~ozC{Ry|&>bVA@QG1IMcGmv@ z$ol-a9tx55j$`i$IK;9%@u6FjUa+m~z{U^|Y`W>V2T{GRuMkZC0CHb3{{Y(vXoMc) z6m02TfAkOt{&bJA{sdJ*o*3a4k)=3x67*BksbONOB&BkfIuy_b8Ut=UZ(;uc^%@4L z6b{+cSs?AXswo9RV!T8LsZEPm9O_?F2bOqe_@x#ZA#vMFskqy))4!#N z;f_n@X^`dC`d^GIkO~zoWRhu6ZUOy+)USpAEN2j_H&SAJi>=M9EvOdl`R&DH z9uvG>Ah|C<`oB6}JsV_BT-iw*>Sh7Alm=}_%aGP{tV!Nn%oNR`v+T+zn3~Gq=BEPu`y7M?(qR z)tRy)^~;|oQ#k)}RnOdbqMHCY8|CR%A@Kw`Y0hF8#la^B|G-`e5gF@-zhiMcJ% zJsX(L36X*;nIJRT^|{o(cGrP;=NwduiixV`nO3Hx&mET!{SQZS47rgJC^i~j(#as{|E4gT^uk8un3hyMUkOrzDffx3Qv@zHn; zZT|o{)B|P_NP%1rM!uR~O$V?ZgNsfP{{U4kv>?&+Ajh8V2mK%}a{J%qXd>3;y75be z)kcgGN}76-?sw_Nq$vk+`F?yk+OrB|r~*K%)Q2_G%kdR$nS(R-i-Bc=EYu>f3WdH#QXKpt5 zU|f?))f%;n0&Te?)DwH$`}Vfn8zNxd6|*x?-#$GxHxMNJH8)CasQvw3t{lT=7dqwz zi4J0uFeh{BP409W9rZTfizX6j2^B183!Vk5#;)z1c}NOGc$T@W*7A&B+U zPkZU5y}dYXC0pZ}9={)~R}9|mMcu`z>F~JWme-|Lj$%IwdYulY=hyV@dvPu%U-pJ{ z84LAs>zng$hsK}Nvz(~>3l3WQh_-wufW=XXKA=c}tUnF%jeYd>*WZ3KXCQ?JVOxrP ze{O;)U8%-@vuc!+uhuT$Js+cpd*%v(91@pFB@w2?Z zh&C!_O<7#EikIEUQ!J^>)OC(m@e>TgG3n!!(Bd=|u_LqJ;+Qkd145(SRu?J0e zHlbs`xUv)B?xcYoBPO)Q`G=3e*fAI1ftHp4 zX2s2q=iQ^JCwgHmM;TL1IZ)fJRI!|mPfl~(Lr>E>oo>!Zwe{2U(@i*4I;vw)=jr=j zGSO$jfCYoO$Z`C_+-k|2Chmx%*IoS$#qDvnnw_|cS>7o~xM0D@0$=Z^C^Bldd(w5y z^BN6$dPS8(38BL2T2%zW8#4l+-#y7B5pPdpq4(k3wD)rNh&=93&J;0GoTEDuLz~zV z*>inp8r(!9)lTxr;x-*wXL$|H*rm?*y};~A8gROLii*i6CJtyR#vfskxP&CJVP21| z>+@JJ?w`&Vu>A(7M5e9^gA^2Jtq%Z@|=6v&lm}y+*CqTr-m@#WysV7ZEztnqh?`KU& zBf=Op$L>B^?;Sz(k{gnMX6cV`2)N(nZGHH$qIyWMy+apv4PkflYBU8i>sL4<7G9Gz z%9CPkp}m0C+kRu`=yDajJgcZN#A~QvA%Ei5I}&{fu-mo%mIHCb7{Elb4qrY~_8x4a z9c9@;OdD^b8)2cgDsu@ZL6QWN#Mn`z$r@onr$E^aAc?r23d zd%IGB#pB`+{va@*;|#zvCYid!y?NA_`!Rwzbf;Hh%_TcZZb`W-m;imR>!^e^9 zQ`|VNncs)T20k{%pqaB8&UkRKq4ndOBKW{Tp~4(8g-I$3k3t|@_TNHJb8+v&{iw2( zxi3qXrLwK<4m&k1u?b;NM+?&~I_L!h$IJf!7K}%j+1L#49WG3u0V)+L$N;t6kWKA# zr+z%YX`Spu)c^yUSmmp0b5oIzr8_p284`gs-Jo|FpCa#^Q&kly3}!b8q7s)jB#=nI zx|6TU{3VLprB!E% z95jn0;^_p?v)iBUYfm_9rOc8-#Gaa~kZw+e*z4)3@9DuP&!jGz0hR?S_sX)BbCYEL`2t=M@l++MqXgsvMh52A z>N5~6u8o*jSZS~)K(Qjae%u?6z$(uMwXR!kjs}m%&tE7@m6qV0Lx2Z+l>ttNTjmE& z7ZtKvx)ZJG%R*bE9)gsD6bANheOkIv+pHR*q7MXjF*0OG4NwoR$@RJ##m0VKzXM6KgDF5ttGP4Y(%S3wG{!gL!#>_Qt#i z6O>sT>+oC3BvjMM5j7Oa9A=m;N=m1vJxst0M2hF|3wcy%yMf=1o@LvG&rk8MTf7kx z<&rS86$q?n>)xVko{T5f2(O*a_qpzGpyRcg4m^H5WNxeJj5?+ut_%|pEujNjThM&C zg+%yjZ^t|5=dYY(2+GQ1m7Pvu=DxQFe8i1G^g3_E`-lET`un_OOs81I9wi=DCJKsb zf_1nX>GQeUzt2r>9eG~=008(SAbgU1JO2P*pU>&@(}?3tG#)}Rr;_@UuJ_;5{Rijm z!6M_BjA5Yi5Ppqgv|axAb_DC}N9VWetnd>4wR8JHnsb_X<6Rh&ax^4+`sx0f@w9*l zVAU3+MKBG;Qz+?!6|a-%!Plx?s6s~NMq z*4F!47rCL=JydsLE$RkRgYet=4%%3D7uSXO@(DII_vrVnUCqvnHZdV|ux0|4AAF(@ zhq&9|T-|_U5RwKNjp4X~WjRhla+M@@AP`64Bg_E0l0hEo%H?_1D>^Sx;88dLmFOahX z=j+Ae=L}S?>m4xVylgqp+b_e=y5Ax+e;tfcY13-Dfq!B(0Q=uj#Q9fB#BoejMbodE zL7;}dqwwkYPnWmw_P)n%2aJm|m#QPLsiT?LnP?`b=!LqIPf>B0m+lA}`ulLkKxF06 zHm~X+TtT7BmCqOI+MJ=|#d=t=E?uUnC`^>|385OCz+cO4Zl}|0eq2c?0&DI2HlDVQ zaK!3vEKX1Jlyh}`JH8zf6#`QMxVQayZ+PxMhy24)ZN-NJV&$FHP%{?><5Sn2GKV-x zg)0>_A;>oxb)fP*s19$Wk!kD2t`>iZfE!z3dv*t1ZG8tGeYIr=RT-YG`xbiU;*Rm@ z+Yc0gkXSn=pjV$=2!1w-4-lky+|))-OLEsfz5c)KHPV`(9Zm($81xJ*@T3DnLC?sz z>FG#Ft_ly3=Dy&YjeTx^OMQ4%hyyJ6a?#K3Va^zmp;k8G>7X~uLjrTj`@x{UVWozb z*SPKP+lbRIF{RJSeCo{}Fai9JD*ESrVAVBdNfKENx-n+3xZ399(E1ztA6_R+vvwy; zhx67oGDiM)`0V56h6?;$J$)ri0z|Qk;$zSY)WN9-dy{Q+*4pb~#~s(+;u>*La4g))G3H7=94K(Ah zCCW`s_Z?3l{d(T95tA$uQo!&5-#URq{ z5}_XUm}#xI8gJ@8yhR6L<)gb)wH@cS_lWxC%h)s#Tw$smrAbRmo}4f!8v1}i9l-E)R4oJNV44nGf8(3zz$%Fw#lS%_@Fi|RDe+vrWT zivT2QS?N$|PlKJK#=A|3#o?x^RyIjgvZ4}HkgpBF4&mC(U{5%1mXd5@nw~sDvZh3* zkKob@c?4@Zw(?0Kv3Ixeu`Qvow*bnV5?GER$3Jq^zLkn(t)c#(JH3&IOB{+)&wBs? zsmhIT;w#Q$z~P}<$5HWAFBikrM7o#|iyF8aQpIhn4Q>v;k*s&8coH}Q*43@8t)xBK z`&wk#z||#05&>q+wp_?;;)TQ^sKc=zh7Ki)Vjc<9*h@|U+Sb%#z%;w&6+7cLLS z<5m&5RSOg$^Zx+LCrFd$mg45$gcHAO_WGV9lv!<7s{(D8C$F8L?V4J0 zKqPpsA17uRi&36Be*}>J&!(5r2=v$Vw)Wrjx#8@iKsW}EQozjcpuhMFJxdGmqt>^E z$~hFopraqXU2aXm*2lT``FyTSy!w6N?iy`Daygs1tv+NSiwdd~*t{i`x@{*;L}Q+g zb&hqLAwhONTa3G9($>?4yERA?gOX}0?g4X`067Xf+9}`EEDEumot-r#xJ=FrC;=vn zD{EGTqq#Zrmhil1lJLBD45yBoN_tvmNa2aP6>%_MG8GqwrkH|QK7?2hMx1(7nP{Jf zNZxU~tt>J;bkT%-PmBKm=uBdgD0kJsnw<-`o5#=IcjYsM;>n5AL(-#*6q&Svi6vrAt^U?k`{ozMF7@MiyMjbAy6IpIt?3O#c99%f;?Y zlc8!^+y=irb=Ir1K_61#nf`CCiyI#!3f)CVT@py8fE2tg&?&A#x*Q7S_{Dn&D7 zo-=coVs-i7`fY8vk~lOaiJ>*lHxSaBlI&#if>Pvm8;;}Y-`9c8VEIJgo7>~WccN%x zhNQ;U&8WGtx3#{y-}2yI;MJ*f>&?$rf>AvLGqVBswe+*bP#0R8h{?$rGL21v)O@tI zo`+640itAyY97X|*E7RNVxx{)nB#W1P)&#Zy@r+_U+KgGTe%gftwV=aS57PAO)AZoy!SDq7lDk>7>kNF|=cJ;iy^$ZcVl>1ND9mL-0>)sg|nB{>yrvS{q+}sjP-9B zKrs|{wnfYE=@v#2&dFOrS%$S-)TN-CH4_$Ec_C*|`9Lh7*pOHYlfImCsbCi%aMR23 z@hk6vN`X;-D%a(8>Hh$;zd3TQ6+w;QU^N|A#79;x##pC@I9QS!d-u0v>BQ1XQcr|F zpa*Zi5Mfp(N|bI}^TM9?4O+#oh4`(?e9Kc(t0c5dMAa)ARm93zpekOTXzmy_t^v6t zeUB0)bLIsBVoPgw7bNKV9xJVNFl38QG^jq?xBt3=AhrcxPz111&FbI$(&X6nvE zhY-TBY2O*ge`pm&%Phqp_-J5IWl3hZMOy->?WtQ_+m5m6?l6QT?vzgAt`I15sso&@qw< zfIuxgc{I+t=L1k~7;wT;kugN2L;#{Gz_A1erj+uFZqLOD=qW7hGJ3s3`d8j8o>|A{ z#Hf~8!YM;yLlw+dLQ0R!1E}}l?)F^7?l8zXy+C#YpFH)B6on#n6h&R1oheIKj6TrU zu5r|u1&PBX%-?v?_ofT{S0v@Xs5)^39VTHXGF&<2Oa0%@H}freRT?Z30*cs-l20`3 zGD|~3vFcbjHfL+7V{3zLv=AGg%lhXBs%wTM5Jj2a@J~o|!7)}uM?tYdO!>ti9FwkY~pEznX;uQ(Mkr_aQ=;-9uYUh9%QQJ?o`93 z!y_@`M;?kbs<~pZ)j(m9ghuKfRbvvht{c9(?Q-`jX-5MuE;I+yw)-Rh0E6i`JZ9d< z;U{6t!pQ+j0Gi^JVxU`tF>A%1+~tW>Vf?+y9Fq)j;?)!weKh#RYX1O+!q`NQTUQM+ zv&i%)(kPn7HJpVy@qsE!5=}+kmD5j+7d%g3{{Yif+Ah_0jHd-AR?^yI3xk*k_oYb2 zOzzZ_slK^NN`Y*ITv10nSa_monyu-UG?uZz64bnCsPjFoW|@I@1535N2OA6BxxTsn z@!{(-v2*b_oG9*OEprns8K?!8DgOY;ENDS(BaggFr)YVR>2BW+Ct2fLwb7+V2Kwr^ z*4q#`tz%{aR>0hi8^l?@KO4uC?c~lFg(b^xs^*#c>&4zG_^HD@E0BX7LdNg>GYK0k zst2f!rfQ;Cz7 zjpB+Bix5DtH8ldXtZ^?q&Hn&0^8}v`l@v6+Il8!R9@eJBBQh+p)5|@xr5ec*X;lc4 zQFIqmmw}M!oJSS|E1bDQPwD>v^&4sSE40My`J)ek#LOS5n_>`VDQj}}3TCax7)Zr% zcq$>25tf3R;-{W^hK=J#mW?DZq%_phNXMfIBREMu@eq)f0^D_qVQK;esPCw??_F;L ze^mbfsJlzF-J@P1J4FDOKxn^emHKQtcT+lIQl?6QAa665sWmJsNQ9G!>FHj!Z1X&2 zBrzz-7EzTI2o}mf?W+&Zh(!<$0VU{bZ$55)+ zDJH&DNoJdYXnJ6jhHhFjSs1@ z8vOzE(}N{BKo&cxAc|GEWz+2)g)MGC00KoC)~`};_7PxsbBJNMRy4KvjLQlLWjUOJ zvPzffs0T}tVSW8C!T1Rz%mv6U?p0G;1NbAG#TT~HW@0c4mn}P_gH(njunyzydD7i| z%YG+dxRwuEn0)lC46a(`gFyOcjGfhE`F{;P8x~8TW z;D%b~hN>~~7`n<))@nqGRV)`+gIsD_$a%tC)6{{V+EhHr-tnBGr3VC!NC z3FiQn6pIBAIR^vdd0HUa6R?|w2$)E(gdYzkecYQfc8gYJ%TmzwWQZ`43@H+tbrMC= zNvTd?4n<2`07`*<&k@TNG|IH&ubd#1RHc7zwWZzOmJjODOL%vN;rK5*^PN>B(NisA z(m{izY{jZ8LeC`lrBO);2tFo9=^~Oc5Tik0RPwTr08M}yWX^p}{Ij-gmCeL#xk(a_ zhFD1;HIM;68H?p>;}gYc@SHMSPY{>jqNSyJhiTpzBc3{cGSs^l=*H8P5yTnPlEU{o za2%-%QMKqbsjn|zCyG`N1v-8rT(KyCNPN8YA92Pwj}!5m2E;kI*HP3|QnJ>xl(f;+ zR0=qlUHTGL2eSM`x=tbnH6(;3M-CBzS9Db}fQJYCxM;_v8&e*sBeJtsf|j|`(gjF6 zq3jx@Z!mnd9L*WdJj*{bb8ab%a}*y579hv3Lx-^xn0&CI5lYfEo_3bkSKYw`YIHvg zfi6+p8^)rwW;f~2D7#>GYA|?dDIOt2?wX{~7b2mxr$&yO@b||G91AMcEX|QEmYnGCw3pfj4riu=mANAnsgDZl)>303V)$yRmx54& z<#lzIbUsoFl6LLIhh%I-%VlCN81E|dG-LOpL7kZF!IrPoV*~CIUd57Gt5$DE4`}30 zbeEbwE|U!Ab&`!^f*eNqZfvY$SI+gSXCE5q{gQxRRCJ# z3tHq@@i~~JE5kH!;@w=|%Hjx_I#EB}TLEhS06l#iKwM4-p&&|=Q_1`ySmsZV9aK^5 zEPh90!4f7Us-%;hNvpT+EZJ)vHW`6JoEp*S4XNk&f$+$M8Kn#y>Md{%q~`6Z+*009(ly(UlXj|S z_J3|-u#=y=T*Yp_ThkS1s9{bIz(?BsoW^1MOWFJ`K2O&!QY9!SGK3|`15@nPkDti0 zQ`Hn%T1h%lRfmWWvE*PtR@B)vRV3cSbFUUHm5T1>B4SAaL>dw^e2!22(iQDoJhjSP ztDg`rRxBK`>%yWtC&Es4ix#H%V9b)3jV$q>G?CRM#B#-bO3f1WB|ENW*VEfJ4$$u< zq$rZWP_fKv{{Sx@0or|wGYd6yl9mLVx$xJVeL4RChaM7fFSiGPbm|q-iyy=>2L3U6 z3>vz$K4W{3CR;Y7SP*tRRsR61v&6o};)tMEeB@9NP@A!+tFfiCyKm_x9axUp;M}-E zq&w;sL1C{J9Pc03ZX-l#YB{2|5hG7gM)QdRl#~>unmAQU4?6iQyMhTK_Z)tBNmqS~ z2^KSrEmEUad-|SH_r@(ERv4rt0%Zz{8wwLcscP|If8#&I&x7&v$1fClXBeNCd3&BY z-T#NDcw#69DkJ+3a zGYsbrtSr9vq=bRUlb_^)Y7leK$Mi^EM|p^KQ2{{Zn61Lv)HN6M~YpvCYW zV8?KLe+;R>d4mGx99sqE3>LL5S%KrYT~w5~tp#jAkky!U(Y&iN{nbr7Ea(hu4-lev z>ynx7cV?dwoVX>)@_)QOI3LgxhF|++1}exCe?h{gG~&UHEi*l{B&A%2xE4Yf4fMD+ zBwG57c!l1gj80;`V-&Cbl7+ z!7H||5@hhnOS{#dlQ_-p-)P`J8K(WA;*L395JoH6YEm?DDn$X5kf|WJWdPqg*gxYs zlfhCZR02Z=6&u-6pO2GML+G8HkWsTj7d?PH9cqA#TxW$HyY!Z*07>8Q zf&RQP-(Ub11JCggW99z)TIUOx+g~6H zuWv!b;H-e*=q|@DKc9H;%yJMmxI@!?YneH7u5NjV;cpeWhPF(0tt6;;nhLte6bh2_ zK!Om1JPI_4^f49(D%#s{CLqnz?dQ?7^{=ybI{_|QOwz}~3!DDjg$vV2tMEs7sw!%8 zD-VW|T6qp$lL-z(88$5ELRY!%zW@?l$uI5ri$hijXCkK!6&K$-=#9-N<#4Dutf z3_B5*2%>rsN*&>3nrUTV*#%Uqm18Sx;XqsWAOLuo6+&M@f8WkHTc&wPQAh=-OXN;q z9Vpit!i_#2w6y6Nkkz-|IZKggqq&g-Xh_d-e)iVfcMN5cW+W0zq*3@-R_*5YXcarp zTQRAcF$*$B8^;h4nB!2QA2HCeTLxil-uL1ex&Hv;`G#`kEy><2YR{3gSPED*D@Kiz zQi`ftnt4hNf+NJm?8Si9SdGayy|gFT@x-b(6Z?GO0^)-bDP#A}wx>1_AZJyD83~n9 zlEB?eYBH$&{#ScN4X4hDXY@{rIa3l<=_opb6S&mm$ zR3$}w3aKNYN;p-8zUG})o)(e66UeY4p^>i41+#j}Cd^265}|y}wR#O43O20~%fd@{ zlu11Y4nCJL6iU%fDvX^shD2K^9z|niDstw!*bvvh@n4Mz$9NYvtyl-iw9AH18#qws zcz{FeL#~&2W1+;Ql6u%>nVvy0WRcmLSroY{?(9o3a6vhVB;20oi#E;00032WcJ+7p zmaB0%WI1J4wk+E9r5wLIL!}dm+=$v|a-fyeu7Bbn8-N39G|+9s&iU%$j#_zh<$R$e zdchgmqBtBgK4EdIF<>oXr(LcHBkAeJ8JtGBQQ9_8RNH5Hfp5)~W)S9s*5?DEQtvzz| zc(!ReFog>2sFBn3%B_x2s1)1)Zd3t%Z^fex{@?zB{{U?MX`CvYf(Zq~lKIy!gGjOY z2EW5-`HG@n73lfT66EOVOmNcj6tq;_#`xD$B^a7qM0_$}-7vFMk_$6}iC{+oZ3SbL zf-uVjgtH6Ml^OZo?`XC5BMI3Fn?-;8=_?St49P_s$e1OiDI^hMEFR~rqv=0{ul9Ie zNyTWnW10D~JVKuv#IbtE#^dSZH1znj3P(XC*nK*DJdsdSDpF54vdGbv1dCt7`$>nz zoLZHOlBRMA0g0}>INwP9w*LU(8?;~2d=F!B7!Jwpc~Vh_Dww%=j9N(>lE5h-t1RC7 z>B#>8X$(Wbu4SgEdS4sx%rdem&|)-ocuic8y?ivo1EHy`hLmPzrKhD>DlL1-9lI^2 z*x0;w&O(v;bKK1byCfGWQ*P&7I1J;!zxbx?fAnX!+kHKt!+%k>2Fu&~I0Q|Vx}vnr zl%lc- z{sX;Q#*{PI^G_a*8A%LSZR?t4LnK`n$SEj{rI@z!cl{mH?fz33nhEvBp>{1K{ zI;NIEMNEvbM@K8IUWyKwR!8G z)9pK6d5;qC^PgMAcEPFndjiK>9->ZIj+Y6cfhmSBOHl+&!oE2EHnLd4pNy5rvlDvc zjgho4idux^kmn)EnSis^s2_xSKlNMs`~5QQwgOb`v9b27y|aas6SJ{P#`qFY36vJ< zJIM;E2I1U5+&}Ei&c6j6c0Y+=I7BkTCQ2%KrmDo{gg$DyVy1~&5gN;xRhjImrfYCQ zW=<1=XJtY_VB+UZX&)Hv59*fAIEjeDNKu#+M)4r;7rTJPh|`PGEvAMoQ0sOs0! zJ}-&15E^RCX*#qCT^wM{VWS>MmYIV>1Lj2{#F8(=VzLy2EC4#TB-8xt!nk=Gh z$zeP>j9`K-YYsH9xi2zk?$oNJjND$AuQS3eeTkR0a9c`7K5i;%!ql0DT-RK=fT$k` zTcwSKD*DA6%lQJ?C_$;zs8CS1wMrSefTvWN^NYRGEhpEY6&I4p&E^JqxxQS^-{hYf-|uA zc`gLfLLmfqJRv$x1h3c#8=(n}I3To6TR#_rZ~9tf3$Rw8;OAo$A0>Rj+1`p}#3 z{+m9@Uuk@I{v93y(sHlbtC4w%gTs&c;g-$K7Ro-D>{ipn_H$(>UNJkelz_@1sk%k$ z%Jscs%KJKh#dE{owpTe(7a%g{kRe1Ie!gkjQj>WE02p}wk zlFq?}>#qYy`7i$f8z)RUn+^;d3|AJUWSB~i8k!2pB@l~h!2B!kRZUNa-00QSu);(&vSHr}7ZZX#GED|q+CWI0_CtuM?)jm(IHJ ziVcfiOu0&ea+K8w?UMF6eGP%NiQeVdl&O9tb0C)*^`==?CryXXoU*ke0kFRP_}_RJ zMrPsioFl05jz&|sARp>Jztf2VfC80j{NtbAAXU#Z4mce|W?E9)i^ur_E$B7$wYzM1 zHxDnru^C>SNq%7I{KdV?7`0vtGF0I;KM7eJxuRfvkGEB2VXdSW3Z&Q$ z))wN$ftY0}3ko0*2@XTPMz!>#i$zmtY}__HOib1a@otv5{hh8k8%I|1Up*!)t5pi6 zE;E!ZO$(I})J&qv(P9@wBOeAZ2493z{s0G)zaCbh*&nSQG2R=~#ewM<#okJ*n^!ql+MDeqsLUMsUxy0RLg&QuvA*% zKnFUTX>R0$Z_IJF8gS{PNQtv$tN;kD?0p)7y1yu@F)l~t)UBHqg9@XM6OpP9?Fng- zDpq!a^GY1uq)9GvNLO3v1;+x+z{^=HDNl%!`>8j64*goj?jqBK+uKnR(IjFwWg#Ic zPV%Ulh9UB+me!G2V>kj+u`rIRGTl`T)Pb$N?Z4D%rNm}RCHO*!0+&8?&YtmL!{UtL z{qw%}&b8I*)T^^{g@%%NStLp7A(=&^4J^G_-A&skQHUvUE)-=q*zLf zu(^igWOkN*oNdz;B(Sz>? zemww+`g*zw-bKSHQW+DNp{&HI>IfP=CQAjR(rWgrXCFko9On#D zla%R_Nl=;I7$igiZ3Q%9H7#HUplV1r{(gtB@e>n=Kp*iJsJA!y(mWTn`zloYYUe7B zqDcdYyH>-`j9=J%!fJd@Qqcx@W|V?;7eaNlt@5|7o%pf$i89=h6h(3mTKdrCn>}dr zF!JTil82!wYS6lx)i2XH<8Ex`E{-QtOwq~JdWC4_AAF@JB|-%kKHyu^eK@OQCM&!x zQ00bKZ*Q4LsO-D~C1GXFVB4VDx!>)6wTQG>ej@VF;fa|No&G99%2GhbRS$h`FS8wp zH@^`}GXjE$zDHhzCdwwoO_UP1F7y;}P}Cd^eP|)89>ehrV+WfGr+A^Ol%h!TkVC?U z&7kvUBWvra--G6&Wa&--sH1Wu@$<^g(2hjea%Y*OxCEB4>E-sURhaiE!+=LmUp<*~ zz*P^J6A%hqFX9SLpkCI#hlMk+s+JP6?n9Q$*Q*=XRu^b_BWQl9YD}<@9*i<-Gghxs z`e_iUo+^`83g)#7$(cc0-LxY6du(hwailVnx-W8BvZ!z}*VeU|qGA=irzxczwnSb1 zK&@eel&eynI_!k`)-tMf0_ty}(|t9z{1=A{OMnkMzdGMn&_bQ0o#jhW016rb{{Sqs z`xhFrmowMmm7QvOSil`zh+<5SX1Oelppr`sMxb^Bg&5^8e9^CAdbb`v@Y`lekV-er zS*rBq?as{=8^#NvZ^Qx3=DD~eA2#PuZ)Ll?s(0$NMdCghjv`?nWofE59H%H&(6BO;BiY%Q?%@4ddf zPC-i0LyWi@`r5I|aEEj(x`Knben8Y0vxegD6Y%LssD&8n#fQjyYi}Z#f@L=W*E)G|rCVD;>UxnCOi*=fT4|eerlP>u>tXyqmkrT1<`N56 zURJwTO>SuvUA3~9Ogn(NQGL)g;4`kVZQ&$K3c5Oz6X!P@f&j7hzJz>@hZY_^v>~W_+aot)qt*JWU;rg+wwlg>%m((UgDHXa$wXQZS##6w82Wm zfxK@(Nnzp!)w9D^Ef|?&c~{8 z2@6vUf}0=>0b}b;Z3+0C@xwW$H7H*-%{xq~B#No!KnVfS4!HoorLH(tHdLi4N$-Fn zg*MWM&!FWN+$_1wCW&h(OAtXUKyzzrO-DgX_|Hck8B31hbpbJ1F#`R zVqEz-jvC}I1|{)t9_KMjTMiHV3m)Z~+UluEVrc2Ql@-)fd35VnDg_a>#n(?>Jlg}a zmyeq^ViC9{lSZfkJHTs~16cYCAKEqSd^QF`m%bK+jpsfmUhCybvpcj>obeR0Vm#pV zpwuLoomh%PmoS2psSJHgpbMf#6p!H}w`s9b7cDAFHsPsk!;;rG>3+1;3XOs$(dJ4mAYi=DwQccrsd3xSt5NgQig%GJyzVu6wZeu-g6Y z`f<;C4r$a<-!!~-z*r9<0&y^rK~*{%jPWxY-r1We7vJaW--Ywbsb%vF+EYq27lsH5 z3O6RTe1@GVaSAw<1l0*5Qz>~NK`KH4`^cDrTwC}>?cT&`ZtG@ADl{g!zFeFG`;)>f zQgKqH04Z_6@TtCCX&SI>8fmKFc0$lX!daVJ6K}#s))ufEXm{@>8woTKKvV2Bex977 zJZ{pIsca7etz11DQ=4fGn3;8jW3#+gQ``-=wx3QFOes={PtsU{dNB5fh#RCO z-KcL?2iiP|S!E$(K)3E}eRlOXH{ZVW1BrRh^75XKP*2#GZj+7a#`HFB;BqDlVDG$`|*%;udMJThFRrkfgEqsLt;r6 zCffaen|p7>24g8g*;d^?XPhyKl*1#52(eEozj96O^aPvs^x&Knz$SnXCndb8oAcmW zG7Z9r9A87+ZMg>5{{VmV;?E?Kpilg~s4ZWWh^7Hb3cK;NA5b!jTEq`~{{XKR2_P__ zvG<5&U#fk~XqYBh0Y)bAoi;tboBm^nv2wwdrCX_gz03T!b3kR%fhYd}waPw?{e&vk zm12Rsf}*Om;{@m|>@V}}#fPzq?&g}Bwz_){XOD}2uTnylF|ytQjNU%E{Jed)!Y2y2 zcsfjIjfU4!pFZI0{W$hn1?7WA;rRKR$HSPJWixRJF5B9>Q|@$xFBzRv4#5DD!>;6l zePaaQ({eW0TZG$K(A4KlqQTiof8D9iJA&1JZfpP-kC|973vR3p8G3ktAZG z*IdL{*m?_|$79&=fzGGSFZfAP%8QZE58utH749>K2a>X{&(x4Z9!6~Huo{PJ<=;bp zL!hu5l~Ynm%87dGt6$nI*afL2C{NHB4lQ!R&kNMXNoB0k=^Uu4Y(m)|DbcU#sX7zy z#^op_RSr$KeD&bbX2GB-LC)!BEk@uhZE;^P@#@DL)JR6e_qL#D0UhjbYwhp11-|!- zSZ_ID2?=mRHC+3HQDz=ZbMOqNCH@?y-R=t$ujl&lGJcT(u3!@G1=t+#e_k5HmJFrj zRY7}Y01=?`J-`Ro(%PN~Nbrw8zs@mS$CoJ}n!g9~^x?)7an)p=xma0*t`3&m-}Sx7 z_uw2|zx8~}=NrR4nt!%9f`9v1L=oKu)e5nc62{gWeFg8OzFa9^)OvdeEGbC~RmEF3 zqv?OYLl#tY^!RQCEbuI1b4DcUGPAZqxmwR+NVqrkI(Oi822uHxRVLylFBsJWc+uN7 zYETzHn>16GD<4WFa)0(*>2G1N)DNE=x!2*poO+WD2bQ<sD-;8cHNf8m&MVVx3b4o%&I&rPeq)6I=b-le$85tQ?%8V=H zjlm|zOIVxU{{Z>pBP{^`032c=Z6O`I>`(I`{(KPwxz;9OjUhU!I=)4-@*ww8JF&>NFO&%S# z-k$ItDu{7P9uLNiZf5ys)Et#_g3T$AAN^Iq?`!26_7|`RZrbs8z$5!%-SgJiAnHR1`rB?*XmGN~X1FK>WVQXbJ9-4vau;6{0FiW1D>iB~bQ&LX1<;26ysM9br z16Oc@K)1}@xKNn-okxruYm>PWzG-^0$AZ*Q)mZ9kX=^O1$M~{~0duy4Zasr$EKQJ| z(Uzlu%AYA8IBj9wjaM{VT$37!bEz0$=I)$>Fx9wwXb^N#aaKZ&) zb{l%!vGl|0fQ4Mw?ZLlKO7qHlN{_H$s4F`~hE>x*_>mfof*8&Mi7b#$EZ%n!o z@3#fXnd4`rEy}c~pDv+dtfp&zAKd!hFI;MkaZXXG0g1~GS{$B2K)#oIn;RScR=*NU zn$y|nUfSR9LJn1>U>RhBYCz%hhgjt>vQ*Md91#iH3G($b-eXSJ4EX`v>Iv5U{iehK zQmf^|FE-_sVZ6Dhmo*PDCda878aSp=Omi(PqI!sC1oWV5hC6gB#r=kdTWUq`-t^6) zkjkLXPA>P)CpmJDOW4z8&6Ji}Nnwy{4sQJX>l7X{PSN#H6VbQa>tMwCjYW;Vw>ur^ zv%+0|5pzHq=kRkiH8JQrK45DC%rBNl@m^0A?Mkk`QTY%1ctJb|RRt+-KL;qV;pS8p zHeuAaqj7+8M26`$n0GdI^Zo*xdKE zj)uo=KU9`JoB;k&|U>m)Xz;;<|k7|6hct`E1LpA*2Ldax%a)e z*5t)Ow1Am*+ z=Tc6Dp7-EUAt@y95*(3JK<+*_3f#ekz$*zUmQM)1?}|M$l$D=d9{D*>C$%ZS&sru)T)-4S-YPHW@9Ah~!d@<0!Y7VcGh(6!foc-T z9nHnO!o+@?@23s~$#YT(tAJ`X4@(5)7+kkA{VQyNQVbMKcG*wq? zf_vDFM-;3IM7%Uuq$O$I1+pYqP`G1bZ{{O&S1wDWHazX07-_So_lQbg=>aDwV6q;Qf8Iw%U>CmSIVl00|7wm4juSGj}{G4$^lBCow~(-%9Js48~<{ zjA0QTHH6Api7E-)T$^9pL#@TO=m#t_hzZ>!n(q>MR^Vp+A=ZM1dYIt`1(r%=XUdJZ zy~W0ty~oJ+95TaUf}6q#&Xyb<*Hao8szckq${p zs)MM?K+yL2fGyu^kfm5zZ*Ur-oDJ?@(}hGHW*Jh#x0u(=X<*#-q!)^o6BNB8u+Rf* zACR|gFY?eGc#L4TLZ}VzPCpxtRE}lMbtUb3mmiBfI#FOWlEoEIO&=s*5hRG&B@(F7 zKpTT?jt3n@@TEfSo$Nr&b<1(- zZrlZk!@WZ>rMd9Z?|zXoaYZ>f;>V32_lp+{z%e@XXHSNvj^K6bRyldhiW=BUYZ5cM}aGWBn?O(tuomUpOYR)^latrr!3Jw-);;P_Qgl8RainiWc# ze90W`9D$^$j+y-SRu?TG%6B@R21<7o-WOx31X$(EURp8z9`JJv`$YJQ z%9w?8T&2x;oLGE}sA;PT)lycxV_KY!fmM)sL}Nx>4{P#pvO(T(OYb#HWo`w4atD3Pol{o$(Jk=P*Jv}s3vB=?gg&&=Q-tyPa|~J_XALM z+>Ye^M+yN#fD@Z_es=irw>p?`<&1W+hZdxIDdbnGGM7{~y*$fiy@uL{Qbt9sl^T@t7yMLsk2PYIsa1%rWa!NyT3oK-qo#zF0hkcQ45q{#G}mFn zWa20fI{yF_^dE8u=}O(-M{FHh0AMvsRMUxn#WV`@96#~Nd&8~ox z^WsDhxx@*1wKJ(Y`L`R0XeTHts8Ke55joN8@0|=fMOyeaM^^Y{EZH$x(lQw^ z`gI=%3@pI;WRzx^(!hq-O*mYY8M6o$aZ1-(b95knKjL1K3i(ZW+8r>SA(5pxn*2+C z$a*R_Tb4=sgDXhdl2>7JYz4Hp5zJb!>{OQ`mHanOMa$};NFRtnhqO$ULMKV$VU#wS-*7a) zskWOF#NYvtvsxwyEGv4{x%_ktIYmiL%0S~a?S$6Kvf=c}iBZLriR77@#+H@Tg=UO- z@|)Rr?Zj1-cb?8%7U#&<&KuycpQ$SeN!|zn)bCQ)xEe8|(8FvrHNGiQMTDf#)nZst zXpRkvR7pWcS2{|CYg(d}g;X_=6(%uktk)n|@MMJ33*m z;&GcPc+VP1WCBZ0Qkb}?;A+CLdU$!r)jl0n*4J|t9ISCik)-B2YWcB=aGFAqfk9Or zU7Cu5NkLbYV_T>Ni8}GE_E7{g5*!|%&12fXtY6g}C-qi*mF$c$*|NeAW=Kfx(4`rB zswzNamr(?g2`2Q8h^D8GXkJLBLmaTcX_7J;nUTwrByy>|gx=#*rLC~yV5F9CI1n=B zm#lcQaB7eciGZY}RYHk&sbNg6HG7!nKNGo1rmr5SYEgL&5SFFw`1)js)C(IDG~o>S z8_Q9n6)4j5B(Er2^ zKMfhmWs*QLM4dsou>k9BxQ<>J3jisg)0In&TZ@2U0yZr9XnDYf7dJXr*n=G#gEV~4 z$?eONOw`Q;DNiFH1`6h;57R_oEJA{z?V}KViD4>QH%Q*7$PzQJKV5lU_Gy=jz^+nF zP>sMt0!m0pt6qdw^>GzHFZe4?_=QB3a?J%yY{#U)NdZj6skrd|;wIau}(P)D^Ut{FbX=+ z>!y}HVJ6YqrwcF%VvfqI3svaebggrFuZq&vVX(D4#cLIwS)x_)$DT0Esx=@fxL;xF zba8;$xU2>*`-pj9(2xxQHMcKY!u)n43y#9R`^+gLbk&VNaLr8`u)j&nHTXqTGEz@0 zVx}`FX1$VHf4s3SJJ-_?t!X^J1}LF=3eXXsV53#AWHxM=fj%PhUGo%JD|hK&k;CGMDuv z@UIJn+9<>nggl^q9Ohn(#)6iF8&_j&#o$(;08s|lb{c1Yymx@zY*Sdi%ODcwL1f^Ay=z=G_Ob=uM^=U zA$3vug|sg3@0N9Vo3mY=mZ{4VrHQO)0Cw?HBVVu#(aBhkHFJM4oHDXn`DVqES*b9( ziXib;M-5c$%}jFSNgd^Kkrx?&wXLvjnGykFrvjG+otw}dc~-u%ot3e0m_mv2(n^p> z3P?My0U$pIwwHmN&(56nUxd{1em#p~QbSK5inkA}d1I@c@blDy8s;M@NMtV=jDGj0 zs5aoqczinm0&36Uu&$5L^*jN>_IqWeO2pyiAh~ctQ$X|rhOOyWip(-7Sta|ZlGzMI zodF~qrq(vsT|hS`{1-6^Qg=`&29HeoXU^F}AuJ&VN|}q4g2jQgC@dbqxzakX!cPt` zpAc3G+x7G!#_zEe&Zjl7$b5ITk8`Kt&pm28R4s@slTE$p}p0C)FH542C(eOvjWtz`^7~?$v@=m1Jbpp2003*#8xjAh?zQU)gYf9=JDNf zry+qa#?IYgUzI!o@MD^2uuO9YGt$;QRv%j(O4dnP6xAxA)=*a@<1VL#i>MZR;0OLO|t{aDNhjjm&5-64moodr||a%iU?{eBBGKxENWw}s&KUvK+;|M z3aatO6|6KoG}*GTc)UQFF~UhS1nP2qE3J7$oCG4VmTE(R%GO$xeCQ%_)VzMzTN-uB*ujg#}(#TLMZ9yZW zf)Aen_Au`evT;dJ7<1-ZJGtYxp)C!C{3Q7rz2CXzi$3Z(Vx)`Hk za-!b$Ltr-a;jR)~)Sx+b0o~L*&DaZ3?ai(a35k?|aT7$)8laKx)TEGHUZXxOUTqc^Bw-EB zl>E)gi#tbCir_WUP^^jz8K8yMQvxlzv&BxvPKmf^KyQ9LH~P7-d(0jiZeaj3B~9K~ z0C>B!IRvnAQ0`7{36FjLi1v+md|b_oi6^?AqLczj3E!C14#I-{Djq&lbGL=q{{V&< z^ptqEM~b8NhwO=SWRDiYs9Vocvarh?M2J>&rTkJrz^K;a%=SLmmx~hRC;+siB|#uK zAOJ-;*7;{1>DmpAI|(qUV|6o*{G(PVQI(K>*xG0d{m@gwReOZz`L|1d6JKatI~wKs%xmyv1~qb+4Dz>b@cgn_3YZ1#R^tXE^EVOCu-TYl%*is zF_$3XK03$EnIpBM5QR9KI80zz_|~J5sjh9E9w^@yd_|APUl2K8p1H);@{cfA;8;ch z;(s!7;=3v3G zu!;s`iH=v|-3FkVwdmG1;MI#GkbG&V!ufNV`8q6D4Z!n-;@l>kvQsj7P$k~=d)rM~+CWp0`d16XtzcP9`Mv9@qkBSDCCV}5 zIE_7Y{NKx|RR$kTO7A$GM2$^S@>9l)07U9ivJ$PXgEs{yXRI&@76I%|o_@@3V|abM zWXoDnftx~7H$s_Sfv6dqNZCcn-wQIzoY~5iCCFT>h%lC#IHoccWRftYm=7(<*K6)} za5EjZYfR4ut#0k)*PxiKyNRDAX->|XLz3)k(vwR*>zV(>VOM$tw#YDy4=g%nUQ zNqy4Kk0bi4Io)*nmfvTn5)&b>b!cAd5IU za&MG^rKJd%qN&DSr;#Kltj|#+#St8L(JwyvDI7-Q0@R!I7MjkdUQ)}EE zxaAi-zI@{by4E}by3l#%{dBEj1s!aav9z^HDSzmy!n!z5Dyy@NBNhQ)e7g72DYfI` zzn+k05mV5G6#_-Wxg4C6q5dLWD2|@8803pOnFuHjard$25@t8e9nNJsi)s$Mb1vuS z-|f_AB;qE@B##wE>zBairh%&i$0-rmx)w|8{3L^J_R!dIBo8e~007ozKX07l2(Gp* zaKzk?LT`I}-1~ZI#zg5@83E8W{yC;`g>a0-tbY?V$vPX8b8~-RpVNraPWr2_xQ@#l zht6;Yb+%bM2P3%B=Sy6Vdt3T&LJN`&X`jw9f|jQ$M2Owx>R4Q5y|)KjjSl{z_qS_l z#Hj$NJ6}Ja%w$NYc1Y+d($SeO49{zHnv?_vOKv9%adUH<*MlXN1&cP08|T}U4xkAj zfJ51wdi>HIaGX=E98=^fSz*pI6q1zXQ!AAg%(9!5K7@MlWx=h`kV}v#_0NvJq@1F+ zj*(R;Sd}myoU^?y)`xnDXjV8R21hg0*)tQFfsB^#&0kd{rqC6PWr=eg8eIlt*UzP|#E49(d-JB2+$E^S znK!o{Hj-kAX;$AnEJY5t;w1d#p zVxFp|C@~2?`x1r*63!Tbb$KLSm^vMD>NFZw(Uz5=4na!`mZf!mJlY1ChY2eIw?d0m z!v?Pg&8jb}+;lb6_38tw9CBpm2Dxwpoa=Y4Pc4Fq)iQC#j+o^bbWnY*R>&RMIYSPbiI*nh~;Ry_egB zxQSR<#P5VmcWv~gL(M?7IJgcO+8At2v9~rF)SZ>KF_a)-!2h_JrB1#Lk(BoV689nKea9TFI)8@ijjDVlEHMb=5eOGR;F!i3MVH zT1cc-SmR%~vjqG$0D=vU<4t($1G8}ooP|u1p__}|wIU+J%bP9A2}`*Blj@vf?)m^^ByDcc)mN#+@!R1)EI!L zr^44Br=V&YnP*RqsLcz!ZJAUA49#r`HsgaQ78ZAcXNnEcR??bjpS)W(P80fl+5{?A zGa3GiiCdF0a>zndZa`76HRnnQ=m_~o?7L6N*p??<<6nsw&xqd*EVxz&gm`?EI73#v zokdE#QogC>YG;^}DJW%CC5@b$%PwxxO2P)t-Igd65&$WCmKFWpEI8iE{{Ts_8y^+j z_JJEqA1w z358YB9=$+Sr{O-jfPuT4m+QSmp>6L1cEnM0@SUv^f}d@J+}`rGK{H0 ziIf6UKpC`R;AY_DO{0A93UU+i7JtUd6_^8WHk+FZgL@l|Ep7msnQ5Ca8#0(tn}D(O zHMz>^f;;lumvG?SvZJ{TRvC4MTraB{D-n=rs>4H&3jvsRuo_?2()18mMYo7}SxnG-EMQU`F8EjTZ#e z(2zcUBhLF%Dp)I+8Pq{GuRcQj_z1V8tBxv&C`C+dSvuYT!!s~n-V|Y?>9%b^u+qnk zN1voAV2NYW`CL~<XQD=?{*cLfnGOP=9rd!8QEZK&2 zZaA5TLX?7YXBQXDGj!_`FAX|Oku?QIX7Wpd#2UB+F#-DUyiDfr5PAC+!eQjxbDg=D z7UirizI;y(<-AW9#4GT4u^H)>ov{%GOtK`^*HTfRKR}byU^U~>`#pk?i78T1Eh->X zAt2B*l>iT}Pr^L|W@52Zwrr%&n6)GTd}>m%H1QG|wyoLgQM{py;@Czrht_iLBT@jzFJdPQ#_MIw zR}h|aIH8&HOMXDtHGC3^Q9C-%C?3Nc{?MzhpQrRj}$Vxy74$e120bx-V{?K-f zds}8mMAQ|Or6EPjpI0ZImX2=lj#wb4#lVgH!i0>?cDGG!cJ4s1zQ?x>@yZG_3PS_D zK*&)~mkl(ucuw4I^(hV#;gVjJG-JFl;C8t>B#pH%GW)Mik3E18x+iP)N?Cv&R8y7BQ!UL!h1viU_2g}st@n+iq zcVWh!g3JLuDb|tv{{V7E4-bU+pNyUq^RiOnb=XD~9w8kpY z2swrH%5QGqY4i5C4duS#K`uaN#g{)NF)STFPZ*%W-HU>6E#4y zg*O)^=tn(A7-_<>d1>WYVwK~bClXmy19jWXH8$8A--dGWB@7&f;y|v9a^gfT$86&^ zUx+0@jM%;J(}AmTG1A2rJPbsSjscF_|ELzfwn zMRKXH6P+w$%l6-AyRkB00U<|tGDBv-Q-xWr#yU3$$K#mB)v_X)m1IjcXzFeO5)h;n z&vI?=>Pa>{I*Yr}^`%+zpks0T`L;V|u_1uD2A8Yzww+jrdxlk-#6=tsFw6@8!Ov`k zn)W@0hT3Vt?)BENjaYRd!72?){?|O>L$P?#V_fnyjpaqi5lAqM*Cj~=Tpe}T@sK$R zNvSWZm;;ML0ivyvWLB0sc>=RGx)8S~wZ-)U*6ryQDGCS#8-Qqdkioc9(hb47=AZ&Y zGrO@No134^S9FvsUqvBeiasa=00Wgula+QL0o!5+0-=5zIn14WtFOIc#Hqc^$#o%^ z)1N+_LvXF}>fA40C!kGI#-lR^j};&XBPheuNz+Zoo@r%W!C%a>$d_ZkV`o9`C;i3$-4Qg*!~1AR!1S4nnlnFB^MSK z8ODrzi~8se!%am$?uzGbv~Dd<01*b^=6Ghg1%iOg0lUTiHdT(=@S8a0dL}WBqrE{{ zEpNIkEVpkiZM7dm$DwRGOGaR%7N$%;KYGWH_Of6Yr2ttZkjF4peI5S*Ced|PSIa<; z1TzR>sfm%ALJMYO{nl>nb8FuJ0A3zV4i*MPh95L9rzoglWJ<(NC4nd}VMcC&o64rO zit7pR)*fT0#krEELlScJMHy;z^BTD4sLbrd>v+wy*Gu+1ESG~bCpj;dD|;NWK5*j` zw+1kzI~31c9JL>g(fat5tpPp<|XI6*1hs!KS# z-{n1E8F;C)09kXqEJ?3JW?=!EI2toiO&Kmiv)&CdEXtvO`&q8#M>DMTXReMiG)(Fxk|QPniK0Z+-MTi|MxsC6$R}q!**LO{vE! z^Q>C2lFxWO04&An!2IV9e4|X2P}Qp37@8SwEvR9&^|aBdMQDO!|Em!q4vGGCV- zFo$VOT&ZGP0#`8#NnltzGu&6DYXiJR#A&%ZlrgSjniZ-{IjEgr3?W1DH6kV@&6%Y@ z*KCJfxEmNkWh{^hV&w1|)(h;;4tCSpYLJ)y)TyL^_d-I0@(;t%ML$*|b~8Yr(#(;~ z3&uR9CqXC+eQYxk>%SFZ3W-or4_`axI>o7SRU&N3DkQ2}_ivpJZpN_^CKf$7*pmBe zZrgu*an9kdi{7-)+d4$h#YRMR6qAMvBr?S-DBVbHbnRjC-@g;fUgFU8BSBMJpKFd9 zK(mUJiOCgrXBY6WZai^ul+8LSy6Z(H8?waB>N{WzT? z`-&vHngdpCG>B=FwqFH2pe!L0q9zP)aj`o49dy0B>U18biKJpTW;Rs~rJm!T4zZ>h z4^N^YjgP@*M{j)Q3?c&;s~v+PE?Ba*~5j)m_QW-~4eu|2l!rw^pfbgYU4e=kruSKhZf1f&-U0_{QWFQfiq&g62C##tj} zd1I8if_%0lFMDX9YundO8|?X%QFb{J&0~6c3eoxb=V+y@PY#^(4|NZ=UdAjUqEt`; z*b)z}q;F%r_4yt6ER+!Bxh_p<(yk8%&y8#HRJn5rZ1Qk&W0?bA!$Qs}98ng`=pu_X zM5KTSF^iFX?d^MhyeP$qPip3El}377?HA6^;ukS!PGPJsZ-(z2+0Ins&5B`_P`zDL zvQJKBaUiCeJz0wWAhrX`p!MAGMcN2#Ldsk^o!zv4m%R(=9^vg&6Uf?(41BwpEQSR}o1c#U{L;l&)jih^4-x6lxHd0s})L4oS?}O!1I2}w- zSp5V^fpZM$P+8`}s;ADN8@mg$17JaBB$mC&y~*tcJfG4&eiBR6xjuIFi>Ak(q-`uL zlmNgGz%ZhcD3L%adhij)I3pp&Ly}H>sM=T(LW8Hc?dzu%DQG+7yE%H*^rNtA<(zwV zF+n&~f|3YJkSNamcxS9yZ9rtAt)l4zbV=bP+dx4C4&P6H5AK))T&wcW`0G;(YXiOi0A4ym4H@|ZNHKrxOCSMi>Os!hdd8`l zixQxB+i|A9A->!9I`JBVDA9}h>+_U%ES+-$J{eY;P}?|+%C6B9U{#In^3eYPsXl<| zeg;*~GX=o< z#enkV76gxBuG(Mq;f90C8>j|NGP8W+!_KVub3sXmRpgjU8W3cZ=_?gbrU+Md8Jre7 z``ca%N`RJ-F3o0dZjA}&B5cW_BmphJ1ZFjVHyt5c5w5AIh_NKcPZ^C!+t8b60|BEQ z&9&fJt8yNq!R<@l*Q7L&gOw=DQdCK$AB#2gr?{BQv(%LcZ0cJ;}!c`%5{cBBn*zr?IqUt604ds}+}^49ze5~ryxz@Jav z7)!&mJ@{YPan*!HXxy#SHdfl#HXCno-%V}u0#ifWumb$|F$RsBm4IDuZ8c6cB!x=2EX7#r6Wb0{j>W;*5bBM_*vi&H9a z93%9q;RLI$QdEza(&OiEr+y;EsP1nPSm;X-`3J4@r>u08m8DJ|mnZM14PHB=>~~%8 zc!w>%vijxI}f@7!ulU#JMgP*PTXg4s}4LH$o-IF!qn7yxr- zZd7k3_hO5WQ~W+~(pi}z1QV~~I$!#2b78`aVPu@E%k$?~(ky#9d*m!p^tP02j3dyq z#xWatgJiMSeyeM*r}NiscpnE<0Bg>^)ymmZIJRNFx3w z@9n4i9Dm$U%S^s}&KRGlzZcB6<*GE!#thRi5<+(l$zXe3$n?|o-0>nlq1W04o+t%@ zr@mfL--9x(UPn?vm;gZ{;L6|7ThmK$Vt$bo&80*n>0cr~d%%ujjwmqEodn>6<&nZ&8?um!@x&y@r;vYnI*g8gQjwQHB8T z1&Tdequ-%ERELGBm;O;Tsx!1yj}paU_)L-maeEt(NcKLQ4zH;E_|}TTq?3&{edA!y zT)-bQik>!*7>svqGiZ93PyWX_vi;!g-`{>FVW-1?IP|s51!0(J$Dcnkc-W;qOj1?L zM^O~9#Z3^YfU@58Z*f^E>DutdK(hW2K(OF=AyW5{lWg9V*12ZihmDZbM>SN&CV1kW z{zpKQH%^B&72^TH&P~s$J@?}vc13D_X-fLS{d>xSWQ`hLu%)!IUO9%>vbDSKrnWp} zV3W3&cw4FF2tQlH@V;Hbs{4ODR+C^@$~1fu?#k~X=@=8 zi2#akHP+zw-+g|!vDEHzH@*{gBQZ~0>3`-URs$VHL?PGiW~dtt0KI_rzJP7{af~z< ze!BCFk0Y^=87@BN`&;L4$a>q1VW5nLTs$U(lk9)9ujQ{D52aMo-|ZSw2(3XpY4d}@ zI%`KMCwqq1Q-53Ur{~1DHs1u*p8UyrirSnW2bnCCl5{z}^$(kJuCdg7juZAIqB}SK zq*(3TZ||@3;`xAB?uZre^1HtSQA>G8k#>M@VmC+lteqaO!KwU0M>)=8#bo=%1E4N6 z++W*se@puMaHD9<0ZI;=nl}>pJ851J_h85>l#)hNBl!1jcZIAJDa0vdZAO;31Y5Az zO?!`C0KnG}nhKFjvxfUdSN{M)OcgXCvOKvqyfcrWejDO4RB~MmS=7lvQr!@B4Fy#t z%Msk>*7_XU-uL6zc1sBZh#b0llOH;EhFAXpMXZ2+vegx&z#yfWPUQ8BvO*Fj^J#ElN*aBSj1V10DB^F1M4s<0vMD_%bzoDZw6ditrWWk|%e z(=|n}zr;X%Xc_J2&+Tqxb3IiocrAV>O98tRQ&E%~$JVE+A9h@94%tDqg|^d; z;uA4wAUlB1nWcGhH#*02CC*ojBvA0KL5&S9PIjrRxxx%RJ|7c>W|yfyT4j_Fu>3(Z z)oT5UBOJgGKswkSDH};MC9O{Nz28AxgM7SMHYO(!q7VT9a~3rvy(6BvvVp{ygupYU zI>JJtC{PK#zyJYz9YDFY?s%qSq^e4ZdQ`KJ@8`$}^!<^v(JEk;R8*rwQdovL*c`p$ zyo(J-q@CTCC0TDCa6Te&IW`ESUrXo!(}a_}c~t1*FxC5hV#Ic$*7 z1diH?OKFJ#m6)|iy*gK}m6k1oV;Ec$3d%=lSea$1je3;Iqf3@e7fr_c@gT(|6i^Sq z2Dcx!qow;~?d%>oDJoSaKCLCc_o^g3?Z%}MVBzu1&#PU_%8rbDaR@^ml``khA z5*mSp4Vc^a4eb-Et6eEXqzz$it^WXo0l#nv+z>yn8HipUP&>>`>v!W}e6HMMU#BFv zu`Q>k?%ZM>BfOD2#?lvg6cPpDjdcG2)HSUbJB@vKNhwQGm2wGD7bTpLo>a@)A(*5U zZoLI6I555Vfqr(9%w(#B6L2goy6SE3eMa`%Z8$JVSsTPw&0@j0FsIs)xssBpccBLV z0Ee@V9Ud5{Y0AeN$e;pswS~v7mIVCv`tV2qWCzb!O}IfdW+j@ro=|3J(iNuxjAG#V zzYh9X8~Sz{>&Dn=6Q)@V<(rG2Kb)WjBC>U6szC{?nnex?7f?1MQbDoPYiVt`4stip zUbn6Ez1#5eUY$DQDn2XY7pQEG@Eeh9f8n=w99cPCV#y+@j8`*oJ^V0r#||D-6p2_9I553 zJaW|(v=vyCl3qG_BZVT2F%qR$V(GIRTT(Cl&5L6hOhUIv;*d$MdKsf{X|hS z45EaSuIfsv995qxw?13B%K&^%jpZXPT`h@_43!2*#$z}F#EpE$+WU)fHqgOJo}#3N zAU}iwl_&B|Y@`mH z<3+xg(01a#B6yZmik;OFUIdP9M`8A_x$I1M#7bi4!>ic0T6zqF!5&b$S1gA13pIfx zjg7RqKi<4B!!+d`(Oy6`EIjMM-;J+ko!QPD0A1dLnWfLcN9cNtLMVAYvZ-7Qt;~@H1v{T zGfNbyEnM{!3mfEV6puXhdA|(6+yS`)_a}}dO?8^P)V^E;>g@n*yl|BbLPLfn94$!lA^ta!fme-@tNx2O+M za4A;(uCKM-Yu3!LfERw@eYnRK};;Qjy6vKxs;TXG8$4Q92bzd%3P{AorkDy3i zY8*~T9OqDtb?N{Og@Lt)8`{(RiAn_3PHS7&J6xYVBB!%3=v?V#DlXyJ+uKX$lu%w8 z(=AUlSFFXE5hbXO=om3o&)-%cfI&C)zkU$xNk(QM%vC{CkU%$616Le~;gndmvZmqi z%#z+47XVORr1H|0xQ?;$-@$otzE{9`{{WRKBbj8wsAR+_snOP2I*B34Ixvp^0C2!& zX0YD(xCA}hTPb+id(sdF>P0{rGqC5Kj8}F})18HxyFYjWqD4&|MD+wW9&x}}-UnHP zVsg>Wxk@sjUq)ent%?569%G8auM04uYCs^6{kD@uuQ>`6LnM)|@f zN^L^}bP&p5rv&C1pYIN*xg-tE$kcDg0bq~-qhF`phH;KW&;cg4HhT2X*w!r`Po!K! z39G47cBf>DcS2*C0g1E$x7TZKZLYf5wsIT{pDJ1Wyq|?(ZZ{FRI0qt`8UoK+`R4rS z=UYJ}I4e(5T&${ytQ4ylmJ`t=zK1&-9d2)9>%&RXhT(7p3oslh^M+0c*jeF9A*$xB z$CkfiMrf@+8`ur4ptkx8>A!x$#BhhZd8%eCbLxMcY04}z{AdAKG4avz5eL8eCENxCwI046Sm*!ZiTMB}C9%yM|Q!KNp-kJ$4 zz=$P#26ON7;7n3y?ht`i&<3V`ALaN!mEL%iT$+pj02QSl&7-3^`mYbb;lb;vC?gpD zRCpRlk4AVZa!*r<$OO4;B zLBob;&hcO2SbX@?Vl~yRJhf4yPG*r=k=Sa8iq{Gc`9-wt*w`>wCrAqd!i9@FQ^Y#+ zy#yi0<5Ys-M1Ry0HO=Y6I*lpiWd$@9H1HAts>?Qg0>;)EfEKVLP%ZJrf&{Qd?k_o1YWRMjl zwOGjXRu*73*I#i&prAr(uPV5IR@TEPC07k+G|x8u{{S%W$)XTdDx#HSf<{_E2bws` zsba_R6&-=luDWfx;bL3gK_KPi+fP~i1dZYbr= z0j35jwk$x9T)6;V*Dbxf>%!tD0#ldLZ(5&B~CMpMi&IaaXf4x2R0KyRaXR=fFahR7{xTf zL9-%CEqjCmc6lyCYq_`A_K5?t_ddwt(;dg>9mqu-md=u z;(VVl$M6n*<$OtFj*kOkQA-v+${DT<;uX;$>;_GO8fU#Nrt z&PmrRchHOR&NFdR{;M-)+Eg#aUj>NbxQsMEc++Jv zOiCP&2>s*3{%5`JJ6gj{I9G!+5ipayp}jzA2zm_ws60544EBBsUM6Z#rK!OILZH%} zGY6Ap4^wgmV@iwHQ)YQ$dJT(t-q% zNC*?e0kICik}qNj+#VqWixQff5;?=uh7xg@dD4P}!?;wCNPh`61M0qhQP_O3&$w4I z!2zRL9x8})JXI0NFIA(A381TFjiP7D363dThSK8qJZ$2Dr7{Oo&CTB07rhL7KF29u z4HFZ(nSfLp>rRLnknXrzr$R1EDC5Rd8fd+gASJ%syV2nq(K>s!4wMVoR7maamYNPFt=b1 z+8*bO6App>Jd4FE6@bFdl`dSs;oHK%?zUuJmwG*0FcOarj{~FWQ$aFE6mKL3QPh$q zG8-@mJi^x3TaROII|$vYUq6<9l%}qcTPav6GZi6VCDcI8p486Xk&YLMEEP4fR@Jl% zK3I{Na+2?_eQkc-fwrBuy}4gaerv~!3x-t11qsstVrqHP=asFNk;(ohVaBhUam6R% z4MS5{?p8EVE~j?hgD8B$drCP<8Q8y@7sx1w%BNFG}8WuP993x>oXQ7EEzX*O^0P@3)h=)wxw{Y<>cE2f<<;RJkeTUcEm{)cn~RFrXz#*0(f}F_}GCOBzV+=zuRs3qCc}}3({`^HER^ro2 z5CIvt%-*f3i$1~G=#<1T)YC9IYrTIGqkxzxD|nR=G3emC)J#Cs^=p2qhimZ$AcO0-pV zMPtpJ10t<}J2Ml-;+80KJPA=p3-tE{-YJWQwy4sZ$rkB;_wH9F%2*p?)02Jae$KE0yrzYT(m6NKPtRrYR{3 zNg&jM=^>9MzIny1AJeYcFJ(yE%h=e2;1@kX6T7pzsYys!P%Ok0kZE_j(hu^cJ6p=Q z&Iip{T(LD~6G1inTB>#uVU(DKW*Y`7n0zvwC61N~p-)uj%qk-)+UPwOX5;3m zDhUNr)Sn3;mK1D{;+jP#XvNh?Sjs%HYFgK+!n2fRM!j%4uPnlP?xz^Y6$VO23r z7e=aTN6NDUP6U+pbd@BGO%$Mjt@mzhNZ`z180;+UEb^e0pri+(cFNA*dI(h~`#7ms ziDA}-fxZCV09(W>LuM=oNc%m2{{Y0Oc;C)HX1M%E#W5~c#jxIUhnKupdRi#vz;Uix zT56m(mT|djBO#X)sFq4&i@G6**F2;y!;c%qLI_8Wvzv5vx>U1(vereP}T zO-xb>gi=2f=F6J=dM{u$l-a$W#Y>#vrE`*??n&^2cV_Y)vFClD*{GGbC8;CB;R!pS z5*)Geajs@Kv%-G~SH#RWnrk7NscSGKrhGmMd0{h|WD;3wVvws#MrT5+B8=-dlpMhD z#}$b(jK1o{VvImE&{2(Yzo^)W-PG1|VOOxIejF>pDVcB_JWE|cj$o9~*3-vRMOzh3 zB0)7Q(K7~&MRArzWg&+51QK{TIHk7izpSF5SQB>*Zzkkm`4iT678IZj?tCV~;AU7qqOO{FzV9tmdm|$$M`5v2FJZ^0VKHgNAu32qECLHX_}44e?-kre z7rR#Qu`bkRy|nYC<84}nl28KN6a=lTZGDK`cOKT@ilJ_5AEUj!FZhk51tWA^0`%2| z{d(&UF*-pG6;Tv`v{KWXYvq25=F?9##jZP>@5D)1-dBWuM4Ah}NAhdy73sK8XDpBl zsYJL2=RZ8_OB%u-IW*5%HB{%SwGu6@xy;wG*5r%+mmAxIWvMivG}8JXmApLJl9GZM z2?o>vTPA7-Bk@Lr3WQ-MOrQoNi;Iw?gJMY6-`9QxN`JaS2~jE~io{bK8e}{a>S%%f))s)d;_y!w9E9b;2=SY!g+BIc(qBd!yo!Ar}hfQ?h zy09vjEKQl=7h&g@F=7o{NKCz{AmYTCMa!|~=B)n!hHUB%u0pOvtDXgRDPK;r!=X&i z8i?ca8wAe{oT1r?CteWZ_kdRFX_W^3!2_W}7+WHc8_TsZNuXwm?+n>)}DA#2xyeVZ`)h4Y%_5G__h-c?-2)V4;U|xwO%2A$n=m)Gvc)PZ-;orH!pJrBVBM364->Ul+iKBV=CJ3$8+%I z2}<%HDA!O=mzNuewanOy!XY?`wM@_!9nBR`eW~uoIqr!U;%k|hL~5gsd$9~k#GwzE zXv0p#soZJ6iaW_*)}v6{GWox&z(|+6t?6WvOR+C+OL8qpjX8m3N@5Ekg`L}9F*0s_ zZZB)?`Up$dpXT0{hR8k=;-xNH&#QHJHoFM%t6*s!F=bdKXz0q=7YOA_k~JX!uphz& zg{{QkH3TkEd5Za0($?Wh3P5_3c_bj6OOQ_g0EvyyzZtqpR9`<%uhxv#f()`scYp~f z1hX?+E0E)kQF?e+$Xt`nJ`;VWdC!_TmJBnP{4V704zWKCxo}o3HGebn7d3c?gL3vX zw6Vx9Sq=-!ClbZ#;g2zm8s^p~M2aICJYmn3dXInpi7_WBBKHfL+Kns? zt;DI9m=4+7=d5XRR2=UT4u$Rw{t!dkA`sz=i6dcMUYoFbx|wDRl-CrrAEm-6$yBZQ6Hm#g&o?+thyhN^B=pr(VRMM9qmjaM{HFH#w1k-X#!vn->g zxvo$Et8KV{E54qIXp^`%5&<9pX>(3T?)fOj01C+zB$|wk>A>HnVx;D(N?7NDv?{Vx zRJ|ewCP|{s-wiUxJn4}#7mVrv%5?{cu@mNDek*f!l+`Io6CFFpbeg#0 zeaEaaMhGx;hiWOlc~CZSqxPhUGc7&VHBc#`Sn|nhS(-y@IYFsAToN?kMPlZfCSV${ zqgPAmSJLj}CkU!<1Hgu-DjI$RK#Gh;Sfy5uO#NA=GP$v4W|4_3KmoP$TT$tyxDRD3Ht_>TAZEpedHZSsn}wB#O#*Wi7v|OHe_FIZG*i=LG}NZHyvLW}siXxSqM~rP zd70dt@gxka=$>X5xZ#Z5uPJRPDU`4XB-Xu2Zg9Bl)JwLne4Jl0?0(`3_>;^SrU!*# zSPD)Sb4F`1vricbEqzW=1sqYGRu~bo0>H3E7t|gh#$u*Pk+_%MP@@0HjZfxbc_>H0cHvY%C!RK|&{sQjgRpyW0>+(SPYlCQ z3zn#VesMaMj84%`VHv$`tQVa%0PmmLsGMG)kAfx&S1X z-2&tqmajXC#mC7rM@v^ncDe|>#_b%53y0;^&a7iMt@Co>+W5W*tmV2v(q|i zNnuUrEW?PVe)-dm@akzXmaPn-UY`nRZ#p$Yh~-KKBS)+htO857IlTvMU8W|bzmPh#;aMUE146hFqNTiA9zzu0i=1F)Bi zXK~9j_W5Qozi4e4SYS@|h5Y_!(c!ZVp~9tjDe7jP1~nmwSiz21GMgrQSxH+T%f7rm zmD%Y@WRv0nj-a>))0wv@P&T+)K}jr2(~f!i9Vw|yO9i5qhb9jrMzK{!(W??lph1;Q z_XGPH@zVAYA3%4{f#KxscW1l6jB-~qU%py-u{VbvK*uV%a9Xa43E`bpYNc7&PbjeH zv}miNChP^x$vW@CmG*NOR;2>KsIaFFMaQEW!fm%98$|^Pn1H0SiZ~-He>~moi8+@E zmN+J1BonJXSDG|w5y?5Eip5=!>Qo)YgAOE4!o{cjfor&@Fc|As0{vo?t&2WbDMHJ= z2m}`EkfG7Jv{gLM&h#9)&GdZ4-CFpY1*gKNjukLFzs4|0)-mN}hyrh70_Zf`5rb5P zkhxpirHLWkpITj-A7J)kreJ1D#7a}8!c^5HB!EHZ#=_Q%W|RK_!kTJKTLr|arZrJ4 z@vO*H=2abVSub)Kj%xrfbCh3)_)VrT$=&Xmg}`cZ(fxriW3q5%!W3p;14y(tB}SLTTEe-Alg2gGpPQxW~49w8)@2$4$_JxoB+ zL5P9)s(u}mP8UMppH3?nl7&rDo~7-@k6sy4@ZT6jxdL4S2KNJq&h*vcGm^Qt55Q9; zTS*i$B7u|_h2DkLirig-kZrEE@|}1`iNepGrFUa^8)ZhnA2V++J;z}t&r-;iR7osI zJqRWF*|UzLr|}1sR+bX@oiq{(WDI~XXwOJpFMEq>H$Pqg8!sM$=}06T{NCPy^n^>< znADTIAgFN;@8~Z(Yam_s4%s9m!J&2BLs<$UZ(#KtiVRd+1bdpa< zGIZVPSXky@E-kkd-MiU+tF^HSmL#bOa5vTTkoN?ZYP(vH^J8rJ@|GqnZo85QA+q3d z(Y=k^&tLH!=ARrnZ<@JF?D^oIFyoX`U|4+(CN) zKuo_5_xB$@B~6DR?HL-u9)B~7Ue;X&ub|Vn`f=E+y?iI7BO`qoEj&Rax#}o4+-s;k z$K`ABl245P0OgrBe1)?3(F%!kQaC>dx8P$8H04<5v>CM{Qy9!{Hw2S@`|GC`Npm+) zkl+>>SJUsTDq0?5&P7h^n!S8bktQTJQ7)>AU%l}H`Fl)TYLR&dvHz`e{{X)AG0YY;_#yvAj)7! zOF2m6o=z#oI!lsy;-01qlFcW^QY>!kAQKvS2m%+T1gm9b^E7H4E&RJ*i*65S?|>Y; z3KN*&S9*NEmTj)iDq57Q0!a;FTQEPr80jnzA4=HZGSqd}B8r(Y``_oY{ND0 z^5Vyb#DxUAk;bC`04qRWsPnC%vzI8W0YFVa4@}9S7tofA77Cc>v#DhdVk}0-QGB-V zsJC&i3|uWBfm_=u^||}j@mncewUD7fOIWzS9=?P?UTdA{@LGicM$%>xIU2H9+g%U2 zzK2cp;9O((Y2-ENXy2U-G1;i!#EJmwtI*tgR9r$&B2JYQc#R7;Qhud8(y_5B z;8=buNsVCDGgM=Eel1B-Bn<@c^w}gaDQ=}9Jvn;fIR=5&{6VxZ;!<~}23^f+f;^nc{M6l%8dw%?W(dIp&lnm7s09dNvJHB)} zbFNm4rxch}Q9ufdtxYw{S%>cR&}uy1zTTWzl&6+RHxB%I_2}_Xl7TM};)K+-0kzq^ za)ypo&r9L|05?@SBCA$FkxuSVOw86WBA>)i{{RX8d{2e{0BJ`(bNY4l=L`0U?=kYz zx;~?j58@o%>KNXDLfsrfWR2NNWhEKA5=N%p_qWsQ#%~q)e95b~!JHE~ZYfC=Wi=^J zOZ>cRs|iZ64w(Zp1_MmnfpOn{_W=G}U{2$gdU4E$zs^w_2_(5Dn(+}yc)BK&48ZCF z%CMO$mce|a78djb+f8mbuWeG{Me}-e{9jg!Z)Vnx@j<{Km*@wzIlT>Hn!=_)vPYaN zNlh$vIx^+?+vY{JH}p44CU8h%Lv#7}I^Hc9lqAj$NCw8II(iyDkz(>yQd7~?Jes3Q zkw^&!{WyBG?lO$QSX|iY^Vl+yxkZUpO-KiW8=Wsq>7-XSq@bCq-a?J{2`0KWLaksm zcD;G_h-tAe4zY|M4X2*ErlOguq=OBLdYXxh3bMkT1XGYLiDEr3efSq@nF3P0RnQj9 zxhCgFIcpw+{VLg0=VPYKnI!i_snpeNz)ej~yhFRus$NvZ*1MBAapunzR9JmIJ#8Gy z@y`sA#;bQ%w1~iqFkx}t+*aj~P?9Xv&Kh>FXU@WHj9QY7+&ZV7%ZE>dKNi!TLJiT& zE2}G*$<6q)Wh8H|yO2LS?Z*lv6PH}F^n~k{47AKm=}e7Jp9<0r!sS_XQU~!~_qF?t z{(sMjQ(?$_`R^PQB|xZ_QiG7;xi#|R${X;ys+&v_Qbdq6Jq2O`RXUbXY+L^8X@8(4 zD^}Si*?~=Sv{Z2fO1K~{3df95Y7{*@3dz%|vk$axwzXd3QxujTe8SNjmidh@^(Rx_$8AHIQwShA8D5(F%KRWLpb}&d!p%_c zeEoeii#H6F(lHyj%Af(it^0qrm-QSw!^~h98*15DP#=RQG3OZE7W~CiRxBx#Q%47< z2tQ3LLRwWZP@Yxf)8>(sNvj}R`r;^PfJ?#HuTOYQ&YJ#icwazy$9MU{&R-1nyxfj zinorSO!kg936znfu1-=dV0(WtT-tJ!R#{38awJzg=}k>o3q|X*Q$lxW9){es$%T!* zBA>@%3p;?cv6X^JKoTiu89*k(OSQGI_BZ02k4cuL5=pJeF76wZ{rdY(#69Q?C_~qk zO=El}F?49qzWMKvth zy;wgN6s}Qx?D@mV$0Vt~s+JTi8JrjV==J3Y{6)ceYnS{^VvOdzWA88-tVXBuYIU2T|plYabb7@;EqkgD&1#MFRyhfmFT zMaN=brBB;3w;y^@BHU7}tEPeZG;)tG64kNgW;qxWAX}py$@C+)u9o-WtA!-aQ<7O! zbILuBYRM>&K?V10YAOk8jJ-KU>Z1y4aph>=6HDhw%fva9A&U&S4bVDV|$5zrK5pv4*I_b6a*7}XOQ$OloG4`}w zHX+`U^r&)O!?QW9eCc6G_9)x-jWoHyGGXX#eMQqtok(kK1n2TnB5~gXfJbe02a93{{T)mG_9x{Yo2~}rg>K=?+yOcx>SJtYpG7lxJrM?M+^Qx zCgLWipSe&hSwXPAmn3Q~dy~HWOp;h-Mx+HecWDSxL!y})_2-e)xp;?NDxxq$ex>fZ zSf2WKxzv;E^Wr&|>65;H16R^I!6$iaK{*SX{{R-?U>!J+vmI}K=VAI=PnXYuA)tVLG;$lwVuiQ0x zx8$_}h8RRUX5!fk)VC3TIE0c;;DX9yO*2>v+vl#IGxXDlRN*DQRtr`gN>c(wbv<6W zR^q1ic#AG)D%pq+)Qn|5fE$1;1+~}xIE^Il3Yy=I3`jze;3_4kNhZ1d`ozk7nS9Rq zvJ2Q;Tqy7K2K)Cq>Ig^G)8=1~vD6l%c}nQ^jT=JS?mxc&04^SE^5k%DpFJamvm1Ob z`@<4Abyo)9fn)1!JAAmcB!6sK-|YVYIK&J3PfvKlV%;_d;Wq>uY6tc<{cXonTuF9% zW*j%|{Kh3R_iC~Vg;?3?m)<%D?BC4t(({G|KxGKjSd4~|r39)P@TgpoU=^A&zj=F~ zW2ZY05iuCVhd);U4Zoj2?jyy2tD729_C6yJSzZMfH9zDt9%N+ov5&lXSjRESI$Sn5 z#0HlRf_lEQ^h=3dii!qnElkdqV3Gd-3uWwh_IxOvHcAu;`e;Ep=05pWKRU7BrNZK| z24a8(WB@XHTd23JQ64s9ScVsi&_h`izXMH3u?bo-XQi1~-K2_4h@y40V2s{vcNPgY z#L2P&CDd~!y+iBe<|6OeEG8cqjrjy9k`D&mBy}OVM-5~3@?yNlEpdgSVNi<{GQG-2 zpag6juo;Nf#F51sY|iy+S^oec?Uk6f0^MWU_H2*SVPzzNz7piHE%C)`{;Z2_B3eWGzN5|&lm7tGjz8sa*mHs-8YZ~f-Z~ZkwfAXm;0lmGn z!$IUDsickOBwECcBVA%g4P_-p9~|_n95lrIO691QwKS4x)asE{3y25dLHI!J1ag_l zAW%0f?dQdyB(lyX>byxUx60m|Sne!Nn^IR$a zM`CvM;E3uxGaJVkB(dC`Sf2WwN&f(I#z62!wPTV~Z4E>;^*8U@{{Wu1_3y?+i_5Rt zHGkvj>BdA0dI6v8(0dEbB}J`q=mwVn{WkU&{#nl1$4Vt2^yOP0SU8BUSr7=obwIGW z8iAqp7X1GJP6!lY8>j7;<^h>J0H-fQdQ^<^;ZBj!+>>6B;L*h-Wl#8+4TXtfH|#D2 z^*8>!Ted{^l&5L~ez$%cbR^b>&Tk!~;Z0hm86+~w01;GJYhjdGeKY`&x4nVWLC2|V ziR~!~sSGb%zl#HsYFeIHS|TbiNF#8q{{W|| zK3lN9gs+sFUe_B9T+aGME1wFC^Zoqm^69&Kn{z&z@PHU+QK@JoEUbE639n<6hPWdA z@2EYA_2MLF)9)ENkCV4rzsJ%F(8%$~!oyK(cJl4>?_q0u4kk?qZF2Sf{Ng3qJh^F> zQGN1VLYipfGqL-kWV(VT0e%|FH6M%h*M>^}0BrvN;{ePIX-c0)Zz!pG%8*m@46oK; zvzRB#lmJxH^czcB&nKCIz259~)O45Jxv>xNhp^=aNM7<9jiY>O-%{o&UTvn3K^-$q zrAer#kzD8K)h@J?FjJ&*9Y{JI$hjOO$RK4hqD8%HTYurhuD%x-j<`h zSiQ|oO1R_YoLAA}w6NneP}L{+Sn68rb-gmxe}-aD`H3nH<#hGpwJ>)|@n=p!#YY3j zo3uBbv2kY%N;i!Nb9*&i$fl1L<_BF%SSo7jDbieCie`eFturc10jdBrN=<qI( z4xBTTu`wV~!dc4`Z8&khmybEx_&in(X;KPQcZ>Oo62Q6mK)gzf9}h?tk_uVphZhY6 zL=wAH(cyAH-xCBXjc1YOwT`-jZEvbQr-e}^K(=54*J9M;_IpH_O{I#LiI9~nBBSUf zAeJL0sbg2CH;O91lOV0aaazhrR`_lqP9TDi1*#9oJ_1PA?1RERYu{1UCWR<@_`h5i;7~@lgk{Gv~#0$6zZ6c$AXK4gqYL+TL~P zR@*(bmN7|MCWIO?0o{5A1O{t|ah1+_Vm=;2hfr1G)N4IWL?EAp&hpI-KmPzOXJk}a z$7uGq>auP-9-L2eJpl*`01z@`Y7IYkA|%+|x&3Y|NyJP@LxA?px}KFR!tkw41LTqA zjk4HU_qWK6f%Q5KIBbkVfk9zbuh?c!THZYpTDOW+Dik+?)DZ9G5V09c&q~Ccx(i=V zO}z!S{{Vg=nx`OwL%waMmV*&&sD5?(L`u2osc$5NNi4en1-tL3>)+*TbSwd_8ovxe zl+2o@Dj+_&I|gnQ50nF*YP!NHnMe{!w;J59V8gon@4kdzjW8Afbc1DKgt<+Ee8eZCIai{CsY{TLLC`*BvMlm>A`qSu#`?p zLkhJ6R5;i1mQ5aC{YI53V5uKb1(-8aR?)wDHJ?)wRVT!NheDH*!1XD}vt`#q*qaTu zvEuuMm@#sJ0Y6D_GJDpg{s{1KHf|kiQg6L{%N&R=W6Moqs^)G@j#w(EGKHd=l!lS) z-Dri*Wh-NuG|FxmdV+YXZA>5OR#X50sHuR|^k;s38NDO3U8bCg(xohJgSs8fa<{+l z6s8EDvoTodD+H@DPc}t#sStc++iOp9IV#lJ+2uf$azM)Rrf$C(ryT+%bc-6G| zaM0riwI)uKWxFLrfX62+_2BhAbBiO8IW93nPs|l_7|11g0~rlI&T?lw?7aZq(b%`hTK{<+@bn?;?KI^n~DR=kGy#<$W+0I6sGoE z%ZqdAW36T2)Ml&1I$CK8psN)Tg&=4JDFJLox`1tM?sX@M#=>6iB|w@zt^P!s^8P6C zVcTk%`gGme?o0hNF7HkhkE9+Ca~=~%;p^bo6~TC@+&wThJW)KN4EcDwHD^Y0%${?vE`e81vuITTcj1Tsa2 zRMNnwC`hJ*%^|h4Vo6hNY&f9yqkFzS5zq?I-{%;jO{2h1>%4as&Qpt!ZI+bi_HfqZGj8psR@(P4Mdxi9~ZiAl%s7 zLI$=P>)4JROva*Yy};A}Pyk5*pIon-mVhK|rAV8-yhtReo|P`uHq)O9S6K{aHO}PN z@2Mj9_3m^U-rcxL2on@?q4#gLkzxtml#m(N+M0W1?*@dAEFg6Oumj9*ZrW+``d^9W z6{!uEE;j^ccdl8qMgs*>)av^C>hQ^eH&2)3x+%{z^$9J9T_#{c2JXpma1Ng?50izK ztUIZ!ZYx?lmuBYK!qQIq!<{~UGvp$DCKXdtPfu49wOvdtd6CmDLQayxMywNCi`wJU zK%*CilP+0MSq7xCvf%FYzZg9>9EY@7e5r*Au^~-g<$yx$YFo?$q=`HlsqRKXFMDWs zSgF0<9JNRVi#Zx=Ylq-@K*8OBJen;GYZjJjr-rV(vDH*4765_o zzX@f|T*YMj$K2fITD{BX1J0JZc$Jkmi`vZeCrvcZb`^|bR0zV7q83x5DODoE{!@Lx zu;0^LYr|PnW=al6R}|5Qp>e3QL=$lCfcgg|xE#a1`r7fY5U;D1WU87Z&VZ1i00X$n zEnp9*0{1)%i<+g1Bm=E0lk?Zwf;ESfkhFqJHfE206yO>#z$V^3);fs;@X|G--YtAYLrW)9$+7jN{s7jLrMELzn8p~sU@GncndKVd&AE%^G_^d zHI#MpV6^1T1wB~!DGJH)Or<4)s^^AC4ESpca_ zkO6W?Elz$zj84E439hW6lM8f5keObRvGU1Gg}(g!K|MLq6IE5$YwN|EW#aIGKrUMm zTMv3!wI(^lVkRX8_lsuvXxuWjdOP1SO1LFzQ&jvs;&_ErazMd`Sw-U}+YqAH-|KES zwQc&K9$EMbh`NBJ6GA}#pSoIb=z3I5$2FrckKFP47c>mEainpPqx z*_cM!5KWJNVXg0PdvK^10O}vkAqfGf9A?8T;GHir*9dZoi4}GGu_J|2MTiS>0V6|T zFW-z|pz;yZoll%@!a1)M!ZA8rN{KMq$tdcYYJ5Kzql**6>nBl}BCDmCuf&KLbt8?L zA#-GW%f@bQy1;g@EO=PGxat@~?#ykJ?0uq)RLm@#V8f_PRJo~2(o?*k0ZPFPNe9I+9dWxR{hnMK+=jm6?@VI1YPeUApENIT* zR2ycnJPAK(%~$qiBmyW(LvUiuL19yTfsfkH>1Npem~1VB*z9K8+1n!rjO`TEVUU@K zkt}ZvB)mu<1Pg^4vzu{*u2;n<>7}orp028VW}gR!>6h1xqo7zM2g!%CHkn3)1X zmxxro$zf?m?{~SCQo}}nc+@OKm5Yr5HY9_gYlC81z?)wB_8drss4cfrEtT)_v*csI z(}=}PmZ|H;;`jT-m+y&H6@B7dv(l|%Gk_Sb70dX6m2p5RD&R=WRg`rf0fFcsH+7UU8(fPUaT%#4najgXo!UHZ%b1KvQgNnP2fCiV`6MQQ6s)XQFw8j!FN4%n z(9()n7LS;xr|P{9D~aQntu<{E$hl*vsHUNHinXbm?+RY>D%`EjxFX`Up!rz!{f+%u z?0mUNowmCzCliU50Ns@)QbLMYKIlUi4naBJL4I;qh*;k#VYHAXWEkEeki;g%YhhIQ z=_M>&1Y^{ujwU%{{0!(6y~*MA~{VECwZm<>KAz_#Ua0#%}iRJ;g;jQKw^naONEOK^E9zsD9!h%39Ql3}& z#2BJ{Xu)wR+&h(Hb&j(esHti_v# zkZd$-Yw9n1>BODico{kdW_CVajmj5dF-Vey6-)#YRk}<4PIDAI;eQR2;wmbXR4qqF z{dGh_k+c3A#;hLf2+eB(ZcVOu-*w&JIx#N8L-yd^RLaICe8L3O@DD)Nr`?83)``+H zbY_iXC4@`{VPF6n1xyrj{{P z;_)lvQ{+P8HdNP9C-NSpT zSp~DRBQPUG4lPj|UqhZUO5XY&G;rjrd^iB)Ip#S&T5{4z2`DXER5{a=`ZGcgGU4;b zT@^+crf6hyAPRp9vu03ie}q^b*6qcYXX9if2}@7~nx*egk4j!E8&?V3lQo&#(Z;zB zIToPJz=>2;RnrwFo>$8o^@5=#M1t17_61F@ZGWA(DpdJtpWsmgc$Nj8x>ElDavCbw z*`pMV!9oLb%O+;!&J!!?;HbudXbQnP{4qusY|E)PI~#Z3(0AdsGZLX7ZUMZ{yaO8s zI+N5mI>5U(3aN7(l3cqUcBwqgsmwKzfczIP(Mv%D;6+ta@ogg#9b_?u5XPPD_z$gx z_*43?)ew?u08PoL%#-ct(0cY!3M;np-Za$aZd=znMpbTVqmo-akxK5sjlmYU0QVxp zZ?7Go87!jto7Yztr9FB#@rr~lCDa0s&NVyS5#0#P1Ev}6CWb8 z1^|O@*Vl;^F(brtt2bL4fKMNID-|^1rT2(Rl)xy0OB+`0Q>85%dDE1tIaE;8$0EHh zB(gmcI|D5sj^<@>G?1|b1F_!L+F4Ts!a_rIXUKiwRu5|{A27*Wt8*Y9_iLl5eY)iU{^2+)9WeYZ% zmoY^QQUM@zEI1Ko;a9v3tHo+0YG9GLdV!syEahTE*%s~PSiu2D@PT1%Zt`5J3TXOs zCp?el7AFdXq^Qv5`LMVRseX+FE9&}qO*{)LM=mEIj$}eYB?|eRNPo>Fg2MN;>@90> zIYh4Wbbv`LMXSNz(ZThJlOzXIQ+AF4cKLsNth^h=b)@8a&QqwvCW@%TJ{^R`ghiRE zVW}vIPD-|Psd|&ATRhq>|0jmI+c!0GMQd)+oYS4m6&aI)YaZbl39OA zOFPBMsdMLEb$CY*D%c%J7GrB&wkFrGxz^g-*MrFu0UNd_)0K3rG?2BdO(jJ$mV+%R zG++y*LD`9|Y2?og2&Tko@TP{cqpc)$GtyDQ(pC&6Ibs-u^zyT;DKiNebh9+g7oAr2 zvOdvm5wq|rED~6`3<#hkIBc_jDj4@q=pXds9sNV?_Qct0z^fOtW#e$_#*v7Yl=o^< zkuWLl0Tl+>k#gDNvvTyD#es6iFX8m~b`^!-t4l(?8DdD0$dYLdREUrqNvM_~SkEk# zVpfm?d-3F5m611WZRJhG%$Sr3u8=_@SZz#)!pds+VgUw`z#Bx#w06ieB2 z3)u1<_*f_w@TS~af<9*bulY)wk$iCRkC(9egs6&cdB!U6@{F$pxOOdxRo2sp z=2Amil1Pz4u~kJ?P$LRBpmu$8lY*3zOG*JH$#PN!54k1k%+DURwB?C7iKR*KO?4)e z0YsWzn?T$mhrr%hVuI!Dw7Cc@+bifBQ*&|OzNXw=QUcTgp;{7hK9@d$pNmql0co68 zkjM%mly)yxaOdG;4R|LoQ}T~Aa>hMVPw`aPPcq>6y-hlcC0!O7h|^b8(*$dy3nOM* zWzDW#cvrNr-Tn&^h8Iv-4SJ9=&)~Fog5Q;jMlC=Tpp2fKX=AQL$4h;#{8NX<{{S0# z+r=6QjJRh!R#Re>(Ifu=>G1Z!X;PYz>_9T%-dbrJaM7>?a1UqjpXvB%l8=NbYH%K} z%8#k5=Mn83LTBQCP+0D%+=l_W(XtlHD6>A!+>3(Lcq8H;h-P}~K47NCW~E$0j#(pm zTrUlz_=iu0OPQl;_A@krND4~}YDDyt2=C*DSKLN}-4GjW5GQG9{H?br)*T zmoKRi+I&df01eZXEvU=MoG`q7%P*RFj36V*Yh5OhT1_p z6;htbFH+7xpltN~G=DfgB;mau5c!_F44s;ymlUdwdFkolr(9YX2T2~P1uBBA$m-Py z#$K~YYmPlfXH8lRvh*xKt561Q8!@g-UIoL;{azhJTnzIAD!z`+D*&qm@~(D5u4F{1 zhSR+_|5NrqoOB-v&wnWuTNbrYhIC2{I)#~0*0@sKfU$i2e9epfK0tb zkmZbkbqd5>l?0n>=s(kmW&j0%JGG#_bJhZ!%2wzVv7i}M>G^uQ!0di@t7ss2&C!Dv zAH)Wv>EA(bt+?h>)BgZ3NsZ>=( z6m@-VVHBq?Nc4DxD>c>WDkI6RrCvWOk~h=Torkvwls~rGBwy9@=b(!|AwBN#0)XV* zTC|~uzHfMIC@Jg1t4|6ZvM{`oD~^~Eu)3g#n=oyN^KEV`Sc*(GeEl!R{ETyeQINJY zsT8FF=-q9hg`Q&ZE1hxfR^$&1ajbfyALXA7=`r=>tSX{Uy5-t_Z>jjcV8f{ZMJh2| zMOzS-SqVma2($}sCd?*SNhj$SF7!Fm(0RqmUfRTBrHKksRGDLSAk=^;2OthiIz?Yl z5;|%}rGoZ z0tm#9qf*2=qhpna+=J=}w*LT;JN4bQNG9gBZhyQIwJ3*5N=8D(n^(U9`~opcQ3||( zqN|zJhKDclT>#?D`s5zh@@U%1g3<{zYB|;=QmJe=5^%s}ri^=lBm&0%+7YO| z&#wicPawaBh1%wn=l5_6QaF}Re{uo1>sJ7=>(YiTo=E#Wc=h6r6mc&P{2=Ga{#H!vHU7(lBWJxlW9#RyJ7p82K7Ame_-kdB)=SaTnkLllRyFySl zM#05xB+da+%$o$N)B{GQwjl@h~7XHY;5#K^_r)Dp_NLyC=Z7tDE!2a0ECKc+pr z?AlhXt+6NJ(4Fn%EhW+hM6+h({o)ra#~k&T;1VlB{He^vi6O;=5XiP9Y89J0>G+Ot z0Vd4w$dNLEMc7gJ3tqfUW6zZ?WR(=IQj)OXq|uuyjQI46=fUhE7x2#&#mp-#vhz({ z2U0~-BF9gF#6gcjN{0qOcFs$WF~1f)oh<_lrYuC|07HU9YnAP+S363QFcMUs3YCfi zhjg~+EaI#*&Y_}_rKM`FX2#>1XAt$sB!Eo3dEz9Og>7wZlsAC z-DHFnaE*V$;Z2I}r%T@a9WS%kTvUNMASZDks4)74epKa14I5T$rKto09fN>NI0MWN zwR29zp@y3fu7(C8I(nHQr6=(b7-d91Jflr6PPe(@ql?4JlZhcVL2eW^an`?hZ-<&z z(-un_uqB0bdH~seL|DEg;Jz7Qz8QU)v3^dhhO?XbpOQR7sqv@i!F0 zIc;ZxK%#+!m!{AeelQvq% zc(f#{xsd7&PkXz#CMsGOvqmFqry#Y4se1y&N%c3gcNQmsFw&NxSJCTgUdF+XJz*{h zTd8Jn*T~kq#9MwHVORmgDY4vV9m1%i!Ydwl@Y&XGwMA7uGe=G&8FH{L0U8v!@($s) z&XFMroj!8G?#j1!j*P;t$M~dkjF~raU?CwjAhlZ5K0{X&;ap->wb<4pjMvuAXIhLx zwqVn{l#WHHm5g-iPHu`ZDG(yz6+r^r3anc3Q;8D+l9Fn|tW7+)bg29vp3M?Mg z0`;fObBByQa3$oZrRFCSQC8JN&M3$3WO}I$G>S&6Gy#{WnjFA`#jg%f?!utxWZu1j$n-Nl(DIk6|&U zA*LW)xngwUEDk*w6{1{~74N8AlT*OjjpW8Tlm#jNT>f9*luGd*7fQMu2jJP`N1CFl zsf>m>gfWt^!8k%b`E(M4d&mx#<2y-@E0-urJF8*6y6F#?rg`Z~8^)&nO_%eKr9AbC zz7C%#lDIJ}aVI$)t%*5#&;HW;Dd+>i|lQD9VXA(hbsJY_L=Y35g z5?B%oQ~33Z@u{*1roWu9cM5E!&5P-^t_{V$mmFAC^{;f68_jzQUz?9hzzUeMNM~v} z{o1^IfTT6yRZ%ItsBPHWVSNJcWjkrx<)Ap5YfSprq%6fHYUKR*Sn%lYz(X;|>F`WG zuNP$#tSa=>x!j2n>Z5GSYx$#%i7KY*EG=yh3X_HtrWv3HMZgzsV@sU57*B`Uil2^_ zrG`%MEC3GW?O)0DjugjhUzj=0)r!wg6q3YU$t-gt8p@_DZ-z@nxz;)WGREcBIB?rqb8 zqON6%MpNa=z^SnTZSAK9;I?o|W-E0pT#8b_(~ga6t2Uk zA(Dc&N#n``#Wf7Fu%1UG5EMzM>;c$u9uZ<*H*rDJz4V%<_uaAlv}`3}%5Fr6wdINi zVA&BPU4j4whQ{{R<8!8(@o+M*Qvm+b3XRz*0qpG5Z!H)`exneVLT3=x0Y&`_{HsPT zBV`0?1KDm#&>aHa#^1{{V->sp?`%0XV#}z*HHhV)~CgyXk*H$6)XH zTvN{6>-@wDQeMD4a&yf5w+PC%rUYutLZ&bx!(@l!CP*8s%*ae|QL76|FJUVI>c?9i z2A?!Zy}4fFqhC0ZRIs9K=9U$-b3Zm?lH=I?j{z&uc^6dyDaSz>5fph@X~*3$wVF#Y zyBqOd#Nrn=V*y8@8h&^WTEodQ6DnT%iK<}iHPk686rOL$2A%zZ(MVm51 zemO;}i&InLuvMC?WQk#b7YRJ@(oYCk8Y_lZjJ1*U>M9Jk8F=kDbWAD_klU$ty|XdCb{Z4( z;iefW?*5d~CcC3dj{3>jPZCJScU)O6LPAF;PQHBvHlj6V*)^p`&>j zk!s{QLXp}Xqlq(CcTlCUB#;=r1M2O1mu8A?(3n#_PDl^NwRX7-Yf(Zxqvvnh0uFA( zdH(>Gd{*Z}OH)_lmJ7?=@c>*xD#@>iRSHSvm0|&?(du0EqIGGMkffI4-?FA6M5(wr zXLw3Ul$WpoW&1rKUh&FlZF2Yb0j(XM;ukV<_c48f@NP=0$7v|J-@?BU@vJ(hld)Mp zXXC#IQ-VZNx{8XlM>S>{GY+jh@vlxrVCrr`;SL)QK2FzM@C$DqMac8XxNwPPtao-5 z^QiUmwWwp{Dl}p{6$@ZInQfO%6aq;ZdyC%N@q6AY@est+jXuyAE+1Icn~!|TY<3k2U}_H`th{Om|THOpI>%;99JmOO2~AIc^h#x=@MZ} zOB{_E0UTVZwd_WujY&U0PCAk%34z99tz4P8a^uDzQf6cbp?9ZOKc6_UDeBU75y5gI zp$zvVkjrbE=xzYD&bw)+4du)vvaU63x_kMO@G50Yn=p)lZY`_UpDywGj}|pJgVt)_@ z+WMdG(_Z{@EHapprA_KH4c9y83Dy8n-3&7M_N!|IsIdx)3Xwb#5h^rq83nJD9RTENdw@7d`u2`~HH)_m2jx<3ea{p)JG$X+g}EXx7^C8r_?l zzn9JpV^2;ec_KoA)DX*MvXOh+Phac9M4@h?)OvAyI2X^8gBAHijnHT;%pmW^p1s-~g|<9U$}N*YE#dKuVdR#vjyThjL8y|t92f_FzB3Tt|}7q#=sv3}SB zQQh8AwTsx>Qb#**%I*6VS69JZ;x8^#0|hL2Z8jj0$W~ffddaiE3bvxv2FzDX$5saS z;$F`0O-3NmJG;Q}@VgdcUzB!3{XoKDl{*7ENok4Q3Mpig^IU>xNFys&ptD6K;uUQs z9f)z*fWlH3&tKuGSwN*qhx0rsWoFgG9e4w1;(#+{C>0P$4s2Sy zeVD&nKW1bqY@9O95|pHt4B!{54t1}jasDSVz9tb1bkx}{Z{-Ke-?;7lIHxSSlz7Lg z%ThuT$rcs1xwHH|bI!>iPsMo{3y*CruHEmw#~jC7rB$VMC-DQS%*HZ|O|!Gy9YW_8 z{{U-x4hJXum!`S9hrW$wiO{d@Oi2QOjVb~7O%3fGcgal|c-y(ij z)7Oh`%zo%Ih63OCi1Mwtm&Pm-NZvGZ)FIq?mLOIxN{N8OqPl?2^yJ%X@FNv5CSuBJlB#{WajUq3mF!k4K3hg}nVbed zSX-t57YEQCZ@u^>MMYK&^>($$W5xbl6wIls`*d$urhH(MSow1ca)Am?*;Fo2Ba-*9 zwwE5h_a{yiZEzJWmjwguposu-0sURlj zTatU5-|NLSOH7w1jRjxhTAETl2NNtRU@2E013kHQ} z63SlgVUG7>6d{OfUoW=BV5bSwMF0e_b{w)f-rmr=8H4YFP%5Pm$4Z>&@1Msb;^&JP zuP8w+2Ow9)hEr2RPft~h$%Rr>;&augXzS`|(qwF`lV)W}OGfbm03(Aow$GP44pd7P zHax-2>R&E#?f(GNlQU*uyRE>bECx|cev*^oYuBD}$o!MeSeG$kShZd^QnmGUFC|3P zCMc;{}&izIAeWB_E7DfK5nb?xu#!4c(nlo{nE4g|AM90mtKEv{_YJT%j~ zGsj>8cdawEZZgmo>{#&EDi4}k8KB+)B8aMZt1^$RMhyn5kh+1CZK{$g$7> zH}v-JZXi;|fVG)`8HV#bX%3~KOyrRFa`dn5f3!)dnI4oq*>fV22|C?D*IS!yzowh< zxkRX_mo5vpEj~GI403RVN-C)ar;R#Yva@FOT!t|tA`Np)%m=WswYv?zUp;u!c+y>| zPIdgeMK)1LXQ;2(dbluQ3dbU{4MUAAE)B)@`CQy@!x>9v)L)jl@cU8{VvtVt=v}JW z(XC%NdZL%86fjWM7Z%q404rNjwwi>IaSuB zZrYIG#$Pq$JNV#g6m=}&Qzmb$S+VBo58zOBKM)jz|ud6%$ z%?E7Fos5*AP@O4iHTs__=4n84_v{v$7r^I#yk>@?oFgt&U2Pk&zCd)i-oTriaY@?~ zB`bXiCW>w(aW(^8bdO-{$|iqlDweI}AcYq!O$)ux7wJf>`HZr7X^)u z->Q&4d8y|sv&WTPNYtJxJ3z}u0cs>42&rO6)no7H9*MArecA~UJF;DDLA4Zu&7Ipw z`CG}>$9cP$E2OThn-g4P5w598{EqNFTL~&jWGrJy!p4M?h)j@_umO@*s{q+#585?&uZjod$)XFCM~JL3206O1m(c14 zVAmElBlO^%tgY0Pmrw?eYn-i5zE1F0WiYbUKfXeNQ|}W;=sBhRr)-I!@#x6hQSABc43N*=If0838V`T*!a2K(F- zZOGSA!u(iZXw??y^V*FTUe8Z(q?14nfA!0Q{?5>`6DrMu2?1=>Dy8qMQ*OcM7UHMMSEp*OvM5TXFaKsmqdBTFP|z$R+}eSxvH{fQ%f z-%bWs)Oq~nDx_+oZ0E5ONJ{G8o*kt8lGPV05Ps3Z~#yk*e~Jt0lSO){{Xf_l2^D3 zb33D5Ta^9u?7xeGNu2b&ZwJBaY^Y|JERnIdU zST<6QJfb`8f8siwH0(C*#?%ydfKdZSrLTXSA}O214bUhw0G}$87k7d+7=8=Qcs4C1 zD5|6t@EY|a?_8>}WsHCH1uG;=dpv}K4!mn-%@}-0CaiRJwpICTC24w1tu`nhsbCAt+7Le^B3V+$KZGz_JzNj!Qk z7j3B}2vsGu!Lw&T{Mcz&_@`=iJS@&&l}!Ya2zF=G8r9BxVb8`sZRLJ+y}0%}rI>IMP9RDcV9~GqWHWt^wOy5rxHJ3n|n=I-M^0P*WzcqyyP)m9%zt z(MSMENkc6n|U6RZSd2B(pp_Jw$%FT8f5IFN-3T707 zKm@gXytUyT@UpXpLY4woyI=rs=SmJ0gO3f^XAL5*W0?N{7KN@yu{!Wd{*%+(Kyvdu znEw7zSo0Ar3z%F0vPtFdVVi%h-%b(ZjqgQ#5pLMd6fRuU>wh+* zGYtpt2p0CWha6!*+$E~_i?pn{5l#<(mx-YPVs%@Ap(jnW+n*T}}1a-`{|prvs&KTEVzy@{o&YDMEN+KyyG%ew?Ah50>zj z05M#^hOs}0*c;sFJwBbdcOheR1CVT=-P@lIA{XKilA=nB(>hs?41j1CiPgmH{{Rxp z9CAj)=mx3^sMu*>H1{IbJP(aSg4t*X%2M$@4HE-yJs5B|^W(#-Ru0P2-N7k$3c~ib zV`~fB@PU6@pH2}F#Em#KK9rI{CWM1S)~1Pr-sQYOj>u=4tLAbJh7{P~Nd8Zp&S z!-m)7hDvtLeD-xEhz)Ss9N)$3+@3NtLxMF87~)vF;+3-1qb!cfqGr+=6ffcXw$KI8 zE}mPPTa1X%0ef<7bNQ@6nN?%*y35AvUFiaGFS(7z`t9Ux-LY5YcM!8WlV(i*TYqguk- z+TSa2>6;CG>JrQvf$y6??Q7gegm$7>6BS@w<*VD6!v6q1Bt_59pE|)7r!7|)V*p0Op(Q=7eFZ~Y0lkIwxA}$bal-^u5NgeO z>#M-$H{$mGKG3`3%}B$lsc{IE=6PY9LKQS70&1;b2AOZ6?WY0aX3UhZ6>e-kS&4=i zDF~jHmPjttCbg|}>8+_02R2p;--wzs8u@AJNmjS-v>J^@U2T8$JSf^qmo*Nc0nXZV zJsqlV7R`|&ZXJ5oucrs+?;QKiU`L8HP|6ebofH-78&D^0D$rkLRqQ=)^YhKHcUA&v zeiSSngH^b5c=WxETrei3)l*!>qO7ik*@GoWQb{Bi3`rwPJT-E@AsqB9q-VrvVs0FFCo&yGm~0fu)T}K;+DL3c%Vy>D7hmn z_&$T)9XVH=`D+uO4W^2`QdGl5MUs`2Ld{uLK&YfMH<5*n`o``B^&D9+IGGceI}!y6 zH*F3;gOQ|Bdr#SYv4cw1Fv^^eR9p`b75@M%udk$A#p!C|ng$NBfMTk$gP4(~Vg;W~ zZr8s2NsGW?r#gn|CD@Q2p}6V?LgI}cWSmAf1vmR>nJREmCwWS^CsR+hVA?9Kapd?` zIuV4cB(N<<#E#R_f@&$6-OGSh`jR`_dcv?%aOydyc(dq9a{Y7>?OliMhB9iACulB| zOR3EP3_($)2at+pq7ae*zXG z0izLC$Y=R5BDRkt-9{gIRVWOk0uWlmDA;=GYw^RJ$AX-Xu zzFyjG+iog&gyK^?DoC=KhXa|Wd25-hc>e%vq|clbke%Qh2dfqUH4dDw7cLEmQ%GQq zY9nr|tROH4FH+wT0S5MU2TtR+bH}B2b7)U8lP+Z_0lSwz{#__z#df9(5iQQ*K@LLz zGxMj+%ulJqqY+fnN`#>XRgB)j2W1CEQ>KEzliK`0+A@DrEUeXrdYuk>@zMm@c$Fzq zhk63L!ke)b0-Rh@xg6rD#QAFrgC3$QEKe+=M4Y3H&c>LK%0^-wZJ1fJU9>z^rD4q3 zg(=E{@23tq*3tCN$JsM+yFU&@(CSDuC;lOvj#*v9LSyp6)6G3CV3|#2bd}RIqcCV# zStW$6i%z21Bkp@&a}gqHRsjsup{oj2>8Gn&7~v6%z~kjh#LG}d_!_vgvzHA}ZeyXa z`YL)#3QB57SD{S`!Ae~I?G-~jjt}t?Zf-BB`3nTC#LFARg4GqM3@g{x@$9%X$y}5v zDOFMl4nUw8KN^29rHoAL6)lERlFtr=+qnc>Y3r%*qd_x`SigMa{tAt%Zp0allsLgVX9J z+Wz#;JS(-vblFM@QkIdt8A{%67iOaX+DB9Pr-;e_03}kgL|Jiqni$EkEdZyKO%sv< z)!8q7&GpxhN85$=dKBf#50fOh)6Ys8i1RIwpmEAbqY>fARF6E1I`&Ze`moArq19=E<((eLF*d$rQ|NrW1Z)+OYZk+xnn;EpiB-J-0Iy9XnX0Q1^V}9-Gm?9NPP*}Yz@;79$znlO&2QAxCiaRp zDDF)|*@O8vnAbjLKYgt5IC1=1JYF~zt0v`23aF+h@${lmW;eOpYw2@g--_>OFbJP1 zN(66Ji!q~T%bRp)vTQtfmoX_1Rt)3{a10N*YtTmvP>1*w60!!4d0>!fmNG!mM`L^a zd-3P8k`l6(`cCb%CtqHs@#s?K0s#zM1DG`f_SPHe$u!ZbwooE0SRE&rXs9fA{{X?^ zoQoFgr^frl>6wty#8Y2#e6)`vW;QHIIkmYY>uZfq=fvzZjkz~384w6Z(Ce?gulndO zeg`3m^3u_cbuqq{OO^x+UrX#Rb<@;?u=nk!2gq1bk|@-t*p8l$9H@|z-z)pWEOiL9 z?GR&bv+bq4t6}Nb>FuWuXG?iW-2ev204G>33x}(ocYD_NhVER%I$yKk zRF-C_%(7(+Y%gx#PfMGVZ8)y01g*uHsx0Jy@0m4wekrUTx%hIx7by%ty*!QHmK`GH zi=vd`(1>tZf-RI6(Wp+l9+>>NK!CZx119JIN09%I2r;GOtqr z&fQ6JP0h_mk%Qdr$%s}ZAcUYA=|BKulh}HSMy1Y_ z^)@1=+6tHcGmpZuxJT2GWstU#EVS$bsjvh!y*vGQ24eAKc#r_Qu{37mL+U6aC5dH3 zy)Ne}^y^Gy3PktaBBD|MJGvswCC z$fb?nT1HY!5O$C6Gcp3+T`ys;)3y6)ej`y_vIri2mLumn%8&_GV<+m~kWPiG9%@Kv z-e4MKD;Z}A3_1xMyh_Z9MakG&_u_dgnKHzKTM{$rLGs2mF$f?!QeRL#v-@?2s_Ohn z8W*dX=2*auNV{1Q;Xq~=%WGQu_Z)RU5VR-ziEtU-wgrVj<#A3$+w7b|B}iBaN@}4& zx_+aW4W(^v5ZQ!J8HeICppnK@T{IqpduTSdzW^E1=Q>n+Wuv!T!@G_UP?{(2J;Bg8 z>N0$u%?28s)QKbi0IeGjH=JDRY!_e4UAyrKm!S=i(}%aqtXI^a{{ZBD&11-@C6Nq{ zRRT=WkSqbrqgx-)5w-Z&c6A@O%)Mh>^A1_Incg$@W&M^rpD}yw6g+m&J6E<&!mTaM3 z2epKP@&vWWwYV%{5xknwfokXtE6iJ6Xp?PrlWTT@e5_W|#0lz=E?lrlDwtC#9oPn8 zbsAmC4ogL|igOBKJik>X4j%H?!A%m;Q>21mDy1W=$X?9RK(|%Ykf2)JNjn0K!MjCP ztUR0t;@m04T)m+(a?+ME<)nb;>C6&r3*Rzn9H(0+Fwa*lbg5U@mT8)-yyvLohGdR4 z&G>sL8UQrCufo%ZT3jh1fDJ|`C+O9#W+qhmVfR!)&55n)LURP28Vuq1{{S)2(NomK zYFcwVlAL}In`>=PtVIX~jWrK_YhRX$WUgtdELn|7^ZX3q+YIqb7o`an zCx^)`?Yi_@!(ds!B#&KnzT0sXD%$*hFiK}BGX+XcY)ck*uRQ+ZFAuZFH%*H8t%J)| zj^Y$E#M8Gg(nl$pimF2!ndvbI+=B|no@h#2J7^BvP8fkfVfNM^>>Ot1ECiOSTml2J zF8=_#-s~glB@KQvQ&&p`duF6ol2)06_O2{Kl}$z}v+m4JF1 z)8X|QSc&tHfD(6Hhp5j`{XY>8nW@&N5#@RELz>kiI5j!q&PNx-<2&F^Sl&L24)nru>?m7GR7l!v>>pyQ0{dAfpfO^ z)Lamxp(zOn0jvN5+&=wWv~8M2%C9>_icgy>5FgN+TQ=M4?Y|iv8Lk+VvB=vif^+lo zig%y+j;4xvaM4dsQ4K_XYJ@YTTR|#=7>Y)2m?4Hxbkkef8_;5 zp7xV#Zl!2SLU&0H27>gUt%z?S37n&fm?o~0OwqGN5jSf|q0wE1i!zH1PT-$TG^EQa zWgZl29bcOQ#^x(~A89R99KGy$o=A`(uH$;`SE0%EcYk=KC$t#Jr9xuBs)4Z1wVhF4PsihL zRAGV6rH5r{>bPT%WZNpgUZI7nba-d{^Q$PT6Y}Xd$)Hf8kos2*$ z7FUXyJ$3S7S3FEqIIRSgGsx%zFwK1d7u?%>dI8(@CgCvwWM*k{N&A7%$)c}|liZRC zcX7v0F1E?8wO2zSh@pxyQ5o9je#D(O7O*{srwt{jmE6~fYuUY_RP=92Qj%DQcBQq{ z4xAnZP*8R0CjpeC1Omj`SWDQJ1AL&HE&E%EmH=V^2T&N(r``jVFZFWOEli_Z_=VVA z+o1b7t33_@B{b}jvznEssf;M7lAMJ($k4T72|Wt zj}@uAB4!?9)w&4YCc=UFTZc9}*KtylRQcnD%+WF=vjsA%jWeRCxNGZiVlS!TkWoai zca(T2k{Xn&>Mi*(4(gFWl!7w}11nHlrz^l(sMQP?gL9)Ej_yCg<0H zJ9JT zUi>u+menp1P-su6zkM3u zmOIM=0nM8#`43(ZT*d%*+y^RAJPW&OTFq{3A`Tr&)wS_V?qyiA#}q6w^wu+)V#HXG zGg#aar+yjEnYw_~uZCr z8=A1dUq>2SrM)zQl8~g3pcEd&0xhA1>c(gIipc>jF==Hla?H{aTQNGZH?bs>ZT;qx zMr_Ib{^#Xmm{O2HNkv z+z_F@IM9a7()No6!R;>G?9M$n?TNJUyEM#l1mbAEl4-x%vu)fs2>r4(qeU( zjw3{h;tCu_uA-)z8itUbtSr}f=PE2%wT^=1a1@@-Y>6u~WTeX~B=|feJzK$0AAlnK z{Znm!U;hB8-JrqB!EK$PFK9@Tgv*!u-~NbGAps#rzTagKJVv>Ph4IVSEK*3Y&_pJ8 zaW7HinAo!t#7!w%l1Vnw&u%($C5tLi-jyc*` zJT5;AHw!je2K1&%cM`?GcN}x3y+zquUmt zn>%N1ELI#OCQ_ERV88;RLjg;CG57Am?RLfOZ)0Uk+8AU>+Bj(}XQEnCr7059kmLYO zUZ*`GmB2BH7Fgh(sl+`QCC&TfUpwhjYGzUc10u!OyQgdHvyB zg(wn|g)`Wa+24bD1DiutJd#Bma5BV+3UtEU0H6S*TR;n2&0%BS{BBSis$s3Ui&H1} ztN}K&7U8@`k@WBE(Tve@zuCI2If5kkUUTOzX`qRti6)w&k_;}ADCxik=$&a6Mzymq z;=TB%?E*$Rgt#S@+i7IM;sneT)C!Q2D*kU*&Vs(sG|;fIx-LTjVjn=w*8F4XuPj`6DA`L5=(|=cMjF38n>A>r^b$C!V2?NBVRffhZMzes=8KH^RzKyH43WH?5I;M z&4!j8xV_-yw5dxZu|i8)g{U$qY&J~h4pA36~m!-uYyEb zDWU~ZvYAd-r+e6SV77SJ3%aezJ8dyYL zp*1*}%0!x!sf!zsSiV|w;}!LPHPOdgniwUjf+Yee7C^4d2j1n*25_yK#EnL$(}j~U z+l1wn*!pPMYU~(AhE@$zB?K%0T8snbR{`yt-MGTWCCu~{WIS|}tdU4$%_Ci8P)P_? zEDHhUKKJ(HQueZv6E%U{Jx1>zw_Ze}Xa4|UQbf?|1Tm?v7vS1Z@i1?g`No%+s`*nI zs;8YW%nJvmz~P`7KoxO}^2$*E00fM49K*~2E$ha%j?`W*W*%S^PV0kP4kEg~hOrJ8 zX8xEiR`>;OUVzrF;>6}3tsz4U$0}%XDr)6{XL?EDm`5yPT6vvhmU~nqFfVnHReTt~PZUDb z5XQ+IlE>23kzAGt0lM68!o{s~COaJqiqPfu9(u$Qe5-uGBy6Dp^C+-A_#+i031}vSqz2TGDbFq*P-e=WnUj_ix(@LU z&BM<6g8}LmA=Hq0tsn^FK#Q9|KpOyUV|x)}t@vHNx;S~4ZFOOOCM>J)Uca3_S2k#m zQ0~Ezz#>OCZqAvkmpWVlVga~Ou;Yajx(kuk&IyeI<2uLbKnsz82oXTG+90vEn(TM) z`SOpb^87&wpbbF7haZ=KlNPmvfG7kFdjJ6LHL%+I{SO2r0-_Qty7dkp_zX|kga)LU zgpyg5S-SpVpO#?5t75K-zH7*9kh1T!!Kpva7tH*l7MB*4#|DcSn+C>FC78mpNaU#F<^cobN3-*_4FPdcx%d> z*OQnq@T*UXV;EwHs<9rUIC_Slt1V4U9m>xTSpuBgBaoHMohN+wNlSun!mbZo&nEld z`ibf?+dI}&i|1P5H9yq0PM#1MGWJ~`ER=i>e!h#Yl%UFVA0?qH{e zyAY(Sm22?H)}A9kGtaPsRSR3&l-Zq|aKXAUfQDiG@i3Xutqy&lqCd^-IhR79ok?cud&- zEr(+GX~p?x4vz-KE99OC;6D>V6ABq4ia6R{q;aX7`SxoGk%EyWJMv}~a4vZHbf+Nk zUdQ&eeW9E`)V6$?JFUEANkpT>x)Pe}PP*M598HJI$ba(pDb_)Y8fvPXVzQ1%Wv1o` zy098YmZuJq;}eMtX3}BK?M?;d01I&6542N<-NVu5AQo#A?0nolUa;M8wnb>)uDwav8O~Dz0c<^YSONit2 z6zN2woKnFYf*6p3I%z3X2*+Dw00W^v#BOiIa<-N`4!MXad0WLI%%p>IDh)1O;y=@2 zW|CZ`MAfp?aI8VB#%O9Ms7WvwnysopnYx;iRf|2Zp=P4Qw1lBbbc1jSG`9{NX$xlJCY7lQ@dT0{gc_D2^vnTl=^kLP znu*pBGTS_vPhny}J8iHBYg*f-^f>p~s~k+`57k-;YX*x&J`m=+dR za1Sdo{PWPVpcT$EJTPlo2_%Rs~0QN3NCO^7lDl*kl!0 z7dTBkVo52S%@n1{$ty@$k5EY`Fcu{5t@v%TWGD1kf=~km)qy=PmCR8R0h@`}d0jH4 z+Mu0vfWlI~9!RhJT+0ElHvqDiA$wS{EvAHmZ>`S5uL90pD`Clq>6x<+Sm+YKJs5KG zh#2IChFl70SjJ-IsyTDU#SdO&i!r*8*{s<~-rm>aiRm)agjds4R2u3y^kz9;CryVa zd9LNWI~o+y%GGHsxOF78w9uO@^@$W_AcUJCbtXw|V(oTo--|KXxO_ypGfIk-Qk4+y z#DGu3z{K6jQb9Fv`kL3)7yIdA4g411i%6%i{oCY)?Kr> ziNccCYXAv0;;Vys%2dnLm%G?;EvvK~nTa#30izmG&VM|BcxS{vX;H|yl^l!vIMGW> zUjZI(hb`0YPUq(IcvD1Q%(ZhwG6&wCk{B-Mh-|3gH zp+3$cYV#f$9V|5Bs-EpUg6MKM*LG%0UgX?@K|3E=1~(3Cy?!N$(XDP7b%_4}O^B-k z&q_Ornttt1DE2O5!fDKpJHuA0VmT$AOs^u5Wnh2JR*`PjI4<()xSj}1ZWn(s_A^B0yb@U5N(x9TEIvt z3Ol8NahF4z@QFXuRz~$fH6_0$mh?Ip*Uo++oKFghj-BBSUP&et(llaOhn5JVasewG zdbPh07dIEUc+I6V5oC^(4EM_R=2+B5@YppbV;a`rkTkXUH?>-ZG(Lp{0_tCc5=Rjg;EN6e&-x=mFQ~biaJzeN#lZyLJ)O77zkLxVUz`6wku*Z7T|>9r{V_cK^Af; zXX~MBHc%q)_*9+c7AB`B;&b((j)Uc#V!nJO=y6G6815dl4ORw_)nS!$7KXl+hy~+d zSK|-;If+wYrxpw-P)x90!ay~x#}AsE)Xc+66Be|o!;&t{*30hMT)~`Q4W{NSC9vAU z36+_nm4I1k-7b(CFz!KH-6|Fwc7$>e%Zv5fbH;j2B?7ia` zIN|f-+?9kLXTqqfeiB%z9wnZ7kVt42849$mmh(-N9Dp^fH>Kis<_~4eGVv-YDlJl4 zwAOP|imYy;vR7I&gV#_?49*+Q zvPfzPrc3M6ePbR{0T$vJ{j=Ekc|HtM0+b!p#hh1>ep`~&6J^ikESCITkC!6@H-wNl+z-P`ItQTZBv}OF~s!xi06eUY9x^vD;tqXy+bN=UVDi zX&yxeKCChziKA8{$Q0ZFIIea#2(TtDYySXs zPUKdp7tby>ZdGlfWlfqu4O`g1+|_{~ynMOm?rfvxtUJNhNKHL&D|l;yVAV01Lm9CQ z2N^Qb$dVJ5o=FU1Sz{IjuX~;?@~|dM+3Gb)mP$>i*9_IK8n#9j1c0EBXb;VPUM`+v z@Ylre6MQD8`$ThXU1vSg;WfBVE8>(i)GYXyE^_ua5Ra9sjFhmdV(`;et6}WQ(oatk z6q-VyjtIbQEuSM4aMSlnl|j4`^({hNzdAu^0D|Be#R4e#b~sWhj4evZVzMxgsFGUQ zU6qERub6t=TYfHxRs}!=%LEX>uwp#3*8F0A=0Qj#fOHM*U~QgFR*Bet70b;m(IpBz zimJy^rlR0_4{uKP;$eouuA*76Y74MtpdBf0F$$!}uZX=Ypf73$>sHjk8E_mjR|_5+ z4rezPBH)vISOa5Y{KmW(j1C;61ffr3rbFRu_(XGMOG-iSSTl;Yw>9#iW{V$?yeyL$ z#b}oez)bbhO%zcfqczB@GTEf*5t2lj?rts&V0+s%Y%FtF^0;^T^%x&jssB;=pz7J#-&MYr093` z;=i<{3@##Uq5@2{6q+#%PhUPlu-{^0aI@qi5EK+9AS@Cd?!-Iv{InzCkgX65EYCAQ zX1UMi$*Ph?+Q)1DoB}7ZH5TKZRlWVAG3yg%vOyus47z!b=8$?RdaR{Qg4kSM=eD}) zPp@x#TaBV)kXnR>`Oo2m^Q6?c6nuw4_V;Kl6rtYM)DQ)=&|A}6e2>W6W2MZ!!`}D% z^sEChBt1w3n-;BTb^W1(4y=}rra56Ovmp+pNm9dcs*p&xZ$aAZTXkPJuaz{HsIT6aQ@v$nCO1BZ@8_o#+Cbjba08T7eEMimu7v=?W zIs2Zm=X-Bpl@eWpy#rH=XJ1}%WE^fhQlwOsd1)YydT6G$Q`MFL&6o`V9-hBb!xf$4 z3%ie;JhbH%zx4Bl32|V=hIjJNb3Q^I{5qZmt)HixDWq(y58~F>)7YPume6p+2lWO4 zzyAQ6XZ-VoJ7QQ=vdk#f89uewfa6HGBxs7Pv5>A-MK-j=GtnmPn7o{?_+U(6YUTRPIS({8qs3dc*Q1Y zaBedEWu}fI#rrR!;XJ?MP9Zc!B&wEzk~y`z1pFj6_5^~ygxnkJ#~T!PXq=$H9pXit z?$avp=@53pXMZ~i1>GdIKl)&7>IV-a6eo-Bvhy!B)5jQ+e}ps0=FDB+_}raXpYt1? zEKa;v_Nu$d(*O)fI%~kOzX-ebSqhPdkfKR+rQDZ2Dl})+qlr*dCMsi@Y*JYjuebq@ znw^Hn(`)fhQ>Jo;@u46wHT|2WhCNzRLgb}v;G_^5*Jc^k{?~>UfUt>`!8usiok6wx zjVw4SQxNor2(I!`|^S%8F)`ig=lT4@zYB{O4Y<&iuZ1B=Ba7i9V<=q_4Uf!HrHgaBA z$Zn4|_1D%s$844Up;W7u*5J9OU$C%yrekb61#2I?qJR=NWRFwdQbxYJ@nT3Rl#ylw z+-Vg#uiq)%_xjiNj+O9o2%p1Fcy?7S@K}^#m;y#ha!9$`QQF_13?%??t0twh6%;1? zY2_4t(2||Afe9rbtu6szf4Y};K8GfbaOK&-!l)!z$r3e0Lfy)<0>j+vu9y0r2EzSk zk<Zt7OfNmuad)Hdw2bKQ?`Ka(@V4Qu5oYdxq0M_?nZw^b2S4%T2+)e zLrY(rf^Fr9bkEe2eK$N(@c3mf|mI`EH3oBjrmPJMH3u=(K#iwu*Pxz?c&f66!& zT~!h@4=y!}uk6eu5O!{)v()C?Dh#`DM#M--T8MCXaHBujfbx#8m|R9LXkn0$=t_fs z*l(tWwLC1|QAT)!g-o!?9bBfSYN$RT-CH^<%8aeCCfS^jHQ(0!I>jt5T7v*;0BQop zx^)5h-aX3+EA&djp+F?EUv`#OZF@f&zEQ}0n~AOo%oQeCLes}k&@!>n->G5-YnvMj zgZ`GFVhNRqn_|i=TQC5tGjG0pgmr!&FYOtNg$qv57X%Ax zZIl8&b{*~M#wKuE3IfeWHT(P0(c(KoN9dNaa(X^_*2aRTN@)&Mv`Ub(wXW_hZo@%g zVW-Of06TXoS{4FxOMcxP`d$(l`{b&usUqUt9lY8n(KD*q1q++U=NY?af47L5@X=TVD zkpBQ@yBG~s)KalyiwohZG<`z5Z02!Dtp1beRgaM=Ep%=EL;&`EXR6xgU5-iI%GeEMw zSz>}n!BR?v0I?U;6Mb!Mj}{CJ@|Lbf=DB$|yM73yZEQH*B!_#r7qQ^N)iA+|QG9(N zN$VzxE3-LL%0k?dq=GIx*!T21u$p(>Yg&R8R|M1%mQALIgj7?4D_syOX+*tvkJ^@s zzaFijpi@PM=9vTo{6qPR$hWx6Z{-_h+iQy*5@N9ur6`GNDk1K7vVLz%`-(-QX6(g~ zJPG6gBA{@7T84^?7^^Z)8szmCLJ1bWhQj(-`f0e=y>}BcznHX_{^13mlQ#?H#^Nsf zI}D5xOUpa!-cc;sSQe&?Gvx7E_`A(?+@In0ABW- zDo%#lT#f6yc5uPrRVhNM8Rc}fYA=&!?qc=WotZai?SxN6qCZZuqCl#*cUD~9!nJZ6 znEC19_6dmKhnQ=sYU%L?#9na%(lO5TZCd4Il446G^aeYCKmdzc-hZ=YkvVf7<;6`Y zN?YDOiQ3ri`b4}j04`VvP&$wY8JbBdNy@2l8Vt&?ck)J21`cwf_{GYAz9KpZUEb#FQ+;0no#My#xiv~np8qYS8{ zQ@zgr09%dt4oV2!JgseOuDNoHKGd3K5CLFI5DhALH_kS*`E|^Z)xu6y3~jELw!7(a zefB=wHjt)g_{EEHZ{8`JN?&$CU|hNCZBg=;q%L#f!yXb;u_U&)I{yGeU~ld;*Ioz4 zOb2>_fzg=dsMjW}9oe)M&sh${+a@4zvwGeunkfgv;VfhYVU?l;o3>p^7bkBv*WdI| zms+Su6tTC)Hg=1I`Cr^?HdM2Uop}%ATF%C|6G+Kq4uubGNhaEnbA89B5|G8TiNZiB z3EM0v4u{T9jr7OY3@7s(_dQ-0-5!zoN7|# z&?(Xp6etpfm)rH7x$Vag=umqw00ON`EfFAIcEnIsVQ@nTKD2aY$(Dp z{l4 zY;r7cjS9Y7TG!K12HIawQ?IeK;PD<2>U|!s>-;TL?b)Tp-^@3+Slc00QF$ygHjSyb zn|tr;sXBUaOxf%dbL2tSBkcThj^~n5zr4Xg+)|HvTGXdlE66;?Fn(*o8n&yUhRIw+ zu7>R!UnvpctH=VID%d+J~4 z4Hh9Pj=XM?(aN!yfNrAn;J#Go3 zdG+dE29<{r)ZhT4QmxP`+JOH6e2gYdG!fLitGu#?3U#r{I~)3cA%5HdzpRsgSaK4j zNJA*wH#Kup@t>R)nq_Ejicnah8#so;D)15(_LYxd`IV)cRrX78h(G;dCMJY<&5p}4yX?|WQ-P79Y+s2YF+ z16XWoRFjn-UN(ZXb0l{mvalsvHrFG2dhKlo&$)*X7`OlzxE0FH)0j5O6JjM5EHQeK zTATf;N}pk2a(r>M6GbdbGm$OiCi$-py8$pNm2ry?nkb?y*fpIXwB}G z-GamxCHjpl^~w|Z-WGyrX`+k)CCLB+R1$Q)zfccwJ6nM9;H5>&Rl^q1&PL6``ooQm zt@%!BMISuL*MN6_y>wS3WgQ6$)(ku9FYmqX2HNeyRTm`P^@nw1(eCwqGS{R{lt$QX zd?P>_k$~FYcz&AqAnk72ai$t^>#PPVGhb6-U~XX=eZlT*N$yU%-;FTPc?h+}NmrF5 zrz{*Tsb`gQu4r{VNMUkSTmIz$+rJpYLF6MN3V^REDxem*Hn1(H@eynNPi`@RxCf+n zE?cn6-tTIN^iXu8mT2a?)P4M`bN6FwD7gS>u+vNNj5HomlTcC%WHRW@onvistHBYD zK*WzRI^R*>QhucRcRX$ZK`yGAQ$8^XmRQOE0KxCIt$n_J++-atq4)~(i4q9D5y@kC zC#O5=FQaSfd)sm~(%fWA7zU6wfDe|P{lCBac*YtC(+vlZf_QngWKsj6pI=W?rM(9J z_XCcT^$(dqYe_C#w>wl@<)Oxssf^@hwZE64A76i6_%Rg#accASfF?_FU5ILf%kDh2 z(%-|SRl?&j#z~vvZK*o{0I#>tw+@ov3yKaAPsYpt0O*1ZYFGhmjXC|BNLS|CtiqJX z(qaujxot(XP#aP$eLXi8-+(6?smW?H=WTgb8tlnzu|@zpWH?fpn{arAhg?ZbD7xQ! zZGTg5eFgX6d1+E+CDcttJzDLIP#uiMk} z?nRCRr0j2nSNZy7>;gObF!~gD}NnGA6aBL#>G$>wQhd_P-oq zRzk=j!J}V~8!^AE8H?Dj#>jN zekOzBz@)3rPQh+(at8bC0@^bKq&a1C0Gyhq;OfxhVxXCz2Nh}-13Habqc`PFL*|T2 zJ{Xe688#EpUB2%-Q|bvK*S6rBk)^n!?VM)zAHzdeAdqiXYKG;LN2F|=B9}a7?e}k2 z4P80an59%4!-CONsu5U_J&w$+1zn9UU;_qyh`6}6hU1EkBM>J^a$JDU&zlhXTaL7g zz79h0^Fj)5V8N>ACKcg#=Ib8}qwf@!Uf_~Py}{6%TpM>MP41|bB2groxv6>smBx0Z zvxlfsr3Sf$h&tb1 zEA!^eT)~CjJ&vgay#oRTi~mJ(sK8VX&Bq!w)`ND>e;s`3_tu z6*f0lh}BkN6V_8LJWTYn0IXgps+ybpOqB8)-X$Jxnw+5C!)^pBA%?m6!mTw#a%YD3h{<%=?7u1*-s8{}?+G8ERJb91S*7M>J)Bw^!mVi^fm1Z`rrBG(omi+k(AGv$e3 z6gUhBYFqpbYyQZFEw;{cWx!+6Zf1e2P zQvgs8VU-S*%lOVcRR)d@X0B_;ugbg$#PInhf@$K8Gax!^uYLUp{XKY|N(#^_O+Oqh z%=tu#CB;eRV73^trX5c5BPa&M5=D*9-oBoi@M3@gAO`+3YCqy9n9|1asciwsQO&Az z*UWW93biI!T|pXX0AM{d7q*8@weB?|%*(IZ7ET@MKF?4--g@2QWd&5RO-}I0BLuKu z#O2#idk}kzf2RwThuxkD0<2wu%hL4LDO-DE$eST^r6iJ> z%o_2mNcOqQ8nsG?ni4-8hillig|2vgfSQ?eQa3|U*a2Mae9p1s8+KH=l9wS;LR12V z@=^iNIlHj+HH(tA6N}+e7&?nD!x`dm%&nP0%S^-)b2Y9bO9!JcuzcH0-Y)Y^hhtP!7@Dw_Ibnuq%2*KK z-K;?DZ}S`Q!C(-QKzqJ+A3USir%A(3!J=si-l^Ux1dA}N#Z{*i5n>Wu?2u6 zTVbWNBPq*Z2A013bF$>ATVhah5>%d6Hw-hmJZnhtPS%Ni%GpQ!wfjH9K@ryeB*7%U z71v5H*262{bR%&CRdg;7U@kzh0D6u+S8GdcjtMmZKs`+W%=6dx@~w=q{;WW-Bg2;) zQvU#&h@(6qtG9@Jy7dz>h_S3OkCa^f;+vCgNh4GL0Fg-8QwYZ;%83f6Cp_uprDEH+ zCB6}C0PwpGLc=_>)!wn%7?Ly`>xzQ1^rgjX>C0rl-?ah4=#t3}1As+q zPM}fG<|s3zumseK)rs@cmG(4eUmGKir8zD|SOBI#S-<2p9GMGBg55dfh1w3DZp59( zsN0QA0YQib-h@169%kWjLI|z3yLogSI0Kll<-+l5sJcZUo?nQGK=Ou@%WG|5O^2_q z9%;02$-~c5g#lTyW~nsu94qDNyC)Et(#44hPZI1o{N)8=0Mo|qpem%c09XPSLICKIM21M@TShOaZ9(<= zZ)^Vmrv+i9r4s>jadVs8dwB>S5m^4ncNId{`tY-_|zM35*;3R2_;bC)V!DpMz7lQixrcc}!u%>{M*)!~AYo|Xye z=_865#1WNFh{&be)>ex(#@dj5_)&|+cam2qOJ@WFOO~^8Ik3H8j5-vBg)VWc6#}Ph z!ESk5+8U^(FyZwSjT;}1t*4S@7UBZ1TlvslAvz zY(sPM4Dk%fnDRfi6ndY?bJe-V$K_s6t_2qnnv9f3>ayjR;tPHi0@=F_bRc>jH8*DL ziNeGkEm5c*bZ<9}O4@r{5B>#1nJ&kPtNtki@g6}~qG_<&=qt{3>O{za^5`$419M}x z{)2@0&4DC>aLOi>Wj#f%Pb&Juj1JnHG5-KiH)~M&xq6N_)81|qgko4iBS}ah$ZvR* z5>)Gy*lIsR#8^F%iIRL$!#;rX%RNIh7`>w`mX@MP1N@)Ro^7snhDm3Fq7t*pA`cmn zH@Qt15>WM`yc1T=34+*R0C!u`c!8EC%mzC%ZTYf zIzx06czrZ<=nBT!zY~SIzT_PUzo4)e_2MNgCgaSoiPDLT)MG}})q!lD=DxA!Gt9UL zE*g5Or(8xRnIWi-A_LMf&{WM4yGa~(HxX-LxI9L2DrOXF0>kExD*DGm4Sx;lL8lXy zYIu|96~%9e*lr^RAxBk0R&gy_;n;;Ev~m0$!HLLXEKR^S*jyh@Ayz73aLvxVsDF2J zQAp3zojv^R@rM^f!8zV+F0L<+po0~o>Ys@dH~6I&A!etLd0Qg()Ld#f4szzqb`4rG zi|MYMn(qfn7<4ns-Ygx!p`)=npJvh?p~f&=YOQ}|HDRc%sRB3_GSjG(h7U7TKwFHf2nxx69p-v;papXvFF z6U8WT+I6QvNl%9}R8>>UQn^~LRmv6Kod_Zn*o?Q*{4$iOYXI;EQJ$o;k99<_m7iL%D&6+kVarJGW9Iy?vFkW3WDAY7&)hf4{IGD=M}sz?(45Hzs4 z*y?Ui0j>9|r_WtusjBX#I4;c3%AUi|p`Xqi*96#RSzq9inzXM;rLxpUvGs(KM|{$B zl!Ex{lG#E3_D1pvzR(fu>wSmznH2xM+m@lvU<53~Hc~=2}-lVo+QYeaPdb%I@6WpDD$?GS8e(Y%plRlp#WL zz#+vAg_zWjM!jJN0Kuwpo=~dhTAJ#KD=RS!My{5UXpHegO0ph;Q^}Z^nL!eSkmXQq zVW>DKh78tfJ2#bV-0EVhBWF$8dovS_6G{H$^#@T=NZ+v}i*E@~HzlP#$#2@6$*LUrzr36w;L$m_~v?Gz0)U zk6rJk{{TJ~&Ou2f?rsH*YW~{mkS`9hQc`XM8V+AQ~liaEXs33=8ZCkhIuS#`|6qPKHNPabH^dAg4%TX;}7x1$QJ{oAUhGewV zs?BWbmeS)}>2LtogA}7Q?ztz8n@=;ILEzM4XOt8zE(HUZ&<8pH03bzOj9`@bdsHMX zEQ@i{c^I=fB=$pa4gUZM&}?mC!FXULRI`fdOMW7^k7djyK_h@jt?6Ow3A59yi2(xn zPGN7M8r+RZ-1fGb@XHN6DP(bT%v!Bau=K7>kiug#IU`HkH>W66rl)FZ$(#(vNau~C z8VOR!I-m_c=y&aFjdo))pk(}>-ye@iTP@|xaYr=(Ff8`xesL~(Xy&Dq7SGdQv9Z?5 zf5=YP{6q~q@GQCM6D$D*veuyIrF}IbbeWS9K@=hDrx&RoU~K`aa44ykD!2}LREmV| zOAj$$T}|#ZzM$*D)A0=|KWJJua#l|D4RWZhI@>mEp)#&{E2=8mXkuAs zU}X{z1O*8S(4t!G+m!<3?ls^%B;}P7#Mb7yNGf&-5<*EXH$kZ_Q2tyUtIh|? z=8QnFn`JtM;|80L(~9BOogL93N;9?eNn~<^YbXbk4@s zxv^C`3!dWE+kM#K5LUdt?hQB&ta(D5eDH)CwJtm)mi%X*tPBzL&SaTlH4KrNqj?5oi&JfT9vaMF=`iYCw4|%V<%g+noZ`QR!>WAbqGeGwX-kr53zu`4 z2P(MAFMk*L1D8B6=8jvyut{X8ow+Lo#qs+29K2Ony=|s>sdwp9I=N9B>z2X6D{dF; z>|ESh)|rkH=9&lg(?b?s*=#%x#KmF1OrU0BHf|MLmjP>*7E4y9?rL*2iXl;I%}nu0 zF`U%2$sXmRv$16&;?XXIiw`aMei8#P6yP$CI-E#YxHNDwp?}|&aSmq7PJlJchWUn> zuAvnNfZc^IJJPaudoB#`y3Dsgxigvxf52A zMo$q(@-=!p`n$lHBP~x**FSa<%M0ICz3xB0_tN}r&Zo{LMCFx`N}pGLt;fo)OagYz z7MBFM)LavD>OZdMw-W#W?? zSY^XViBhRx+KL~Za5AnCjIWez2tL}iwAgBFHq@IPcnI*!Ab7Ps!zQ#S4VpxQnlmi;mPs}v({(6i<4^?LZI*h~yHvQN- z>!|vDJ!eJFDsuVrRog%W%XEN}*8zxUHy%TrUNK=triE%!brZa;nFt5Sh)u}#(^K_3 z@IqZFnO5*S-JJgbKWw6$wXs|3Yg3*5%l`l|-PHJ%FDm#y;ob{T3||X`VR&aY;%Y9n zwWl4%?swt@AlAf#no5+#MSFLX`8NmSGf_5+J zC1LStSSQA?lB(u2F2MU|aSaT>$a?rk4jlSwX&pJtxWy(5&r@Ns;xyP*ULWCp2g{fU zteJWhRWb6l3Oy4Lb((0Hh-3aHd)VCYszipwO_?&TqE7H}^&ff@(V-_+9DG z&YJw}=B`bWI(mA%PAO^Rrl_o-lMishv4hC&wE@PcqHAYYBEXQ_9xiw`C`E`MHvvjF z!D|RnCmS~pGGHrom8pRyj&$<-(VC#emMS`FR}hY>VDP%tLjxCiCPgV5Mk4$r2=kS( z(35?*HfdxQE$NYmSV@y6C@d*8t2HlT7*w7fVVOI|`C8r&7#3)uUO<~CR4|R*Yx+-e z--@C%84hc*<;kEH;xv-NrrMJS_E`>`a@5LK>SvHht8ZjYfXcU^ij`=fpAf01R7d^X z(LAIqs?STDfVSS`61LR(o%BFA0P_)W?-(YziWff*O5PO`m8Y7THjDz1<*ET)OSE!j zRRw>Ih_P<>?WYS=PWexENZu^gIn}Z*I_Fv&zbqtF3I{ZPH7)x*GEEFH;F8VoNRJ*h zSsK#Hvq<6rO07Jk1vbeo)Dx=PL)(Uk{{UCCLZzIM+(gu5r(q`vYQcZAeo1nLy1H^t_i+F zqo2)3!(*i`VMg)rsX&7EcFeK6e5RgLX(PocQt1^wBJ$AHM&dzqYHp`eqUP(8P!>De zFiad&q?5bq4DBMM z?y3#bJ6sXHv^!gg_L^3)AqhgmAtHp-u@1wFnz-m55o~#iMmB29z!GMXI1T3yaq+l9 zHAN+-s;A1`Jn)pb=QEuPl!(IN-7PQBo@1S4m~3HaX59P1x!u2 z4{bSz%B;d#mPJ@uOFl~rFp!V{(*9C61KUe$#7e{BN{{wVbPwrv6}4{=B4Sdqd(pb? z9Jsw3EV8|HXxUP-ye>%q-%!fz0X=|N?f|u|+ik`8=k)lYX+%A*<;EIIS|$oiKsr+Q zuO4i`J3{lu#0Dr>sIeeQ0U%o7WzZhP+}MF@@!BQN69datxau=G9QczFEfP{m3nYS1 zT8;xY^DNdag~aVak38K(5#bWcNg_s2I9c;c5H2i8HyUVlC%x=jIz!>-m7t0%GVjjZ zT%LxIn;DKwmkA=AUHz-4ryG~Ues#xrKae?}0KjUZp_jxeoFcmr#}-zOs)GZDjAz2B z#6=}qnQA0vGiI_gGbtCp8Xc5QB5GzC!~2ZA)c{%TN{2sa_3q4nU3QmZyA!mw7Qw@+ zUMCzUiI{*?iGa;W1(uQ&65ud;Ju-{8l)3)^_D|Tm$3Fuq@mhE}im#cuem+_+D$OMP zt?R=3ro_@wBjrDXD4nZ!Tz~M7Y0f z!1<27$+cfO& z&7=giPTf#&b0&a3UZ>fj*pHU+E=-#M#IXEHQSddys3=NHB{gjD;uNu@wM$VJs3E9V zWQ?#5Nh~hMgFn+zJu;=McX6)dS%p(eKGJlmXlZp7LR%eU8xw@fhx12<`1TvjaI7<;&W5uMNn*rkWN4ik;i!pa zftaL-u7yHm?U|AmO656OQDPqVVBJR|#I#zmAJJaWPAgYu2m0wa9%5t%HKIT@*KboiQaqyI8+2oE{cAhK@>p zOyz0BY}FL?+{sT-Oz3G+2`UbHb6Fg|bXS1qhz%qsW5iRi>h8mW`?cUewsp)?_M~EQ zC{)>n1a6g*2sars3pScJ6T6V3imM(-LuNoK95Y_!3`|zw?|;+RgSIvt8I@uQ;B%{j zF5IoCtO&%H@RO~{vA$OMtW2bw$5zcGGJVx#kdWVb6U5r--X?;$e&ZKXt zJRP%C6N1E=P$=@FSFam42&blJ_c0{g728nf?l0{MXd)gQ%%urt=4dtcF&!>71JlrU z0C5zu6@?^bx;^dj`bJAHn}++2kFOYk%#`v})bhO@I>=_5mavG?N|G2gLP;whT&gS$ zua~{Jml+_d^fiC>{okd|yjloF&2qP2o^fu#85IJHghUG4HIYh#+bPN|=r+B$w#h)1 zhe#k)0Z~`3UuV_n3=e`@NG7R#?OHK*A*on!!YbjRpcsK^WsaU{VM0=v?{=1YfvP6sF91WqSQ&2;ln(#cy$VMM4E z(U~DDI)EakQ*{y!k9|WEea^8QM6IlaOG1iNmjtAcU8!a_Iy`eRCR);WLsF~>ISMd- zHzzIyxo-=lp{!>3x{8WuTjMIKs+hE(#Sv8?F>9;8nSjvWVQvV);HBYZo%xDU4^=3W z>P_=Ly2CV?lM(__IIwK#$M(&li19a=p~fYOmKugADk>@}4f6j0ibiT0RAmOhIE=ZD z*355f@lo5Dz_lt;Ng*VF38Ow>8r}LDX*|iHC>_Ys5EIwhN&1qMOZvXA21}Si*~t$^ptz@>-;{W8 z>6o10E1g_w0As5SbhY@|LbDak&3e2a-iBuYa0lmYh(G^5*=d@RNU#A4J(fHONW@^f!+>BHNKDK3v#ZFwplBH2bJO|?CD9A zl2uj~rCi%l>5$SPMkr61p>j_FS8I!(K68s{-1Pbl@BusWRpYy;`Tpf#*W;)*?Xzc$3E__i>ZhwX=&qo$G0^Xz=_( zk|mb4scI=H%R9+SU4_dhN@^o4Hdtkfp-hmeH@Lm7Z^Mjn?xdx1fh435LpxYDX?&!82pzZFeR@|8=6wXa7 zL9KIV6enIW)XXvny)+HMo6pKV;(x-5pA_d@8=ZNYOj@%Dp{B(#4p!yPP^*@d(qcH= zxOHRK^9?+N{85_=t8ajt%g_>#xquvbUv4(88xfDfwhcx1Nl*+GaZ@j9+p=K6dG#~}wR^G$s4RpJ?3gJ~Tw^7q7!r2%O5^XFLoIKn<8+4I`36#Xp?w6>bI2a;YLuYLV&vQw zv-Ed!T_fYnII`hB6L^uxc=jpM$8g?x!e^wxW{A|{HC1U*G`)szix2V8tQx0(f+}=}}y?22cucYTts|>yyN*Slk0K!sU(4 z>mPo;%lIUim;5oYn(j>fnsL;k<*G?2F{<^Xq>~WBG5Vt&F{z5>Yij9>&jl=*Nn>Kf z-0|fY0n;iH4>@EiJCVqB51t7=i`CwxilMY|^2}O897J-@3nDwJ&Uu9!~~haE&~Szp2D})xHHFxY%B&p zwR?D=&cqx9sfWB)^3_DBD3a1hAk@( zEK5Yj-6~2+scMr}yU@L>I}qi0Xr`*9GBQ@hGRq1u`2Fs?muomJpU!j2Z ze$`ebJEo^x-3e-!1#a zjVRxgg%Al)ce#4p@vUQYGRD>lZDIi2lWhUG-}Cnya6(tQ1Kb86n&n=!dP3>4n4GJ_ zi)lvkf;96M%mHhtDy^;bHWoL&<4;eQ6C!@<)1hV=SDh=%*6XLG*Z=_+W(3!Re)_nE zTm@_D@hmqF!&Z02F)FyI=%R-(d1`88N_b-=8?boqFk6wKHsR(SCUoQk?>CwK)@{Fsn4A>7kVbB>zkd`}DIo@O2&Vbj5g$;k9Hm~K0YXA0Ha&4@%R z@kkv3v5yXso}FCXvVf%9LgscY5`VO+Dqn@G{x!S%^NL0*WldOCAOpEImNaDwFnSES z^oCy#G1N>#IDlB1T6)3fV}IUU0u9KqI%%NWP7T1~P@?4^iUK|_K&nMv~ zC2B5N%@~%m^Q~=Ln1#$V@K?lXSz?tyEFDeR7!4JP^BWz(KDRjG&m9>hMl9QipE9;<)D2^lb||_9yf$Q zl_p_l1P}-V{yCh!!+>DFXv|dXVmFGPd{CEf5WgoU$h>jCiFlM%eErXm$2H-C7~zFV zbe<^sRNZNVkUEi;{0vRCBpV(o7}W`rRsgM9m1EJ{OM3(B8v#3*X++n;kTV`vzZ}?P zBathBlNqhMv1FY=B#gw^>PS1D}t0k|jZJ*gg(hME0|R6jtah0PlvBiURe zu?BVk4G3Z`39;VYxa|(?^a9ReUCraYO4ijLm58{sl?YZ?<8GX>7|`D8axfRlHS=4! z+e5@lSPE94vzS>tOijV6Vti= z8v;EpICrsU6ETXELyM@4g@e##YCctpA8FGlZxG2YT#M&+u9_VqtEp*4O+Uj+DM;2r z`zt7LHc~Fu8Ue0@k3qwuc`7ExwQ@x=2kjnRKM<)WcoIQSVo7u8N&97_bq9j9B0fXs zNM&`9JarI;0?M(}(y*~oEu7x>I*kqOZW`ewgDphcCjg6iIck>RL{fJCFpZ&un&0Mv zEJ*&~FG0e#iLfP|g?+lTLcgf=_KHi!Da+uoN0U&- z=YINdgKLnqEiPO*9Nh4y?aD2EmEJzKJ z2HD%KX$5>A=gf1NsCkbL#vUv`lBjDb`Nx(RkJrfPt9hri~pyActPLy|Mkx*0!C65Mi#<50Gc*BZw zXFTIy7dlgN{x?xD!;Da*jfHubP(>Bk<`oDOu&}mk*xP{cn^|*l3d0gfT8IymumZ21 zRi{X`W43gIE?y(MJJP@)5myIz1EszZ66(2M2j!|6aazbDt>$cQtKsmeTBq%#ko}$+LyedW`6OUSC6agg%bvAO4U#;oFkyGHF zA#*n+b0898Qese1)m5ct6El~Bsk4zILitL>qW=JPgn*zAekvyr)5?+bxjZU(Q{b^B zrrN!lz-=5Sap4mb7^o#Xz`4?*;ryD>+Wdpfcz-k~HEs(Fwy2QA3w&*6!#`_w{dye<_+l6!TIrMk0 zT!)lB!_1&AI#=*>FLUT)RX|myR9BBN&?z>`4&v9a2frMr=@ozG3nj@c&k-StpfJp- zBun^|Hh^iqy{>ocblUt7kEC_?F$CU!;%TMegliUOkr|N%)FO=oZK2b+z4!U)!E&&U*cnCb_l9BBwU?E?ce%q!x>p;;rxB62{8;_gO^tP(Y3xz zOH~vQ%F&Qqy^wder~7>E--40=WjU)*YIW=J;SMTl5LV{Jm{@Qk&F$z}usm8yB&o$F zUx=P2SOi4bk_SW9DlRh>?R`P-YXZ*;G$xdBMT>j{En z0vHk=fL8pDS89kzuACS0Fbu~*YvuO#zPbxq_xXgf>Oz5S+LNIN=61X|!{L&m5~Awe zBV7X*)ZUzF97*=M=JdsI>;sjbDW8`fN~N4BNsCSY0LbwJVC=WPeZ}v%(w*9UpcF)- z;x5iunkwbpu3sx!J=6MEu~RB!+2=xP`OA8q00(=;S>ep9CJwlI->fJ;DWzlPc$%R^ zwB^6foA0IUctNw*ahL|LS8T^Pwr$i2Sh?$_>ZXDyEL$+z3b^9eHE)P8-Yr-Y*4@R-fX8rT*GQ}jDc3x9e(w+YVjVGB*7uJg=*ssU@vRxE-icM>)X@=2GKzYbbT2XXS)*hBjY?t*~O7L zh1~EC*MG}h^@@Q>igu@GQyR2Wq6-4Lk!`)N>$eHyt!Z}-Y(;+@xa*W&rlhGr=6agb zueq;Wspg8E>W}{bE_Su|*8c!gW3b$9!2p#2P0icpcaBnz7aFtW``msYT=R5?RYNdG z627LyUf#QH>2vAEK}K2K0<^JrrEb|@<@dbeSk^?^Kp1-hcl`A4dvGko9pXl1{{TO4 zgh1k1E2EO_!R>!OZwqzPm`j!3PSzLOO-`M-24ady%$sP`KREfr%oMr+S-jhZZ$Y6P z;eDkn#h4t#l6{Z1zMFe+66S9yOhee}e`@@+Sdiff8VYIBKN&pe8re#o+Mh#lss8}a z5tMIae;;hKjj+&0qn6~R#Gg$^(~XBs9MY6OK4dKrtLi-C)^`z;8Px`(we9Wezpu9# z=I>o%1${;}M=X;CEV{P)XhxbFdk+5mbuIVRT`uP#ao0_6k&?cYUc%JQC4$kalB2(1 z5BlkU*SO(;ZNrsY+MmrJ%42-;Uq(W1Z|QA@gWJ9J*297&6oFxr(yspi&y_TY zmxu{L1+!-Bo?Q9pL`>!O>eq;jWsCJo8(z_<(Z+{RZ>{$h+lIIqo;GsNS9)2#a)h{? zKzxH2KY_3BN|=0XCM-Zj01ry;@q<@j(Z*bu(MkYpNKt*w&bPk~v0H{#^Oqv6nbhU% zX{;@sw7*X+M3O^Tl69+Sz*F;D>zFXgoEH+3mRW?~4<+NMRq6E+NNa!vz|?{-u3Z7W z_^Qm`6AtJc?Zg*v!Lx`+ajDu;*DO>Qp=`mU6XbH~UY+pU#gP>?CL4>SZHI)82~^`+uoktg!|j{2RD_~hkBKY^F7NC4H4){#qu2^Urp-cFl23#IenYLiqo^aE zDvD@jrWR3 zwy%1NoT~|#lGK-sDh(K3%2mG)b~Xf^hpoN18xusotNgdC!^|IcvN;w8zK#Lt;xfV~ zt9U2t*fPx`pnEe20t1`U;qzFIz-`=Qxla-ZzcG5m^U*En1=`;$Usm7+;xfusn1?@g zDJ+>m1~Rs}2H=|wNgvSh1lpiIn&q`Qohh%pON0p%2Iyf;KEa~Dnk9+}qJV~1s%I=f z1P5%)G#U$%EHt-mZ@}^{cvsG!IYsAZ64%P_T>k(c8U=$GVo^&q^|z?p`f5ebz0a=& zs){Y~#5^`UU#~W=-U!pQW*G#k6*5Y$NEcZO`Azo*#9RLWJaTJ#^Q;EDj$b~0BJ1Q_ z8m5|pimp~)f|N$_NMjP`V$%aoZGN1MY{NhBkk_?`4Dg>w88x~QPa#gRLG1+jV-mCy z94J3NFV6fMD6jlUDNTvTAzq!J10};`EUI@JUsJZ*9s$}nJmSIG(3zNU=Im&1M>(FH zIZ~x*1<1+Gj`o?G?r) z&RC3MUxlDrFf|=wO^?0y)EzYKZ*@4VYQZf=a9EK|GuQK2x8VCZgIV6hFMt042OL_Q z{pkdGOPVn$>!tYk*0z#inHAwH6(vTNM1ABI^|oRH;*{g;anTlG^q2 z&M0#+tB_9dG%c+LY^;u1X{n1{$rymi@bW}Dkp0J5iUuHPY-~@y=ZTesC}jsM=biYP zWIUsCww$Gqx6Tm0?L_fQpH!q!F zh0hbbBF%A3oIPKruf`haS!Q^8QYj>h`ub{p2<_|d!7^TBF<|FhhoLY!&gStXmKD^3 zIPfuYVRX`_8565XEKnMZ#Z>xU`e~-0Eq%DLNR~{x>DM-5*^!?<0*SOHAJ#HU4eHg6 zUhMbfT0%}a5K5sEC~F#!E&;LjxHi3w&%frU6on;Z0&}C5u8)vwA2U|4U?zPnN?O9g z=C9-`c*d+h@ly}}j6A!I{Wd?BZaBltN|YY@w=nK)k*rURJIGK-V$^Pwr#f@WIzz*D zNav0#*qor++WbC*e66Ovv>I{fdjT%R%_`48I(*5VJYThvRlK6+gqznd$#Ne%McrJD z@Le$K4#bOI{^#HF)8%`CncyMvv9AgroU0yxA!{=NZpExE*Os}!Yz=A0?k*Qelf3~?c9m&iA@-!>NZtT^1{z0Li5@52NV;5lm3 zp@mS-%Z?+fj`9n%*=D}V3WX!(Vgc=KHn$G2pl+Ku`E0m1TZmPPqJ~Dau;)wF>N#l! z`L_xZa=tBvvjvsjF*g zM5gq};x)vUsEm=Ag``1F!!)2^Cfqk&!nolEc$Uzok6hQ;@&lDUf}q0UvMdfxnPP2-%r?C(IBj8jp^164^_ zB=b4g(xPRsax4g4?{3^$rQ)SbM(UDXLbo+Jas{8Ru011RZ3)MBdkCbdgOV!wk;GTt z(O*T&?2PpcGDQqbdM&9Z*2ph=Y<>0K+(9o5E>yy`1y;3kICC9+DHlXz7H)SzsYx1B zQ^EQ5gW?;2j8#msC{thv8URL@8jq*Fj|a}0RF-nuc?Rar{$eAUximY~%>m+ly)Br6 zxMNqW^Wl)KZABd232~ZeLc2W;IlM^#{{W{no!un{1+7 ztRjHj2Xwh+B9yJ~Q|(ykY&r}go{aMp?Nv*K)6_^qx%1n*Ue%A&kq<>TLW zH)yb!u#|-Ypa64F>;cQm(@>Vx;Uq5|onn>&P{etpr(!c0;`}$aa5e9(!6HZjnt;B1 z{m));W(x~tCp$NvQ(D8_I#5;M^>k?Cs8iyorH(|8r7H_mQps{|!%G9VvD1bnQuhmi zY}(^PahU?1uu+~Bhal9{8a*v@^PS-Z6qRWubs1-|+WHf}<@Ne-rAtS6Yezg8zZ^dh zkyQ#Q$@n#RXY$dU8Cpk(GXr^YoTEz)+Gqy)0xh<@LyA{+p72-)xhEzqLzcaAgxLAw zRE6&b1S!X_@LP;OU{OmHhDqZRG%)9ZRoG^y0_3m;*0{Zh-+OUB$(%8(+!P`0d*x%3 z@HCGT+mmqXoUy&Sy0ZE2XKYIQ`Ex z4Nnwenn3_HvI3W|I&I~(?hl~{()QzXsV6rDLH_`MFOLX2Q@bH51xij#2?MKZ$@wvX zz8_5_ocGI&buwa9x|`nR*5qk>p634mOIwciBb}uvxqak^e@v@gO*GHO`$$nU2D7|e zJxL|$t*vgfa~=K87-*{S`2mJ%}N_F55#*d=)wKV4%=9%)NGPL!iPRr)YM`zQq&`eu-Y?6 zMHsn+!X#N^Am}{KP3`Hy#UQ0F2l-{G&Ya_v1W-B5QQYvq-|-y%&h&8AK$1N zQ5;<>lc^+JYJ2zG`jc)FCRmi0DGi%|N9=r#gDAM5u3`Fa*%8g?c%Mif`dopOh0@wv zOWWvpgw^=v!$>i9PcOu5f#xzO*grh@n1*G@7ZnU`3Sm22jTOAF`-790M3#qI6E z0>hBCGU)=&`hI3aTim&f&r3?s(^LdWD`K8ka$Bh?fn;5K*aL0*jksxs4wgP3!sClr z^5+%YT?t~vo|Jl2{&fV!r35ci7@A|6M4nS*Bwr+o#`d+r2HKNgcyS|VqG|r%NDK`F z3i(uK`m`XOj+lh2a5)cppSu7)T$>9f3j(W3$f+tV$$W)LQE)6+OhcgAMS1wS8)AB`BIwjo%=fs3($_DK{66Z7uUUs z*7}_ex_9*2wnVGD>gByn{{V=UJ5v%{c`4#RY8x7Brx5pOixwJ^P18vwmRQiR5~*EA zt7Ep7(C$8aLUvTKP^ykBKOZjyCukBpL{_IP!;A2xJf0OXeq@shSB_X@fI}dTMJ&PO zzJS~tkayIZdyDXo6lO_L0Yq-lHx5LMvmbb~VK6c$;fkfPQiGZ~byqROjEOv}rlZ7K z=nx7yL5#z%QHu~VjWxdCF4wUe#x{h>Xf8{)5MGS`02+^4!IHL2kb-8N(^h8=+L|!( z_lJxV6I^1BDw&(9)}sPsQ)SfZZK&UJ0KU9ga8o5tlnT&I0m#0jzr#ybDO*6|aFe$Z zvJzHzSRbUhv*Nh*vGYj7P&XR@Ey7H0CQcq| zk`Q-Y$jdyqQsUz}7_)4gCLwZ!z*D?@PC$I9`T70a-z#A}wS!X3_|_!_eMIsJDd&bp zNrH-T)09wYD9Qabk z!?}+O%>bmtO*G2nFsR8aa|`X6MYA8`u>hTWjs{i%LZp@<#<>9Q{C-eQl9D`XHP?8v za`)&ni#rR(VUdD`iHZ!(P^QW+ZvBD2g8ON2SP+SzvVkcS)!31f<@VzQ1)@p{rGlj~ zqK7UY8JGrUnyOhbN+6U|h-w25hLwmaLu%}9bpV||+l-khALUI&^0(hG4z6Gi*H2Q& zQa}#C0M>fhy0xvW4jib9PcQ8`AjE6rg`{VaoH7WLct%$IPBuIIiQomG7u~gWejm7o z*hR}yR9?Jn3%NDxU2O~WyqN*5!Y2KT9E&uJ)6<705ddui3)yac}#Q**!*Fv}#J z7eYDb<;{KI}9gW%Xg;S`i&CaI%>IzNd> z<3^Pk8C~RM7h|SvNwK*HZUvt;X&g?vn^CHH>kY8-Wy+T6A^m^m_wT@IPk2Qbl1a&piK9farz%>BM6yRG7rtXc+}vjc z`A5V|3QTU9Cd6gJY3a+!JzTLYaLdqK^JY@P)@A_38llyN$7`J_3X;xFx%wCL8qmj5 zG15O)pVZ5!{{WB$s&XO4Eo`e=_xC6Gfres~t6j_3#5I)B)6trfq}QgAGsYwiL({P< zmCKN$PzrI$5<$+o01lh&{@5ejjsRDalcVVpUjKS)-n|lCG#d zT`M!?6mmuZBAtlI*CP2wV0PfiIDtF|0P$?-2jkY6@grtz*|G^t@{&n4Q4Q+U^fVw< z_d(4#{{SmNRe|A&3SnmvdU*^_@syFY>2HUMTbr7QO1q2Q7?Gjc6N8!xlm~>8bYSiU zs#xkgs}W&#zB6Y_n}L!E!!1f1&h8Ydki_N(8s`eI&x=u4%}Vr=RlxDoJE<&(pbE^L zDUXy*8yu0X?!v(7rvgqhW$+@8R~oZh-JHOYaI_qO@C&OY^Q{n-coaWTm-`4R4H)Y65mAXX~LtfeX z+n+H4T9nU~v?nt}sw{>zEFGAgROm?t<#s1a@ugxVl^x>Da;3UbzqnW+i)tEhbprGqT%Jj?aHiJ72elX1i-65hE3}){Hh28ilDSN~TODBrya1w37TpSiG^~Tvga(!QvG) z7bf#9B^%3#ywxf&Dw-N+IdMEbt(aM4Bts@1p{9+z+Ni%0$(<=`XQ(VlEn6Duc%5F+ zVE(ZG0PyMBPwD>DDA<@>M%&qwif7@>lqp-dS)o%Tfk^j~!?El-8vG8v zp0f{~rJ9<)6C|qQB4c%qNl{4(K?!ATH3W@#KfRYIIb%n2Thvvb(YnXU`(F<`3yGO3 ze2LgBRFUJ8ITj$PBr)O(>!_?HR75G}Sy_t$<(o0Sdy;P5i6m=%eYf(0S3c{E_ZHku1#-P zUci$;Xg>b{v__?%m*N^X7ZAw8Kz1tWbvD@fbp(&E5Xwxw@<|jt$*&*72ChvgC6#kd zEZOk1Zp0zH0RRBgC=n0<%+53iO?9v!>22-52ei98jR>c-LofZp4z7pwol>n}IOx z&%PF8e3e1FFR^@{LE5 zii!{;>7Wr_oL&hm0BKd2*ptC~G)tP(4beVW20qzykIb7CH_m7960G>6RX#8yxBA z`ZZ}Aajsg#>2T^CZmdTYE+7kG>nXdu5HLwzqzz+JFkuNG7E(9A1mJNpRHA~!fyz`>Ljz2cI~O5y1hcy>((J*K)uyjbJzzaXH&gH;h1V*^%vD9~x76evukG!A8JSYn zw*WszZ4LP|`_(EWj}nzEjn^C;6Vrp&C_Ugh+`S(>Ppw_tLGC3Nh+! zWw|E6Xbtur!?zr&guMVK%aDujP(4c3apJZFZTm65y9DZ0pL@eCb*|ONYSD#w)wSE54X+l=EvgwC7k~f@tw< zdVCGB7NU2grmLecP_`iy;ihVNTC*t=(@Ps6jbRCVgE0k(*#mYpKrgWv0 zy|+EccM(fK4|Uu>Sy6D-IDLp~}>n{U7o*8C!*G4?9Eu0KvAw{*7(vlJVcv zjgyMn66UM9*|=$IRKm(pLP!LXOAtZM@$!T1HTH6<`#E^Q;?IR&w9hdQ3-SCD44)Ev ztg3OW9vofi<+?}lG2w4Nz^)*ukydns=%6?pQF}YK&ep@FWP-II5=Nv4(>{jr=bK9c ztOWUzz%x=NDJfp*0YT`dHgQ&_govW~Y!Qj!@}^?*JH`-^{{W~&Cn*C@-3yy&PtS{F zm4FIMJwSe%)M!2ktZgJLN-OTv)ifjufZ#p(3h{|EGQM3!j)d`B*rhY^IF!8|KxW=7xMh9^ zitKEOvQS8rp-PcL4?n+=*Od9Jd|d}FMO}yqo-8AyJHuy4j8#6snbb)U#FXXog(!d$f{CU>VENufydn7N0(26XX6Wa(zY^;;w4;z!owi zjz;*JY$+(jz_@6`MHN0`NV<`!1P&76Foh!(Fx4Qeu{tW&rh&5ahGg$cp*FjlkSUk$ z@kn#_BJGUV(VB|7rfQm+nP-`d%~3r~Q>2mtgxO@3S%6O{&7iU3$%F})AuCV}8Lgw{ z+GbnQ6aaZ{iEw99Q*ch@t(G@ zLxfafSVkTf5b(bqS&GptT*B~69T};L>ny-4=K+mxZ%oHwaT0O3U{x#>x?R$9sIdl@ z(<2_8*$gJj#Nic&#Z28=fg9IQE;GG90_K!q%CC{!^bpeG?)QogT$ z(s0;iEfNR_1f@H^9pL`}Qnx^IL)6sJ*_yVi#;azmTIuD>RSdv~NP=8T9oMK8Mxx+Y zgKfT3?@ZnTtoCwwzJAfy>12m>8eQ1>vz|V%<;m1i)zwhqa#TSyQC7!MQ%_||rj|Dk zmPc>76s*9Ir%;-mc(?4mnI{xbqQy)d>f~x|)243=aq3Y?LR@Z!1YL!!*J90U^6j2m z_MYe z**JUhmxxjsNTa}cZIJspRNOT8CQ78F zWH%F6G!+^1Z46sBP{lAaC$3^mKvK$sInG#khMZH#<`0oU@kkUGAE{Mu5^-J$SFwyva8Ybr<55sRQY@JJIRR^ zJ{maEm-VpV&+%bg`Aq}WO^0$7GKP$&UkRV0k_$`Ll3-fwd#B+Suw0-H8woRJN&rrh z?UE5fTTt2`h8Lq0tU~*viNpg@bzR!-a|MOR9M-YUZpJDWsq49;!+L7PS4w&c90jIl zNlDB>rif%H4VO3!x&x@;RNQo|GP|Qc3T6UQL6+xv?(8(UrOzk0J)gA$9r>%5a8$J) z4Jya((Nt7Yb3{>!q^;%3ibIM=#`6FFVCb@sPW-1|q;%8xQ~; zy?E;rg~j(OROy&xqzdlKmIwi;PV4fk*6jq#or)`BR@5I+FVK@)Wao&589=F~#2{Q# zDVq+&7okq%KUdsGlum+-5@?jqV#L}F^MsXo7}rO z)w)}QbI(9e@~t#=cwI25!RzS^G?ehmQ&TG}vpjI3xk_t>NL;C978z8FjqLXUC@m>Z zbuezHcX*RtF7`fx7o@9n0!^HXfadggWs3x+r>a_*(CJF?#~yZNF;yuuW@aZXv$kRC zTH{_EOTtM?!qj(2Z>p!v^2qto_6ZgwawJEyQqc6EiE5*aK}d-a>Z7FUnN`+CFLNq^ zV$J8xsj)muFyPiVMD&FK#qJHg-<5dAnrI=VDM8)ML95u@9LACQmjI(UidQvdO4Ays zpQBGMLSaMFM~%yBu_;nYlc2rG;dJesC%)z&wt+`pdR?i05!NRZxpJGiBr`L8nDw|Y z>CAk+6*4AVPY|l3StrRn^+eo;V|dj?nGS__1XzM~;yG9}RR&_WlHjtG?&NDq(ZhQP zQ-H=5%~;$6#6vZ*)7Rlmq`_$?=l)lMt$ACWxxbWPnkiv=K3L`)QwD5K zSlTG#NnoI;hM6O1JkvHuPLyjgIaxa}^+ z!YFLLv5&)ogW;8nnJgeRkP@_%fk4#EGl1PYQB#Xylob_B^pj+wmlCV0sxOJ+bvU!6 zC?>AND;`RT-lQ{58dpAdE&wEsBKg7D zpsPJiS+t`Z=@p$uJx>I+ONYW1nxS4P5?Gbk$O%$ifX^JDok6iyxZ;(x@p4l>bfAO+ z|i0j^wwP)1lqBT@2~G}V?@j}n5kM+8?77r{ia7RJ&P}g(y(OtWQ*$39krK=*d1nuz zT=EerOH#`SnHKu4WV)SnH@^%F)Ta}LN`thd7HU4D*Vu3|0)+AT?+=xgCYCb7MKuZ} zNMXtYUQk2G!rLwGFZg?K+h}8C$dFc*5~gwiEDKmZoM_f_W>O_goB&Yp*l0y`*Gk>_ zl;xaahKi1#51K;*#2LOJ?C@38SkzSK0_N^yVsl-rLY;u)jg_|W^Cc-Wh~22E-WGQ+ zeDdOHZZQ}cl7UpSR}=(-TArfWR6VN}zZa>)DQaw`a|BU5iOsL^k& zw9~r$Zql2Eo)v+aD5YuyBqbn#UWAP8mGX&X;a4#Oc%9&o^=8x>IAQsRY*(18Xn7GU zr>3SgIE569MKYvvy*y=OjLfXT%#|!fPmm}eoVsxH_4B_%nbSke-EsvkAJ0l@pn#Vo z$(ZHY!Rqe$a~eJ4niB%Xu}N?6;-aoc25BRjG*U?{T&t24<|W32s~=N-DkBX$9XV^= zBYi}*O9FX<0rU-cgL8RgvjV5BUCw;}0BEqVu3D?YsA-~_808|RiB|3OUt|p8D0PYQb`)w+>XUgUr`BC5%$yGho%}M}}2Y)l@+wbg2@c zf<mZ~WyI^xVD4weaF{U{d4lTZgHY1!Xg}Jw(W{^r#g9X72(b(ajsp)@Vq3;hSR}Ii{dp<#In*+Q%w`Qy%{DEGenRpYu2W@)7Rb>G0I7*`5%`&ojE7wE@G5j$orFsO6jHc zP<*3Yr||2+yG2P>5q;4+&*K}`rG=PUoPmjvycAg}XAMEo-rkkgI)m&($=(?AuZ;L- zCis<2gyMXp{L#rWV#|$J95#qWS5u2YP_b6DkYp<~K_pa`&yWT-1CKfF67hI^0A3X( zbC?}mvGc12tI{FG6@=NiyH>froO%|gLHOh0=P`YoIlII!5qt&am_PZ@)Z@7R8&&@R zBjZa~Cn{jIIJHGh9tk9CG=XTU>JC=MDT>Zr0!c9j+zqlZ*gdC)lZV>)P>e!l0luUq z%9`OsIACbi7f0L4H2{S{C4@Z()}$M3R({ zUCnoTzs+e)^M5hTjq{f<^GKonl=%KLh+{vp7VNRrRx?%Am2y0>v&hCUEEli@a4ruF ztT6uKN>Uh7gDkn*D%U7Lm2P4d2n25$5aH-E;ZI`Kj+F4noMU>pG1;l&ny^sP;i8uj ziaLlF3&SY-SbZPftK>*&nN|Wf0d2*D4YF`}u;kTX5>mjvbp$vr(B57SMl1z89KZlq z;d7pqc(Gye!^DnVSI z%)wQ);u)Qk*vOgQ&cmu=?&hR9xGYGmb)}+pN-`29Bs=lH@$bqiOc#;xzHR2Dq@lv7 zDDj+Hx@qZ;Q>9Ds@|Km770h~U<1rBiHodjC53n0A1pAm^%r`FnDK34S1({C;se7Xh>v-Qy*op=c^mCWg0TpCL{W z(m!SY0JC4(C;lZKDNqJ=9eF_X8G;R)U5tfQ))m{e6#MV@IyKq-x7Vp}2AK^FsyZ)FE% zJ4G#N!r_ThO-ohS8X8%~R;+mk^-~qwe#6X`oJqs3MD|dUq$Nw13b%I&DJG09tG#LS zr|p^HPuaV`ycYvisjjBxtbLjA>?S-^)m6bo6WOa}g{>rTyIWF83#MyvKWTO@z}el} zW%wqz4M)2-PbY=n(`~7@yGuP&RfI}#$gIVsAPNAZV8g@nPnj5n8{?JrIKCK?^p+K* zr=X^aS9#!%?_{dW3Y^T>9&iaD+WPC~lhO>yiIF90WgXTOG@;-tkODoQAGGi|KqSnW zCRtB}x`Ipb1(=Fu$)d~T-?OiZoa4!uhd1CHuZ&eohhi|&rV{kCLp^*mSWPuISralw z#^8(Tu9v?N;kIVipEcxQ)~7l?V^OK~;_#0Vwzf2xUF^-Hg+Oa5Vut4DfXXc1S^E}! zqw(<*f5{VJY|N)NCs`CKBQ_wiTooW2k$aEO*f8CY+gO64w0C>Q=_#sQ3R5>Wrffq+ zKNH)&&d5yDGZKmWt05%~;?an>eJ)K}@pV!CoO##m(}vb~&(G=0_@!Sf)7398^4v9} zt0pmDO!U;X&r>)MsKYZ7h=I;Ro5cBdDI!r+o+ z%2LuDoxvfU#c2BR);@poPBDn%OU)SWAym~h_}4R3;&nALIg(jqs+FDdOJK}A*)OqC zU;wujSu;%hRQZlnl`N1{U5g7;(>idEQpW6j1``P`O!W=G_2I@6cI@F%!jv2|<(O`9EVxWORHY+kX>kPqc zU2^3BHSPe|4l7vZ3RX@HMgIVN#J@)Z{f zV|LTaeSq5jnr+24c_MVe{{ZAm@ae-y^mz_speO(mnzpX@t!iyr-zb-d(@^4gjXYJ= z)fjFU3jr=G6$I7s(#b03MW3XlVvU$sXV=_qz^b3Sn?1=sroWyLE+ZD4JMI!qt58o| z?|L?dv5j2Ru}v&A)grZMs)ENlt0Z&7s99Dv)dYiFq-lF@4;^=bK_pb4SI*TYgI#oj zaPv&*X`0MtAgO?Aww*cJE-wolrXPt^Dql5hLojj;$?h%)H|^fvUMxE$1xA6aTyh`3 zUUjMM@CaLgSeg-=nw}Ts9W~3CgzC9b0K)pWJ@W-$pZU>oz8tV;5ChNRfdHbn1d+{P0jq;*q?AdgH3pl%wdq_ zn6)`@iP0_4=K8yxN%nVqx>BAhK6)OAabU6$a4rBh8|}4${{Vg~J6T)Gxet1p*Ie#+ z`NgBNh-^YrUlW(fix1E597*D41^Zoja=$8ngv3QO(@0BnVUT%P5QR`U(Q}xO)$tQRy4BNoetuMo#seIdC1_$9^H1h5QvQXA@9w9|Z zRXA&!tUd~XB~>|*06C@`3)rc#(|v6O337r{N>QnDZhX%;^?jE~s+ywv$9s#=Rmm0~ z00JpoFT-qFmzPtS(qT%JxQua2BdwCIH(**gV-{c_00`<9z*}%Q2L*sBP@WBL;mLDa zkjA-khj^?&T6bvH4$S#eK25_|vZ2ATo_*$iRKY0}wJ@ormbVe9lHqCS?>$PQt-Q>t z6x&h=z0J=PZ6zr|JH(o1Up_EC3S6{JT9N@;!6Yy&S*`JmQGDS|8*@f2PZTXr)aDFA zohH;cjhs^f90OAsupqELqW8ZQncxYDVBH%&8EFhRktR+mbk+$8Sq{|j9uzJp14q%{ z5BX+3SLKWo33M%LN_pdAEV3)aruhKPl%B+HcRX75ZXF4fiLQ5)mm%4Ua5=DV*hk8} zu-dD|?Mz&>lBsE)Kqb$HhceYS$eZOBOjJ@hOrt0#Wd%UjKmoVU)c3Hx&Rn(3QzoJF z`EQjpilM|y1t?Jf^w#cqdR5F7uAyk@6rBq1^V8}Ludct&+^$GUcT`DLn3@B@va}n9 zT&0 z7Rewfk_!hTO=+hp#`LOK?3NZPbkGBP*xNz#H#g#RD4Bw$rh~1t6w{O~T4n@qCHH1c zLzZ@O2mb(SIXm$&bsk&gSbPA%dFduE&lr!1__r+8NAU`g)AHRO8k4A!kdq@B9JflP zP+Ws%^svhb?tx%SXgKGS)En~79&Ig?vE_D89gIxp#*A(et5D&4$s7$F1{HG^`G?{u z@}d_^i0LAW5{A|{(Cww|u+(~!ApuEAEXA_u-!-IoMmG{l)}=U8lAz}HuL{4jN%c(ox-`9!PFLY1<;fqq4ifH+Ca|>nTQV9m9i2c5CYEG}kANCbZ9L*t; z6@_5{XsL7l{+em7yg@o_#K{OQKnxtv-&qxNcC@E^BnxxYqnhB?RIbd@8 z*5>#3y~)>saR~^QOAB<%_lri(24>{qKDx6}?bK%rxO~x5VvtWH%M5lsM|mu$EwE6x z15K`Y3S97&Sao7YwLLl$4DtALI$H;A22EC`ziPyubgrYDmTD%XnQ9@C@|}bZh{<9nT7df0qi+5(Th?5bfkb4M`{}$dJO1df~&1)>z~Rs zrw7VzHod{n?r-hwzX*Zu)JZ(*eIGuRk4#P+lq9VzTRPufcKp%+C47~bg*;|Lh^|2Z z>PEM|y7%Aoww`*YLMU0Y5NC_7J?QOTy zQNFwqucZ9WI6_KY>rmAv-{m<(CNiTDy_#D1^Mlt1Ka6GmdZ>@&Dzu(V(J5`TQc-qO|6*=d@ z#(y|OW-hm|(>=lV(_feO+l)ujI{U<;Tcj4qmkq9eHH@clS1CqcHseczpxd?e{_Z&G zhLIYjT(j{P=kv*+Y;N(ya+b;%+k4vQbK6}#hjZHl0`@w!e|YIC-2gQOpp11);Xyj+ z2s?xNkNj|IEP4F-_<}^hM!b#B5trIF@5U?uC@yQp@gP%yQrQFLAC98OQRsH!1$`&x zaSHyU)7mzMWk&#>qeC+wxdR{_yLY)dYo{G1V+4m8Q$AgFEoH0gTf;A5!I*SIFs5T(^fxW_!uADJiih!wN{`}3Um*7@$_)>thn%1vZ zZhb4mSPje*3|5{Q>d_;t5cE<+)Hh1KoMc94+Nr6KBZp zce}t8l{f`K@@hD^&+l02UkbcYT0W02V$NEgqF#*@vN5$IH=88V6LC(($qle1jx5_V zYNWK8{sJjeUM^3Q*w9Cv_J_0S8`Gtv65z7{H5?oPXJedQnC2@TGNULh8%R}U4RmnA z_fvZmx$>Lr0UOx2oiQwXv%HM2YB8@}dPPeIhazU}5_sH6)H&@OEKSdqGOPP*q^! zxI@r#(zIz3kW686dCP68ldhIG9C12uPzIzbl(1^p{@kD`7*mJD870XUGrK2_8)eIvz!e$zY+6~NWS?xzG`X;dK{)$0}U3k4sH6|^Gd_+qa zs-#Imy~8sU1)Q&J?RE?NAb@ti3O0&L6kO5zTzm52a}PTyGEDhoB}8{@>`Mw7QlGW! z6y&AUX3i8p;ZSq~P%YSPdkb)-O5RB##QprQqv^`&;Z;Bc8xk^sb2z&OYySY6X}T4_5L+sNaM}Pxh4s@yZg=BLnJ!p0ptry6 z7C?n7{fSDhW}=|bzuwh&ud2C|35TiEt7)XYS4=`O2tfY;IBhh(ns48LX6*?`1Zv~0 zTR&X*M9A6LiIrTyfN~cjJ6-x{Z3t5H1|rpBc;qEIB?4A675IJgVDck46%3_B$Z1$s{a6zJST-i7v^iN-Ig3r2jvZ#;kWYgZnRE6Qv9-whYr!&ca^*EZeum>N7H@F? zOptL-0}?u0o3Z%dMWcjs9X>e)DugXhRKE`#hjeWP(Z3M?0OoD^aN1re6Ga!yJu2UO zdFKk};r{?kr!)_sHhW}9u2j_0BfL?X$l$6+V<+ts)}Ape@>El9k*K|gYXAovOqBCM zU~Fh9XATcO8R;FP5X>yYKhN%C%r_5-F%F4=VOqLxi=&vEEKv{sNnwB8-|1~N9Ca>P z@3e3%KN{!4mm(saiK+1xXEmc=mQ9;=F=pX4ZH8g>bQRrI6<3;`a0pVi*Dl%+HX0o_ z;pDU2pp#lX=pTu$b**W_D|pFA6+J7GNg#)8+8XxpG1ONAO~_GV zS3*uvwYJw?_)$7=nJ|tgFS)PIZ)m_IOOlk$01@YVlh-fINubh5a%=b7Tfg-Fmpbvp zwhB#venPaYNsBEhMTL!Y(yaQon@30TRV37vl(EXn2{kjF4f5Lh+pz~@`5k!lErw3$ zW0>L7Dh$sDj~wkJ;rnr? z=P2`p@2+S2u|| zAZei2x2Lba79d;$s0Z&9+29AGROH!+J%`B}9MUVVdxAl^y{<)%U~m5bo*Ur_+%>ow z)}{W=8%R?=_2YWvGK&WruYnROW>#pbD2JH&uVo51zMv8Zpwog^{?yJ|KDMp>fQaxP z{Z*~AYd7DBx0fB`5gLdqDQeYRQ&eJDd>{ZrK!jCNF$5cuE&*8rle~0ElOw6r-$;3bPUj&=~C#bktPn z007xRCvpJ#aWbW%a)BfhO23tE4H#v>!mK9Enwg~}5CLkni8p_o;c8i#(?ZuEESlt`|d+qP0x8q`CSOJh~Q=q-;#tBTJE%#E-paa|AI1f;TFD2r!(15^SQK8nvdmaA( zmqv2U-G!_Be5Q~{n3198{{V2`F9VPgdZ^05323e_nCt6*<+h!V9YFwYtbINqKzVs{ z1+s~g8F2VovXZ7)E1p$ZW`MHEN}ya>SdOR%V8DZ+7U54{9dT(DS#gsASY z44@v3Qo9QTajCWfN9VG^T3EUM8;wu&Du))=H9bz$Gn zy6d-f6J<}7OC*ppHS%it&^t9_*QMfdAud4@hzxjJOEZ0*BjM^Dg2cq;kUc`i%oQgi z@cD_g_BI;#(}k;>ic7xmskyUe&teZZsV>mR2fH?alX^cLA6ve4yTf%J7_Au2k&_&3 z#1nh_o019FxF*)MyAE+0me!&EX7sswL>Th91a1HTy8-X;`Nxo9@+Cxa#-PZJ)*yjm z2H=CHqS_wZb%@1FT!Snr-JOX%E7t8t%$Ta}smN9tV5+TFJQ=7*GhPi3aWY92HA=)% zz@f?li+5c=hWGN?-TMv_?EHM)pNa1rgzsu>s!0%B$;ObiI2 zIgGW*&qC16i_xY%g3C)AsXZfENY(|3T^MHE+=2)f2WH@mbcuM01SNqEKXhqzDn!8h05J%?i@3&At^t5y!chOG~iz z2Y|&JN5Zq73b0^7?6fJJ#Wgb z=hl@m=RScJB}@=z9|sXP*JK@y_0#FY0(>dpO+T7Z{a{%k4|2|F*39in57;zN9LOat z42yOJyupbo#^*vcy^Vml(|>*{J4~;5u&bA0$1QUN)!4<~W7t*gSEs{o#CTY3px8-#06;+IuH%iYDLYBt*N)J_u*v6 z4RKS#zijExNIV2<=3D2idOIHf0LzIa)EBOg`RB*lnkklUMF&53uMbGfBb9PTV`FV^ zYu@DEB4uR+E~m6_F}tR;FV* z!a*0fxwekO~YHMG=# zVlfEZ%&$v|KrB?IpMMy#svB!?LH#%(81RN-ZVq9t@0Og~jbWRyiqTLVoz%xFP~`7c z4a__j!#qfM1asF4d_os*ys3*S%TB-MDh0^4x|?mK_%cR1Vu%X*OJw=xE&1Zmwr(V4x66mSBNl?DB+w)f^tm>7y=>rB zqLtb$pEXRmLCd(-#>YzivaXzVl`(!`mXZk+#Lk4~vmrjASM=LW_ycLKTCr`F342*y zbRKmO{{UekbgU2eo`BSzAdO#;)aK?G@j5#9rJ$#xjsozfN}_s;E4@5o(F8>ov2kH> zb8U6uPj|RU0Nj!4a`W|vL191u*3ze~eGCta55z-(QJS3=#y*Q5#q0s~?c0s_o3}5( z*XOincfDZTa{0hkFD^^O%?=vWbrp|OTGA+p&H)`3wZY5gIdvNCzM5PtN#7tR!s9AX zhRez!E-9n_3|)9GGg3r!>LMtID!yy0#D5k|e57928jX(-k+_#tdD^XFa?kM`u)7D< zp|+Qpsb{E~pE5#Ka$JQM15M7owe{5RsR-P)oU|B;1XV6QJplmR>jkK4l0c#vK`M>` z8h7n)Ui*&S_#BetIk}6`%q>kkYUNnUCy}ZoA<8*%(nUnI zlmnpCPs@SlVbZacfZ{J-F~giY!XT&zCzHRE*0iUdk!Rre-W7+|QQ}Wnwa*ge#OM+f zhY^Z7$4+S?l(1TwVH^2{*r@HmQskj3BSYjY*U_oYqLB9uCQs2gu_dTjnm+@Or?3$Z zoxC8y=`bVDcrGbTRfL>Em@W!LZ&K7XPVDt&w7r-{>_J6B$UsxIxG0%mT(}wK#OIqH z56%L|>`88CN?NN|a&m1;nzh;WhTcl%s-9GY&~ohbam86j8djw6ij=A7oXHfrsS9TV zU4{0)3KcbBN~2V<9cpya)N`nYSQ($AmJ*_VmLO+b`1`SjoIjXw_N(}so?oQ~Df;zm zM=!(DyrHj}A2T-K7mYNyK3fhq`pwZ)bP(c-_qY8oM z<0pSumml112_Q?7W$q=52C95DXBmGvrgD}QUrmZfQ-@=8l<};w{6kMMT3Wg>W68BrH;~Ju?UwkiX;}Jo+X^}93B#2wt4SNp*wUOiRa~8+l^zY=rL|u!>E#p zq{8BkS8PG4swx&_O0AYyri|!V{snd{t7XmHIY!Zvo2-`=bwBO<7;LN-6%x+s-9tJb z6VcjmnHpTlo-DD*GO~gO_Zp3F-`Bm#;2HQd zq@CGhrnRr8cR3gHcqC?OZG59o($~{LZUQry zwVT4#ECm_eo8{rA9!Q*mrvh7-7Tyn2;??WI<>ImC4p-({oI?<+!7I6c6rMpw_%#nV zz9SwLfL2hrohPMCH!9Z2H0zm`xJw$7Yg>(X{{SnKFunabXYKz0(w^0JC$YOmR?^$O zp4xj&QWljWW*%xCB`PJ*tDv!O33e?NUqAA9jb16i@Z8x;$Z$ta%+pj;NUccKlX+yR zqNJscInq40v~A@LVQcU-xid<_#vv@FngZ0jU-C{wRsQJ3fAOLHCzILb;ZxW>r#}!d z!crz;=OTKL5R{|@mG2PDSUUk|O5_QAOr^zfp9}EM5;=Pa#W@ygX=!l$PnDY#rmezi zVNztJo2eB_!>>v5DagXamKWmZiP*}*;qdt7l`T7|Bsn0mK_hn8Jzn>J&EM)rZ#zBP z&9#cgY~6}BVrETRl2#H3bu5Qq2_7nOrggOOI{yF?uxJdGyqSY@j0tI{s^wfpqL&bs zRRb`m!7)Whz#RFz`Q)lg^6b-Y7+4D&uDV$O_ zmAq}gO4QS)a0-LPUQe%`C^1O!j$OoM%v%n|aG7bUqv_lfOSesmo33byOM+F3+k@m| zWB@nRO+eH>cR6M_bBheG=tpkx#4BLzwQb324w<-l$N@mwoJ(uLvMY*sp~*B#4LsPD zZAz*_l(cjb{9RK@V}d3`Ch|&-Zp*0Y9QzybG^}Or!5hU3nn+j-NKtU@P}*A{Aa^eKQ_Man;?iOG zO<7|MGCQn`k_up#%G1g-6lMSz!M0#QwfBNvHe8h+@>`IrkP9)pm;Afh9pHOCird7? z!>_^)=xP!jfuI4i&a}K(4fZ?nJf}f1EEaO{0HRYOuu`JHwqL|91^so~g4MNfiviQR zMcMdzemvew{+8`@5)!h^?NIMv*2|CM-wb}tTBZSo~ z)di`9@sb>aDlL`&01m661aa0QXyN8y_f!-TnqK|N2h&eiOFzdCH`TT2lvD*!wI z1|c%uSkO5D2BkEJo)=a4k;`~Yo*rPh)&t8trxN3w;f`}W^vr7#ijpQunoK@Y>QbV2 zW`dJ4va{tY+k&P^mp){*loP%JnDMQzb8M^5682-Z*z|1dX2!zeWnq&cQ*9 z{kV#Hmb&a7!tGtZBw{vODnmId8_lkwk8V(F#Tra1p9#TXkF6aQ94$oB$9Y<&M6xuQ zby3xIGFSisIsgUui(yY($;&t1n575EZxedZQrxcMFa4nGRIbeSJbtN@I&9gcY5)Z} zLRLfFfvw9L=JC%JjRep|8UlK9NOQV@BOqgLq1?5%zJS~vw7beo!l1*29+uLYa>=b9 zJmRFG3s{n(t>jb1uQ~_*bcmtjG_og3?X8$v{(#^4YCVS=Q-YytkbKN9OSlA@Ubz*Rk~c_x`+T$gw_fVjYKHpC9Zn=}9c`QBp@sC4E~<9UVPHu+psW6k&%_ zuCiF*q=EukTI%OHV1uNntXN%k)7rRwnT9x=LWIH`1dai~A)7Y7jAPKd2iQ*0e^EBx z8)57jDU&M{q)1*OVcrH}iAsnj)vfJI*>l9o9$w`7EFPyHdd_O*8rr3kmhj$PX`sR| z+;a?A>e90i#T^^ssi{&?E4YlqJEgMZY`l3sKew~?mO5U`!%H#*^#mngGKTYq1XbxD zu3yv7{slHa^sBMS{-yTU3_C-M*|H8j8#+M>Oy21!SeChLQlPHzf(T>f2cN{wX_A(b zw!fA+M-=8j(4@T8LrG19wNNnw1l219OC!~(JxOLUqE9n4nFf6`Y5xFEHm*2#vhkbh znJF^|d`!ZUpy9WjuSO!{Q1(yhpZ@^NOZrLuJj3lxiH!c9s{x3Wjm2P+Hf*^#S)x?A zo2cI*33Y&v5jot^;`RFo@^{(~n7nJ|u5$3l4dr}enQ+`5rSW=RWae7T0y@eZa=Mn4 zjt`4r&@rUMQ6Y7KYLTE;AXqM(dB61|W@0uj#lv8>jNb7jY*K6rErKx1PQ@m1;m8j`P6og;4w}36q_@{{+ z`H5h>&w=={iDT2ZIdZ=|V)XS`cR5l~Q;a^6PEhAMSd$OLE3o)!Oi@$Syj5=+tfn07 zK%#6#qXwx0KwzYxgpCMr?81XK=^iJD#$Yi!et5;98*gSK5VS08>4}z7kg^m4wE~Yv zkCJfn=OEMJb=;%j_kj@d=QO!`PGslaV&*EYY{l@|Acoo3cAE*?HJ?PeDSlJ4DOGl&N8fO1D&? z#8HpDZ^1w1m~nno!z#qw$B$yT{uzK_ysv~*NVF4IV)e07P|c0v(5RlG7-A91)L3?W z(l15i1YeBW6U>}8CwO;KgtY@PUZj3o(iZG~&GrkjJ?_x$2GPTIi)$)hc#WNe1dKG$ zLWG%;>X$)u7Y=i=f2#CcgW-Y6f$Ah z{{SyPGT?QQ)x{!9Ep{DL>a#15BbF+d)2mL;o9^8T>9?WaG4ghX6-$&EMJ~XH2hUns zlzf}Zu~Ste8WXt53*8AII0DXDkDz+x6`RM8408m6f?AcYr>U-uXN3z^Qq$1ICU;d( zGa*!Nq@(bHNMU{fkufQlxpNNab9dI-7ixp8U7_k!iO55iBqSCr9E};iafB+&LQ1*C zRFht!qE)=eqoz74ei}4TET!PfA-3#u5t#7)QkA$U3K#*)Ek>Ma#o#&2?2$lQH*n*r z*4(1L=6+YN=2%j;hDd2zfX7iA*B>)W6=bKYPd>{uy1XLglQ06rTY$0CWw8ro3j~l0 zTv*fc+82u^#GE7-2!)Mcxdr|)Xgv7{?2iFE`>Ge}F5 zoxII+sSzvy-JoF2N_30j7F3j}&xiwkM>tr-@QPzoIi_bZo7to{Y5FHGRBkUI0kp8! z(|yG9>d#*gy|T&;(?>&7$#YggShTpDSiLnD?8KCyl7S%tYPMuh#oA9XQca1m+ecVg zv!-Fd6HKs$5a=ZZfD|Px_W6>@g-OSb_FE@)B>-55($&?T;6=ZP;;{1PfE4o8)?z=m z@mz8$URbY=zF08~KAS^OQ{mh^kS#(nfJV3D-tnHX|~ z6@snSNOEf6055uTZ27aDak))JP7g@+G}QHAPg&QHyz@d>$s8{_8wpff;yPq2${g6= zi1z;2m=bXKaLW{Quu*DVEtuEXKcj5S2r{ICgrIJuzUX^$(er*F#-3lJ#1@e;878Yt zt2Fp{__tS;BABBrOS?ulP)&#fLQTzFPn+IKD_V+<=~JlRH*#~=j2SXijmgL)5;w&F zBbcG50l+?%r-(esi&A)Nf*_h$=fsT5ElV>FgNZUh6s!omveS@BI+J@?ac!N9n=fa& z5&;RwR*4ybem+JkI1DBn!o8II#9>XekrI6r~YnDm%3;t+fCU`3Re9VTbA5Bn1@xKmcv1&W5DY@U7xE zGFMa1m^CcD8aJn>o}x$;-lwRFL{SY2h{F{rww54R@K0&>v0B8rei3gEgc?%73+Hq1 zQ8<%@K?x3`P3nC4zI`D^k2k|Y=0=biI;htvEi=YJLIAaute}BlMS&Nv;-fBnz@S5m z9pOrom=rvJh<&r=&BaJFXCN~hfM^>pU|e&HW0yIOuNIf!>Y)uhICIobS#qMPe85JF zW1&cHWCOj;wByir9@$jg$!i;;SP64uyLWn2dFE>ivAAO_t92~ou*f})h#WM2u&d8J z$B9c*9tVQeK@Acl5>?dFNFC}kD&8{cZyUv`%&JG28?Crq+AXs*Pww#efQ*^jQE{g( z7N{Eyg~d)Rls#RTWZd1`EqXv#q>R(k8cAfDL7(E4oSvk+%u?rPkdiH-xgR83tK1V) zIcl1}63=+DH;8jh>I}5>OKEE(K(BXb zkhP3Jo0UK`$~3qd4LG^%JWSCe`@6-1Zx@s!8~{atu*>P`ZXDs&z1}IVqG($@kCt}UD7zOEzlogSmzYVb z*yW>!I*g*bp+u3xF#xmm2;2rb>FI0O9W>b6h8S|`Q<{zDt!z4v=UB2%AxZ$3B#LN0 zThh=%wO$%o-Zxy)2xV5!W>VEln%-bRAmwXYPbu4pu?6t!64Xgz;^pn`DE8$@6=*XN zF(JSXFQvdDnO4-w(R^3U@f^30$$0H8CKj@23C?GTXh^pHQLwg~aZ;F)fVE9wa_r6I zNqc>wlZuce;)<9851xsiwY|IXa zjxZ9HI%s000zd$gTv7GYI%o$bH5i8giNUcNkTzugn&+YHfKwMBe1$5L?+?bR-(1L>lB7RM~30kvqdw< zQ8i^-bU+eB%F{W_#dQY$rv9e)O36qe$abI&QJuQIUKit1 zg0sHBvvi;W`LMHbY|-&5XehZFa}=v6pB_q>%x6AW(&&MgP)dTJj@Gf^DV8PSivhdd z_(2+q5c%>Nmudi0FELQ`C;96Vq{8c^#?V)ek=?(UC?=ddLneD-?)L*22Sj)qhMo3v0kKqN0u^@IX z2Cdv^Z*Bk*rbKgw5 z!wW+2YIJ+pgM0Uck{3KFM#Lz&rTCseQun+Gh*xq7g&e&DUtIY&yG9)8j^X^lUZ1k2 zkYS(-XrX(mK}Ch$nwr{xFB%|bwcP4S;jTXrm6XUz)F=S}kQmd4PubxN++bNLqq{pj zpGwh-+TxcdcP%V1QdZ)1K~jjx9A>4S=#=zC$x$H7sQbstPK1GD!MijG2?lW?2B4eO zxpe)bsY(e2RH!64<)|&2aM8>?wI&}^hV_x+dUU}QxP>*EH{;=WE0N+0CXarln z4)|?b<9;oT(O_7OTCXp1S2goRMLJPVxP`nYJY0W$zuCvT<0#Ky&{9(Ba(X{CulwQvs}& zmzm(74mB0nbm;QZ;}tH?B?coyPaQ;*QpbP8(qe-!y_Vl8He}^Y#5VC#R(vi^LEw1g z-l9DFXyImT>|P@UH~~8eHBx3UW4@BaKDDpG3?3ulZ5}TkKS+?J1~pF&L^4PCQn5hz z#&zx0m6@zTAo`J~TVn`ituuuIqY82K|ozsJhZY`_gzeI(mgtXLQpAoygjl_iz|A5)^CNiv!9 zM#C_W4P~z_0>3iE-6h#&p1?2$u1pNFHF-&uay#@N{UFo z5vR2~FAp|qF`!}4g%W0#0JdQ8$*r7Ch}gKPn0ZsMpw90S3XqaYl1Qkfn~1-sY4Ru7 zR~F>2v9E}}H+bEI;vB8dw7jh*H{rJ}%{naf7&a$};dIz$Esj#h8q`x%)zCV8J|8d= z(}ycC%o~pj$NvCbh9mlgf$Xlx#7durojnqiKm@XuyyNFDIP$zPaxXJiQqaXuNnaG=c`3pkwktv~*_JwnC4MD}yIp`P*CYTN zkEHRP!Z7P%JLSIc(M-jLTrKAn3>G9Ao16Q|Ndd{DS^Tta8pT`S-y?GuHsg499@v&4 zNrrPJY&^Trd_tn0nx_!O8R#fxYE^KrNlhwQg_(1CwI=4b`W4B-%*D)h4nvBw6GGH# zk!Ewy{9YzhgzuCfs5N&(`L{N!WmbaNr+|33AamXu$ynYe9w{an%-Dt#j!y`yo0qUt zO48EIxPi*e2l%AQvjV9h8IAA4>67Q266S6wrCubE?n4^umc2_rYTE$FEiRxDyckuD zU!M?fc881??759pV=~JgEr3@?Mqql{Xltq>f;y=KO+_*o%DA$~(#C|6h1iP{c&=jh znh}Rcn<$%9)Ox)isN)L1*95Sw>3i9_obY-vR3CqvR+H3~Yk&2mA zrPN%84jzP9o;0mN%*PnB7Rs*7I$=Vlc4dz%7Eqb5V64Qgwj`0MCx<=k$!d9E67(bz zMcK0y_w%$AOH`m6!bK?H@MdN_dd1t}=Q!e0%OxHsC&bg!#T0PXR1+;qsR0r)Wi0YW z2b4P#eec73E;ee4M8NLE=I76-_`IgS-cXy7%J zVZLuaVNF&N~3+4XR;=pGQMPSH2wj9rxL!kl)_#>tr^ z;N}nkPVh-BdeO#NP-z_@6R^`2-8lf!&Dd$v_YV?jDt~OjEO?a*P+|q@`mswWa#Tv) zIaJ1VSFk#1Z%cv2pAMBT4unsbp7(S(Ebq+K$<)xC?+oOu&7|SGcR9b<(f$)F`7IF5HvMh#+3O4C>PI3BqUwurDZTl zG605Ku(kN7V>S%An^f%lI)df7Dki(EQXCwpLuJC1uulG)Q{=2{v3RX$=_#MsaY`SsVXTsGOR}8o--`fZ&TJ;CU&tCFl!T`QJ}CE;iqf+ zGdOH4CeOmB!WSehO{ywD}U0C-O0jsyJ_uAeAM^Kk&0ZTOgq6U-APGE zP#`fBYcuCZKepeGm}eq*b5-KMiMWkD1`C4AiB(~ga>S?B$ch1FE86$TTB!ld;jr>3$f ziEQL`rBX%BPaU);ZQZhflA=4n1CpolgKKqe5$pROXJ9)Y*~Q69QzCS{8u!<_5=lxF zuhgqncYBB!4mz;BIvMYlGt(AwKVVsXS_&LL`+%2&}w zW-JKh?H83KH3=MW(NI!QM6KkC7~_g08fX$Q6dMg}KD<9noH|2FLK4A&N>C^>1OQtx zlvb69#LjtY#4c&5Vzn#Nc#F}$h)nTg#a>GAXO?RDqr`4urNS`SqJM{oxHb5k%C~Av zE|THrpQ~gnpny%m*l-pvYT>qIxr?6O5O-W&g|fa>;_%;Lc57(u{9L>?7E+cHpp~#J zY95DywR6fpo?o>`+XI?@(D?lw6%8#q=HFU&L$J6m&S51^#V2IOqc|9o< zXDKj-hIJ^^=A#pqqH0*w{m_kwT(|RN2eG(6PAfQ2P_h9c`O(|w?9f)-d4*~UQ3@{3 zX?)$D)IVsl8m(bf25gl9Lk1pJ`CM3mYm01eYj)v)pSrI{6l(F)`6endu$$_r1>UUo zuxoWZ9gI72mozgsK3HhmopKm-0QCs&%^)= z6Zg5bZ27YcqOmh(sUUz{HGP{+U*li?5O}A6W0Jou*J4zZ7>*TDEiD2(p(C$Ugdu^X ze6a~ZA9)qaUf|z`8#igooS)P8gM9;Zg3m#x3TjSILltee*<5*-`s^%{w1!%g*Qqtu zgUCf&_JP8&3NCKMF)83wj~0fT;b)8vn@1XmRK(ZO4YbN~ojYh1?NrW0!lbMemo(>{ zc^gBn$W98C-Qp#!Gf+Sv5(R^bbG37N);VRyY*Ltk8p#~-nS_jjISV)nBr;trZvx79+l@6ji-T9 zNlM1*!|ydKrnb_a;``;^a!e}*#N&Rn5Xn%AvssKYyHgR+%C=^ecP()Y3#2wlnCeQItNFNU%kjEigHLY84&ss%4&vl;@OVTZw-Z@(_{722G*K3ca z`f!GH-Q_5gy>@)BTG9FSi#EtW697Q*B!EaZ6n#9j>l95~64hbY%_Tf$qNL#UlEnkx zr1R5|Vd-B(DlOXJUft|?Q8{1|%nQHn<4ZPLmZzfZ`RS34!Wqg^0V#dbQ@je(Q?0Y| zd-69lVz`A)4PS>!;73he6<}_ar8OiZA~_j=$WFPDY%VrDD#n#flt@v1 zjqkx}CQb%Xb7W>~Q+5{1E^P)(68Em-FFWzo-L7d^SMYNYnl5(2m#ZT~ELHC#l>#X8 zP_w{_Yz5qJVRk#-`~x)i%%^%-^XqO#)y;^(ZpvK1Kv#McQdkpE)Fz_5sd|{LFg!Ut zLGiNz!f0t(1f0oPHX)n_0y;NpiiwCGZj%)j2TlHh$wFr0(Ih1|YJlW8&cACmv0v>z zDD2IXj#`S2@)lE4z?o|o$cyXNKB~vdvGrDBp==}gbYL;7vDi+#nxU4 z5`aPf01(Uo4dl;%PBi%E6|}!qHe&aQ-cc?|b3n{;~i=0n~a8 z{dg$|mWog?(zoit{?Qb3>~y7xdimCw8FKw>RfuSQ2dDrS5`4N}Omi1%(D|-jNQHx>#{Ju;!McT$C$3 zG~}_3T#~Ia$9$qzTdPP0e7;g`rwuT(2qDx+YZ6+AOMZI5`%o!ZH6_VOVx;d-sV>Be z5-bnYBEX=MNzs-_-*TZAxU#N3Tkl@x8L>Bvdi2 z^%_vrAD4Ke6!TMvp;wrSb)AR>SudxUoe9(B-`|Em+ge<;Z9zuonA0w?P@9O|oRPgp z$=-xzbFQB7smwTvP}5C85|JZ3b5zdOZ@FvbfH1w76LVrTHuotuob@0SfB+N(P`5LF zZbor$*qDH&hp43wAUaav`DFDk$28MSva&0H<<)e{0^BPA2A8lTkLSfwW+4O};>7;| zAY@0&lOBWoFGjtCIHyO0T%;7^xFEK zDjR-A`qZWuyK#KmJow(x?Y)J>o%BlzP!t=kSb_#m$CtEmq%}1(T}fh=WN?74LP0_a z11k$y+d-|s+jGTHD>BLxVkvvrxo?f6dnP3!YC=d1);98Q-;`gRkBt7+!D-~0Qe~qO z!!t^AuusGY{xNfY_d0K(;>U!T46xYO0^8HSh7@ z>;eIkDriblwI_Ix0M6uwB%Xh@LyOc1->A8xs9Jc@hF>W;RF(rlVo4+N*l@OPcDVV^ z_lqQisEVkX26Mu<^B_L39|QaBRc|7*Ah|Xhi(H*PUo-8zQh`dzazP-0l``Ni-uXn6 zT_Ay%<3MWqY3TPd^&A3z?k=HXFKplg>H6P>A${O)f~4E`&x8n%s8=t8@6s`zcW#;3 z7{;BAfCA$B=sVwTB3NKXhf`miUXj$V_f>13Ve^=Q6CBFK_r9M)z%x`%^-c9Ux6deH zC+h94kge9B~6c-~e zo^h_F$czHR_<=sV>O1XkmcHC=&Zo@BU*N7mj+g2nG=@fI%lK9>K-Y480pH*C;{h%l zo9p|)L+d_yn}Ox+mXR$CZ}@`=0nZUV97vI#lg5AKWwz0 z4^RLK+TOaJ{@?5L)6D?tdlfOwRdiOA|o$9(r4wTJXj`pEsp?4r z$C6eEimYs)`RoDISes}x-1g(SDBLb+I=7!)M?9k8v*t9Ug@IlH%M9s%e>lxfLREka zwg)e30if@#ho-mSiKK3CCX^-Fv%NomSTbP>50O8c{yz-`sHAf>D7s`axNMd$V533} z_1uq`;Ate47dNF`wa?lW&bP`|{{TNR(%v0SNRUlZK$fQqh3aVp(XGG+Hhh;~HLlh@ zu5ImP!5-*ukO(iUSl=%!#dvv-YSBG&RVe_0F+qr50jnxlER344IgP*s0D5}*ZS%Ifodj7fDs8XNp1a=NtGD0h2&C((@f=2WpAf5_ zu(8a|P|rIt-t0*wj@puMsJXWl>9f?Usa%OQ<^gV9c}3!8DJc|6LD3@V;u{XOPQhT3s#zY2e$0f)oo9V20KunS_xV_En zbp%^W9YI`SaiAeT@G%arA{i5wD{gK(M}X4${)?U-`yP-X-AkOzc+)U)MaK0in`$T+01 z($-i_0^+xA8|&@Ftd_QHPmDY==4pwcA?~Z^NUASuCL6C=P5s!Yigi0VN?< z{{WE{(x*YqvV%BDig+;T=bkwvY8tvGQDgAtpxG(kVk!o?Y0iM&!(I-M5TX=GaaTQG z`Q~i^PbG*mlvDD}La?Z(r=`Sj`m#?}GWu1~I_^pj;WzJ~ z--k#t=Sv`H)Nfq;gId;vYLhxamx^@&l^0?_p`+hUnP&(!SbEUcVlht<6-i2I;GB)` zeF6UfxOOJS+xIHwNkSHMBlA8pQ!RkeS#1A;_m?SQ+O(Y5g(C9(X{Jk%~t%>#H(87rl z$R?==&^7-6mgycThyW^J%Xr<|{(gOF3>5ciBIrgTPbj{&_Sk}WX*pq1RsaHp=+&jOcGp;rQipty z133=d$HqBFGV@JA!*On4R^AzK>eY;!#A)1oC0hnNWZzA=^IffqOu35;*Qo%X@@_wv z^=*QHscBYWoR{ZH)bQjqjydKxcyZiGY~lzHy(5RR`({`TYx|t_6*!C-n#n3 zPVEL+Ak-QcH*uhDe)$5OSDB(k7DB;_fnl3ZF_^js1djTLJpO#W8Q_4ipDJ76h}M>IWhFtq>`uef4!~(* zf0q*!CQ?Z#NnizrRI884^R6J0?n(GyZB#8%@j|h%xfiwdAI#tDYw$Fw$Xd%KH#8|1 zu0U${iO?O~1I&E+>pGT|RA!bksMjR=Z?6lcH7E};c5QOu2f&yrCZly|*_G6W42)HSD9domVh9=w8-bu8 z9wifISttNmssm?0+VS8hVkxrl^FuC4P`8O7w?g#w^f1qZRbnBPps1DMX`qgz5?OOI z+_4w7Vs3MOB6Yuh4a22ssBmd*UYv5(uM1}EyfWW%LQ>%W0DupbST_wm)?&9ZPm0f1 zhE=^3H0eu4I>}D6!&6kYYKKx7=79m$Q>y7^96ClCa!4z&0Jg3??QKu0JSSu}ekXst zl(`dk)TF5{lI2CKN(+O_FwqO1V54NDHGMUxs-=0Pfmka=DBmyyd06XWEp5lHv7OQo z0*D8Yp*}^65pKFWI22&;-=s>33_vUK9u*{zSY&#Lu96x760_CG9IZH(by&iPql{Xd z#6TI#k*GHZZ&Sj#sFt8u4?<4{)6U*i-H>t8@#{!V^q`~1Gp=6VfW-)vWJy701lWUr zGTXSmyXpw~9c-d*8d`~<4{x*Zzn2KO;xKZj;btk`X6e3F7SHWg)t&I_HJYv`c*?9= z$89tB%74ra?c4$KzX);CR)APFD8nkXg>~yl@?O(PnTATPZ%5R63;R&PDPe}2;!>rA zY~u9F2ntCcfD~za+tBOZgkY>F(aERhkhX2<9$vXKaVjh;yw78OTi=61MHVV)E2VS{ zQ>)f6l1UORz(6}GJE+rLu1^;|i?nCqnG0}|zzm$Vv*)8)<{sj95X529$pu~7UBD#J zQqPlc@)2P2?={2LmYQQ|W^pAul0>xf>P%S$tr^zn00+>M$D-gdDOn3um99sTBvI~P zEnX;lU$WSVa?Hd_2~cw3AQIp96}6n-&K9|*hL%iHTBsj18E*ss0Mrk;>qaz1xi&T$ zds~RH^1yWfkPnL0t#rsyz8k+{G3${d^w@_5E}k?kT7#AK;SBtTR3H^}v74ntqCiH& z*4NthH}%tfc;^7NEJ-)Lu5VcP-G#N~874v$cZeeSlJqpt=VuqXH!~R18pJ{B5RyyL z1e2))O?DsbHL&6gU(_@tm-G2%<5=^a(Wy$>3vx&*b|js0u1EN*vG`t5`RA3Sk<FC@t>Q%07@##8|X)4uDaYF{_2q~X3n0~B2WxkhMMc0Bga@v#7a{N%~2L|c#=L4GLA3s z@Vy>AkIgcM_&MuhSq-wO&i1!uBj_~tkgdu5=zPmQLbg8r5@jbLH%w%pFSE(K_#vqU0;>y)(4UX^@C{K{{S6g zqvje|Q;?ukaga&&tHUiWS zpFGV!QnDP^7yH3$i`wK|T#MWJ{(_r{LEbD#)r$&wT8=BiFH$CjAtv0;y6`#FdzgcB z+@DYO;dC4-0n`Zmiy_=!<~x2}{e}JY;&2!bS~YzmaXM%QRREPGb+J2<`P%-!Ex3_# z%(R0-2qlLn;viXn?jC2Be!6vy6v4!XK_EYR1cQ44rrosfZXis+PGGxyKHYf4(=0vm z`S^<`4|Pg-+2l|Pv)mgK)VKuN_dWeDdue_N5=_DW04J*u`f=k6yZ2LO>Yah!_ z2VPx%&_Mv)1I$3lt7>U7R7EPsf8aVSgJGFPl#l(u*jtGus%AvkHF9ozk2-LOCP^&eG)p1M5*Im|SlIp|Nz1MHkbiUP zVjJAOj$fT)gh?`1!7Lw6h5j?^osq~@wGqf)L-6R4^vJ(X37DyN2TK5NW4Cjryhy{O zZ|;_IY6%AKm2>sVI>gFM{n5HI7Uh^9xyVJKh1bzgVkkO}^>RqrykTi>ksLLBl3NBU( z4r^V8fO>ZJzMM|OkeWTUqh9?w=V;>#EP_cc#NN4_+tbuW6u`|CQ>}Z-dLg8HobPto z6Jo;lzkimT0tV@+3}`iae7qW!xneVR)wT8cdpnn^BUMP}r&TE#Z05p32))>g5L-*@ zxjy#kcy}5SANV!n>!o2(4rni+%F*Ixnvr+BASXntTe;V1%cB?vj;cp`v*0J z;#1PP80TYq31hLnfU#xy{XKNQ5UB;T&c}vhPn3F`t$f~g!gz9or z&@vm}T+BwGixX|nZ+;+oV?S%XX|A;Of>S6_vjV^aZz_Im3l%krE1_6rHcDrEWcd}j zw_$C4fVj1|!l`$6>#tn7=cStAkU#_y)vKNt1pMM+HXn&j^Q?|iMM+A56LguW$tHE0 zLRiML3#Ie~-otJoGU{2G&zH?~9T|o9N(w$E$mC8#ry&=OS3PpQXC}qT@!=JiP8kJk z@<&*;X15ZgsANeYSjLGq9P6-~c}kl@mkFHT3X`M3XdWBD$j9{YJ5OX)Z`sYqhU!ZNv(bE$j#)jq-+-&x=Pg z)=RR99L@gUI7H|%YKEvYtxT&>jLiAVI61GGZcW(;Ic#n+jgK5F3XmuOdoTbK(%dZm zu_z>1koRKH>4kGyq*5FTd5ftqCz}nZL%Wndcqi|c!5Hi~333Q0g^qW&pE$g700qDR zn~)g!!$NaqG_Is8!76JtIe|=5CGX`qthe7`z3s;mWT}lw5BJUNa`mir-JrSNA=<}_ znpf~R!)+%v&C!NjE}%n^u8&UHSc81j)et$m1NcUS8{BEM@|7_wV5JTl#qWL~RmlD{ zWXrqTGQ`vOb4=|@7Mwqw>Z%IM6A0#t{{Rxv4wQmL{4umz0JpF$YaLC9+tGGJj4moz z64naXJ_%_ zgWal9fU#;PEQc)mnnL|uED^g$3Y^NshFgP^CSaiNmtp}r9yE=exUyEj?tqZY9A;QG zK+HWKNShP2KMDw|}8+!t%uk8V9XvdWjVuyeK^Ex)`Jge^c7C%jN%l3b4nU_lJ!=@fmbh*Z2s z>d{1k2}q)7`2qtuzO3cq>g5i3!Flrn!}*5`Adf*C`jFK#=B8zM-!t~3QxnW3` z;vHP@HyO7Y-Yhr{*!I7(=f2rJq1w1`hG|lo}!3}8(1^qH&zI)LC>#9LBjpn{X#q!$C}OY5LLHKcEDe^UE#+B`AB z?Y`9QTuvCIkJBp^i84qbnNrm>ppplP!<^up`C2wM8kROX+WTKIxd0u>1nb`SVJNMw zo!PX~-dtnP7NViJloAOfsFEGs>#6INU5sDfX6$58RpV6@bgMNC)s$2dJvBc9!oYK;jv1Jkhh-EWWW%v)Ab~ZQ6 zvEcO47$bS=t7V3s2<@Db6_YJ6%(>q7vWx5nz186mN{A$uCiSDeGv@wbquDl=*p($9 zqLV-r12(f!vjaG;JRh&8sOCO+psK>Lcrm7)p0d9X#vo{Y zn8`W@*MhOG5))v;g3irhN8{GfUF^;zPuh5?ljJU1_jiQhycAMq5*b6qORyo1P^tE# z!fGSIF#c%3&01p^ZA5WbO^3OSp9m&Lc&b9kpoVf)S%I+B0e%_mKoq2f0HM4C5D4-% z6r_32^}A%R9e|gL*{U*>g)6*Nr4%Y=>Oah&f}rKtlUVtGjq{!*h$OWYvQ!ZT9JKWC zt29Z_X%9}GWkRVUpbMEuWh}Pv&;O)0J{{YG7y6~OS0ZH8=fIFp!@9BR2oow7B{?Xwj;&*pD$z@3(DJt<7aLrrQ z?&po6;%LGLi1pPJv~=OH$r>4F6w$*aMQoC_WYrNQYLTxa9d%ZJKEauX4z82rEkqUpt+}n zF*l_&&wzOF{{ZSP)x_=GEZvVLPkf|Jn2-?e576{_xFPSY-VkQO>SLv8DkGK}gFD8- zlla4s-z%_d`uFq}nR`Z3ND|akp+WvZ`j)5PQt|VK*zE2*XQc|6hg_19`e!B~y#2I>& z@l4?)f->MRyzwZJ8CYz@0U{k3C=4{W63vl^#vw9Rgf3c@MJWketcEuQ-Ka0aNVXqn zHrHl$rXLZ2#?Qda!pue@aF;%8l9@r+lPyUgz4*d55sS&p+{;IbSJH>Vd_P*=TWTpI zclf+Qq6UVy5Dg|#{uYg5$hjR@fI&JQJZfKJX3aZ87=o|XOU7bO4Iq$C?80S%pklxa zWY&+^tWW;{9h*C5?4HH;Cmo8FirCogg|YD4W_-e#icfiiK*Xs^Q6=}&RT}2*L~X)a zIVl6v&n%Ec^HYgkFH~futeT#cCW*p;MKU2`LDU}FaqRmT%o{%oCV6@C<)ITva(9xD z6p~%dMFv+aYafyy)XY}Q#&)~3TT5lED+!I-nCw;*iy1Sq6BjIoVN|GC0MYj6{t`T= zB|k6tzt0s2hMIgriw#F>2?AhrGUBqcur~KWmP+udS)8npKKAS)-OXr0L1jGAT#t+!JC!@$#%hj69-=jHJs*PDC(pn1HNA!cvzBV=$K89unt;o39}Kss6$q0rPGX&OGT~%4^D4-92p7 z*a+ncYCJBA2a-u1LyObEQ7Wisb|AEh%@emw5o-f>M&H_U<^-9lSOvUFQ5OQPNXz92 zu+Q7uZwRE!M$nrfC8&iiUmx)!E8p!DNBk;&z!e|-{5ki>{{R*_UJ1Dez^W?O@S$-k zXyn5&zH_XONh8F?Jj%!;<@y3C)Rbfuv5AG7&L-`rYkS-*i~<%!*`Os`q<~bU3OaQn z#*7YPw(iMb#v==k+f&wNsVJDWEnXtIfk2vJ;saITc-e%0%vXB5!qlP$aDmGRV5M?NpO5X$; zRVAz~rh% zD&ti+Ei*Wh<~ZhxJn=S!2P7SJs_d<=GidD@k`?~|GBc-$hIXjFt!+eEaTq0F(IkRj z!d$yp79;1Gjti2Q#H}Cj)2K^dFwGJKxH}R8=)<<%uj@Euw6v!*rL`2y`L<=*?GPHN zC7IauC(o(8E^|*Y(@BFrF0@9MtxHPHQ3P*lM~%L8#V$Yt}V2pH_^Pffmi^) zc%b5z0jop9hanX_el~F0^1vr`2tjA175Dano+a`{HW}eRguMR%1zhP@%(Xa8p4G2+djau50b>IS@3REq>a$Ut3ap#*vl23NEm9woi z1U*hnLz`F6gbVRDsK15SR7DuHtQZ#uHh6IdQ0;w0nLq@Cakkssv5MW;@~9l7c(Xnh zy(|M}YB)uHN;ff+<^sSK5Ctern10;MQgoz>DpxlJ>7?FDcA!P?GPZ` zSb)CgzX$AJ{{T2)@&uvAM!D;)bb@x2&E1^0soX4G&4mTekvSU0bK(RA=ciSKJitP- zN*Ios*amCv3D)OwcfSO7g$<4uXK)&qHE*7VD#}R2;iZ)%Cw07Apb|j4iq(nywFkun zQ5tGURf{}1-a<(Pl@}nBa-{0EHrm$V5*Ec}%^sJvc<_Ag_KO}6qFkvm&|Hw0O<9|T z-%EA7Hzbya6t9e{F!&0Rq}+f^4dzj>H`d@^ZY>)C?vQJyzX|7ntX3m<1&~(Tz#9=~vC_1G_CZ$oslKMw z;|CU6h|Db31w2&le|DRxneHNTj7UOw`R;xYX)`(rp`0V ziJ^Tg?oY%cs>QIf$dFYgBTB86vI!hWp@{;(<~JvM-0ACa+4z#FKnGwNo5jSg##tB`t*7|HM#ghvy(hVv( zoV{!6V$Cozn?d(6C#M)hW>U{^k|_j+MVi2nK?iH=azBw1Bpt%k2BoNY0^dELbtsom zECmZ6GfoFHYUdWb_?$_C;`Bl@(yoUOjSg}EG1Wt;8GNSzhd_A0*4>7uTk%-h7;|4N z+bRm>ow7X9V=#oP^+u^law(NvveaB;HHya;NaN?Oa%5CzhN2}*&2qtWASbzEpaMpu zXmrpIvXqogR$HS-u@2s4{Kl~R30x{dk`je61O@~VZ!Te~GmTWZhr~|Q(p?$EjD=Kw z@;I234QrJo9X23(aPd1#Ohoxk2?1a^C546Um5I`6hWVxFE%mGQ&zzB$T55{OmTG)Ir7J0wo|J=ID7l89G(d}36)$J4 z31Uf3gsG{MRomG4A)AjgR6_@-)Rw=e-$<`9+AdtfWNbQz4l_pt$vZ-7B#kn3?iG}~ zAgKTjq71-D7+l+g_}o?t45E~c1Ye3B@i=jq4&KoNVnqnv{a9EXTPdlTvde zpDvFaFKW$7iy$OD7y)iWG!}FNNP7%kNb!p|8d8%u-sMR|9;;%T$y7ve<@Gnc+%6 zs#L0mxV;Y==U{2#U;IUO8))`Z`jNJ!%E72%aobXS+&X|ECREA0sVo2hU9t>yil>=; zL#&!F`D(War4Z3oD$-P|$rW}Q;quJoT!ft^U`xV5XwAj0IB&JK&ivl%aZ4k@_4KW{ z(mXY*d3{e@-})H^7pl z1cDvt4NvlY*h7x}Dik1tO77d8UK=pXLL`O+nplLi?%e=h&npcjj!WtlNFcVB0QNi> zj6{GLM|Slz6wmqcVO6-I3ziv*b2e>lZZ(ggUto{7J!jab#SzSPG0}4$g8cr}*guTE z8L*CM>u|VaUxwzq0i+EZ<9H8QYoKHwe7#C(*p(_O{i)eFZLza)ICM-M{K+d4_k1dH zk^>ON_Ty&&l77J3gJ653*;AywS=W>wu)x=E$LpC87s`kH!FyS+V3_&5z4z`l0Hd|>fI#C~SxI!Unl+(b>xb@+J_94@}I9K?~GB!Z?j zD+E)Q_;5w+KwVAEKW<|tVeqmr$OR}y;zM|COpRY%AqLu%j6AtXLEQwRsVwiS8)b3_ zK*(MP_^nrp_>baTxT2`1mWq-JJUSc01+aSgD84Hpvl*FCX2=5@<+vNEpMW^*E*#Kr z1UYK8N#~>IXd4}YN9bfu1cFkRBIJj?iGSyX*W+F{Lto&>h|f(U`LGzNqZ0Slt6Z7xd3U!n`TW3mRvhKJ#-wy>A~rmU-2{!{XqLvMaL5(B34ry z!B7#yWyo7Tp^A2ElfI+hhSJ$yDpgNsYjx&5qp%P_W8%)XIu1M-(7+C7tEHf(NoJ~w zlBL!ppm>QBPV1L6QWN|KK-MMCjB#9-;gBugsYoS-n66x`H_V*!{g)L!6g$6GUL$#u!a767m&=PK%IK+XK) zNt;52cy}nQgNuz?yu6_AD|1bECG#Z~KZaG!LMW;u9a=VIF^8Bkuw22|vK+E9>WWUG zcxQyhO2T5h*#F&3f!&N;zqG+nBV^tZdYEb5ySu;rF`HLNR^xc<(z+*}=s44Fz z4fgYY6NOae2?N!Iantgx6;S=FimqFHAf~%IXH(UVM=FnCPaW;8tF!QO%$z|<0EQ|6)Mr;Z z`$l#zvO8~XVgfK|T%|p64nwAn>Y*Tq-pg82KcBz1C)+2Ue%9R6f>9#k_z#ABwM@y% ze5;A#5ww*xtL3W2t0RbXO|AC{A$5dVV;}%{@h!czQH-9X;boM|O$kSYECW>?&;boj zbTRd}V!IJHU`y{dgw*130hm7V3T7Ld&P7_(>lQEkFS!@PDz6rKgPXbEnDE%S!;|Pw z{GrPjg+vj_B+>%ac;z6Fl&!6%Iirf6B`hy=*G?ODB31|WOT=R4B3MBu#F3yhb|B|| zc8bUKYJT6Jg%~^r3UXzv1owatRFX<+MZpHIe9V3Q!EwAlnQ5f1!>Q_8iYa7`+DIBB z7et$vNdn}3EP9w0A#xnwYJth2%m0V-#l>osGKAqOK4JZEiohY^jLH+Y`u zOYq!=%P>7W%SYCIo$SWW?4}(fx+}zPGN&>@TE3m&z#DNfSz)*yMq2vNB&%GZa-7K* zp;F|VsoA%`6`jysXf-dW>Fg=S4aMyllS0q|0ahxh55&0v^ldE-cwq@w8ak5`)UD(i z7bF{kLDfmt#^Zh`!%QJePl#Msn0KsKv0(n3?;YYO^*WsX47GyTl=2CPBn6BW1c92v zVSUZExwo%w4x2GMxd-G)cd>l=en1!?47K=1VcNE5=jG=^)ck?q?=15lhB!Al*TIPl zW(wKfY&JT-xWws9{TdpZu2-c(ph&2pub?E{+#|HrEzptlmU}&~pPkCBS-vP~^Qx1hp+*;@IQixb8K8#Y0ygMhRi1oR_J|O4RwGtf&!z zBr(HNc-EoSRgH;0tfk|WydsGXSk$q~tWP(+oa+`05B~r~;bh__&q8KQnJn(UuHmRF z$6CGOgT)hcs^?)tE3OXh}RO!T0Ezsp4Qx`ig~h zrd*rtc=Wx9nF3-k_^D`}DP9maQbL8O7>+@;qe09c#a?XY7;x$;o@K9*sNs&D3_iV0 zep5V#0Tm3ghLdq&Pj`6Enl}x?@fej9iLcDNIps{+{>B^a9>#2AIAZYfMjLpNLQ)W# zm#R_#qY98mlg6A;t5&9=YQ&2$1FH+9kw}t*sCeX6kr-@4sAbzjz?iH&**nC!V|S*O zYqzE0ZZBc?2~X+5W(5uBDFiSlTXf3##$2V(Snnszj8fs0G__Q`$wyU&R?}3Wl0`GX zDblu|C*Y`ojp9@0kZNvqC?>9AiAbS#=gWzu=~|L4QrcT135lASlNa4g!7KC^~E})wr7!; zon<2A>MlmQ@7Hh=vrn_sU!^E%!YACr$du@o4F~vu)XC`jXmyT}1!^%f1Drj^zz zN!hK76I6v1xo3MgV%~iDKnxCM6*Q48iuJ_jR?{5B$qFL znrXqH++sqBLQn$|8HFlaT66LcUP|Ywsc_R7nkH_n3P~tK8?VfIdvHRh_lsvEsm{5# zwaL~5Opfg~p=YBCdL3z=S(JWlk``4d8wO}3Xw;HOVtmW;U9I_Vz_Zo5NGu4Ys$Trh z+8AuIz4e4Jb%r1ZYH)vg4Ph>Vf_%(X6;Hs_m>HVQE7UGRtFPii-s0Z7juGM})YMxd z$1#(6HT8>PrA$(=rHE6euTVFIa%cNeIOCnUFya`7HB!9DaEjPws)h<>5w;&!I!FtO z*qmPC#78QOxsI0NB*`;EOR0@owdnfi#2ET_vg|fS1u9}whfAo|q5SCCzFI)ec;*Uv zK0=ENmaaMFsg9P3qk}As9JIw{mE^VZtJ_O|2^QjM;K`HXr~oiEw+jQ7kl-hJc5LU3 zNo#0y=)(a9F`yFl1#%z&E>$x?0Dk@X|Du+xDR^&goCJqsx) zNF){jv8D2e^>uMY8I9XBIS%COmGUvmd+ny8_V(X_lm_uE9nEPDuz^aPmL`W<;)DYdPN$hGcqZsd;jm za?!47BD~}V9oj+{%z)?)+-xW%4*5Hd4qBePL*5$Wz&JXLzQ!LSsD%GSdB+fQeistbB7yAT0LeZ%;^-Jp|XgYC>`kB$MH@&7^=CKn4yYEET&B5h|Eb+ z0Xa`_bktvM_*ISGnpUt&D3Z=d(t+p!%lU>oGD4)xNUH{8Q0&fLkEOkyC=O`nDvD&N zYC3L}P-3Y&ISSYONJZ>y2FBv{-%cu6#1KmoI9ojJ@VmJ&>zf)>nW#Wn0FWzsess!^ zy~X&6W)Y|8ab)GZ_b^0N45T`5+v^_ z8^k8}HYWc7E#+!q*bDN$6ipZ7uzHbuLMkmvd@mZ*23< zw|J;d$IHdyw|lZ{pES@4&}i{cb4DpMRW?~#R#RZD0u(9$yA}j95qn*=wYSpi@lzQ} zEZjl2J{>&rwQRXTAb>4kG7Y0-{&#p=$0N!Fdl202EDFsJ6nMy zOdHQqb9}Tv9+c$9e7BUhbI0Y}pD#Fh=3sFnCNl_Tf+T??d)VhAB7#BFEvyG^#@tIa zB~Ep%GA+pZedC>zh(dQ|n(nZzpVhC&IHfs(q?WPb4I)O-M&y8eq#IZrbg&m1-0$4* zrg{sJP&m}(k!$eI?-uRUEw@hTrKwDw!|@QgWJtJ-rG?H@_=THt0Xl94uem4JP9%~T zBpR}R6^xn_Dq9lnD0Slgd0DRQ7By3>aR)4`m|Tqp<6GER-?=35GN_W&<<0|^1melK zu?D|5KkgyxV==3|fIWZ5c$;Rd7f0fYnJXTqcWYC4&J@T zu9y7y(*tlkqI4^C+o-=TT|^0*FpTC~Wyz3Vwr={3KfQF|HIf#lEnKMwNt)md?q=5e zesT;TRZIaTiB$PO2L9H*zNC}ysNGNFtVWiwxVF~x($~J%;|c!Z895E>=a(p07FM+oNZulkO(JAUlcE@zRCb)q?R_!!s~F_4m{Cw{!B~wEZHl{K2uY zneKAxI}(4~e=a(Vi76O#1-ByS`Fi&j{&HTC;z`;4WicwJS^i8doKBHe-Y7PgxWbl;3}Ze9e#%u*DZ zkT@ugwASVsq5?v$n}oTxm$A49U4``bxX|&C(-IRtOAr;|rt=fXIN?eUyho9X1}AcL z`G&Uy%9ukrcIQv$IHpgP-A-5l4;8WvlMIXexz>O@gQYNU&**X8<^Ngsukf# zqq{#`tF7VN0p^MD*=94BN;;EA9Z`UoRL9;dH6(rb zzo=*j6|>|_1f`a%x_~TR&U0%XM@X@$aiJ_f8Ao3%&`A`G(Mp+Qjoot?*#04BJ7@s4 zt;6{k#I2mYDCXl{oqC$W+1ogYVGICBW=LWf@NG{zFnDmH#3O1dK=~4PMP^oO6*o2} z{mSJx-p7AeSb4J60jFCNt5`Q*Hh|>e6(vBDNb?rxE7q?|MpacS0_Kr=g5XH8>y|UG zR9jmDY)|K>9nIV&OiNvjo6)||dL_7U16GXVM>&5GX9cBdx+94o4=-1x8CI}i*w`Cf zC6tmk2iuKFN*poba`pLp0}Am4DVdO~G2{o6xzI&}%Us1(hRn|~ktm~%NGBrgXv&gK zYwB|o>9)H8!OoBrHT$% zOj4twWc)=)V5FwKi5h8Q06SP{2NOC=jnG3ULSuTZ#(M0Mu<8^R9trI&ea1MsNtH9I~!$#78_= zULqub89fRRTya(nF*6JUVUhNX<xQa+!u$K$~39d&HAzY#8bnis%Xw?)(`flv^;Yx^%Wei z@$q#MN_c5%>GDq^<*BBwu?|&+Z4S-a#>8-X<}G7;yr8&ybiJxC(gBc!p0viQryO`1y&t9Kpr+K-xW(oQ!+P6 z9%KPn5;KbizT8+gWb`3Pd__xLM}yyyzZ%jJ?JNrB$W)m)a7{~uhH~T)K*vvpE-YDT zaaJ~2M?Lu|4 z{$aK*OzHCXJEZ`w3|QLPR{sEKqP#%nOiP$~f@pO9`h zq!Zc=rH9$LNwW&FEDai*13tWYJa=_Q7BI{vECQ9+;P8pM5j;RfdP0u$@&ez-A=QrU z{6~*fMij}zBMj95QM03xYnu!5G4q}?8gba^*q7f+se!9paSzuj7`-TFl3GeJsR9A1 zH`on9zT2N}*5bp3TLc2dk^>sE2CL_z>SBwD0F}^HN-o1&b$0$?#+plri6Ea->!tVp z^*mW{%MFzpi~(joyg!&xJPqMNJtxh?1c^g5`<3opLr5r@f=vHW?=mT{ym3^*6^pZCXHX>nf;h`iS%(wC5A}>01`;PntN?;Pi`iV9YyO^ zTyy#9lutIB%}ZLELE{W^Q_Ledh|phKZ*VVrU)yhS!R|s*#E+`f&xC4Gwar-k&;~K( zEL}JyMNrIkHUy6P5-+c<#}G{uCeYhWa@Or%#1j}thk$Mkh}eUuzrVfCm;V54l_pfW znj61gm-7~lxfUnRBf3d6`4oND*B1j}><1jp19zdQY?;2z9bw6La!d1}zqbxe5%E-T z(8U-GRQ2Z5P@>k?dtbNDg_DIvzaP!d$7(Dd6(o&SWim0)TxxXG?XKRQ`h268HDnqC z_BIFhJWZlCy)T=?A1~CkGC*M^-KQ5#!+Kn6axbB=wwyD;&R+GI-@;$-XZglyH5E73 zxwDVFbZ!P=b#;xBuoGT_j}0WFD0a@kux zt~iI|c&hwMg(c=nXA(3^E*(gU3=3ftOiMT!h`9pHcOdKAgjn(8twY)oZHAbV%nJ|* zyRghLH|fp;B^pQ`KAbgHL2Q{rTSB8vMXqgaw6OIGSVE~Vv%M|lU&9AHyxMLf5wqqj znW{?5?trCnAZL?Rs$u$z38J2s6^w~k{mZ;VB-G@At1D@tJ;uGY*M>6ivWO;IDfIxi zr@b#xSgg-9Yg=6pwwzR#v!+R!T_ftH0|z`qWnNTlmkpgK^%CY`<|n%~4%Q=1I{qTImksFD z$oZHS8MP-uPr3KDmLq?goHh|@0F=Kpic;dAyEIv_I0YcOs**!JK{vI7Q}FSnp_Iv$ z94*gY8CJ_QQ!VVQ1&IdN0Nh)#95}+xn=MV^VU|oX_sZ4H;EZ0&!_7%b+Qc&kcJ!{T zTih|9i8!qqNM>kjVw6+N`7E*>zW4!U2Tf1UQ^T={6Oh*}n0iw({JKY*%)!ms*tIf8 zc2-`W;#5e>jXmRj9VK-<%?e7mdq@shpGYQ=5BPOQ?bK}zh`yH`2!c?vaiFu&&zF|D zLl5<3VAdCgTFTm>DCt%J@NdoFJz7X+X(~*uIcB}VAhx8CP3{lt+liEe-6cx6QN2w~ zJhD18V)3UIJJl5xJCaE!jcRC5P7uq=Q!O7h^4(-Y!W!ykI#_DUd-l1|HSMOHGuevW z$H_nVdmP++vpd4=t~>l1rHWBnS3&D-YUVzV@{S=#iQ)Bc0|x2KDl;8k31jmZ9X4id zY)B;OZ+~mRFTKFb05|s9kDGP!$VZOj<;;^hTY!JKpvQyS)+6QPk|Lw1!?}Z-RRQTq ziPTf{{{ZP`sGI(~avylSDq@#}!_Y88S=+!K z`qUhwsrewSK0Q4zTP}V~sHbqKGRR`1X0iY`2fmu>YqS|;J0gQ zYkCWIu-g5#G>P&`rk}}d`3J8)ap>4wQbd$cH~?4+G5c$NEdxlgAoe!=xL&D!(J!lV z;jhZWX;WVLfvpD*I{Il6>EU)VJCXn!18a*Le=nC3%az_UJ#_g~q;6uvQ!8;fMEbgE zS_PSvR69beX11BENYs8V{rsjEJ`GWRcY!W zK@g`zjf;7+Gh7Y#-{tM8;hICx04hUryTyMIGjN))B-B$}-&=9K3&wExk!xW^0-9X1 zM8H^r0Ju^BBVFyij^OA#>^Am}-QbQd?wz{1a1l$9_fPQBZ z1mb5oLRfGO_&QWJd?2ipGS3t(E{J04!i{MnY`waP+hd{Ea88_ObmoCou2#N~0i6!HcaKkG<@1NQv znrUeaW>Vv?6loF3tl^tkBhubYjlB)+w-72=NeZTv0D1oaIYSw91jY&Qy-QP_v*;>e z%a$nxZAZbZognZ}N`#wUe5O@fUqPnY4fvi?f^x2O{QGMiEkawpTxK2Z_xNF#l;N5@ zO0odrD7rH(Q=4?~ zXaz$jnQwM&LC}G>VQYKvQZ|10X^BXu{6bBB4jzyy@t`cRB9sr#%V^{5O)gRBDc-R6}^}?UQFg2PMCt12>_7!Uxlvp^}I4iRwJIbA-g3I zVtbRmr+fClrkWoz`qSgQqrrLI}vDj(A z<%v2zb^N?-Am6A!A10>L&#}v`p%-WEWFfC#TKBZvMKMbQc4T=h4cyGh;X~V|Cq(~Ils}jQ6Y#5M#LEhXn z#HS65OG_XshJw0fS|3ryBcFxB;u1hZsDeoYGC5zV&q#m6xuHLCBN|X{3&Pn_a89W7 zu1i6pCa+((jg|O*E|HFcYMxgDj8se3)~TQjP(^r(Y(WJ@OB$$uLC_Zq^P@!hXfjz zEMLgk;3@cY%tIMY4Z~Bf^OqRl&QkF6o;)w{Zo32J3dX0wxr&;)vzIDrBrSwYQ_e7a zLM((d@J2v{v*s!;GJ-GbIE}fnw%)}`amHTyP*SBZ-UK8A;=9%FcjpyxfX3kFDRNcd zQp&dyz%eD93)})&hk8ZRSK@z)T%j}n0L{J_97dX+%J`lDAEwZzhGs_UASFOxKZkBB za&{KQ#!CYQjZBi}icxEObN&lnHxMP1&XP+zkSn9nuj=oVG2q@lcyo`iiQ5^#YShLm z7ZbzUBwnBzbrStRq}Ve7dtYKl5aN3!w6LJe6A_9-l_PLeq=y!*nDw*3=V;+KSOLG7 zHQhOi*5rzPtJFRj@>Un(HEgDjnJ`H3`Ut6Nnw-`|D{(4nmr%b86ppMxacNGaE=BA( zK{+_ADJYqMoR-eMVdB-!8aKL$V;V9XvGiWa?LNpmBmGWNk_eW{YChmggRScH1@mDX6XQRNxUV{4lTzTd(~K*b zAgo#P$*u0I&x=__b`!oBD7Hz!rL6KT~$M2=eaT_QwyjaE3&Z zJZ>0JIY`qo2Ax_fe+WD!#C%ZZBg?fFRTPvEVf7XB)|kUO#*CR^dkZu($)GEF5lydg z!yI()(tw~`FgGl~6IxaCw0Xy8J1;l1Gs^p;-6dyuh5>;g+dC8I${l&n!`vgozJ0Ey zz?4WZ8Sv8e4C{IpDQ0k_E-9I zv2X<#l7#ok-Ka`I1R57&TpB$YuV+)lxq}P%ELNWp5zUWR*UO04VpA0&nh9iQev@Vy zo>^GgRDgE1jfB!9PEykHmAXTku+`ex=H7xX*sZ0pc5d{HZZ1T%?y`550)To7)LDq7 zc|0mDZ6wqz!oR!)GjHsl z^t?h5jl=G#D`g3S#ETaPh2A+|8L65)YDuB04DTFOF|cEIl^7;#i))%Pa}91u@5Q2A zqcTGzGPeae0Q#Hp;B=3aw%*bG4%^b}kBb zGYXJ66NFpKbvbq<^KP7fhX}`P zUA2NUG4gQIQlMDR2vGol&Abjo7W~mWo_RhMrWnQ#Ls^aDt2lZ+FTuuf^8Wz!ld*l9+4yB`EsctmGIZVL zO$glrso&hA4aBJ0ql8j**iBSZbY!5CCvUzA(29ABvVql*XHheUcew{$_bC`mM)Jxe7fM}Jx`C-+_o%BAo4ZG73Z4o(wa{*xk}eB7 zfG7n%(fuL+0K=D*skw9PNr__6Ndsb>-&M@D@=Fd`UL#OV9XKI;$^IQz$-3Jvwj6u| z{bt6j_Pe^o%U6YI0m&@Ib_T7)G<~W4DcMrd{XW_=Bugf7l|F>{pTKX|&#RKbd4C1u z%4{bS#w%i`=4^8muAt>QC5kGOQkZ2YTNUOg*bBx>bfnB=Jczu~@S$ z5{N{!grx6g0BqH7IdPGt%$8o zSLH?j0Hd3<_X4JjJfd#9Gd6Aw8Q+t|i{gihT#5F4@Y9hz0p;9ctaGiuRH_zOT1cenI+BioT{I()sQW)5D%qG|fmumHO9B1} z03Vs(IQbv77{#X%H42!ishFiHf|XFBZXT}oCJR?!SdWT4#o>o4Jn_n$jm07 zvo_8eRL$Wlc>p2lx(hi5hmWjuN8A1^BDQ`{!LUSvN;tV*t~^5%iB)8&Ze!*QW$EBz z!$ge6p!T>2u;b=F!)+<@cGe|RN|cc~Y*eCu%+{oxa{`ZHPon!#hLWjRe(VJJ5NH4& zPXIYnO1-1w#w&)LGL}iDw_WjCifo9hJv-5@GLa&(H}5)@xEnD$9XR?=2ek$vDF6WB zB8OXXzXun6Xon81^ybHnDPzFvl_H_Us$rw8t&+O3Iy%`Pv=9kkiZ6svTRmz_j`7N} zSz-fGvYTVgVoPp#82t&ZjaSO=f9I505Kn|T4B6;EXjiIX@Szgw9!qa>!v0+C z{6$5D&F*y;*N9hcznCoqkX*fg5N8u*9tCrhN)?a)06acQMv=6UBIsg9Mp67(Cc4~f zZ8pCQWPkMmHU9v0Uc-ogw5fu@kl>xn%a5Tk*!lC-p^*(^}rO>-XUCVcH+<;Bx-}@`xN*CAqWo7Sa>> z3Tl<-JYY!7^tmxf>SLByc#Be;$XYcd62*bk5^uuXbdquNTo4M07opxJg55mf&KYX( z_|^X5A5piPHk6}YE^5knC}`xYuB?so>TY3&SOtKOM z{AP~sIDRjBL955iUh+2*>2$v61&11v*5VqbkcHwsY?VBRhQ^Z#5hAORTxeVxrgeLE z%nkhkC%(K~wt|4z(m_pR0HLj@^wT&61N((b-M`+h?*9O{opXi}B@GkGxz;Fw zAPvAkNIsySTi<>tfBh*$eI;jGIm`oKUbo{HoCqmQmLMddC55c^JTCh4gZ#CKtUUM1 zfe<09#o>x10>seELo>?63uY-H$_d)s8M2A}bcQYBMYOpbGd`4h4cZCe7-BLa!h+VV zDEH#pHFwVSPYx+H3M(|N4Kp>#Br7VL=ufY2=6EA*%>MxBlI70%4(@1vlKdY#m`IFd zl}p281Q~(NZse_79y4TsDh5#C$7^#dsi(yq(vFsyZuKIzeueWY2dk$lF!k})b zXP%dCd|?*cKuo!y0N|(sdgsF+hTmUK7EG8wQHl;5 z#KEsx^=EPE2{s`vYHz86U^{uOYuMW^pq+No+8YzL;9HJXq?0VOgn(GKUxFKTTeOxq;CXl8S=OB%olYx^J(kD90n`B#3oWn4nSa8 ztyUQf^Ls#>Q)a4W4Ogfj)$*~Y7S+M!9bL`%?JqL)o+#crStvp)$)j~5V5BwgW2T_m z#1Y4*U}T_6K~Zu59GF_Re^$-o&9Hko$;3`INZ(a$n6UYJUKObB_72A+HAsQ3O~NIV zlh_aeKRxt3IK!<8P_A?p;%W2U;e_DoXEe_`6ZibY%-20Ie-h|>{`*e)>95Y(@Lcjr zTpAGW4n!LDq(ZQPEl#2;UZ+iUe7z#VsZ-DqqBAr?BETDh7F72l#IJwQY=ae^V!Um< z(F033b%I`&-f;Qy`g6zYDfw zC0K$}Wi6aNH9R?94Z=t&OtwA{lz=h-jEB-aD_cTsWkmFK5Z4z)m!}-^A~%vamOP z{)m~$N$(EuQh+6mn3p4kM+j3h0-Rna5TS@fktSOFE3%ZH29IiuIKoB*Dfy!uT2aOzA`nem0NH1vGEM^TL8H4%)gBaH)SibnQ=fRuzu zE~T}L8n^&4;3)a$0PO9ZBNvXAiPI2-CVD}cM5NV=&;!cV=M|qe@@5}`_=n<0BjNnV zN6#2%BlFKT@^v>mVG8kKyxRvZ;}!T_7c^nXC*Yyx2xyZOq+9uEt0G?7Q2zka=3?;} zfxF^D)b7NR4>xx68oV~zCk-Za=@RAzrc%mMQ$RpB3|I!e@1%45)brETFp@V}bJQt{ zc=9$t%r72b6~%^*poX|2;P9IhB5oRYc5L*o9&P7%uP$1Yr$IHz{(d7HkyJIfI!&j zew;*Cxa`8L2o<5Hm&(K>080j`_m2{JBaft#I-@jYRb7+-$2Ncv2CZ{pxg_dtI#J$8 zI*@$~5QVMM0+t5qX}qRqvp>7j*3Y6Yc>@!577?|41Ln1kx_WKf_2KFX7#b7wzI3By zuOGw|vP8NPC@flx{#-MKT2;x*IJ-WQ3}S;V{h_`6cO>7t6Wo)+r)(s{U-uQRn*3{= zpn0lD38#}+O*GWnjSSF<8^ei+xCa)H6&AI+rLx;=2GnYG)DHYPNk8dGcQ(&aPIt6M zxr1?=Djp4|Bm6vQ#<1Bx8&%6bAO2Z;msVe zi*n=g&N0eZe=Ojq6pxv4HpC}^=__jlkctT9fU*?_D@MjP%(q@S+tOy@@OUYBalE#c z9_lXs_h){w^pF1l4*O@aJ)iAH2X5``a`2OObjfq&giTbjG)h`l0>Dt-N{B8Cy@`&u z@sI6C_G|GQ#kxFxi^Gm^$2?Hw>;oR;oF|xZ)uW-oa0yJ3!u5@XJ4l$7Rt^=ZX$-)t z1X)l5M+x>m0}(EC#1Xo*twCF)q`l3$TVbsbr4{ zN@&9{&0$xh+Ke|4qM(MNSQ?^`)5`w<6Nfw3;p(M{Syp;`$sCq9UZSFb{2=HglZ{zR zD$K(+YcLj}_+m8dx&6Y)N@hz)JF}&wkhFnCq}&5e0`RL-iD9BJQfXzJBM5UfrR&QK zYOOE?5=?Aeg{)YUz3s@Fg|Eb`lSijY{i<2`RPiiInO2?5AcQnokN*3uNN zM8u|{h^~Z|sq6UGI!D3YbEutQmIZ^<+ZQ)3@)Cot+4i%rn%$O50b%%Rxqe` zRYp}N%b){?smCQLR^md+))=SAlq`Zk3p08#`Dp2?&TOaUj$W3sN=fRYofOj31`85RDi^7S zNe))WxDqwc=OdMNKFUe`9y&K=XOJuNmbm zPNxjU==0)HFq!FthN(#nDsQq@co^`VepuAA%IGE!V(l&gSY`zcYio* z@RlAz!MT6L>~F+OE~g*nj4KJlW#lRxkW}G=6P~t`8B-Kjc+^lu9(8dUUZE!UJT1h| zn!WIXQUNT~$Z6`_&EfRk)nah#GNj51B(PCPCX{z#ACbzM#lPY=+1O)#1o&I_pYXz_ zPFv@$ZRWmlqQ!Z00u6;>SX?}*Q%URAQ6_fQN+%*#)s}`NQeqOY0X6|Zx906fwXo0lmHn--E=a;DEAg&T ztHr7C2IU^Le=1@0wNunh0HBK*$Eo2&ntot~6^X0qEHyKeFdFDe5r|yn6yhhPl>4G= zzyK9y-UMW6Tfytv7Q4dxyj4>=S=GNrD8imDVix2vxJZknt}-b0P($a zxW2q{W+@9QOEE4pam-)%$~#gF)D#d|G$xK(q4Umy{(u_7xt?qzAHwmW;IDql{}*5!Tf*3@OUu19-9HD!fC!P%Mk#oO8Hoi!OHop_`jz6VR=#2{yce19 zd~*us3hX-!!E5UIlArc{b|hh6+Emn~8RnyJE=Y`0XrMidfIZJ+6NmtTz6Hqf0btf( z&6aNzoK^>DY|W)DCVat%ma7Sh38I00*K1bSG&PQXkHhLrFABu@lNhX$3R+02rps9x z$2BwpcQi&-YsWQhT;52bHx7eEBWCy+%9xOr4v|;$W;D!yG3whFv@`LT%oZ02o%1ar z3Q!@*3l(;$2_>#sgU1=xVs2~Eu$kqhT3kwOPMV@MRhlZNs57-hQYZ?YIR(};V240B zJ!@Q*Zvf2U#~w`JW^)nm*nB?z8~*^JltjXZAeXIjEE=|@-oaIB}v{1v$k4=Pl zl$4+0aal4^;eH^;NR|*(i*%{Ejx<2hIWfmt{$;*lcKB>eyiB1jOjWwXkQ|oOx$F3% z0ExI6lT=T8E^>)NO?Oafx*zGxwLb~cQ%ggMMOv}4y#;hNHJE!wVQWT8vcxZ&G)xI1 z$nsDjz)s3|RG?(S}sO zOmnS3uBVVoEr@zXLvu|$3#gK2{oIGjEvI`5rI}t3SSP{&_&0r#$jifQxoBq ztrKO~eY2|4b@1=qCn1Oqh4g6wEEt+NuPk z3s5uAUw}MV@rCQzNm+G=RUO!YoxXL6^t{@&tvxLS!!k=ph*iqqkB5euY~|ZM)wB9YnA3*n+6xXkTEq=H{tYUt6|xaEWgrJhsT3rOm$}ltIFW-LsY$VnL0r>^ zhN@b4=2a~9Im9s`u*_~QMfE24_T&9YL2ptX_PqI`4ppg=GR3S6}fH0tR5=wXrw!xZsnGLcuCNBXC`uinENpW2_FyGL}*t zGML%R4=avj-zEsLyaJgSQ>;-s6#*L2#%A)$0lKS|y2y+H7r7S%@UIg!2Cq^boC4YK z^SxrtCk?n#4M?>OIXErA>e=6kyjf=D-h0L&tmXR1R~0`Sgws<>)gKo~P34pCP{h?4 zuF^*fWKh;yYr!}?Xq12o6tDrSzgqg})wqv*?5d?NW?_(40;S0hz<@~yj#l8$YNo%N z1uL>k$(1c6;we>YsG}667+b0sE{;?HKsW7iw-Zg;B5H{4X`ujuJ_DJybcgcQDN0fV z^Qn6a0hfTYC8v@HLDk~&&U|?Rewsh zv2v_J0*%8l&gQP%fB@#y4PEx6@Yb$rUY;IcAP*^OBn)*Mi`)~j7wxXP@f_7}3R(V8 zQ-{FP%Kn$_G@9a3$PAkP-^ivg{iVD;d7*EI<^=$fz)_$Y3+raFxW0rQ*S`a`8P7c6 zmHz-vwzw!rQV2*4SX5oy)bsVo3atA!7!D$1B4&>WRKrZh2{-tPrllZ6t0JK3I03Ac~xe zXMRJ3Bp)1kT{)ho8IKOdR*s_ur^2$h=}Q$tOk^|I8<5Lka!#H7IGckrW%yhZr2*n- zc=|nI(Cj`kb{lngsb-CLur4cG8t8e)={$Gk*)s^J@vv2z%vA`J%xp<42?qPH)DKNK z5?;=p0|g2K&r@30Lr!{W3g-U+PH}T3vT-Q>IgnT%!@dWS7SKRRn_#d8(?G{zxCM-hc3%e#40Xf@}+Jlx+7 zBN?zNNYFL&Ey>eTNY~!m0d6cfeTz11r9LKFNlg+*(ioF`#{f;UgcG|HKMyfm%Rwns zRF)|vg+qO-O4boE*Zsodph8Z-mwj_<2sLLyAtCC~1*M7C(mLUGIHGj--uvrzZ{F&YFd8te}uq0Pz+T ze7v}D2JJPjN|P)fq<|WhP}1#hfvOK09w>0Ci6zbwI7xW|+}(k&3`NT9ZR&jw7458` zl{0g-G|JwQ=sk#ed`=|%k@)X?lBmED+O0q@02pg5Q7{{t(Z1zkU<0! zuDbAsKna!>NX4ql|16o#<5?Fp{T^E*rHE| z!z@vSvWZ?mBufAVfxU&U2AgTa3Am6`x+$-&j72#PkygOrkuMZbqU0*%y=h%@zqyJp z5T=fzX{2^NM|LhqvAOwZK11X;Cxq)IOPEe)n^V_~D;H@g2w<8pXR$w%_JO!f90`x% z>f|abGe|{&$W+?q+JZs7_uy%N?y$31TEj?@XTsSNY>Yp0%R^OxSJKtV84pumM$J29 zSchD+Id!u*QZljBX0o3~s89%*Kv){|HvVr4rc0SG5Q&KJf<>GLa5C$WZ0;hpmkf*c zgASszMNsLG`G!`EkU+98<2p z2fP!4s_R;d*WMTAV&$2Ij-J-FfVZZDw+og|@vp)w77D$HxbiOtC}mj? zW+9%$i`?9TO~A=z_F>3M0xzZQabh*M(}Ia| z^sbPMk|vM~2Q(J5`@!5kY|#OEE|OT48-RAb_0ZT4rx^|K^#C6uQJovtrwAm`tcu|- zSfsCFKgb2W`)_N0d~}bfdii?7eX)jTn{Dcb&f%ym`SW(qR4=0D05(<4r=o%Ny@%`b z;zfNY=5bq+Ni5~vn~xXxBW$q=8ZxQ{l#^gAbtHW|i*NJd7b3-=;UthNf6p7ZujVuY z;j96$BHC?jt=iy{M&xU28}X6W?(H=7f;2ds*mS|eIY}g3>R9C#03Rv1)NiNq;F%M5 z2pM_i=jUDq1)vol3-Wyh+8$~-l|Jp_l&zswZ~!@6XaG9s03H1Y4O5OvKn~V$9kSE- zsbQQ%aGS)I^c=o6U0{VjItku5s^U^iVMCLYvRgn#-kq#Yyhg34>L8N!%!5pw&GP%i zO2Lrq4y^6zuAB{wN?dOfh=1_v<4Y2f!T?TPb@G5lzUNyL*l{v3`_@vQpRWOGz2BJ~ zSR|U1g&insom)UZa?rzv^YraN*j;>vH0p<*V!1gbY+vUNCoi1VC zb5_ZzUqR2!;&sZHM(PQmW-j1-^UsdDWr71dg5*4k(|#<-We+TXtvnDrbyukH?G z>7)B}zHAAB7e1%+JY-#P^4d~rMFr|#JtJ9jaS}LY$~7YAx7PiyzZnxK0tV;?w+$KG zjgJ`u%#v0MxuLixT#XN-#M0>^LUR&Y5N7`Xw{Q=&^&-dHwaDhVbc#OE!<4MG3y=Wk z%r_bhBQd7he6;>tXY&E1GC(HOsq&5Vm2%V0DyZdTtfu?;F1qB)Y`5Ol@_}$IVYZw| zqP|wQAU*oNW+a&`l>**bxO$&nUYqdxrV@)zz>1%VxLXxDN|qKn8xptELv6PvLZ%IV zQ-udMnL!!1}-ShXuLPmkryQi+jLrZ^bK7yt>yfwCyF+?`E@uau2! zcxaCj6?%bdy={EqLS^?wN;;Aa^W)E2Kay29E>_{qNj$BVXEigtTO~O79dpUJ2VV9% za2SwOvPT{SQj}wt?N}u<1jYuY%xXP;Qt=-M#V34Dc7k^i)G`u?EQOF+7^>-X7Yf$V zMU>k7NhMPfNf!q8*E&<+Ifu$jv|tiUuNB>^e2vWru8`G3jpBG@b$Du4ymU2HCaPLh zk<}M4^DvEAC?>+~mgHXga8j{zKw?#s_>_M2xhL+>qHYpQ>4+jica6^CT+)tM9e)jR z61p#i#wzh>g@?pb(-{D_kgA$M zM!`+bYgp_?yj*eW+*;94Qo@G34G)}EFfz%*1rt>Z1I_%Eo1eTpa{Xw0D+z1d%MCi* zl1Z`G++NzBO~K)Y&#a(LX>*lz=?ON59fF9Vcc2>Z=52b{OEV8tmMFT0+VAo|pKX4h zJ}ekwcYl37e5gF4wrEc?r_aPPB$5u0jg_N#kHizH1F$E!wYNMTl}w0BO}t$VK|E9WTV8@n(7a5b-&D!rnVO&idShBF^)xuHxA*iLFv~x zxprha%YbS8dPgX8g#_soX(){%q{OirH4choi~LZir7|>N6P+xcWB3kF!(qpm%#dA5 z@fRmIAD zD!Rs|F=zT)U#|=iJOCU&N7r1s`iRFmn2Q}em(f5cUc=@)ep_#DA~V92!p^|GGvS{i z?-H(ImH{Q6y-3s>m;K{80Es0w{{X9RmfBxkFT{A0;2BqzntXf4rOh*3=)#5RTb_^V zU|&fio-uMRbr;CA_uvH1n5r8$9dmQTEJIS#nt$v*5!12$Eh_bmNzMx~+%?(?DB|;9ACgwP&hRg%E%Uyp>M-MiB zAQ{0R(=k#GOht!E^Q0b{?*d;SZ?3$ALGchnCMSlMLn{gg7gKuxPM6-o+5mo>LA6-S zWQH`!t3vOi+<|A;)aIEc)&`fDYgg?ZgvmdPT3w6)A{T^xd-OH)|UbcNf;=e9yg!;F%MO zO$h?jEm|CpzbNw#)NEwSN|cE;V~`x`MH}0cTCq^f7JS!=7yv$ENbY;+FQLEsjvdII zEVHPaT%VUC$cXa1RvKwn_LP&l^wODGh^w&-(S+D+Gr{JJt>QN-Etq`(2H@C&ZSAid zVzzv|Pl+G`dKc%@Ki(He+k01M;(~X|l9B)lQ7i+|l}6IvVP0bVy)+FaN{+NL3knnxiokv&2qGRv~Z*4Y(=|z+iSGQO9_&W+l={4DLK8z)*re57GSh5wqt@Sz>PD zr;P@dp{+!IdRbm)k>t7uSY#xVlpgo(Ve;FFaQL86xO_|+wXaul^rn}BCGW}ucneg} zdJceoXeUxD)8Z6zu)I*DQz(o8h5*{gWnDuHZ+qXpwBeQ>U@8Q7O#_A%sOCKEVkz5` zLlQ;k=QpiOYJGBO?hgi%qB>4wmZ5ra*5WBwNM`ec1hks6<+;%7f5cDEk67&YdT`3A zAf!>r7rjl53D-QM%eM64`jn&q!9-cC2t8~#zeug|$OJg`d@vV7RgXfl0-6|@f@HDp zdl1K7`W_WxrL1Dqz+H<0$2P4)aHKWEtg8r;6lj`M)0T|!a`JsdEzOddB>+(2a^dcF z>NJ$3c{LV3rq?@aII&25*>83iBSyc@8A2(Dson&+H!q!YFlQBYnxz>H);J>&ljgYw z#A*({yfPLIY@!0NoRZeJ@uS#sfwIub*0{a%8y!F<`dI1deg>SzNhDLmOM&v*4``nc zNvS547Hb;&W#%HN#;`#RT+4i_(gV}kwbtIY*M8euik=_=I+Us5_a8is*9$xeLD;Yt zyVIR{dcf(hs7^(a$Rk;p=Kz!CxVTZS-R^H~xLrO{CMW>iI01TRemB+`$l3}ZjnH~p z!|j*eGNz@bICG|GiyfG-y|)^XeYV#@>9+*RkuF*p!0F44GOl`E<2a?QcVJzHPTG5a zFfx1PRkjMYgb@hA z0#c+%R4&A6p&Q&0>NuR?(gnq|Zgd8ulYF(#1n-us__L^b9vABaD-%iR!OT^DCM)Vl zacgUP3zMe6_TnWW0o;0z~YMn7>!j!q<&^)FPFKt1g^xRu8Nk1im_{PTqeF$qk|TRQz9 zi-u4l!5xMH4+ z(<})h(^ML$nl`$G()?2PHr3iH*^}`~#>~iSkJV5|i1T+P z;#)0}vKN zuo?$E^p7Z3nZZst5IMlSR>{}vzX?EA|Se|h~LcB*Z33t1 zi3G5DS!Rkj?102hcJj7_0#3fSJQ@(HInz4++1ijenYu+oh8DA1k-hch4BWGU2dk*7 zj7cj`D3WQXK0v9up-rqUvEPY=ty?S9^@wrUwnG&Fz#6|zLyb?hV%4mQ2w^k8s?s?` zeF4Y-QRO6Dchnp2uDmjlC`sK@1DGw5sB>>rNi0FOwyK}34H99Mds$+Tge@_vjsKCc>Sai*!Lt25_> z$4X)n1+p`hu~zJC+h4xFI`$%t0eYOYHR)YFs{I&74lA4L_T*1aCnz_ER#8ZU?^PyP zO^c$CTEG)*+a1M*#BFXDg-r@%pdKW1rg=S|t3fH0zyobG8d;%sqP?N2tBDy2dO$(2 z*typJzmWp_+khTn-zovz<^KR;;j%6nyzbEd01Yp6B(_Or$Y;l!{_*Y-lChR|c_OHl zKuo~dg{%nm{{Xi4)3>dE5@rRnXJYg`EW^qfiHs;3nNVNbK7Mhw8D&>sR^&SZZK)vI z`))`k`|!mi?j$+-MrTOanapx7ICJ@TiIK|WIFO?G*8XFzo$c%L(%twbCleeBai<;- zV94aH(F?~MYz}?KZ9DfK`&e-j0CEqJu6&sM=_DDTsU$Iz$}VlL+V=MCrT+leYXX|r z=fnGC9EY(Qd4{7;PxatKbIkFH5uZ=I7LIT%J%*d=KQHITpo9|Uxoi9VytAJfCw;AZ zZ*9Mq84^J#rjS?*=m&l6-+ez$+VPM-DnU4AkxkT8u zDD~x;u6dl`lQDn})B}t3e^0y>rLUDF42}pN!gUuG2HDGjcwt~f!9j=+j7nog9 zB$oMpF6JMhmYzy?iXj}qnE-}HEt)n1sOs10Gk3_~+fYHau}htalt8K(>Xi|gbAEas zMxo>Ic$o@NoEeMg{XIvpc%pns@IIfJ8f;6K5}t<;mD*>eDzGHdMue-R$>ol0!!o1& z+Y?~A@q5^vt)GJ^Ml1XBm!&e;P1}6nAK$I|1t%V6^bAK+Cx6fXA=T2|% z>zO3wTxMKH1jR)%{3S~y_-Vx9SqTYAR};ky#ZTf8$hn^EKqmZp*2u(mcWMOAbP1-a zMAW5W&jmQl>N&#UGiYGR{W|6$jS3c|kk?`ef0l(wd|mN2I)s{D&)hP6Ccoms`> zqFd&Aaq)&m=-d@mF8vj-4R8+@Z~j@>7?Dgow1r%vS`rJ8Y>)*@5On0w1}`6q#Xo;C zV%MzMi&}#k08~j~QF=LOwJ_hbH;R*C@L|y6)KvzRda}s$H07lVG-gQ15(B=Vk3+EH zc^!l7!E&Oc)#$3_lM9_9vxvZ^dd$TVR`fL97tMhUz|h(s`FHJU<4q+LI1sPEYA}&M zRVnLm2r30E#je0a%oVzt6nwsulii(*kTutz}H3$n6$aBjiS;{1n=^h6Vr5BhINgxtP zOPU9(GqYH5t6TOL^=E19?Zip_GEx8@31~?zM=S+R9Gl)KK6?9E(c%frkxj|+ik@M| z#yd4~Rg)w$6>w?k(1LO!u|)%L1@FSa{U5VE01yNIILDlAO{ul^)-hPTMm}muSyt<*oz!(H&4nz`zgN%Hm2v|G7BAPer0Q43 z*%$EJ$PIu{MXzmbdkzX$W8@*XX38oSB_N+NGUMdcg_wkGY069OImnU#1SM-qNCCc- zkoi8eB**M8nK?RIlul%#=5QcK+IU~;*Yx+Y`xk0saLB^!&7<9?2Qp-~3QFXnY7IaQ-H=1Oio7LrhuRyL`HrP0 z!~6vB@&}-aqok|mYRcYWuB4|Eb$o&3h9f^*bs0i1wt$ru;_ZU$PRfv!nakd46H2ho zyeS?nwmU)E9l0>#u~^cDAw-a!;F3Wu0~P>1+sW#ajQyp2RmH?~=6+AXsgS9OFs@U> zV|apSoffHzMqG*lp#(C802_`SVf#C=60Ou>d*fr_O0*yGI`OS_g(qrlJVJZ9+glMX zS_2lEu$Hm1hcj&Qir&A)uM)BOXNMK%o?x0h%tUcb9ThnWN~tkZ1WSdm8XTibfH-WN z2G7C)-QW^}z&CV^weXL7^nfudn=vIbaT8~wBQj*kiB}!fl?soI3+Wyuj8;by)#5mo zB~vsRRk0abqGl-Ih?L24k;a*ds0(p>T=BmB0+OXmLpiLpxa0KGP{%l0z0?K>Kn-A# z=okm57+tJ&%+@ltHI>PDX5KJBg=JI+k}WNYD`lTuc*VG ze86>NG!jHuzHNr~OAZr+)p(Un$XItUQJO(IP}Emp)m+I7L_^hl z6-9E(Pc+n}V-ChC1-!gh_D;vfCkkegqf&mNbS&iAjR!|LQM+5Vwl8^x!k|l(g=5r- zt58D|P(dQ&AP?F($HwZ&FwX=$e6Eicn;63=F?plqzjr!7+DCV+*jcz9|Y^5Gt7i^t6EeEcN*Dz_xy zZ@AXv~6SOzA1oV^wgC2$1U>-=6V|XsUyTO$BF5t#j#2X*{IhXsiK?; zh@iz{Pl$?HMWqvlVov_4vN0;1EGg|H&NZe&dqmIdR1?A&uIWHwkht z__qhr=I4)nz{o-twFH11kdPXi&IJPsoVhT{o4dS5=~3MvRGgZnjdU+epEFEi_#PD` zIQB1zG!0RU#WV;iSzbyzPSQrorsph+ZkKSRSaBvO8HIr%sd6}E)D4i#(}23O zq@~!mx0$AVVuQpUohs6vl+PeKJhM&&NW#JLfVq_cy@9y{L#_A}1`KkfTI7;IDhx_o zjSV1F>XFIPP>gOs$}=X7{3gcZOM)$>xX39NJiie)8%2-7u5Siq>n}g@WvMJWlT%3s zB=StYs}#n>od(^wJ#@fOv&=Ru?k|&hXOvZTvi|`5sDK)hk}5czD}PE{v{*hey}r%< z0>mL?o$(x6SDf65S*h!s$fWC)&Q@J)1%`kQ3)*k`3?blwulTs-Y@XRgBWI+YxriW; z0W}2G)=g^m>6VO@_IE+k*njWyNYkBl&x~2Nh?r&I zMSuL_pDofX2iP&Tu!-T)#V2=1ags{7^+_^^-fMy zjX=#BFPN^EzWl4{OA9ZDUva5>7&>I*GAsv zD?_F0U1WGuD8@WZ<%X-0;v7S(K^ZqWUWREJA~y2e3wB}bF5h7$QOBctq$pmbRA&6` zMg&qTc)VI?$eZ3RMVwVcu=UCPSZJlrC|j9v70gR2Q8;2qAq)y~-*7M3SbkhV+6jOC z7Ol{x-!`UqrhcXK5WNF*N+|$?x&dssTDkRjH_P!&Rw-38HfW?03*O1p0^>^!G#VYO zY&c6YSpg-O_-k{WUHaw1Js)7t{?Kyv%}wuKpSZBOdzT}r=E8Z_{4CL<$k1e zV^T(zYMB}xuUkPfuB=h6#Myvq}{GrPSMi#!D745-I6o>DI)Y7T)ena*MxN)qSclnEp=2QO}KmF)F~>OO3qnxq^<{6!r|>qN>PAp*^J z4v?|B#zO{GeL&H+*448+T2nDHu`-kp-~|$F3j`5ER0 zuM~OsX|m=Jp-pby!p?eK%uY#NW=ATZ5E9F(3rlM$*Fo5g#Pr``fT?98#3dOAn zAOxf&TBHqlo7T5`RS%!}e-h>3l+n`E)K;W)dD0H7(L`$k)I3!*>ZVkZiJYX)Jb}@e z9nTegrzUAi%Vt40e>=G27JOC{6E13H;nM8ZW@pjqe@vi#1%4%nVYrqXJzX@>Vf46< z!^KLE35Ir@gHsHHDR~++3P{!CvXWOp#s?XRIAx(L{{U?zJGyRzKpypO84x17jM?*K zOj7X)BfL@GEZ4m>HlPGRq~=_5PL(rMq_oUpjoIN*FG!4~WwPj57_5jv9%2X}+kx== zPaLVrl|?b5)Z7Yj`(+$V!pKC8`D(2V^Jlw;BU{si2&%+tu*%$1;ARjkARs+HCoD59 zE%cnY7IH&bN#mSe0TR^jnJvJ$_sBK1w6>-G>0C=w)vl&;YS5Qb`SR3k1&lWQv$=T|1{t|1&Cr~=;1SoE$o!r)! z_|UITvcD^0&6Rqsis5pV0_w563VgTMEsmbO_)RDzVb-RhcLX~V&p&N!U`1T>KJV`i zG<4Nf+<`0IxM_1|Y>A;M1%YY`01LK!1*k~Y zH5>88koZH$&|0D7ere~NfiIj7+0fWo72h?Epo@ZTd)-=-Ie1wz%%bU9K_okn82Q)j z3{*tS4|a)X>lA7dMuU*6*w8x&ZO1UGi20MiteAcwJc&iiQdCBeOwhwUE-56`?L4U% zNb}RMEF`hh%n26Zwj&EYAL;EaL;bsEUHrvQ!3E*4c$Ce+?#MMLuxE1YSX&|vkUtKk zf?pRoh_z^o5s#ZWkF83vk_!94LoVW*y0 zt7KM#(cG8Ur35Zv z*rzh`e3dj&RMlY;&DEr+iNi8R#FAC1nO+xpNU+hbd+VX$4|6#RSyYk>)H5@KMzGI? zO`!Y^*2duwt=XidG)%RusUT(HQ-TX=(1_nl&T>@Bsf_Z53(V3en7kEOeAIQ>Tt~e4 zb41A^$>b%YC3Ra^5x}ZM)vbi345;Hi0@+_7(YDR)I;P_HG21Ro`Fq9HDon6Q2Qrj` z>`s7|tab0k_%Tt5P+^`Tcs+>F^DTcY)6WbXzs*&!Q?yXgK-3g7$5@}?CZ>psh{}^7 z+?$e8@OYJ~P)x+jAPO$sYkJ>Tt4FTkyFvXPlZTW$N7*g6h?-@M40W3gz zhYw1zV;lTS{{WEUJeu5#M_+-|(c#oGt_@jN6=TuT;q`rLdWWge>Svk~t0Oj`+zSl_ zn+S|X6d$?xZ-uo|B{wef7b19H&GF%8G)7KjqVY$O@N7#I_@Q<%M}t$tDy{O2 z%U}Sv72efL3ddk^9pfu?4oRr-KJ8waF!z8vJBnIxxTz&9m2XgrhfR*BQr4+xN&f(Z zKZaOOj-PEDE5hDr}$fFZhG(eXPL%MU*^0f7LO0dFn6n(dRn+uRcWc~XyfUwBSVlv zTRB+t97V8uPlDTc0Wm5HoRQ-sx!wSsct0|7ir;AV1}kD?R<%h|&Z3ql3Kp~>!$;Jt5 zn3Sj_hu=sxE?LK1nkB>H%H<*Dlz2e!cw7GfZ5uq?-GoSw9>?(fCz)r)aSGgOZgj(_ z@cAk+JXWT@rR9pS)~#J*Pcz9>tz6aW&CSO5hELq^ar=bSSo zg-qW!DxuD{dOxqZiuQ#CO+<0Lj#_HCtW{ZB%(t=4w_<%s?Z;SoX`M5<3bigs14@^z z?te0^VKTrZk_8;sPrZknU);BZ($mva#A%XgA*1TYB;i1ENY1yli;YG8yPhsMTm-pt zM({}qOAY2GncIgmm6{OEn(H+rIk7AUEgP!=NS8-6ar0giDp9~8jYLX}6@rN)u-sd| zr1uxT=Yf-lmbv92fZ!NZjI4bw(Y2(iUUmc1&8YOs?Qr*7f{a<|ziCbyl9e7WfQf>{ zXq1A{$q~`z>j3P)63P!_!v*Z+OdFz!dJ#v;`PRDitOBVkATq|Hcl#rTw8Q}%zrYNBiOpF9`38EKh^<*bN2nUYwdmv&YnR5?; zGz11D4mEy{`0p38@c8UE>8FyHNC1M*`&pi*EKWl3^9Avv#ZE}%?-6<8kHY?3=1R&; zBO37^8K!EAK3Jop!>VEU+NhlU{I$*(rzDn+HnDfGzZJY*#6}Ygwc+H_iL3u{GZ>mk2KQJ&C8!|^N&j{0Ir3wiVjJc z9+st5l5~nZS*2BY$Sc%ACR+vq*5l7H8&@5MTIH__u#_l@IAAUa%;{biG3#>x_WtNYCwvrVDz<; zK_j9zYmm$Q_!M@LB(%v22PQ1%gYh&u`9K)&=*+BN`x`_s4hmOMqf`v2Xw+smOXk1- z04K}Dii||ia$k*p9@ODj?G;U4C5==`G;-mXlt^mg!6c%E+6gepaT~=;R}&VFHBxVG z50l!Bo=|1amb8}%cQ1OqMalANJ-AQwXJ|;5ETQ4JV@lOXTot>Zf3;!x^s$FSFIIfv0DqnV|2r% ziPSK7*gu_Z#CW}@B3#K6@KRQ?cS)%(O0yI^!OE4-fBq;oK0QKC)m**tLZqw(2chu} zbZWgafqp#y0Kr!T@izqU={zas`acl4la(+(*?is2e7lU{cs(~U{>-VKOekU$ku;wV zi%(55J!I-ill!*Il<+<;v~#2ht1=XVz2z1R0XYMg?Wu_8e@o=-x!8Go5X{6PN`gRA z)UXl=IhJ4;wP;N&Ptpu?{u|y2Vm=i3ZOXjG$(VmF;@Ag=R5%AQ#e&BLPsHLFbp%r^ z(^sOQtDMZ4s-{C}&SKZU6e*pe$4$klX_%xX$zrt}`L!R)J-cOgUk;s&fsDhVUMNce z#I&VPx~Fo_b_LI*e>0!)4e;Q2XW}m{@~1DfLj}RGCwZ|1Q3XW!m_0;Pfm29YJ6Icl z1-SM8#x71SR{Y>sHEG^iH5<$vjv0?=`SZ4WIz|_1u2~9D?-Vy(!SQAt^`$_sDEavf zUr{J&nxSfEXS-D2?-Q&407oT;bzA7fUwilB=Qj$3sYNowa?d97y?EsmY1nB}`^kuw z0Ai{R2TBVM;u)$rVi@8o&b?+qEsGFy5po*#0QUKt+l7;`^H{5N0QRA3TFg0(BCxzh zC{0%C86`!i#i>nhYs-{Zn1wS^N+e`b5hP%hDhzzp~Gal z!y&jV3yU$o7HLyuVPzpfipp(E+mAm>$FFu9vl6y$9!@5FvAm_)^v+RS!pY!rXR-Ta(di5B zCIu)c(=FoRsjaoXmxdaOoDQa$FvR$hk#yyTbb*m!$OY$;svugPc$irw1y{Dl+!BmT zlphJyH~?tn!KP1@X$t_9iHCTF0(>szhfqLocjX%C`L?2xZ`s)0L)I*XO&%^;WvMH1 zkt&%7oyyxhhw)zI-(%5=mzmyb5~BK%>tT31xevjoJ5(DvU$l=41E;bX~YV{CmN-RL=`#kiWjMG&FRi7J9St^ z0F*5PVGf|ckZfs|US@@wBw_ri%~;EsaPC&e9MOeJ)Q*l>sv~(U6$VxFo1Vi_Z>o{*DQ1ZZ;{iEbcX3)Xl~;(Q4_Km70c(pQ!V z8bKxjSj^PqgBvJFw9GvQx^2WWHXhny6M$Gc0LI|lU-;n_`5Sv=_lhdTp^0`;1P9AJ z_+`d}@ShI+PQt3IC#vx4ooVT%rC28G;8oF6B`d-VavboJA-17Lhf8a~<7Dm0Dkt=F zS@Q+yrbN>qMn&Mmwl+NFFvZInGXw3XyHwQl7a($fG2+rz*5XjqU|hAzm?SlLrXh(^ zR8h+AR4pYG6q7|8%U4j^c{BrV8sV^5{_S&d2`CcWsU)ZnKz2HM)#(7@u~<&=D8i^s zRKrtxk`qlRT8(C;G*ID35w}8_@(G;0g-weH`r_b&ln_Ri(CgcXlQkqqz?uhNvIA#4{hs2isv)wzgxgO{yA)u=BV$f!_-5;%;JbXcrUOp9FGYaebQRx^0M z>l>EjS;ntN;7c@0Fq^&-89?}$Yg(V-{F-3GW2mcG+5odaOuvvAWTv{!s-|*3%4`MB zq!2aNw-By&@g$Ob+T_*$01!fO^w0OXbH|xA)+m3pPcO%W;ocH+7^hilsdZXDnisgf3ukQpQbKqi9k`*O}NTLxm~;mScFlGG#{8oyR8 z=M@i(NrqA2xNq#*VHH&RP6~%yg)RwV8z9YbVPHFUJWaC##wAj24Lv@GTNX39-F?I*L^))n0BdFs zpPXAT{uziX{{ZQg7cF2|7i#Hf=r6MGhS-0J9KncTIHf~Hf#97CcMzb8olMw_sWFZk zS!X8kQ#t%*J2QfJ*5TllEG?)iL!Zwhmm0+rxBGVyvE^>z(n^(L5BtN69t6T`Y?V-)_*?Tx9m zHYU=XwJ0iFz+944f!wJ~6kLs2`ID2E+AEa#dko|`D=@ql3d5@t8p5ffl8%)rq=h7v zAdytYib{}l66W)7zZ)c*l6l2zvpZX8P1-or&BRSmmWjkAa~7aCWd%4%Ce^X^h8%yA z`C^lhDye^EQpXx{;F0RY5H2JtY3UYt<$09@29b%(RlLI2zQ!4o6qNueW?(hHJgzJs zh?2JE)K1)9<|=a0-j+d{y~YJJ2ql2f0p%1IE%Md~{I(oWwQWW(MkJD1Q$0*ck(pMP zAURYKc5Mke-+-n~ncpRz?MegU8G2+Nj99jZXm*met`Q4X>PZ{HE&+Lo6#|BxD%|z> zJB3v9EHm=`1vLX#(oKj@S6^F3Dw7SMile56RtUmMxfErljCa(I3uP){Q;_7+v<%%o zRtW88)0=@n#dot(se~`Xyb|P*KnNKJ6tOLWoQo<>g1A)=kze*&itFNMhS!a>K zFCiopOw3P}Es$w#4+cw??Dc(Xo4NaItz*hDov+&yRt$_})Pa+##NLVnQNxvCbD6w8 zqM}B`xn}^vWvix1%(!J;1W!SUQ)<&d#ep!@l?S5hlwV>tF;Cx302H7(Gw6Bc+<_Tem6v^MI^nP*Z!fw!$umP8fo}jhK8|1HgyTj@ydephDv0r$r z%$RR4S8~QHf^z*FRJ6}n)p69&LSV#m$g3qSTqe@QtOja%nMS6<+i_UL<8c^wQCivU zystKT(wX`^8?rE%x%f$5v;UN^# znn<0OEo4$pP~}3nQlP0e0FCt>?l0`u4x+po*iB?|spw3x#vEyKpx6(X9k{9OAPQFc_0K!<;v>}i2p(!Jz?`T!eD~%)OTzH1 zM71S-S*M81NV5Iu%WwiK`B-Rt;2rcnsPJJVhc4{knq(NcrKr@(JzHx}#9>fXEh-^) z(TO6!=UyJH#g5U^K~GhN&`l#p0g42Th;}HaIgn-6#^jrK2KO8ricGMYbvd(q(ASH? zot@ueSHCoF=e#I+3Iq3g#amxak;>gE#E!uJ6w@}wz>V%LsN8NiOrR6uOV-cFTG!4k zQUOB{R8xAJjDzNDeEsXpUP|go7GzSgMETNU?3ra!N(TXd3xGyaY``dFKO zTm>-#T+&!IK&8b2aq;tu79CyUl#xIZLom1>;y4`{?+7@TFjUusM0uj8iO4{gRm*!F zh`Da$-s64;T;y-5E=K`I4biB5X#}GRiYZkk-GdT;^1fcN9^W5T3Ym{a81u1WZ*|lu z2etJA_Sb9c#|OJmy+s+xZ(ezdKPV*#mXO4N*LuI$c}KMK8oWv~aAR3Ys|{`km-5s9 z06Ou@0YL05_v;;ZV5qf5Sx^l9g}q_ICjS5sprVumLR!QNjdkz8(@rK&(ms59#B*hk z4qn&G_qLJy6)^!5q19rV;2i~&=r7v(_Oa8BW@Xpyly$Q~6Q%=_j~4L%03BgcM^;p3 zI>-UH%EM2}{{Y>%TCb@5$}G5MB~He#li2IZ=j|FCDvM@2>`$-dZ*SAvX!^Q*=N&Bs z)KU6B5MX^oEhbi308sksLA9@~?0=s9_T#nvC#SfDbC7q9UEY~z%xE}g5f&M;-F(Zf zm<u@c^PIW$TI1NA>hdy!n;gOVPOP@jk9kt)LbGG{F#FE^*xpF>d!(5_N$x^fQ zJZ-FPrHWX{?cYm*>!8pN?@Mf33$=BQk_r~2yAVcwd1(f^ha%?uR{E2FU4P!+mO})R zz`1tTCDS6ZhRtl(y^XcL+w1)7bUpZ8h$nclInnqIk)=#fBrq*vYDQ<^W?>jrq6Brh z^CM|5GRf4eZxGrr?v<+zV}OJ8QJqa{2QpZ9M{Xsi8>)N2Bp!_Ys1y zX<3HG*8Gp<#OeA&{H#$|C%T%lC<)4qr=ZHgnkSjoBxPvHB!CF?*KYp++0ffwCL)B2 z1Jl@BU)~GCPXvT8Ey2fE&!cB+<RK_TKu^1w69POz)pK8DKFjU1DuZ ztf)dv3AdW*3VnNN>&HmN?v^Soz_ogGsOxCyhJ(mMeFrnS=_Ke(WlhPwnB3~uI+1H!-$AFR z4KUkOB<`#o*P*>BU43|%8e$zpf<9%RFO(x)B@RDH(Wjf?>#54gOzQ0nu}+Ly7gq&K zM(t%Q_)V-qw*+D*rx2Hvs^|`X24l_yT$HK8l9g~!3cokY3w+Oh z{{Sy;D=}igN?e5nEecg!?-N%1zn2IdWbDWF+zmn3Q~ZYdYsN*>4?le=9ns49TYm(O?En3xQwFA2_pWCQ1}0qCp{$8hBDW zOB*-;0Ch_noAy7;gItReI>kS6YMHv$GzNj5n)=s`qZ({dqP^!cH{VBw;$3Ko@{FRu zl{y2LKu^82<4$W+Td{&>VHQG4Q@URu*R!*JHL!%N0#GKYsfSTbSBF6tPs^E{*{&Z? zH}L{>+=2%X$R!H#58i;|ZLCCG5^tMCE1&_nH23gS>1DbYSM zj^a@pWHk_cU>U{t(?NUbYupQPYQMMv8dL9WYX1OuLxRPwL0q+saMV)0CL+~vtBZZ?SyYD}Wg$qh0D;&Hhepae#BJr^RMRAt z1Da_@qw%jU5a)w(v~MV)Xe64h2U=($ia7*w)Ec2l4JAB{``9Usy07L0@3$SIXevrT zXCP2&TAC2<_0(1>+i$grmnCXU!65Fb!tTW;mCWaB^^d09k$^8O@~#bpfI5&;b?XIy z>eR}%t5MvPQU%4$ho=7kK=xl{{{W|K#4UhS#P4rz)Vmw7Ip%GXN6Z^%ANu@SloaI6 zQFlM`HaZ`?BJ(XPe$>PaaTe-Pb><7DfPahAKWk_^alN9C?**M4=Je3(UPbsthh@xC zu<1x8m;!q9wz}u6M!~CD@QgL1kV6$D{Q^$l!Bz>^zm(fv+H5$F4Tu6=4W7h-LdC2H zFU3g4VcA|H4IPMj8k1Td<}XfMm1=3@CD{Gd{{RR+x`IKzy87Gc#g7k&9mr6p5=eTC zi5zq36zp1eaSV}1AXrx1zigqZH9#yH!(uhJZ7qFm`Fn84VjfKi2ZbKOhtag98R8%Y z{eXLh8HZ~Kue?XiQ-ezcK~LROFa!$*0NJ$DFe66Xe7L9ffqU{zO^e^|ehk5QvFw7= z)4M=OwH#AMj$!7ArD|HIH!`rn@gn+}38}jXk;f(Ta^3dVM&F7y0+lZKw0wT?Z2|(0NB`n&O4U+07r$mE(KC zC#U@^18?{g9KkC~W#B4Yx>nP$B@=dU=89BNuabF3#&Y)$vnZ|U#Gku8BOnY(6g z-khQnQck7ZC$NAC-Nhx9tMs9vq zESw$)lMRZ$C90C5VD(}`vdIVlGcW{awz{?V;l!p6K;0#aiXSlsB7Rq4rSi>=pK4Mw z#wixDDJGGP`gIm0>y(R)b+GgV+WZNOD&BV_w-?Lzu2BT@zAkI6ZJ)=vgoq$fEOtSm z%Xn#vvCW23@Rw zhku{@@g$brt8nDy;V#&dE^1U1#)LUy3xi6%p6>4#e=c(!CM4goYD=N4fW_BA)E^K) zvYY0y`CncppWezyT&ExhEc7i`$mQ$Ec<$5LNWhtkSqcS8PyjUwi2<1W>LIc^7mCn% z6QvQ>b`Npch*E9}?g+iD>#VykX|8&^sjikSb6W7L>z}am&8sF(B#@aa-m|2Xxil3` zjeYF^r;-Y*q*3)iBo%NGE;q0`Sf2Y2*csT|07UJS7jC+?Sr<3EUAa|yk{a9PglU;HHus(omq3^d2hCM7J(IFedM3Q(B@gD_hYW*IdM1+Dx; zaz_}2g&MV7nmawJ(ddfDY}{O<`g~NGgrnKMdOnTcT;%b{l= zk?JpU27_C1lM$gUm1%cxxc*@>uqc?aR0674hHe+9#|7yGD(j4SQlcV)X;oJ?%@6|b zWCG-En&g3PxJx`ukvtbH`8XBV)7Lmxw01&W(BZ?;#!hI=?^@H)!wv$m*5VP+ERZ!N zWHYRhvjEhY7yLYmPQ6Bbq1m(rb-xVo6Xq^zZ50A2|jL=J7R?59uAm~o|F>Ib_> zAgE+4Zgpbjxp0H<1e_H~Hz4(;c{6%J3<{R1ai5D&-+PFakPW&Dq9Wfheb0N|{2PQS z3Om_kc#%&N{G1^HCzZCFfib43?T!IFcBx$FA%S|}0W7FN2Abs_(J3XtUSuk@GH6f@N ze+`!kecr#Vrwuf%6B8J47=ms)9dEJs_4;tF6(sue_3QbD(!dVD3w_{fP`jZDqT2Si zr)z&t%drTnjI`q$TT@r`_|YOvDklJDH?Z3KfIDgQ*H6oi3Z^8m6b8@k^sU9mo51Us zz_I2>%D%mL#HuBmD7q|vgg<)c^SF96I~bDpkjIP<>?)(S<4 ztU$u%Q5jhCHeUI*^w<40$pc>?E!TudG|Kael_ZM+uK7jC zQ+xL9x3>eTV5!esxxp%#yFmFpTIcua#?i}OB6zEa;at%ixE)*5;XJ2}QOg}P2@o~4 zD^Q7zOEhvWeu~0;qsUXP!|6HPlPEY!J%dszgm4I*iOOV zr}k=o(V9%$RKzV(!fF%aN`(ml*qv%CawF}R*stvk$)EG@AjOSx9x>0HjfP>(%G}}2 z6}X)gbXAyFGGb86%Jf)eEnG8H)lt%7G8Cv-QV8Y>(K9;h$Fu(cRd9>#FJa{EyezUi zj5#VoD3VboQcI)&^(2>jJH$PYpC_}OrS9?NE8m>b<&c*Hd1PNyfG!S{qB=S6r&dlsdH)23Gy@wvKotY;IAu{mj zNbuPy33>wLBx*XfUOpn*`%@jY@pEyQrOcS6twjQ2)iZLc`gfmofnY-skc$}LSWYo5 zBz2aGrk1JRnxOz4au&@5_S-qo7P%v1ZA@vFt|uy*c|Yb9?ESGf2{9<1R0j5>QsS1< zh1fMI3JJ>-e$}jm<)nfpnmF2TFeQO123>&u5`B1?GV0;Wbore>5$G6vRJ=r_%$7+c zYWh_5CdBEKHPYa#5Q2Jw(#=g5MD%V2WJGEtVXAFx*SP&SDnz7}RK9O;4_!~J4>+g- zY7KL?ZKujbsf9oVF!)Lr>4jZs?#iGq;W=&z2SePEa&;UX+@p5k>h{i=4i^Kh1SG^_ zNF~%rb|KHJ&~nbaB4pTZD^Wtm3OdeVJDT4oeh|w8iI+NH0}(AOL1lH~OWT%^--Xc0Nlv+zZ^dG+hWGDqeLXvVd{eQz za(vRg)PNGD3jkRzIOVDQ#k&Wwu=AMjvz_OAxv9?N)wyWJ(xvi%_W-JoapxmjTh`Y- z{kTIjZQ^FUwykIh`H|zBH6i{FVBw{x5>n=sXKbF8)1}#{$P=B zr}WR(tQ$~eYSy6nwKvs@OtH0m)1P(E( z2n+?<)W~V`frJWNCTP+&6N&!ukHrQL1>z)yd)eKp8G%t`@Z7y-(a z&z;{^tU)4TClDniOICFzqLh2p>@v-sAWcDv(lSe5g<=$u%=0`FR8dP56QoQt2xer+ zrE^<6hb@Kgw+_4HcL{WWTRWR|q zN1I)p0N3>X$LF^jU5C$}f3`UmEd`j}jDc7H%dsGAKAQZk?ZzMi?lk+v;n-c+bF>kL zVq}mxWl&PqHqzby0KV7b65GlQGs}xphOxLY8P`H~^*-Efb{zi3G6=xwW9BEwzr=L& z*zR=GOKI4AqBXsF#z6?(VrdY8=DQ1v_t*V@-(Db44rne%N4F@QGy$^#_`%u=g+)~a z!67$Ed(>f8bsy7je*9c_uvoMQ-BDNusTqgUj)b;QViJjf?^AitvDTS!<7g>GiB!`vtZ&** zoI>U@vXU8@yE2tN;QIGZitPRy5b8+@IwSz#IA;UO{4#|2{?B1?)lmm3fOHwtJgZtW z(XxviBnaeUI+iBRKsN%{AH}AMPX7Rx6wGGE#NdjQLEQyKJe;*ox2K^rplu$?%)<$a zl8`_oieK&MZ9!ob7uqkCxkH=0Bj-u^mkFfA*9E|9>nJMSQ85fQswnf*&qY)Qc)*wp z%C4Z^&2zy!8xe``cT!XsixM8CtV6##+9?>EJj^af~o2(^G0sHJK3Fvz;+Ni%-*-!1Mvc=m3@_Ja^R$yl zelBtqGjK4-Y8{x`yzL%iw^jnzQfg=j&tJHwr5QX@qot;ak(DAn2Jxk>#D}Gf}<4XzI5hz$NayB!-vMwRKrNp6@s#?MRqW`f4tlsc=K-A_P=NB2_{;m{{VeX zz!L9E0Z;+Cpi8l9$D{1*1}hQ=b`MTm4>k_&AAqF%a{EYlRm{BAkMb8H;6lHYsAH+8 z!@0?*Afm*%uNtFgUx-MlqO3`WT9$7xim@9jM8T{| zN-j_^v0G`lQL9mMQvj z;A?!ZDG+cq-8gJ5XT_Y6>76JZ;n;)Lz(&enfx~7 z-dT7sioA9T{2GH1#HM&~xvCzLN|%C0Rm&vR@6?i=T3ec=Wdk<<05NtGw7;V520mso zT8NuEV{cZ5YL0nTn>}>>r2hcpr}}5J<^KRc`z0%3Vf)qgW<;!H^-4-oqup%DQV3F# z0U)bV&iYcp`&?k26n&X++J6K&R}!Y@ZxykOI)@tP+-j;g>uULBXoPadfl-=vB9>f5 z*wysGS<;!7ISz*2(}wMd#m`i|^WNnGzjyo8sa?H$Ege5)~bhydv31__`10b1RGE%~q$%Ve$oJZ5n zV(`Pjud!c(_%Ag5peGpDjGiISM@NLZBbq^^P7{r zKju#uJV(JiIq>F&TvHwAUSXFC<>=lS1f2?(sFkrCQ2+v-n+n1|##J%0bx2mdg|B;W zv=~i`*?eBp#i$?tgI4G);DD7}@T2E@MXR$tpT=!{uZ7vtM8&RL#07wtbx{S&J3g)> z`#Ogb<4Q$ zcGTGlnX%_925~aii&9WhK`13|zz|)5&Y4~e_{q*59oP6<GJtS3Z zV^+j#<-=&|Dys~45hfWNGE>PMj-)a&y58e~wk8*7VYa3pYRo}S5aL5Ask-G^T7(v7 z<5=^3t+abTH(}%UHW)5WG^%oDB4VF)Ws+!Y$_>(y!G0G|VOV!0{i6AOIj)Zjnvas} zuwG#1N@>z5F&wyvXt`ephDIqoHM7V5E?Dm=B*u(Ixb$tLx!8@VgPMsO(wb78gEqAW z;Jq4|Jb8Y}T)mxv+BkVr!UCmCN~My^S>6x3P(UP8cb0+^d@k^t41P@U1IBK3ucD;E zyfqjq;yjr&%|(l16uA1!Pe+RyITchQmue@Ja&; zF#)LAP}5AJPRe#j;)=F}*`YF3h*?ybm0H8O9w)of;I{)D(e`!mR|&y9N#~3^39PNg zLBla@Qlk>BLy|gLIu`3Y__(XdLaNPFl$5%9PeLuB5>5b11ON%T zny%EX@0Uwb8*E8!IY8BkEMGIl^x>I`E^#1>sJAO4v#~e5nTfGI{{X*x0K-VSrdq&an}dCB809_=RHa;@CbkE6E4KLQ&hf4f;=d!$(Our z%*!ABHrNBevjJA(`{n^)knG$aj-HG}7c7--CZT|}$r{^Q@DSn5t%m;q%dZn=r>0n; z5km+pV;NS^p64yHkk`2Yops{Tj>MvF&XFuk4iJ(50N8*}mr6SphGimLuua+bh|nIl zdW(*6P*&n=RYglf0?M$VD=Bh7b&QK=TaZCve5XK8*WRADOu#pV3l=mzK6*fyt)ivK z?vUvKZjcLP!Pt+A(+uG-bdm5O; zkwd@tfMm*;sVXe)_pL?To)q(O3H;W|{LP3@p5VPaWP)tRr)@PN-G%h|Yi@SD&;E&6 zuhy%V%rN-b+Of>qu2>XekU+30cMYiw{PTv6R;n}!K{}z8no$EF7Xmp=miqb~eSNqB zLJH?6c#;cKA~^x*b7yw~E?7z3#t;y|l)hk^KU!7KIOu#8Xz8&yv08)hi9rozG?S1z zkik4GBoYqEG{ho4rv)in&x7UjS&If66=uXJcsG1P;;x*ia1Ip-0IBY2a&nJ&&;P@Wd_ zhFBaAa*;5xBt1YSm|gBK$E|_54RvUSRl0`EZa}(%e8W;Lx$mX>i$!>BMrO9lBcBdJ zCsf8#s0~h*^&dILpNVQ|Lc~ZpEC9XNL2Db_SP$Vop8ROZ->Gxa`8(%-mccn-5D5U} z2_9{K=Ti;`p^ag5lEjgvbsTFAdPw?Ak)n!v$k?36ryAs$FJmEW+T0KkE@Y{ScO!VS z_<*edKVT_JW-Rh2%fw*!R7Ubp#OFZ9@54IrFdq%Z>To)+XP58Iiw4cwb8s^^ij)WbM|GS%90q@8wMAPSg_Aff8>w?gYUiKJ3%p#o4>42Y zG1EL@MM_k{i%f)&rH|h+9nnc^UqBRh(~nEp+h-4skO5bWiq@}7X>!eBtW!3Q3335o z;5f(v4zAAOvl+vF~xmYdfJzNpSW)D)sbk5RFq5 zM(*ehcCBq(s}-IJjhQ?^RF9-?_0*hDJ2WU$}Y?kyqBOar(FrVXbyOj%s7@G_M7G01Xa3GrXkBz@NC0;? z6K70M>hTE;yWTB;tsS{m#25o?;3nfHFK{}7jVfv`Iop7}AwwL(@k|>LqD)GLs)B0j zEF+j`W2i#_s=_h#hNBL|k{7d0Lx@vULs3gI=0}P|Wh5R4T7UeeozDO&4g~|h1{L-f zinQz;=?U)UfGF9Fxa-cXQ=As&{{RlT%L&18zIT%ZnYlKTpXKnvTz=9?gGbMme6a^O z({lXTb%M5DS*eDqou16-LyZZz*ts)%*~C$nY8W1G>iG_B3`Wnyj2dx^NfM9%O9CAr zI3xhorddM%6tPy)%F>}Qys;!v$Q6r1j0C63FO(=YAInZ3Y>YTugWetEP|B@&7h);I zmaADdIDjQgOAxjUwx%NsW%ggwGBl9e^fg(vN#Bx+&l<}=T zbt_I`sSMD{GQ4py0f1sSF9n5_-%Sbs0GVJK_qR6mhCQFaexhvBqypryDHOX>Tmj}+GCN{T_9;?O*XJHAu+i6Glf6Yc2}P*u8UUY6HS z#dCpn?#@)1q=!gzK}z1-Mt0?$Q4JMkrH(c!9aK=t=&adV${F$!ZV`>j`w_VZgwll4 zl$wG7dY^~plti2y^nkDl1Ooi?u324=vs74>TD})U6-<%GBCKMY;FeTARTq(oH%{j^ zhjKW1g`F~bdy?v-R-v1V(X#c|t=Y(;rKH@s4&3z>ZFtfOOHq!~SIbNO6hodOvMm%z zO)f~S8c10Td6WPK`G1E%ID&dH@|_||d!VLEBr^&E*3G(J23)E22uM5RsFoCbhMwAi z7bhoUxO6@jVpO&GH3eriVtma*3>c(pV#GOn2Ee705v!xZJ)PpEz20HQblY-7O93v=Bmhrnxe}i zEHNm_C~+`M$2S$!Z0t&A;wC5+CSum7A>H#2`#e?WVKKuKh@2#MlBO+6Lia)5Ni-zY z-tOeH9!}mE;MleqfYUZ3Pg93iNgYhHVYSHVCK)wEy=YZqdq@%DW0N(T%W`vHhFd!Z zxo)*@03MDTlUc6Wws3kd+D&0}UJJMgYQxKhsfFaI0ayTMf9M5r>kcg2?dz^Z+^Ooi(8294QjWO#q;~JLp_-`Enlxq@|L&EJj$? zmax=Q#U*?&tIHJ?MM6y>NOJw_7rH!z5}u=qzAj9(@SnJU&252nA zTYffymS@VALO^tazz43BVO<=UhiTzv&cz`JmZd1D6o5+qs`P@g=Zbkb(@)iw~ zki2-pJOkt|d#2@1O~$!h`Lh+~dhT!WM+@fM5*%L##W4E3EtdFOGxDGW_z6Dvm7 zDo+p9D+wY?qZdm3|*!+j$MlVGixSaIm7v#KZhO_VqO;b&Ci|;#Q3t&ie7EPu*^3RZ+iD zp^py^C7isEkh8HrQS6PLsW?F^89g&*?tsWXBEi2R--z<=&ZlGT3HwP?{{Z?K66DV~ zNlMJ5Ji2QBzGs5)u1@Bhf0nV1V56pXq~#1V3dOmNNP?mtqZo?wi^0X!ryTwich(grWs{!dzuiic74pGJVhPX*d z2TBSk8xxXw*~KnM+gO%Iu`&UsQUSfe7YB^MZ0t&54Hc3MFULJQd4=zca?7)>}bhyFv{ zv%oq#FE-)v6Zb{pDt7Y}upZX!=m!a<{{Z>HElbk>0OhTSu5>S`iO2g&&YoRgqg-dg zn-ABWD9uIs!qp#m{@+iz=w1)aB;`u+j+C&_hd0O;ZihRA^f5+Bq`X*Ea&k zx6pAYu;e2xYGu<%eZg?_Egad)h-FF8IR-Y8XvuOFcOvIfE(dXLH*m(IOrljHfQKcu zcOO59V#2V>S!1YcM=Hl7dEGaLThtcT)uTNV%an1&&A2Zs}(f~SxW$=4cAZop#36d z>WDu|Tn7L<4xIxzJ6y1|QZDXbh6R|R7p-03NurBW4roMe5-{n8EUyL7T&QI|pnz>50dan~`gdC}X za_278Ns2{L6=hUUQH#|>)>>#MY%bH$i6VL9hfvyZzaO>abRr%hapTBoOcu$ZMNume(CT4_KTqv~Bn7BJk6%GFr-wmnVDbfX+omg5j?H5Rir zUoL*8Yny4Q+lqwAaty=Wp9B3zM;Yc@m9-BZm4j9xSQW1kys3dU>66=+-an6T_^iT_ zbIa92ZpdjPSH0K*8EhMH2+)h|rrdjPU{aAK0XE$L9R8o0i20wlLH4@VX}q#PCwM;a zJn{pqe0}A_4UXW6Ey0r#gOkmys@~>0*B$Wk zIU-{~!Q{6w34Mh@e>o`qw@uvHQ%f%JlK_GO?D?Ebm}Io61j~!eIY1dp#bwB zMLtn+lnpImz^TNU3UD6xYq#E&f~6riWMRsbRrJ({e-YK%l>56uepvA96vt$(p9jFJ zv50Vmr^GS(x>%lH*|=P@Jv!D`)LEgXr<$~7PN4;^0VLRQ#LcXp^&wLQ57Kg|498Dm z){9Qd#bfc9!zx_0FAXYE#_9=T0~#@I6tHT2Pfdb(GenyDnL#3HJZFC9ec z?;MWuD1pm*xvqj7$SD)U`Pa{7FPnqx0UG=V$*|8Aj!h0Eh$?iRPg{^$vV5< zrMVBCc!w?4QS!D4%#&fY=|PF&e9eSKjEZ?i9Z_9_N+((ctP0e^x|Tm8)0askQF1u7 zDtb30%M$~#L)hN*tuxjM#LJkR5G4U2vH)a5(0*T5i<`r`s=P9KCBy1n8op`}=o=## zLI(=rLA{B+i!cY@iyp<0p)jj>xi@>$S2tm(uy?FdCt>jY&L(=YlBEECqFs)c;g#d+-V@9iMiD(WEsWw(B?`2Z zwC`0hjwvf-KMsOh<|b>8xQ0Tpz4K(-i?sCN)B@(E2tW@+q(4>-pWly#;DqHVedM*x znY_|clB*FyShMe5?EGVhe$~Hi92diWV5sop!ii$%4-)aF%U4TPEOmG%AX7~SN3F$X zfn*ZaqZ3gD3cuU{6^30nq4uM+xGkTDRJ`56XzfLRsqH@U zMinlk$^@j4!Ax6-Bb6-i!6(E&5P5=!{$J)UWUR%hq{KgIRn^wAoI<9t8tX>=1XzU% z5`G;dBm@dA$Bbik{y!d;3KEkrxo-=N2m~E}VQ)&2uy7bf39>;TF-TX4fkqBoo}aW_ zT(8TOv(v2cR!Wq4h)Dh%XO^O68JgvT70aN$wg3TRVkC)EkP5`WcdiLFaii<4FV(Zj zn8{SC3n{8DbS-^u*&1227$ZjxS!7u!k_U!Yl}gBAkMIg`hRDm`F}|AV$87ab8`<;b z(a&=%mwW#J$hm&CK70gBqUCp)m~~nH@mvX##Y}QoDEg1tzh{DW zdH(eJni9{I2c&S$JgAen9#hp@C_RZfXSw!Gk%Ab6+F9v5QuxR)l^#fR3`(Y+m8JuEem)X|sgS)-MJ5<|Er%)5>i zNya8x$YD&#A1kg}+9KMU2WRbsHY!nFF3xIrjZGbglf#!W_`lEm{aMSr&CJ-HHEt)% z^Q`zhkm0by9VF0BCJ#JuoQ^aEX1Kn)o*v3lrv#Dos1mcxP~1yOjTwS!)d9Ttxn=dNSF}p(U2I1 z7d`#wQYFeu%vznscCD&f*&4qHU5D(h#lg;*GF+xq=Q9Wa*swLo5OcjL7}j|C;)Wwh zJ{@0-)5}9sM%a49m}~<*Ga#mNTmfc900tXa+g=sQ#uJI0l)8|W5Rz=vG|Q9lqeKeq zX2LkN;$=!+`Bw7T*b>&g7#nluKMV1Xo^To;+1OquMN3UhN@*gt8A|hr8A?1tX&IOt zrM~cGBeAg7Z`DdOyi7RLhYlAntWAjQe#MzJ7^I?cS__JkUFSNry)M!FlYC(3o<@eY zpOo<`Y&_yq8j8uy3^fwW?AggPJ;k#UMnmPkn{d`d#JZF!32^nW{i#aXqj>JgY^|v* z3_xD!4p5~M!QGga1>f!=u1~cOjMVH>K476?Yx(f1YoWRP2PqG0+%~7UCe|x)+gUhu zuwZH!GY~Ik&h9JL6rbtGWzvF?B4U)(-6vA^X4EmTdqg?@)7~;vLwcTRrimP^M6BX6uy7xyP7`rPKmbw00dAlxDz#n*;$A89#vvtCSfynZM0G-V-6g{* zW>tcA`@xt7F|=!{kU>Ixwmf;>)!HeQ)QR#krPz2~-rr_w&O&M!EZY}_O+V>Xh2$&^IPjsT%IUnRS zVD|U~PB0i`vXqVe-}y3)@+I5yAA|?^s)~GGj(OmmOO<1qbe2YjD99HGb65vrO@@{r zY&chp#^c5=Vck)dR^Xh#Z!$}f#*d@Hvar)Od70lz1fjwTQdXKOg~RAw^ye0a9;Ujt z52udc)YU|ag7#z#FLmw@zW4d?eimncISH5ms~QbO+c8?(jpNQS*m-z)QPQ58CZRpow~f(_17ZAO;2rrcc@EK0+rm;jOnL7dz(d@k|l zXqPV&idlcDZ{m7eTl8v2Dfr)6n+&9)K`O~31|;2<`9{PXplU$3rrc5Xnzz(Iq09rv zL8aZJ*t;8pM5W6h=uL%yucmsFlym<8E?^SkCReDb_;~2mgfd3NR5eR}+|*C$z$o|opOOD6H4p$h;_ozkaros`_sU)$?p^#wvWyU!hjSA0m%+W z7r)*X90p}e0s$ZkY%WM1*SY;T0v}lcsgWX-1hu@QKAe7Dq7V{H5*I;oM{}tsTkGFVN6(CNsg77^JfUgo8aYu``2ZkT`|5N*Jj`J9CVas5QKeeiM3}1)Y#iO1_Y8IP9@~0cU+KqIwKMCi5ib?G7={_q-#?b=ktj@Z zE6A*G8igy^5_j6y0O)nn+FOme)cL`ZjJc}c{{WR)hYXLM1v1b|bxxv&wxLb0Yh6MA z0M3TrE-}uh%)x{qpDt(l{BVM>#KA9_Rx$w=-%jS%?l=6ngAj*9>z;37`LL_jqtHct zMZRnM#+s4Th}qGCBUk`49Zu(QWBPCDz?fwOt*S`7+=4aFl_O4dK7Bo@2@;mf#a7z2 zuejg7zWv6U`|!w;Uqh3^oKO3cKk^>KhvS~QujWU&E})VP{j?j~>NWXss2LM?O$etS zkNM0&ig}((XCYLL0RzfCM!vhBsNyx2W+ZZOKOZ?mj4bmsC|v&BPt8njmcg#4L)>T$ zyXnC){)F<1-qS%u;;RR+v37e{Y0Ss1C5?^Ez5TS}GNm&L(BJs`hz?D`0i0wjLOkmP zX{5Y&I_PyH(4CKR2Hzv~9b5kZ@eIZ2z*mv}0Is$yDRhS>+M4ifE_lY=$=ukr>`vhA z{I73I@3$NRt>nKN2fml(Y~ZPq_mKH#t7Z=mK93n#6_Fn~5vcQmZf4b^zuWCtT4k3t7xMDc<3_APV$|`ZIx1xw*qs46kMU}3e?Hs}CJ+EGOVs-u-^COqH-53~e zBN46drj|E8-`)7&&jHg~A1XbyFYDCrbP6z~GRicw-EQD!BV8^9{V(gMu=Uf9UwXRM zAyv$HvbvNhD-S8M+d--J*8BQ)<7t?rmI-hT&Q{i+9wRFNkj}^FtV@cvL{)N5Z#S3{ z4VB3o5nv9Y-SyvtB~6$ccATi$RJEyQj!HNDRIW#d8uW$Boi#dbsng}aPDP0kc$Spb zgDi&_*J$(ZEw6sp7dzVi*5HU^E{@b~DX-6!&y0z;(okNk7*hFX9_EOfT#onbG`+vQ zZ{LU<>U`mEctXov=~Bjz!1DGMkIx_$%cZYtY5s%{=fv?G`9G{}Y$;Kd#)i$t2g>2h z(v82a-%UyUxX3RFgYE+_#57Y8QJ63G){!!hxr~zNMXj#eUceEtzJUDg#xT+=+j2pd zjFLkDR2_p;EUa~E+d5}QzHj0si9N~nCwu$xj&+GK^Y;-YCflyXn#25P@A+t8rNkqp z!ot*sl2yCY1-;^_?62JKa1NFo`%aQ~MNh+id|@=48OP%iWu4IB!e|T9!u95T&R9KE z%=m=TNCBEJfp)&KiKz``WD0-zYADc;FdAOkaoS0CcY0Q%=e?ocD+&5-z(X?mL<*S?((#6Z56?nmP9eK^ThFJ5&tCtCV@KzRIE#UphzDF6dv zOE=5j;w-8;#8b&6Xov49l!EsKNxLnFW+vrqK{}Cs43mCegB3ZcRHc;~oqoTXEO$uZ&vjU}%t+J9Cl#oFoh|=cs_gnK42w?oWeciZPBE=Cm42jb> zQYsva){gm+YEj%6=x+q$YTjsqml|j%G%ZmLB}AkKo1snAqoj^Are%}wDk=caBl(<` z*M}XP*)nGB*+O9oNK#JXnMe#D=~Idje=lz!{-9w`cA3&kq=RC>&}n+`$O;O_azOF) z;tv>*3;r1m?8IjLz!$Z%TweTp@@4MJN)kv&NB|ECKxVL``A3INqK5*-wWHTpc&xd# z#8{e2Wf2MBucnhWi#QZUsX~Lf3FQ_R0>Ej-duSkq6IZi>SW=Wc03%AC2IH|llo6W% z{PV7cm#>^8a`dv#fmA7I1?yax-z!B_YAXO2b^X_2rH=vN>PWcI+vafNX`w=5YQcqx z&}90*%U;}}RWr{#A#4B{Ksqj(h4#|gZQs+24h&VO%vgTkGSVsd$zR>f*80%emE-3R zqDD&+qrJwOope3)-@UkGQj%CGu%l&G)Ak%%1xqk*l`yZ3#T`uzbaH6ZLc#8CQsAF2 zr>2$~3-7|MrG-l6n!knIw-zJIuPAA=%S=s3FGlB4OtUAQ=-jJ}#c>)+W(Hh85vR;S zEF+{Qs*(c4+{oig-!-%vappL*DVD*Qs0Lx38=%rXM`fTC0u4w6xU+*}pD$a$%sxhv zIAzM9SPg;G(_hHjz3;+FNSWR{Ipxl^`yB5NQinAp^FFNgua!B$*r|&oWo$2fQ~~qa z+k4o14G#thTn)K-eXrIwiPOToL4ee0?Q!RvN_t5o(lOH(wcF5XadB~fLO-t>?(<>? z&alE>DI@9u>BHr#RGC5@2<^U{O)Cmb-MZ5M06f7i&~&y_oAVsqy`xn^MHz^YKNoN{ z_aqJf0AJG5ZX{E6E-36dX&O(|K7Gf`ji4mdgt{iTb8=1f2VHJ2YkHpCZH9x$L5L@I zgo>LV-|-r%DA%SE7>;&{jMlf5TwdQlr*8Z~9U^0vt2IHZa^>(qcxh1)jDP_vOg6Tl zWx4kP;{O0k+l?^Lc|r2llW;9=6sUT1zZiJJ5+%dcWUvuUHSPwY+5$Ep`Vpb+uM99{ z%U8~ne7I{8?}1_LBOGpc3 z2=kY@MoeVKG3vul8};O1xn`9?*%7{1&{*rC+l@)Wki@xg?N+Y_{IvkqJm<7svBT`a zF%pPU*+Jhia`*PDWMa-vP>=R})G?rksM#c_3avOpr^JAD%Dwgkljt}k%iOR5xG@jH zJc)g-$K$c8A#+My(w+6UK>Msn4ayq%dz0|o1_-_t9&;>tz9vsKT|@g`=?#v|wr#b) z6Cp@a2;3)HQ1AeYyK^}~2-(|nwG1bTm}I1|JIW4_StPSNfcbHQm655k2-q~xn;n>w z?|n$Mj=PTh2$@I=-b|vB<%(P!>p%{A9E4pkotBiGALy|`D_eiKgpTp`-fiG`lbx#o z<)T9IyfGD@s-jk5_iCV9@aO>A`WYsVvNxl5zAl$@vhePd02HRbpVo}Dg|mN7#=(= zSh6wfHa5l69Z&+aCWfG`fop&1>My63_6Fw1L4Mp=@z|6j6q%EJ2rOK9T#!huGdVvF zHB2n=g+M~8#hG7=bfFF!w2hcGsf{C4DUdwzo2jvDxg?tqP3{T(ea^$omZAtzV%2<& zpITR)ZEoi=PVl3-^VE-((c$uX)S9W{R$%c;`BW~MZJ;0xZS~;uEem2vBc1vFIa@eo zlIPEn`RxptdKXci%m}#+ujoM>Vt`9EGNmaA7w`T`A>Aumhp;g=tnuC36!cp^b?a2H+AdM{}^^X@BF-@0ZKGVI&N8B)o>Lsk zt0Qo zw?8X;hnWPu%?7-q(4nI!vH;M?vCJ=^2iMeklEZ77ps7g!5TGkmwTs%XTNwI>`ZKjB91)X?#BWO_NlH|rLkWxl1hs$$m!YMPeV060 z$N6r%6~Lk97_jlT9egFh05Q`#6Jts2dqLEu$-IVP%z7D|97|5KRaHoT-Nm zU8Cvmk61^F{xbMaj{T;w4r1lXe-3#En7Jpz90QQ?2`Xy&qN57t3K?ow#4IM6UB(4Z z%#*;Trjn@?&cTR%xbw_UX7L@E?JUVkOUj)&OP1rpQ88{Ob&D#89V<~nRamT*2`eciyOg!gyWZEgamOY| z4gela>v!i^LaZ{TsYi4cQ7*ymMs^ySunc0uoGog}G(8}(N*W|B=XGlrB=4al3+e`g zO`tN!plW4kYqPO)Fhz@ylVV91sAl1CFU~g8MfX52Rx6SX!M6I3b-%rU-+@6gR7<^G ztPY>Qm7Xj^6(VlprWPfxd1Xfxrw(xc0LoEI6tnBax;_&)wMR ze_c-mrw|mt8)Rr)1_j!lSK|q`w8W(Z$pDsosz3(g+3V;!CW{b{4yY2O9(kj6V8c8r zfdN~xXghikMXnB{xoSXS4->D>7d+l7@+3{hEXY*REP_?yHr_OD7H?f4-j5r@C@5&f zM3oe>RLtdPs9vonS(Fr9=HMahzK7Dpn4aZgsX~p*fLuOK59RW-O(SRG5sOOYCT1Zr zid{0)KrBj2gx@njv}VjGq+HK zqM|4sQZ`*KE&X^xt%HW%-a^6)yQ??5n&w9hX-Fdpw{c6H(*X>kEj*cYu24Y7UvT z+nI}A##SR~;?ji7GJ#M7d0ra0cP<`|)#ez#V&UIs9!sTYsPU?3YbK_9NMlAze3e+YZ6p1@cV2s`%RbxW0Y1o8*q^LH0$$s004)I#M2 z4HS??4;Rx&uW`?_7l%B-SA|s2rCtD#)Wua(78ff;9a=>%ULjLYA$2J3wml|Wi`W6D z3XTmWN-uIq&8ltY+A*XbBeQrJQ&Oa)q^R!@kQ$_#8XMBW))CMc$1h#?C{?I3g)xM7 z`?M@bzLzAMubVIXhP3&Y?+dWir=a(G}8iJx$Bx`L!v2AVKi~9an<58~dU-$F;L5g{v z<1o3>{{WEU70lhGMa3?46sN6Vfj~J3GNdRBS%I)5T=y5Xub}q5xRzAM zy?C+Y_0I2}V$rxI3Aj=_+S+cXU+R8bVw9@T9NwHVXUiiK(@XsO!5CXR0dsI|e*OOd z)AIM=brrwT8v0)PdcC7?QakCXIY73%TH6laO}@N#g1KOw&1f5&*tc5sh)Tju88x8- zzaGDMFHKjHNXaKN5Dm@C4XjUpU2mnf;hqN`q^xfT31$YTJ!z$=GlL{eGIZQN!OYEw6Oq5LI8mKO}~ z<;Rp6fyRjw2vWC!Gz61JdOfIUGGKBMVo_r7Pn1Vw(%Fv2_c!(g-}Co8dd354%AX}O z7Fp5>Yr75^+w5Y*7L})cgAtI+;q^I2>fA@*DCMsnZh%MaLOs&Q7I%i3IOEK)yF_Y3yM+}k_tmMgVy>vccoq_4-$Msr983DT(gYG)wp&s zgJKZT#Y&|ocb=8not1@qxfTUj0z0jMLk$sPnKYt81;|7bEk&yjOPjYM0sN1t66vgMv#E z+tz!|7>)u~w<5t(YSZ-KEtAo|YsY z#P_eC>n1r8hk=08Hp-1!2mRu)wL1|aV$`JtvAx?+{`qAchv2mqG4{IWYFrYdl;Gvg zL*?m(Plz1cF%O1nd^t!WmWBtsk3CuYr54N)gIsUNGQX?)Mt%x(xe~W#%-`{m;&NSq zH5Ii$8frcVvGQ<-erh*R@4dRzdVYT*7k}b0Ld=Nm9mdH+IW4vwtM}diVMUQg32XIAuizvdn6J| z49k}-9*MC((=g>IK%h2iP>|$nR;{a($HuHWov>-B>e>iUEJ-atQqd|>hRDJQ!2>2+ zTHUSbavsA(?T3w*ipOA=-4c+>a*`d(j#)KCSTU1jV{pq%iNJ1x00x1nVL;cjQ%b?i zR~nZMlQRK7Wi2BR3n^)E%OawL0K$v`YFIX?+5T_{X1V(vKR8^w+WSCL5UxKBE#F-n-GJrzd z+lCt(`jskd(}hOPnK-RQGW)S`Tn1*L0l>-JTp01~tJw@j&YLwj_5Pa?hg#6N3M{as z5|RyzxGpMa?RffI_BZAa3A{1!2Ndx)AIC7RdavcKOP;TmaBMuvDyVtFt~`lFS5Hw2 z`Qei^5!A*50Hx80BZGF&X%V(j`YAHz;iiqyt?lAPKw25W4g!EAx=G#+Q(9&^Tu zhVn4sYTr_c@o@&c2x0*o_s4!>@h8Q}oYz%iVuO~sMmf4Gh4TDF$wx+Zey!{lFiln*%@W8bbU)Hf^=%*SBI~fEVD^R{RJl00 zSTc8a=d1u+i|;U1_}Sy=U)Z0(j$*0ttHUaMKb-MSPUa67@J?&SppONFH!^bXhBN_b zv0Q#B=0+HF{L5WSHWh?OjTxSmT1sXriO3I}(xXN1+ z%p5fjr`7)e(tKxNy9tStjYi2{*X=6GRVr-LE`AwnedJ6sloXPcD|pmqG7SDJheEDVp26pWT^}Rl0xjD*lnl)516ofUua`7 zOTuANnMn#E3z8Cz@>D=_j}n|Dl1VkrK7j3S^{cdhq7$Uywr%$i5WUl4Hlu}`)YFCh4Rj^daNE)n7`9&khzwOG~@gW~vAZA8#k(o@xDl~rR4 z6xn79mMe3w9{MnHu$_lpfH28BzX(=dcE9RPck&~nttVts(t8mM+>cQ9&v9&Q%6D=5xpsBM8LKG5(O_*2VNGuqV7%*;8X8n%7#t-5(9wXw{iZxZ(KZQ7L zeJt2Yd_08njwF?8t31@lSuomqi$?O5Dn3W zNT_2<3N`EvaOzw#dUuUL zN-3J{#+G^;R>lL`SQ!)N3{X3{l99UMoRZ8d z@y+?u8>Xs*n`VcZRcLV>HgtgD>mtnza#5C@6v-XK#2J7NJhCXvEDiW{j8ZqeMz6Ya ztuLmR_GmU%7k)}avOp;SH6Gt%oggPM)ErG@u9~g{szqgyA|ay^xhqWqf0)Yw9YrLV z&Bg9G+}u>QVqJ!H%Ga>Y!^))Ku(RaMJE>|a7St?3Y05o+7lirhBaTdp=Q5&)7r88; zX1E$&`V+5vaRSLph+?-s6>981USYsCx}o|0pdJPQ})3~Hu|ixLcf4J`4~tu(+`E3pRJ z4la0YvUZfj;8c`_q$MEkjp6<@BF@);Gaf{(jXMR3o3#+4P*h0{Sb#yOvl>x=;T${3 zbXeac;(YCg&4);nL4o2F)sWI&Y_!sVB&ucvkxnJiB)I#s05&6rxOo_?IhX=iCwOlF z#DRRDRR~&5hu2j5txQRi+iK~!HzIo<&-ulBAEAsV5B2`C_)7mR?<@b|7dzLlO+?>u&tz!D{ z@}4|BDJj*PIy}=zaspOKA!{}N0L;0Ht8M@`;l|5aQ$6=UAkn}S2JX*#aPx}<**(q} z769(isOI(KepKQGdChn|3gYui9O_w--lirtNZ3=v@w%J-JL*%j5;%hzgiORLwJSPO zru?*e=>SW>3Ccvx<98yW)h9qa@}(k11jv}J8oL7z#0jLxG7Rw$h%Cb>%-YxhGhWsj z@e+Hv6GO3PcW$8i>7zx7X+m(qQ-=UGYe3CkJcaeG=U-1F(Bdr85i8J7Jcv)@>A7sO z0iy*ViyZ;l!rVI(4B01il#SN}6K3Jf&)V@>kg2$Qa!FD*H|Psl>BCx)`5Tpo&5~`;58t*zt7qh%t%cEb}ahe=d?sU)yZ{&gBPU61aZ{X;aDy)T$$KS0jzph(k$vPo+d&h3gLnBk}rF8BNr)4 z1qv!Dqq~tj)zX5gh4ZX%QDQ#;0|K>!;iIjmFK(L< z>Ot3xli8_A6DP}@0*u8LdcFKrZhD3^5i+}Djh3aZRFtSGWk8gI?s5&x>7O&a{{V^O z9w6d;onOv4q%&6X2ZlZz_*;O~QsMN}4N=LS8e#KO^26e3PSSjKC~2CD3B+p3q?IiX zT2I1(N>68HE@Yfc$$=p%OR!=^@5hKdZ15J+?ItH2sRCq_Af4ACDNDQN!QIBC<9~`A z{mj+;qs%;^Pc)bpA@gsEcz21FT$f1lR$)|p>4);AXC~nojF^)mV%kXXr6pb+(88kGW{BN9 zxd_w{9ayQG6`Hl>5;JCZjz&G_nm&e_utg1M6k zbkwO;9)5poKr^U@Rp-(Wm-8T##j`Vi) zFg)C9_sMEkE3vb`z}AZ@pTYbm7n*|!lNqe0r>(A}rjkSpBF9TrR^mw=n#!(@Ok{>2 zD9WvCaMEtZ7?gsg5E3dLnYjLc5FE^U_Y{Hq)3rd)M0exl`5Wg483zA2?dRWj#wMqnB~a9;lH%0h3X3$7Pz6Nd^*M%i&A^i z9Mg+iQ}UU_=Ah(6c`1i5*G_6-nn4viD3n1n=9Z>9q>WVCLtw0JYYSS#j+2DJPbvao zCcorOMrSZUKaEE+@e5I?+)IL%rAB3sN4+Xy!|>0Nxj!7{95V;6udT1bu{outtXjc( z*I3$WiD|o4p1y+8)nKv=(3;&EsX!@Bb5dRC z^&~x6$2{UCW+O#Gk6^fqan6wEY0g%G&rM2b z2UF99M8JZw=`6v(70hYV^9?Y)q}mD+lt3v;L!h?kVP++qep(CG;(<93n8&rHds2njU_ zN>Q7eGqdS>Gdy$0JW2;J%@O=-3YH)o+A$zsa4)FV!1lhp2{?qQUEhe4R{(*?v1X?X ztsEzGsI4qPE(rWkecJIqlBsAh8l07rPe~A-n5^{3on%KvJbJ7oTr)5}OJ4T+sDV@pWBggCIzui8Gr{g(d#;n&PRYARlB!Femhc)#X6 z7F;V3!*JYcj$Xbwf#Oip&b-4*B3cTJA`FWaTrq-1YdFjeyq~oFvY)asa?rhjjl`rV zBu#cf%isW|ykjFk@wZQv77l@d)J{W1~t_r+iMF@2}JZsu-N z=bn1;hr>!4xet^u4o~Hb6AtC-wD>#|0HKDIQAsF^sZk`eL?ogzyEQ7X5R~DF{-R-3 zv(YqcyiWK)CQ6i&pjh~8TZX6>u!j44v0F=RO~cGqIzlDO+y!ANNgx-#torlJ^4Hos z{tx~=cyr+Y0EvDeWBw!I7;h-@*C`44w+ZE!tblVp1|Ntl^h;4eXIkl~o!8-v@W{|L zx!1rSPJft}4CgB7$f{5E_)m@sTh1I2kAF-a?vAEuI;2g9bW z6TTB$he0BdG$@TJjY~1o%64b;w_@zPVkY2mQ+J#hiI*`+1iP02vk)4_n$|2>?%dIz=LatH_9Nl%+26#k0qc1$lCkbk=Wb#D0Gm^tIi~zv$F8)#42TJZ~VLX@57Bqc@5>Rc0- zK0=!@7sBdrs%mI)NGNJ4Di&0y!)I9Isi<}R#ag0+DzaUjZpzKBrpJ!ghLT($gdI|M zbG;h84-Ft?Ou00Bl1VOp{&AxQ3L?ZGFd=B9%1|7xGibv4*!rDFAp7wY!Votct8^A5 zxqV5!>zRI$0+^{eg5KxjLS7$G&Cb-hm|5kCLXa}6GT49)fP<~Yt@GgoiI21rNH4vu z{8zt5Ba4<1B-%=GrmcRSUQvCRG|{Ng*YT%Uzo@PL$F%aT2B$3_7u{WH4$wK6bb< z(j2QzLs3d&Gpx|cq|!|joWL(k!%`#`VLW(@LU@X>Xqd4~tV!a#v=*F1l7asK15(7j zNqV(0?ke96gN z=M_Y0E1X}JJ^|=4$4Nt4I`z#{PRCU*od{xY^Y3V|y~ffcyKfW!0NH6;Ysj<5yLM-2 zjj1CJqRS`<1fLPPRZ02fU!{I36r}L?ogD^f;^i)4%Lu-CN5igiw)0-Z+TWPrX*F?5 zmOnkR1~2%%&(O~cNf!EOK9y;a`0Yxg?6n35AB6aQS1sVw*c^3})wNSbGD}@vge>*d zj=(d>`ju5SOXWZS(+ZSsN#;rSh5H>CbYZ`?j}am04o6(|bHvuLH^t6nmz6oU!|P+?lC9M(#$@T|QT#{Uu4?}Pg}>Vu3g+s5Qp2!b zPQ|J5`e`M@dAggKDd~BAR-VD=>INk7RKr~`A@au?l{WwZy$wCE!y~;4mbG|`5~EsV zD#P}>L|b3_dD;nz5_ja8bAQ_`v(eefy^79%DvOIM|x^g;gs1V6WJ8x*PKUO}05yj=4@Qow2W zz>wQOGk|o|3-AoxyDVN`H~slDnpv6_;=iPQr$0>D1PymfGn!mz!k=OFm;M*O@ZRxP z?BR|0(_i+BKIq0&@n#f^A^9)aHGqCHFcU;RJD?0NH7wPnehy}VSVGJ>4|X7r=5%*WI0XY6nG zSI3~Jro=oCeG2Y3C|G z1vynQU-?rTix-jMX_uI2z7|T61}{NXEVQ_r!9E{PEh(KINEz70k(iQ7F>6AD%v-5J zyk?F=Gn~40g=p*tXXQ+rK3)+;V3OOTbPzJ3OH;`C{1N{Eh$Sa4a{mA^RDGDRe-3#X zkHa+Nx^EdUOcMj;h%mfDm!2zmaTZD1s+5*kCz3-X%-|WAW|J`kk5TOGiL>y+YSyK& z6(ve$Ni-^a#VhwQ<(;=&i9vW77<9_rbb^$GmIR0Jqzv^o;U5{XUkEva!ygX0Z^cY) zu*Z*>xuX%~Od|rKt*4f1F^1Ap)=!Al6>(Kf5e!vicsfKJsMb3AUd6`BLVKjjTBaaw zsF$e#R_2D;+njkM-I<7)BfB#E01TUY^*XRLchZ*u`7gxk8Vq8C5X5IVEp`)GO^IRE zXs|mpQ(TxT zomFAmFkx`>v^#IR*~#vd>hA94^U=O*9$VPH%3;yAv8vk2?*9NwIYLTH0C!TA0lROi zh5hgIKf;U(qK=}jvaU%gaja7Hn6@Wc#!9(lVQZPBW|B!_&60L3#q?52+m8sxW9Q?h ztW0)t?xS4nHK+3)wTi}}b5n+u{kbyep6|d227!_QE*^&}M^tj(D|}j0mNFC}rkbgV zRuYD|fJ6w+qhLrR1EKA}C=7RQ5-9mLgI{c;f`_OgwF57i+B%1q@bMKK0#Cbq>Q*+; z0stC|4SV|QzhHc#M(s_xeCMB79Lpf-e67n~aPtiksET1`m+ zTaa1Lv86Mnr`9Gz7=Qwx0D+R=0dfZYwz(VWZEeOuMpy!s;Xp6=c=`ACzYQlo_&pEc z5z|+=BSZfHuTy*9*Yx$j7A=xL`U@67tKTu;F2_b3pN%2r%ngT}1sIP+*FTv&Rvsyq zdSVb>HK&Thv9ezF&~NSQZ(%lZJ?W`_@K(9De?IXh5T5Zhy2J5ukY8F-vBFsEW|F2; zYiC8a`sO3(du!i|eEOgY5xdL_pEti)xXJ(*00QHO+vb{}Rxw6yl#(e}yz3g1a>VA& z%q$5S8xSlt(`v3NiY-SZQ=$CBiC;+0*R_Vc>kc?NlZH~CFbuL?OI)%40Jx10)9LSM z*$%8cpljhBD^}8w4Ej!*)O8zE%q8*JI2L}WcF<- zt8=VDx|;Y!Z$Vyqz{x4z85prGmoN*ifSZtSu(`P!>NV6~gvSP?&X}sDB~MBQVl7L7 zTU1&hASFeEat-X!qDWe)mKtSIQ!S2IiOk4ta^&cwjTj9!HXIF$!y##+)PrXVA-S>7 zkbiwdx|}-^qJ|inn1v*Wi6PaT?g33$Yq36~ekYYRQgA)gwH2uWAQGZY9h{Q&ete^e zVFqHH*Lc%=HW^dySb<6y74Y)u86IW2fv$$vU@k5-HURtf93{pkblGzI#Ium*&*C*X zwx#raBU3lhv$z1RL)Mwl@@fdj;U3RrECIZP6Kvyhb>H9HwYcDv;pMD%ir%PaIyZ)` zP8n9E>taUBZ*IVkw=Ue-ebH#RgF$+w|f@H-C zmMT#U9MQ`$0-tw?)VZS66|rpmwQTd|Jt(S+f)L0;v0$IYb8~xo-&^+AT`ZJ(g| z-qb9{lzVG@g_<;)mO5CQAGyE0NJu8Oev5-(g$}@zu^VVDwXMIm1*lH|9mYOqA?E&O z&k@a%NN{=l`O&Kyqo|D3(xR?xt!rN{#^1~O9te>&VG{(z0!E+{VrcKJ-Xu(gew4Xn zr8TJqn47oS!1 zf{fa$#&s$Vn^=o*{{U!XP-LJbL{Lx`&9WiC8d58p8)RY^I%;M~QCbz^Q5o(6{dDJQ zgH3bPhZq#9We*NQ>iIw;E`fH_C;(V*VsyE^a(WRmSu_VyT!H80X_Z8JXJ?0TI7(6! z2rTYvMx_nhHJF;-D0yB-sA_5#l`2+56G;`-R3Wq?>u)o9@295;R8$&RQ5&o%Sd!<{ zD%?A~dIZ9Rr6+V)9}ooaazU;7h{CrIr=_H*F3gez>PI^_Qgc#Rvqn?*g#%wT`&j#N z+S9o&c|bS~?kIkAi7@k$v$_BPivdrbL!4IFy&SliNz4(fu_^ePsMw^PB?K&M7MY&l z62ul8T=1!9c|}^6hA11ZkjxE-?aL~P#ba8oE+s}~D#9{FnFYuhz0Iyia&B+OFxE%` zHXk^SLXSqu080}6)#O{Md58k!TR?>x z39h%RHgBW6MCq`FUQ|0Ro48vIFTbV7uNqXlDMI(IdNnl3zR-GD0L8;y-SWP1A}LG- z3I~ug45}970owZi0Is}7rS7<(1A+N?+nr1^gCofVnM&CKDn*zbh$GZ?(2aH0{Btcz zDQ9RW8vB{_(-$Xi^GuN*A6ay&&Rd)GZ_UXV@^L23Y4 zQ=1#tufHW=(XHK8DJVcHvu9w|)w%n#$KrnMTWr7q zazF&_bGYIm^{7>wjp_6Dh{@hB)@u!Ie&c&~zQBDrl^;;+?eg#( z;z2baR-pd?Huy4y>WI}U6|xqMMo^2r+UHUMH`~`w)38Zd%vYtj>*wsYWV0}aHFh;; zax>Sj2>jG;@bwW&i`)V{z!Pu@)Zb7}zLxajR53NJB4l9{gzqZ0xFxC2&oP`8!%@*# z+Tu$a9fh>LjkVK%neE0a>ODQ6i6A;#+dRd&m$_O}f83Y>?iYq0hHI>6YF z2qdIA4tzAXDjjV`fn)_qHqDyH)M_^FG$)Mi%l`nC^)2W7@-U?UIdPVpqijXNzT;bW z01t0%exAnMV>QJ_xAm+Lf>NNxp6prAPB2L-R3HQ`!P?sbMxQTJ{+wf-U_5P0kmrqV zMO^E6^vbSu%c<-?OZ>Q*KS<>Yf=D~n;2xUV`FU`UM3SkpxB}Y^?eh8e`ti0J2q74f zkMd!Vb5Zk#cZ`~%K%f(L?AqVAzMt2>d&a3d$9M`JZR}%}?HT*Z37B_WunIi>P(~|P zI!4Di0rpaL(|s@PaeXh^{ATX$OA(mz)P6a~NybiUl%7C-8-+b%Ay)039SKken&Vr5 zZV%SPk3+_kC98onX8aBg&mFH4wM%jX>fCf3y0;kF6?#*J1YY;BYa0vt>POG@@4)Jk z6|XAJC-d|smR+i z`FNRANl`8XFnYL+t#AuHfxdvdceT4|Z(9yGxIkuCLVt+h%nwpEup`aB?;aY& zG6c2up| zB`aDouaP6Cv_z$cX7T_x=jSNbcR#{5KAwZne}14^@-WbO2=ojv8>WK#e&2sQwVcOw zAC=Gb{#fvG{Zp(aYaEvo!GVN zSX1V)jEb7-cJ5F12IH{Q@wk@<->E=N1p(+-idpGe`RBq0-NI`um!iISA~Tnp29SYC&TzuqJn zUQVNdqym~EEpeT#c0IElJldNL^aOAT7A6pk8a8CmnI*|1$oiO{ht$LdSja!(YHKZf zfl!ngX+^zdUn^VjgJW@iCxY>ErcIT+v2aV8`Jb9Z%EV~7dKi%EYiZbvlX6dePkZh= zYweCjj8mmcN9(3Ba4O&8`?aN?Qqai+zX+I=ttlborU(iG6x&R<+TTqFa5USIVn%m2 z))dT^yj1y;&;tWtFI^hVn7#CdtUDEq(xXEn=As0a77jt|8*n|Zx7N&XYdgEDB$HxI zLumDL`G}`sC&=FuQ0V|NOA%*qnvSi~k$Q4gAZW476BLp_uS-xGp+U=R>H}O2Jj-C- zqeG>K7Hy9=^s|K0d_;f?GM(r_si!e!F-YwW2x9OPcajYVszt)C%>4QEj`ii-S`14I zO89J2t{5$`u{vB1#`=;s-{^1>%k)1RE+0DWO`34?)!w>B`CteZJUC>{ zVab1+Y0_9ys%mvV4e;zU5ZOyEMk3^pSuUiFS#&xZaR$&qM3VX&g8bc|)|q7NHY&iH zkt(1N3)jeTFQijg5={zYv~cvumTGC^hBhe@*xcEhMX~c~ZFS#@z8y!rP~K3fu{!Ad z0JT6$zx2qxBJqoq6)X~zxkw?vCD?0R?lO*mBF%?G`G z{NZw?ttIyZa?|Gv^^H|=B~wcfBoe0n{>RtT(*FQ02A+bTUZ8_R>-Nf{GX&x0DI`z= z2=`*-Y95_+j&H^=-i>lZ?9FPH3K@wVABp%zaeLV7V%ytJJm+d925NvHRJaruYX<86 zZyu?!>n$Vvw?=+WAIS02>ok!hU06hC?q6YZQdnF3pbLAGrr`Xv?QRHAK%gffdT7F<((%H{00%A1{(jwS z61uTx>Bs;lU?|TpK+zwSRy9XbUb4zgQIB5iza`w6B3mD2DiV*?#dzSYe=lb5) z+lXc&V5>hvcK9p7*_sN&&X|HXn2qg8rN>d{0-{tAk$pyl3-;4q{=b&{4mT`KqY^T3 zOH+nN9dhO*0$807o99Yp04p3BBazIZOri-!QbOGC=najw{#;3DAz%h-Ufm*n zL5nc#Vh|hKTN`)ZTVMS+$eu~?k*B+#v|#2wnIgcEYwUYi6TbU{?dil*XqOkQoB8XN zbBK_9N~!bW{`I9G6+)z$<9HQLrAT3Ma5W$8zs}r3f=ju3T=UirmvhPuMv_HBV*rBE zeeb9TeRTrkz4gCs_&gr$4cnH_Cg^@wC_Z6neaHZU1E_%hWIZ@indV;s!)ftsRhmU2 zhMGZ^X--(!_XheKSl;*bwe7?zo{&R;Mt*mfnKs2$px%P8XXOkLFs?qmNfbgj2hPMw3z$xVhAkrS|5Q%ibaY=2DBS%hMc*HBa%X(Ev`=3)b_wGJ*W52IXLwwL3%Q>S3D2%3UJ5K9u- z{>8YpqLtb`mND|C1{Oc!DU%8|RHqJIeaoEtM~>lo*^$m9kMcNUi!3kTl5R;1RgX z_?Hg8J(ZeQG<#>WX-p<2P??J{sc-#9ecnQ-Sk>WNa2C3nE_*;Vx4OryULm)qO zBnQlOup_y>!1cH{^z2T?#^NxON+xd(?r{hlsiP^Y)6)qK>^PXOU^7nvfQeSYOSQ z>ZjCu5`8UxB5l&vZ6Jha)9(^+y4O~6R^h=_MAISe02a!0v9Pf|3t%(GHRrfRHJseV{`B7ZyThgflQIgRC*f=`f7b{H~n~$UJ(wb31=ah>`uSKQlQ5_ zsF`r00kanMuA||2RK)1wN0Lfn7&7^Q&@)>?!$4Sil6LjsR?)*CS%c&N%9U!@*C;YX z>4lxk5q~?^j+tdh=f4)bEj-_b^EFKf2DWSo>S*Yr6D*Y&{UZsY#C4OTDg-ECg^0`( z$OuzzDO*crE_{WMh0UDAr73a_jvnpo%<<|SiS3FuUNZ$N5xXZ2F$AeZfC#BC!N4`t zGe<0Vd&qt-b51EqjqR{u;pMrM9-*a^ zn0@Bwo$L2rpU2+@C_cn|!{7veXU>1+4;6eu#d${-=B{_F#jxyKmsxpcr6R*qtkn|N zQ`1KSOkssAs?wN(fpBwVcJ^;*_UyG{F~(}Ywh|RFODq8Z0HSg<83G0975@NNKcIb} z><{$k8MJY@bxM+fi&-0+tdM1@tOYjTpa<5etf7T+!z$;Qf>H(X@S1Dj@Vdg##G0E{*z z+I3Y{cVhX_HA&$P_-{E?Du|jCV3iGVBaev7mf>=tx!?2G--(qaGee}_%vs-Bx#@3M zml3mqR_T~E%KreD$o-_75&~oZr zUpJ_L=Sh+ZS!#QIM*hIRn2U>(IrjvLnJDpJ@KdBqnW_kSd6i@(Mb_g&E(QFjP%b!7 zp)vd*i`j>{Zh`rnnPKGufk3#lYA zOOupw3Hfgq!tq*nl_jB)X&j}{{q%~Go2F7qAtW7bZ4U$EC8l(+5LmW)kTkHR4s7o4 z7M+cVRu2$@ilxT!dWybn!tKSJzjV`cRuPS2G_%lFGKuM+5{YjV%Q%f}NPA{iYn^YJ z_uQM*r(tFxMME=oxdi$)zj*d69ybYykb)HRN^>s7g)fy}_b}SnqeT)UYS+u2!%$7P z9f{V!+iPjKD-^p1n;zk+@eW27;1m+5u z(Ad)PyBVLQhDgn!EVST*_~g-;9j{~S+l*nL@_;s!@SHJvkO+IVvlh;bTG_&dbV(;J zr8MxX3hIi1GP;J2NLI(DsBSWg+%2t}wfL4^b?N(b5m?#^3&3|J3I%0#6n)?gGYs7_ zdOF@2%DkyhLU4+%Si)WP`=TB;}{c_nEQSo6(d{RrIL$9#a^%W=jnDPiFk(0@N~ zNb6-Q1tAjT%#;aP4j2(uHKl3}w~l@BZ|vdBG@QdHG;)3eOI6FYQN=Y?4GTvP?8jHj z4oA65U3cSa6RMDq_^h1XQzlO)0}ahSA$?Bdx{ zD*RKy?rx%>>x>3tG^R?1N_1ID#~K4*s`->y4=ZbZ4!g{W6J@2;9DoP~pM^;D&Dz2$ zB~!cN6D>uJn71cmt@Ih?PD6BQdbyHF=P}6}0tz~|SrLK!C0R%#)N80b1fU5n0jc*e zV0Nfun9$}R!p@|T+WHIaYuev0V0f4S0Br?Xo-zti%X6MPwq3!w7Z&ZP*5A`^I&-P> zjFwF*^&R~=An`^=e)5y{g!H1LpcI-R$J9=MFsN?)q zo!Yq#8!BiyG(sjS%np@?^-Xvf=xr%d1r{7Sf=*aach$@MkZQN?oyBlrAQ3knebr@ z5r`8&PGB(&cB2;4h|1-ma-u0|b0f&Is~p0>1|WVCzzxQh2KK&|w*X9+CPL2f-VPj8 zi{vak#}R17fSRxd#4tQxvDJE6)Ie{psU0Q zde)5gFX%If6eWYby`g$Nbm~i0xZWHv+;WPtD1;KkBw)r>Pb8}#Br2-4yrhikwcT*4l+_e2B1>4X34G4Rl0~5%zVthv)SR6NaR9kXO3`LWdBARAnJaV|e-1f`N}C?1BH^UwAXtX%nO3n4-3%p0dVk4K88hPpbOMw(jaVV;f# zc$ceB)s2!uV~U-X)q!UgDh>5F(}cS>YhqK50$%z?@Nkt78O@lpd=;s$gh`z+iHSm}IuKv2z^ID`PEX|4no7_4PJ%h9ArduTz{ecsFe7QC z;>2*;NvcgUD#mI$tjRQihF}#4ibWb{8}aQOlf=l{IAr1h25LpGQLFJJ*NR~2}lHZS(00NfKXMg*2)8NXD4!ZF>?eJoX>`S(G+2pYDnfV8rn^Bi5*xpGDS7a zPNX@G);+kSe^X?xQJ0BYK*JUaP!=I1nzt^aoG|QK@VJFcmx%u2ijMZ}SnpV77`OmX zaidwX;rUtSUTql)+^h~jO^mDPB0 z<|L-UYv!ynRJz42Tul{aJq(B-X@+1Uo>gL3W-53aW@2Z^#hFS-DcnxzY6`QEbz%9+ zHob|m(}Ys~vVyDD&8vo?4a8|m&+YNc{LkT^ig@29V;sob#Re(KT%pf!S4k35)@J53 zo+_$(u9B!?YLVj1K^I#CYjJYf*tw~~;}ogWcR*VtEo=t$fOBdyQ-I2;ikE~KiBhCU zN>1={gd`J{z#8+bXB<~sh?uaNnl`3}S6)`7#i)&NR+f%Q>J?_Dr<4L6La`A>NdRTg z9xd{=q@<#3nX(f!ou4jZJH(}IRMi{cv2I-N2*w#mP@0|OB;r<*kw;^jP>kvzCo|&B z9tjLfO0Y*oh|;ksJC}x;E`0I4uqMhIqj^9FAdS{EHZD0wOyOLC$<=&|g7b_OIBb}vBS}w) zOMy_sK~agoWT-05O9Zn-lSxUC)fnc;?JD%uwBUtqFA9a>_Bfd^fI`fa666CzyFptD z0nP;3X_JfE=)rAWqc;hKQqqZwQq0K(62fB1a z=J8JWi{d9J_??V?-N3mjuDoMZG_*BX#wSv6DPe&@m#v3WNTOP5nMzrtvc9=olYR@p ze@{DDyaKT^rkPR@RIcc$K`8>jhi3ww?G_*E*Z%+-pZq<^!{hdT4`QdZJ3}0qxHN5T zmnvMWKnAH->UTovyGBp|nlO$?=2L}9iN}cHQP<&h%8;~5BudIj%g!T8db)+_wa{8O zlPdy2BXM{(a<-1i+EPdAB?B#K2EwU#voOA+kfeTecCWOb(oMbktaP1&w^53mxtNf= zP9RK3?-@gRiFR`CW2ZbI<*aG(4q=ZHsfP_}n6R~~Oe!epV0K$moX^EO`R+ip(;C|0!bUhk^rlnb*^#qcWXOKvp-8S1F`mLP*ToMaVq6j?jIlIj8LjO;^j_7cvo{~u_ zJ^L_r`g37QSS4~;nWGsDfPL~3xFj4K0Zai4*tuSPJ^;=IBs5|ay!ik1Q02bkWYv2d!{ zi^WZ!ETVjrDQQWe8>$RJKBuo3uy&JeN!wCz7)&JenRvyfQl|sqbs@S|jH!suU)pbV*#<3}=mC~M_gGDV(%B&%Z z?QT6PUuy6jq}c;yPeS*S=piJJ7U)Sd&Bb%hk@Lpd{-5oR$8AhD-_axVBWB^vz?d5_V2Z6 z#ADEZ)9~1kxvCWf37DWk28yFl(#}8;_1MXQ@=q?$$#`B3ONMg39SueshG0^FQDB}l znI@zv3dbBX5LP2{me$X&A3I|)*sY_BT*;FrElZlE6&0w}MAR1~6Gv-U(mt<|gu(0` zoQw>Bk%mgtC;~!302>UqMf!;TQorK`;}$n3hpMX-NhMMxr6iJE z22&bXWC6cO_;Z69ky40A7)Khww;Bn*69pRpP4pJiTWC1+oszkeWt3bB0!z>kXia`+ zlp9J+q$sL^)K5Zw`Rm1;GgCB_ll)y<`B7SGnIu)s4nRakAfq+H1yo_KPzILaxkRKS ztzd5lsk`&IuPQ$%PEeVNAQHvfPEDt-wT{4>?4ck309wU2+C!QJcQyE-;@2`zU_Jo{M-y`wh5X~o?;M=lgJN8}9ZXYJ zVbqnhp9MVh*@!Z%4S4}s2vIbOYycPH%YvIPAHOnACRlJz>Edj}7Q0_A1_E9n;Ws4D zmPsTH;X=e}&PKUhmZViUg*3F3?8^$QpLz>S%FS@b<(LZ-eaO<}*Z_EDg*Skm?b;JY z(2;s@qrW&RRK$`BLuMZ0w>Pdu{i3m{p_Q2=%Dq=tnneP@Bi-&S1;vhp9j(88%tL@h z2c!NDxpjupX1J+y*4#2DJo)Dr$0YNPJBIy~{?I&>n59fym5z9!;2t~7m`F(aRoIRN zQOysBv_ zqfHZw38H2U(aES~vkmozSi?@4TA1fV&ubPLBmfhxpbPJPt}(#jB`UH>b7O4F z3LBTw5nfJPj6`DOd<3GEDABb-fa~~Gi#>@`roZL3n(@EV z;FeD8l!hkB4P9F?o7VTdLx;jHO35UtjqV9G*Pj|Qn41PYPMvtu0;HpN3_+)oK+FFC zYL+KJECC&@zZ)1#B%{6EfJIy-t3vc+=hDz*-Swrnk0&+x!}fvSv+$`Z8oR! zHIiuD9LsQ~Fj*WD$3R$%p89bB!eOQ;t8h6bix0>11OBFbw3LMbyWtI>redXsTETT} z53d))^2Qk%Sz}V-Nrb9IfBddOz_4qdOu&zl8fm0BT8cIyk+(fl9h@VCPbrDxJtPjX= zqZ2Rtsmix&yX%&^4v?OIYkNT{NlK?F00s=D2jb2tm0Rr!Sf?j)x`2s;!V#*+Onu?Y z8zIV|m$??pZ8z8EOq?vGyOR1aq2;Ch1>x?`?Pl3fNm|N-2PH}`p}GD!m_o-nR|2N! zih5T<$fU;75~Pr~$!077Cdw{Nx4F6Csaqyo#r;ZQ#J8b6H7!`Y?5@$`)JJ*{NDe}P zK5h=3J(H#7>^#XTBs0_Wf}x3&o|u}_by&9PD(ewz*+{XqxGj4bg(f=>xnY*Sv|3ZN zP`6Q*T!$jT&Dnq*4n`n03eia;QA`phEVsR!MSm(eus2n(Ad_o)Yrs=BO!4%nAKsVG zg|#fg2}aOBvJHlzhuk=Ch9myRm|hnJm5IvANKm_gR9$UiE(ZSqP6m~;F)C37B}`62 z!uJ`!J_9K~)g`EurA%zZoB6&)o35}bs}8EedQF{QGtZHf5W!uJfPxK(wd{4izVl4N zD-M$6fW^Qh3-B!29WG2@oxXRF0XKFI!SnJj=^OC;UZV~YGKL*$3hGr@*r_WmG*Gx8 zZ`0|p0N*XmfbA9&a}PBN-aa{ius7gqoAIUV6E13|AR$T!-yt3l*Q1uHCtd}sSnHn< zd^@S|={zz@irPBS;va*48hFEn&xgqz-wA~Hi%C;079Aw9yT-MYP||cOX`Mv$^CXDs zt{8Fa5*Xp|%1X*oLP-Hc1JEF!!ygLi5!sC~lb^Y3nK4X8zHpy-zXeHzqSMJIl(`P3=KL};`@%^XhYD4QN~RQ~&}2zw{{Y1BxVIo-2~yNhK;C&_oC4Nkn;eFN zT0`W}!(WVH0-l;hM8Vt+r8+RE5n>Y|kOAZ}L<^U6QK@n?I`Xy-q5=N^$T$E4Ve^DY zlAw?YFP(FRo@M3=dMKL-!>67}71m1G;+b;Jqe#*s6qs9Iy;Wh|Nj<|}F*1PxDPVaw zLFMaM!zie|Sn(F>dcs+wix|Wrc_xybDlpk8YElAFM2k>nEE>w4Nayki7RJ{gi-1+k zM*5X8B!MuM04N-nus=OSQ@hDYa$F3Hkj-Ww`3(UyXqQ*XbaTOoqts4ks5S0dcI$+t z!~zgMKY(nkA-bp*}0w!~0W~alQ1Zijoe6fp5cb=?OgN9xu&Y$&FP~;LzccOv(E~ zj-Fi9(n={1K~+0Sb4t|_p1X^X?!~nyicZnOVsW$7WfcmVq>w1qYrmgJB{KmHk$1f%lrOP5JyV znX@?DKZXznS|^3Od4CfDJx&~u$lY_*YMbbPnWc&#NRJv7;A%Tv}= zP1QCYRg&S@Zb>DL&Gu2r|%Wi2DS-3$mzwtt(oa<2hw za>YYc;d9~>BF1O0sd9=#qBM@z3ik6V3#ehbfp1O>#jOca7=gF|BpQ}4Q-5(vz?g}H zyhvef1zgaa>V7l5E6?j6{K+#nm0A_CvAG(Ne)``_{+te($yp#8+Tx>)iGHRYVbnJh z;U7(yH#$&$EbzTUT`dEw)U%}+Nkk%MbJLX7ki9ZwB~^&FWfm6}18yRm$qu2sGTy6S zhNFi#o@B-petcN+rm@++5`Ce*)xHkbQDc4#<2=oTSNJW3o^{3fgAIe@u-;kaoJQDm zRXoirABL#qs@ZE|G`M|Cy(B#{v4=&qZ)xFneB_?~PVrUT1pxGL^c^V^;dX{Q2u$n} zib_07a(7gred>qETYTeak4T%2$%oNhr;M~0yAx5mwO*B(g z7eOUk)6C`uRgsKyDFRfqU|g-2jY8EHYy z_*XtZEn3CBguxBO_;p$V3Axu~>c^!jb1hUOe?VyT6!gnT(O-57O+YMa_7!}p2lF3je!#zOdOrgB;wqT% zxN*!Y9jJE$e=&J+f?+OxLyG@Y!2io?uGW(tu?-A!z| zd65^6$99Q096&)}kgA6*On|i=tWN+)G5tT_zBcj?+AqSaet!(H+6+S%#d%W|j9`sd z3ga{tbu{8NrmLha)K@-baG(tO@#ol#4D2$LnUWTwl0jH~)o}p0qrH#k-x0JVZCnvD zaR>@hT+0R8hK-Xw%>#j~F#VgbD(+tJs|vz#NF=4MqO7f2$fibDgr#GqNW_4LON$8r z^C;5ih5O+}iy^M;THKnX4}Jt}d1{d=VrF=WBqo{e^3n6B0SaGe+#W{8d=JH8iCHN; zc;(8+&cKi-<&I*eU~O=2Z*Vjtu^e?SU`&il5p@RykMVvUc5wr3nSJrWwRdMqeqmwS zv=+}@BKw77s=;d_kUgB&DNvVN3V8@orHI!~+iTl|cp0xUbKiMYqu6J5%;`=MXq*po zEfoI%>V433XD;pdev$lM{{Y3C4N4wpRf=x9RM#IX*ferSB!nWhujRV{G_g7XbH~2+ z4NrzbocK|mY#&^s<=)=ON;a#zC@6w!a;L4bxhH{onE7Gh^mvCXb4P~0Bv)av)$;xm z&s@DI0(EDSvzGBnEM8g}#BOJ%T8RR*Q#_X&_@TlO&~yVmMS13!C34sz{!# zpFHEjK@!1HG^ho|Ui5o|!jbo{#qYImfqpsjv_2sCt6BDtaGrfkVg^|046 z2|caYyJHt5x%Hv%?&ja#aFR!vdi3Ucq3yQ;3|ofBggo@f5?e zShW%;IM7F;?M!~b*_%HJh(^%bGbK$*JRhkgU@1ffC2sAlYj=vLo%x@@e+#@F!M@Qr z2ih;~V-$WbRT`WEn-1{<4U?HUtC(hwE^z9FfSe%U9yA2hW_%Q&r6zn=EdUVf4^XK}`iN zBUOw-Skk3COPx-2MgvV^c6QOhfAl};MEQ%L@C6sPmg7qDipq9QD{LVfLkrqGRv!TA zQqsIc(x8_rx>g>J{(+butDj>2d+@rlznu9~!jBlazs7EJqVU%Q$MFT{USz~EJTeKU zd_^c~WJ=0tg&j>)h>cYQ8i8de$~dRa!0q`smHxK^Wnqf^4whs%0Kdo7)W@s#VOu8y zg$dc4PIfaIWwgc5oib=EDY`_(EC54f0IOQOJ>wVrMLyo%8e`bT26+RJ5ismm5{iy` zOcJ*hTDYky9whiYvP9L0r~wraM%niS>BZY*Yz>o(mX*$0lDm<-dC)m;!RI?>%Dm$Pg0!Hu*STMe({RcbKf5r3dk^5qngP6Hv!`i$a8KxY=gC1F{!)xm( z6z^gl1ipa#0hCp zaHOyda|AH-c=^-ziThaim*dBZ9LeHdKS6@>?lp>Xs`7ZH!RczFOh1*W;P`4|KU4xM zRy9O<;tH(8Lv8MxA7x>1GLt0=a2NnxtV1=ZTvqilOWPZB8MdaXY{69$NlT73YPX-ZUEuzpowcKLQ)!z7!zxe zpB*7wwandOwdHjx>@_@T&JyaOYFH$BEUz4iVj~44W<-iO-A-)3cH135+fE7~sqXsb zI`SIClX%vSMp?IBJfc^NZ8s?MS1NM<058_pMTgCS;Pq8hCb8whq^!hBwCri6a|%pL z5oAEx0duzqG1F%&yg^cm1B8bpHS9@kY&C^Ajh}|@X3i22CN0TYP@UpfkX#4LpOA~E z!@Lz25FZf~&lpIPCPQ;6n)2lbWc3>zG~%SGJJYJ79KBBw$*ywtib+C|HEk_K0zh(F z#-jFTaMgW8b{-XiVdaOyw^k5|EK#U+kj#G&^4mqW+iABQ_Y%@udc~hJ?%GhW=J7fv z&0v#80mJdRbL|$LEh3bIJS=Rhs3cs0qie0m?|b&(gc)Gei)Y7#&?YDX2ANf~ zv$mv;FwGxIG*uatsJE#fQ>ixG_v4i$sYIlPHodtwq)AY8A~2q6b%o6GB1T%uOJ!{5 zU~S&_hyK?J~()TxU{nyu+8R!4aAJEg^&n~RH9D&G{dE*dP#GtowE zri8{j=ycRv5x`gv{;Hba@+>QoLogijiEvfKDe^SoXyJT(1Zk0oIhrGXRyXuE{dESHoz*IAl&Dpiqw+|MlEOO0FULO=R;bfADq7%m#{-NTYa2Udd;mBKt z$}9)y{!G>2q)T>f(Yw|9okNdDYQEIkNy9BlBr!R?9JP3GsT{9u&B^#REao*tiYSOs zI^ts~023qH_SE@?mLQLAIU7Z4R{c(YQS}ebyaQ6hNym56`@nBp{{TL3`$b30cylf> zQxz;LF!=SRrx3NxMdBA&qt@uBQuYSpL%HHbV$e`lr8e+;oh$H*LdVC zs<9L{)xo8>QzwfYnF(3%07&2QSaLOQUvXv3R*n+{l_Usc3v0x=otrhR!rz4MUi)$0 z(2$fP=}5JJEY%rvIkDC_#Gof28%~$~zhJg0t0A5?XNov0AEHE7byir3$nE?tY%bax zpRW~JvXHV~r1GKi^!OIJ)cKe$l(2`4v?xNyV;b1lfn$9&y{^QAa(B@2saP};)Bu|w z^0U#Iv=pYIu_|RLK-AYDb3XiR`ovsHk$PQP8gw#DaySfQk|Y}y)F~wQ{w=S>c#WMf z1KpuJqv;_cz-B-i9#Oy3Ot^Lexei8-=AwsAESX^RO$qQz-z~gHH1Q>&JBFBG_A9tZE~eSg$Kk+RzTGqW|pF-r%e-i#HOLL z$iYA*k}v@SPz}hpcqArd)RokCl^h&fO)k!IiIpj51vX~;Zh+zG^r*4a9va!2I**X~ zW@;=tyAi~x7J6!!LJwk*#5I^Ev44Rxz zw0UOGGv{KEsVm*xP~P1;ui^y0>jRYv}D=Laq zqNqi}Dr1(eSu>g^J!K>fWNFv%klC3-k_GhPYSNTd1i>NpN$^;&DBb3RnzdUFj7 zz#0RNvP=!7u^2+TX3NFOT22jC?AnC4v+i#fkgL+9W4Kj1npUdjO z3EdzP6hNx4y-U)W^3y0yuc@SVcSws6tfoWzwmzV3>_(c6ILDO#09Qw+=Z*gW5W-ej zQ2P9TOTujFo=e1$rbx288vscplVj!3eRzgz02Upe!Yfn5;)u}(jp2sNm4SNj+mIB;OJzL2t6a6<`Il=Y3(mtpPM?oGUbn3D6yem+mcLZFd`S zGQbSL4pjE*97|FHRPDW;D`M5HTEDassHU0-9br&Gi#s@L5TBRIKNGxn?N6F|;nbo*Ll}yq|Re?DhKmlT)TFtrA_Sao~HsCc9RJ6DC>@ zdKd##uwc~6_j`yQ=z+^I*7voqZ8bi}eKq-TI=-U}Q!-k-F7|qwpOvQ_BSh@tGGZ6> z(*CyJ>+8VkETYHA{PN1t%=b*N5nUK^V{f*0flY)`Kfroryt#7q;qcgO+qYUgLQ zMn{}znnkE)SdU05*xcJtcRB!0m)GUnj-#@@{{Rb+ZrNDU_UY0j#05H%)d&j#ZAFEb zQ|v4?9sdA6IV%o9>Tg@~j^(5zfWm;)y5EMevNwg=%1gd&SxK?JfC2dfu-}OilB;t0 z^G;)PCWMP$QGQuH^=cS3@FlXeWx)w~6DT2U2hVZ8dz)K{W+Vgwn>BN;Ve6j*mk1M$ zP;{lZKciDCo4=We;vf>)h&qFEK_nA@uha73N}G6*t@D4L!#FNnxRN2nwjFJ=In zdUn&$Zg}f^dZEBAN7MI&Mp+8bK1SK_zFJ1=LzUP{gsXlN+iu;3uVbc!{!y0%sFFk4 zx#v@_zEpycpiboh6fOnN7IXVX>WV^$vP6zVhTvwswFB4ZzstWECV(mhZtUK4=gdb_ zFs5jua6dkCv`Ohn8Y;2{V7lq8`(M7++g{?V*M$p+`YGa<*!%2@K|zUO9HYvT)AL0IEKMb3oX1x#9*qdkRu*gY zWPF}wE1|uH+?nUNm8%}_BevUMOO&ia~;&MSYw_M4yGas;q(z|_&Q3zD6_F=pQ4vo)Pt#NM!1ua`g zPmWPcsOBRfrpgJ*9GuzDt-lTQwfIp#WXhC$GePT>X_2|oomwoIF4Rt*kW7{(jjyLX zuc@E{DV%qgzhmMHLY2_hH8Q(QAO|`yV_?MSbR*M*ID;-ql`NOtr2r0Z>1H}n>lXc; ziC!@xVMggyNN38%x_jl2m!_y(y+tY>#9Ry5>Mvn!M%wG|z+L>eXU|{Hx84}dlQASH zCcFk*pC{*csEisHg^Gp*8)YWNjmN13`{}n5f)!C?XyUoh#v?Q;{XoPq9$|5z0BQ36 zyK%V4mHz-%-M{{BAakkni{24(+WiKe?{1bcz8tOLr4#U%l;KV9fRm17& zSNvYFqU3By<0F}=LNhh6)5v>NN4ee^BoW+&+T@Tg*bQxKjji1AkTAm{adCHd(S$9DRz7s(%^Ln0P3}+TPQL#D+2bRnuW&Fd;j^Yf zg89elw2`No;EhpHy08Xq8k=I|A1Sfl)NvsQ*T}!v$9p>p5M4@91d~!vmFcG|>mD&Y z<3aMUBWs;I_ObbKjEs~;HElS2=>+3(Qskt7O#x$SjX57klRSnMjyT9AkDK1##C=Gy zu_pSRhS6?r-N|yq{k-eO{1M<#G0QWiJ0(S)p@BEdkH3^}rjMi2>Fb&*hMxN6AP}T$ zp$cpW)pi!P`FoiE8g^O-r2adC=#WiC7Tm!;I9lqcgr8 zOo&gDr6YV(N~%q+$}*BQBI5ek%PM+kz-al?)%EjZ5N%nKXC+Ba>RN?>1hH$}vsC#- z=S7XjH57FemMzwvnxzG@Nf6oNlxi3NJivqKMyH1IaV?n*T)d8s$EQf4Vlc=hNhQ)= zgpv(e*!;Intnf3P7P(uOE9zAzgC$NMkmWToF(Rg!bN>JwV%b2kT`k9@c4uk#tss*2 z1>L=ALGVY7cHd`X~kwKPctPbAP(wKA~>B=HaMXyDu& z=dr!+3BBwtSd{mY%%>!jpEi4w)wR}B2o+KqUn?HOZukdQ-?{OWaLa}RzMk3!ivvE16A0ZY=F z`<-)mL&T|~hPJ6PGLEOjMK01fm;j)l+zo)YskXdV=d2>B2^XjpcBye($>Pyrmo%zT zE^l0o{Q3D>BvRAVRB245$DtRo*Zn~%Ij z=s4nTbkp76)(w|3ptWyX9(sE~IAMqx1IN{}!hDZy&5p;{u+vfxeg|`BrjYXrurdRI z78ZLDe;H>OVw5Bzq6?YkTLW{hn*9fTNWasJhTY&{^p2mA_7N6p5UJIak$$MqAK@Bb z*4o%>Zro&VywIdqMt|FntHe3uNaDzdU5|5fajEZcdwqDw>5u><-lv(nx983U!jQk2Tk@UL~1@P!370S=%hM^k>jVoJj3n*#7`oUJ7iZ-6>nCCFqAB z5a2Oj3+CED(=n=!DrhNEWqb@dNxG8_2Z{4 zQ`DwAlZjeGnt+wKqnx@@lOm@JLo`WBDk~y0Nfh9rEphkovs*EeF?^=wmvL@8kflmz zBsHpa)S9!qdo(M>Y`ODsDKgXD$fKrM2tfo`q0HM|+SI%sDxG$EA9Aku1Sw z76byLwu85Smwq*F5y?mdh7{l-9~nVus??sDnrLN^AQD1y*cV>l3s{k*tPg%MhJpwH zHHCOL%fJ|7e~pEuxrJeg)rh`UEqvnt0ELeC8sE7#;6$C$s+75<#(8>t5fY`iAXFTW z#y*h6gjdTQH5ELp{XnzSK~PH*H9U+|$5DIbW37oKk6ZCNXSST4{{SBKwP+|Ru#Zpx z;u-$_R^bg0BQO(}1*Mn;UBK8_4*vi_{ZAb4%qp|q<>|`&N4-oX$6>q+017|&k5J9$ z`woTV4~P|bYSl=FmXX+_n*@Y(3me8yQgMF7GUgh3@Y@QhfQAfCj{cslZzlQow)kPZ zx(9OOcC`e!EN`8osjwUq;~+}vawJzm0k(vLaM@0Sdy5@DTwO5LT%I93f5trH3;=Kd zrhp3)Iz_F@)H2dlRybK0Qqz@=>2O_uB#xx!jVDp^C6Wfsf>5-n>T?S2e9G|Wcu05}Ec^|nCh z&!-lJa`u$9?;>)Vq(36Yr#m_Js~W*zo}ML=S6sP4)B$}7CffpcI(qNJU6q1Vg`MK| zU~9~D(AfGV#!Qr@lPyl~Ls82s{`Jj_(8B&=z~-^m*YyKy+UM78cw~u4DpeBXniIzP z`nOnInUg`OQ5s}C{{SPL2*hy6Tkqk^ri1~Zuouu+8-07}rl8|6C{Zn#v8`IeG4qTc zFB35!P==v$YirfX<4qtN;m9*b+{R7qZ%{q-)B|yC0MkwpFAljgC7_UZmTE4{NCe)` zdR@iD5Shsdnwf}LnY!}HB(WvI6{CvLoD;$%^41y5uZQ@bi{QAH6^GMu=PKc~vdNCq zRa8egIpS&xd8vy>4P8yb)5j!a<{+-NNBuiq%bkT(wQVds)TDwyd6HzTl&6SmHieoY!C4yu z2{v*af&M4oGl8LDz0Jrs^&EW#GE~LOQbIrp0U?Fk!%Gft#p z^rO(4+_36ktUS5sB+HmXAMqq+O#oq@R`ri?L&~&mSyXVU3Fn#mAY^>e=Gm7^s|_wi zkFMM>mx#roo@GUeB>E_Bnq_~1=ZQ>cIUfacXP| zvh+$^qp_z>qqG3r{xxz$7u}i0U!}N}-n!N;7y=YGh@yk(Ls6!$$BbJzS3EUUYRiw| z?<{4}I`lH0r95^TkPcQrJq}Z)fd^cM@{u5@?lp4HkIMXJmcK)2H6pQClkv1Hl1HwilX#o4c7X!nDdWUow8 zNNQ$rdk|!Ea5fAxSb_4eBih^}nYZ?g;K>Y2hZnA-a$%f1M##ZSRZ{H6z`lAGx8sXC zW0hrOcdC%)F|(>jMo7b0u8McduHm%5W5XSktY*+#nW_v}jq=}97IV+{tPP5nh1ui% zpz3uB0e+848`Ak0=qwkTq{S#{Y68^WD+sFTkd|ALixQBzo;bc5t@RqP z%39>vt@wwiw!P8gu)!`s7g3nxa4fv|_`pE3eu&W0E5+EGJCT zO4SK-WOZ96gpeCcUwtor{7wQ0zpu(>{&|Q|wUV~(H789-J^NdU)&p2wx->4pVglDnkz&ItJKxE#MvDU$trYZhbW7$D!Pl7g63n8} z?tFnrV7p&iUwD%ySv3x7e9pfwe1p7ZFd0EEOCc#|En!2DvuBYam9OV_8B#VXCzeR% zWhF|XUp2_Kgxrz!<8vh;wBY9S`&7ROsm`40R_lkTA;GQdM=!&yeCY8b3XcTl+)j?& z0VML&DFVQWWoN#gQ*dv7_a}ZSSgb_cHYlY)kXJ&~YMU3(Jsqo2NR~Qp&ER z1|xj|I`8uS{{S#d%NC=h?epiUBPOO{zi2R|6?6!3tvXSMI0zVTd{Av#1-_wVvM7(6MNn+XuG!N&Q&{_^j??BDP zYi>EW=9hr&8&Xud1#%fqqT?_(7a&-h`Vee1JTAoHjI|E&UK<82N?oaMGmwZoxy46$ zL4hm{S&cZ?KSKlBndz$|s)iYsTlwFo_h`M1w$OJL{K4Vo&vPsZB$H}CqY`s#o9P5g zQc^0kAn*WZb4#8Xk)Vy(r3F1*QCiB`prxp$__mUk5@u;*0g6V9ELq4ovX3z&>%{Y9 z3Yn@?-lm)fT8iXa1KQY`@-XD!REe_+4nWnN!D88tmCQ%#oL36MsW8XoDp>2PXN#wa zz9kWoqK2?}gzF0f36LP_Dv@<lH1PJ8WYyL}I_TlB#aH zXyjyW%>8LfGQo)AIF17$nnilaR%V8zAXlh}6zfMS0cB}yP4w2l5(c*1H08{|mmVe{ zvt-;4Co$;~yTC$8Dgg-&O({-v`0>mBEn$xbGU87Ov5JO)l}QDZ&6Yz6I+CjGme;k# z?Z>(Q08b_=Ue8*Bf8~(Wd1~W4o`dK9-l=10*b0NE{Hz20iN38>;oQj&EZ56hR2&eJ zbpcHa0!hE91lS8`J8n2(+oj+!n=~gLxiUcBWT`*}cv{>;xoh37R`zU7k%>~|B}q{M zRB#C@skj2R{g^Le{vcBd_<6dVO*u-bDdU}T97>vAlx(pg0n>U(1(x7v2rR^&D6?_h zoWN|91>q5kKn03OE#Vd{)*AAMGUn|``01O|QkEy`skzMhS2GR#*Y<+Od_d+ZY+igO zTrO#;`F{+0944GcP9wmn=_yjE0HpQmx)9AjO;)VT0b8}74joYEV#FQi-_U50Iq?Gr(RPaI8YN2cyR@m8P=C@NbhjOB=_rUSER*!0~K)O3Z4L4vq>+8Rhtzs_Lg-hH9vhp@vBj z$w#P_LY6J2yjeESZZ-}J1B==7v67_j;Z7hY!W5*ffG!x+2fO71NZ6ZC8!}vtogkWm zLWAy`7I$Lwrx$l~eE7fr01Xct@Eln&aaGA&uY}@p($uFfa|bcQ4mpFuShjlPK-Lk+ zrBx%<$kOMJma!eL+1Sin>2bt-qx!=d16nQcZUgcUUEJK*NO991lVz{K3IG&Lzd7ia|Z9{-c zk;OcHC23}f#BS+*7xuUMkG7<2#0%}&I?stTer`-Y4qi;3?STC@hlG+(ywXt0=h1v?I67lV)rNR#10w?^r7pn&H$1^Bat+TR}VKNGw( zz_}j{I5&iqSRFjH_@64_w6!mVbCfXBMMFu8Qeuf9YMH(cHHC1g<8$#%)chj+KRuaV z$i*iZlqz~RQnaYLf(O(prvL!LjMitYd1q)lU^_>%P6kOBMN3-cttkH4n4#e$gplN# zokNmc;^FYmopH`W#k@H1(*)&=MyCd(!llIU>_zEnvHU)h6{}-C1X#z##PQ)cvFb)dh+zt+Vj>v`)oL#!HrO zb7wrnrP3Km-=afg04!-s$>*Q=oA^r=cQW{Q&sben4U6EIl>D#Gyt~Y}dvqyGFDgsS z6cSY{$5TrZ&GEFZg`44eWm_(yr-kgsGX*VMOAm?*mK3Rh64b@6$8?9G0KReStL-Ku zZ^;`k5rjx(Zk4SGQUcp_sR2nLCZA9M@n|FV7w~*|OHbnVF$O(f%v_7l9KnQRJdIIT zQyqUUV;Ees&&*gqJYX1wJdT!QTrk@FHNw3+Mzm9t(FhTCn``1R;#7spAxH^JtUHjM z(p=uaX|8c;*xM5a+59r6OPwsunhK1x1g8EfwcOK_Qjuc#{o}tc@)s`RT+5DP(o*2K zY9w{IkR|G;dWj`Ku+pnBjZ$zB+T;KMB#lPw{=vlJ@hDc{P;}(s-nla|<40_wr`itD zq#|sfqAI2UsB1vYm=zjTop8QPkvXfI@h=jSn8i#r5TwxZ;kka+bpNuPlzl2XYG3PS2TVbb+8c%6DJI}T(fd3qhC%H7l=P-uN|z4JzOYu}_~tc<)Us4kwQebhRaaJYNR7=jMxt3t#A-a3 zh^%eBwc+j!D3o_)q$Q3)oN)jP<~T&SsRC*OmXJ$afc81m(<<_KySdN7TyGBLzFy`G zZmOO*xz7lmx0j=)g`__j3=vgSMTkfhW2T0cCoxGQ8+<|-*x!rp%T5a%6D>0kCN}DW zCBlUWri3=E`I2MLF&j%0f}b!HETt5tWEHu)q=+#hPZyv_lOBH$Rsi6V`}M3a-kdK zrzy!;$0Ele8nE78D#L~ppHYdt$i^+%l9Ebgg!m36z0W0OU#ItS1WZCOdSmrF6}?u!uF44H;PBBdX%kIX6U8t6X|tTlYLm zyo9AmQ9c(0JsrQ7tp}v3mR74#&mC`mFRoC9%+wfGC09))QbsE%!mKsWy{4Nu0ITJ( zkyl)b#e%2+dncH=VqqagH75R?c$Uia5Xw#!L|L%)@*%VXSF{di)GNW|Kep(pKUI*aM996IH$s|@9@OY<2w?HZs*IFw5xKz(|f-M!;VTR0VKn+kfwkf17pFO^kA^{`Q3K0}NsCgdJ&e$Y9Y zTR$6pqjfH2c5I-G$8p#lFYEyp`q*i}{lbAJwfpcLbAfR{5R+$PrQQ14++s|UFm;yN ztcK+8r@gPIw*(**-Pi|m?DnYC3fPRY7$iXK0)*4PgtXE%pA!RyTF$OyYV@fIgfo|zK*smJ{rj0 zP?5UFnL^wmgK&V_#342W?Q7|;3zUxZSlaDdQnwr%$kHm)@ax2_DQziR+TPq=4RX&d z(qnb>wKY&RW*;nFP{| z0DijG?HoBn%+vD@DUViFLMW?oYWeHnp{FIGju>gz;PBdJeHuDCc2p&FY?<{pJW=HB z33KrimW1x1OHz=N{vetGanNW)dMD_nN|undlC-1+RDer;LqT@rDF-Bp2r3wj^|-k{ ztU$HSr2Njqf>a8W;IrMYccgZOZhb@^XYo#bPdGywrO4B%=HVlFn@(~Ztr zK!trgqrKl(A-Xwqn{Vqrx0JT^PkV{&qKEr3vB)pVSr%sAEs zSBp@|R_B)SoNo+i=2{}DDO+(R^pXfsTbn-PCbKb8?;>9XN>8?_p!#Z(o`3#>fWX z9&uJw^rc3CR=GWL_O&WrD=!hWl7IqQ)aKyo0nWNxU5|fXUJ+wS?~#z-95i}pZ(#2h z9g0Cj;=s_eop`(TrC*S;@P${xu)&bu_H`DZTI^|}x%|oh0BiAn!6bJWW4Z}sRHQp| zy~uIaA)Eo4w*dH!z%e#BiJlv>iZOr_?dFU~Uh&7vYrLIXlJf_Wn9^%TUav z?}EjPFv^+fRvc{v>VO>GizR_kL4_L&SdmDJn%(@PC^jbAUfOUpgn=-)twy%D^Ou|y zt@NV8fIS5$#?<+Ipo+xGtocQ*#Z869^(1<4ZSQ;7aLl1gaFl@AfX~Ii(=ztF0G1_0 zijZoBD?s7gAByUmDcDmMQ+>!%Nn4X+sMm$qiE|~?gIih6>F4|EazF-S z7GkEaG0!KxD+pL%Sz^YdAQJfYI?@uL7jN1Vi@ug5t(4yS0K04s9%qVSs3fV#{{X~i zeM@HjVEkABOJTa(qMj1g%RjtW{IcmL1y>wsNs6kW@}aO9UAA7$>5 z>h9Mj3{Iwm$rFWcQSs zOE|GSK2tq%HBa1<;pxoNGVVFJvFY?P!p{=9SC+rwo%Z(RNwL~&E5zRu{9yYxVR&^L zIzx|hH-^}J*k&P*;WSc^)60ZY)X_3lQlzU4*-4r*P57;Cj2y+{B!mf_+DbrW79)7v zSlzg>;>@tPsVUi$lCT21-QD5?)Ev(Wu_fzQ4+cNs6OHpXDE+6rK01ICld|1T)0OA|rGEdIfi&g!rIollY{{YAN zD;QVB;ywk=*atIn9xyR_dVwkwIG}0i>R3FK9cG1H6tb0giG9u$3rB!UAUL5Q2dh4} zKeSJ?r%s==Cn;OXDpHAZRZ>8)estzs7~-ybYn7mBj z1w2_;JuWWKT%IuJ>bkoAc;(3}rIw)0%5)fnjt|r?tMeJ>YW(6-t;0f^XkRDeL4J*!w=&X9-UefdRx9L#3Fl5xqo&0S zuJqVN7BK~EZ-n%MFp{FaMH17aNUah9lP$C>XdTo_!&^yPU^o`7^NGB)AQd!~*36ikl+`m8Cha`&25?JU5(z7N+QZVowUUWb z5UGK)E=7&lGiU2epml)HM|~?DJIPdOHXF=Ml(dmk$P_e4#8@x_`G51?_dHA`0VQjp za7ZlqQkA)-cyNJM&+ir%e+;q=8@t+HGz;?;DJr zD;l7H2@5sOgmQb^gU2&wP6+UW^nwlEw9n@TXufHv=((?3BNBo?B#w zXo<{(*efuxxb4SBZLVzjQYN5>Av?g3O+{(IvGKnq^R^*kH%24Un9qN3&UqYtxKQiG$E+6=!JPaRA$O`bBwnh;CK z#C^?~MbLv|C5R{ZiQxjuB?7sH&ZNF#4!Xyk%gSP_dw12sbjd7An($}+TMfJTH^9w9=6!s4k=pf#m0{BRjXYi=T59YRrA zOyvrINbx%w2L1e_rLcMEvF=r<=W0w!ua`VS!+DY~gr0&tlr^6T3dv5jQJ_#{a4sQH zX+i2)j|^mN<2*7vAc};5kX^DD(@Vu`W$hep4{4%G(0ipHsp#9mHGeUkp6?yigZR^o za&Lzeo;LEAigg|z_^y5mY*LSxaWxW4h*7;&B}&hMpb^JOSvnb_4;c=&2ILL}k%R{m zKMRe(lPD=jOyZXc08v51@w)+?o7}MY)yS1DZW9#qCIF=&Dj=kqZk9aU7xH-in*RXd zQR8=y{yTk~@cwl1!U2rSh~n6coU_j+dNEbaSRA#oNli6Y8%V1i0HH#tsOYlD1>asg z-?i8soq)w|VL=O7G$xMuHEHsMN3Qlu8;!-`n--r7Fi@lTS>5>SZc*QS@eM=M;WC^F zamZojDhj7C7}c;#!1U{kFT@51q|Wh`KpsA$07haB8yZxcB-SM**s&nngj;3zW_l13 z6qKlLg#e>)#mJ}dVEz#yY%zh;tvsj~P%O}}wT`-t!5ZID!rhnjOC`xAFPS3DPKC3h zv+E2osU=8m8CW|o@_e(8C*A%Q)i`OVoj^z$+T+_ z)XMdG$3Wth)k0XAq?Soyf;5%YGc3Oi2#us9XuVr`?Q4PoHsM^=1fpTcg%&KIO-h%c&XI`1Vv!MMU?EBiCo-J-2jdDAb->|QS)js^?Nqn*`p1D z+4BU&EDq|5B}w|p`blAsrcYyU)tsqQH`xyd@dmRO#j4krymrUDKjr>fX&ziV4WPui zZ87X_Xdo!YnxhrOU8Ho45lIBNZTOB{;x>u^LO>4c2}mmO3X;xA8JDpU)Z7HjR>NHV zbnRI7b|K5%z=eCy+V!0LQ#G=jy&n=InD9z7{8EeWA2A+BUqz?J4S3AeEU! zDO;}LnJ&y#P#d2Pdc?V&tHfC`Y-gG(=f&~NUFDw_tgA5!>8f1Y;-oOg3K=cs%^YZ; z0u@HwIG2X*f>N3Uu&X(2$sf-+uH)B^k&2r>WW`Kc)>NQWQ~{+LpbAyoaxqwQ)m9}3 zE>PezR8rMpR5ep1PV{g#HX)M6cqYVSMV?Ah+S9{Q@{|M0IBSIj5J}+goxStnUN3fT z)Sro#5Wej^LO?HOcD0Em_{9}m=+vx?y+wIq*L8a+0FXe|zztU5Tv%|)A6K8xkM|7{ zgS_P2g6{5Zep%^j#c9ltO7t=+EUD9wJCp^9Rd53^?m!wHz|dQRv}S9vFCG;`fRe9uwkX8jLDlM4ZsqRadnEIMp3m{4`$>2@%T;K37&^ z8%yyrF;obI9q2+igIg$)pn6c`(viNT_V&;64j?Vh@xq!*t5{*k?kyzDv?wXjz{vIo+DI~V@|%{xMR z4$xG&Ni0ZE1X|Umr}8c4-KgxpV>VQ^f2Cok&rrAbg>tjITTi(8BK|&ex|T!EG{srl zBQ#XcH%~DLB#{+kW(k!`AOWp#IQF0PxgwJQQpFaefD%X-0>CzcJhfOXGL%S?Ww|Xa zL=`82IsM=rSByO0TJC4(S!9V0cZwIIRh5D2h{6^c7c>0syd>zq|Q<&00v__iI)Se7L9_>>j2G;L8YnEWI~S}J6S3!+491b_l< zzZ1*DqFlMjKmZ30!Ty^aY4VUz!=hZR)Buo_*d>jKJn!>4z9H7Feh$+K)<%wzQG$%5 z5C|SqsJ5R`zp9)Zq2J749Fj#UOA3}3`|)TO2`#5M2Kk;r@)i7ysmA#7zfDeE+heKF zwY9%%X{LhKH{tBT{gnffZIuHLEl0H?#UaGQz@Ah9f%A!ls1%BoEqe=I_aJO7u7lRY ziky;vSX`f|+?_|xP|)Sb>?Z5eA*Ewjad0k#TTM z!M_$PQi3E)CcY3@*az!^*R7}R3`-_fRF%S)YC9JQ-)9m8hQ+tNMWNkTsfUO!tuZ;7a6I>kxOUG zB_e_4iQNDU1+0us!5{-|FJr)~o&Z{FLPrifY3p{%JN-aPRF-Sk(zF9wlLxU1e}%zn zXK)Pi#3SkHl}_xzb_DK70{ffrKF?P6D~9pqmz_Qc*3LWltc_f_dl1dC!uL10*qitLZO5TW@XJ6H@QYF}Xe^Kg8kDAoEVO|YtW7+`f}o(WALYHbzv+E7 z28F`K&sL2ZsSp|-%WJ+SRMnxhMa6_ z%vp_vN3;6Gasf)JNfvH3YFC%aMXXX`jz$0xBsU*B>Al6txgGxin>=jUNDLH0lHjBg z1L(q*4_iJ>1Wm-tN=PaIfnItJS8iEW6R|uq6UVV?N=zo2TFSXvXx8>rcdxKDw~B^ z-r_)(1REaq2X1XSxN=4cauX|q0MD2NWl$RYZbrx1^5%}~6(H|S{{S|%2%#bF+1;;b zrMYXw88NI+8hl$1TI^4uP$??uF^FJ^>EI+sPVrRPBQk+>ScrDnNxu~-J5@8(zVQo~ zw{6C0x+URQ&{` zhBjG4h9RPPZ*sBftZ!ptd*6jP%xIrCx<~fOpu5zI)Hhyw!%POj7%5_UfHowSJZxW~F%33T6mGa_J!Y9NhSs2Z6tWmtz(8zqO0oK54+8K)O63Q-82zm{ER{G@( zu-Jb7a+E`$mp~w>0Z*h6N|JQFArRsMKzH~ZVk-GtV+;KWSuAdv_o(N5at@ruX z0~AM6#1+gAWo<~Yw!7a^eRzUlJL(Qu?DUCczW8sP_PYVH(f3OR7pZZ^;PF)F%-EE5*1qz# zy3?g|yI$pnXGeI+7@qwg3aNmjzZd-4?^xKe{7rTkBQ4ZQ4ob;MbA%?_Bq+F zl1&ex{Wv6}Z~}4`K3UW^5m*-nWlSpW>aAJGps^wOWx=eQF@U=@I3OEc8)Y`L0lkIp zMZSa31rVvKAON z0jxZ;aryVw8A+Z}s=Zo{NNnj%KbQ+vkmr$EEc)KSYEQ18*s#-q<)0bpo=h_Q5Otu2 zOlAcrxdx%E1#*9O<{lJgjdSHuZBMqFk#pNq{di(Nm1$3Z;uKGoLdyjJ`BC|>`Q;vt zqMWAo0!uaZK1Cw`09|i=4%~AbBr@BcO_$D)W|nxG1XgRjXfli38|p9Vy~dnCus4l7 z#|}R_LGtHrinkGJRqy6BdYG9EhG=Awz%0ko_5#2U$bVi1T91t&nkZ(>0DmqVqDAiF zP`PgI#3rOtr-nm?Bj}gdr(^I&C0;KL55|jAQ$0yp>S@Remh8bo8x?kcJ??`*0J7t@yG14Jj{V?*^j#o z4+}9E{4})zGHQRgXzXiZ`VZeHcM^6^D;K>n5>%wi$%}Jrstd3=$CXsFSGvtbQf(D&q4Ff8l!E_ zkdP9DkStg`)}*)R?Fl^b;D!}76j+88RMdEtH8iVJQ9FkCo<0Lx3|qKy`Sx_B2@7%bbwGu0ZbW~T8tUV(m8XOxpxrd{6N#zFm+;j zPa9q)Ud0a9w_r3k(~2f113L{c@2A2Jl^`~3_h#uHyM@O|+9*Wig$H6laMmq$I$8CF zX(JBo#GBvWww}J+LA<~5a57>1@}`k0zzQG=14qB}9xQ4dLop$NvXV&jum=0viISkIdvu=SJZlYMsc&=S#5ANU9|kWYk!sR#H=(PQRs-nOOozDd(d$EdYH%(k{Jml zZTL>acF^gsujDw~c2Ox-Em|=2v)7zq()Mrf>Bdc?wJmCC^ZAaK-R|zFgGxIS`+bCN zhMuNSk<-G`F&mM4?re0qu{(UN#^ryAIfmAiZGAa#fR!><5!Ooz-i`L4I{pg;SOsD{ zbn-{$zV@*{QK|ReUfdKgiZvPX=X+S#v2(^3Oxsvs3ec*DKT&7Wr{LA;Hf~&smM~tR z%QG9z3@Mg1Bhp9PzT0blCKxszcLSRfok41T>r>h}lhkF)N=p$?1uLn|zQk4mNd+ko zzzmG-CrlJe8B=_+nE^2=H#tEIx7HA4R1MxVtqnNx(j4LTmNU95++f-sBH&vqdPHZZ zr=+KqVrfZRmzF`ASx^4}LqywMEG#}<;F~QM1cqxCdi2rsrxOcK)SHW(WhfFH3X7Mk zyMo;Lz_{b;d%Q1l7sw)(ydIxk^x;x}X~>puMPQ0pq5z9LYb!%&8`Nik2c-n3FJph|M5f^AHAR zur1u42|*+fNh3l}%Kf=RDeJ>wP*ws0cN8obQ1GS0LA9CIjD;C)6g9NDRkGgOkh%-r z!q&FOlqpFL&wC1Us4bTZj#Mq5N6SglN5=v3jJmS^{9bLE_7s*VXMDoT2! zh3si0X)6G$y~&W3T|Qo2fZ)tFA$!bvJ;w&MzVyl#V(_wyl9f3GJ27${>6W$S7hf;) zMNon+WW%Zc7ZAfSdRp8!Os^$8EGng?F@OQ;D&=J$=2K<_acS9D)yPt3rP2bcx>@Q# zA)8v+xw}!e#>h@CQsgVd;YE#k1}|XrJs2~0-UH05j^Wfi$4?jdTt=K#M8FHchO7#p z>;V4&6Brg)zk~}Y1CLwT*ws(M3FH$-b5b(%$?xSJ5wvz{a9HI?sAcaE910Ul@;o$- zeCJXy9%fdfo#~*&aY7kTUPxh#Stol~-n4mRYvvM}!p;$r+KGP@8AW zy<^fgG7~>$DP#hqrsM)cQs%uJju}PC%T-THRZBBW$E{UOPT;TLB;1v~>|51!H@@0% z?*oZicP=fFe{v7G=@o6QBu+%Y5&;C%0Qc7ZM2c17^P{LhvWS_AXiE}x^di^2y+*%7 z#f2DvKm$joPFdeK&q|Uc%-%N)b855D-K|F!&M*;*iDMv~*Zf-M(2b4n`ug|35Ki$@ ztbF-rce7H?#t)aikZDY*^W*S^UT2zWNZ@y)zgD25$0;uufP+lV9dDO29LCy{uIGe% zKq)G!MR*1v@n+y&9&FSlMS_&Xxd4zjy_f;aJBY7^1hp8VO7S9e#Xna&7778-T;A3l zho+X|w5cndJLwGOlxrHdD*Dx;+bwC7fH#N?GyIo6P;Qe3WtZVr69h98QB7DRDcg_D%G_j1mcYy$uDDHzMApU0VV}Bw5Dkns`ABB6;$n(%VF~E z-@hCxM|v1&&Kml*zjmms7LA}BRD(zR7vLX&v8bx0J{Kh|e@bSsn?O2aOAQ9r8G8>= zzoaJ)Wf0-%cDb#6ep)R%I}yGEho+7PpV(32O?@&!H8f=EN}rYYHag$`02&@3ngwVm z&BD;>8T9+a3aDdxblBXn*m~Pvb8~a_www+irCrvM;(dXRyfK?KTi1pg~6{+%mj}g6colIES4ay zLK`kt-2&~DjSB2|(Zp{!Dm+Kp`8HWakvkU*R+VpWOaUORhVy^}?+WNaBxxV1aes(Y zBD&kQz-etyuA5wK#|4*a5mznmQ%)7AnbHl9*K8 zTqTe&*@yrF-mHAa`}*b|4K*sMAUUN$V%KhZa1bfMOhSlCl#t}I2^o{R!kN&pqs6BQ z>7;FQaiBY!Xa>6erq|QkizXIQKy{J`sTsK8SK(he!^{kYGZ!tBlX{%_<-}wmXPIl@ z>4@QuH>d+Bc11D(E^>w-uw8ZsLUtPP9x`f3PzgxZfPJ6rAFOV0Vy{k=;it<*NBbHl zn9EZk7bKrCwT<_=?0#RMvUHbHj#TGQmFF6hlW~7v+uk5z7<)o9#LJKpK>6>OC9E3Q9)phYEc3Xnn!iCyprIP$rBSvnl~mBt6V| z$4cq|0kk`JvEo#2f{^E`m0~!YpU}0T9x6=7UixTXA!nn5OsM6ptaiWI=fkW^o-ycN zY#SB-0G8mSsgk#tV5V0Q)gpDEiRX66(NwDR)<|QxB!R{2V{G(d5}fJ{YV{hu--D6B zx6i$~LIx>GQKg!IRoB~K_CF;-1!HKDlZIY!=|WqWKa|WV{GBb(&Q3u4&Zur z;HfHFX}qdr<*#ZVm8(SH3Kj#Cd&8SlV3ZhjB@C3Z(J77;&atmbd82H`c0vQPcWYnJ z>AN{1Y{m(8YS*1yUe}42JOBqr6mS6G{0^qPg+mn%8;vb(H$r~ACM1b6h~7ukRfZPn zvS@l>*qt>t;&mcqx~Lu?y*_?vNZKcXVd~9(4s!MCKO3ED1ytCFNzg`Ps<9be*jZ2m zrO4m0H~QqcedE1(@aylSMKN21sFEJ9V_vW3+^rnD&eRxeRkVwTL|S@RGt;DEH8jHc zvR%J>CG}gAZ7prMm0K*#1dBCkPh9Dtt%kkJ$L`RQd8wY(eJiE13?X+H#j!fYrHdAT zP9kBHh*-NqK=V1vt1YZguG(;Z7E+Si_7pU;Q%wVF$3-}W%U1D8Vo5DqpWWHLpsodg z%T*+`5z`5wkO?43PE@jN0BtNb`faZUOcGOdZk(8bQL8u3P`Rd);dkJD+NWBMklFtL zEwe-f(MJS_@Bnj|h#$lgQZKMOcl6*Au_(S(Y`B8{Sv_pO7cF@lQXHR=^i+5=@H zL8$tU70v$GRv|-p$=)CuyHHTLJaXzGoQXpdKXF9Nn>8}fP?Zt7f%K5Z<%l`zrg)!? zSJKmXUCUU09}7W=^PU-rbH6*u9nD>F!zOw@UBapq{lZg60BWSj0Fl6LSOPo)1uqk~ zdqcH$h9mu~C>x43-6)+hT?u{KHG{P&pVvL2#o)Uu*v`#tJ(j-iZq%5eiB|UM{^lA? z<|V-)D+ZMhT_Kmoy0pY4@YYylmaa%VGr@i;Gyu}lrAZGQpr1LJish7o3lKpkemVY~ zVAnEk(3pUcxr@aBp+Z{}unUGJm9~0BAJ*B(#O(cxC%+_qg9YIvlGOl2`!cm^)sK&iXS%+FU`_9Hv~wPHU_xq0ercg&kG^+Qgl78*v~8W#JHenQ2;?gQOaUr9%qq_kyB%4ADE&1T#ie*ENC-FKcKm zpd@!TI&ILJWdIaUsi#`I{`^tQ#*9*w6DTJ_5(5mVE0>Uknrup%9DZ2oVc#hiAy}W@e?~ zh6fpmlAi<9KDNDBXlN`RA8R@oMl95+nre4ZBdWUnUmjl_B;$;7J@A*ZAQ)g>X`m4D7u6_08wWr2Pw8h}H(p;B}sdll{JZH2Ar z!P_eyFzGvr@m1KfDc>*qb@hoc`#l(@6BrH9$2Mbn*o`S?i+jT!eOejcmvI9GG+2bf zYI>HoT6(z#R@`e0z~p1uufwSuOTU}_(!h`|K{eoOuBR;`88|6eH26GR4RrJlL9Z5f zj=sS#80MvlX>NsNwsk>~=|2)YCe{SDfs|bO@g&ShTZeG;a!71}7c33+cNxW(X5f3p zr9mkU0-PiZ-Ng$B^5quZ8AbO>>vD*oC_0+}2YrbevE29eT{Q18U@LEPm$sd5GVtn> zknTZi64c?RJFzif;25I9@=^euKw`f=JP3@T(c`i($SlQVU<{4wgxDL4TZmX`@ZJbQ z(r5!^&9yn|IqM6U?C{oBJc7<1P@o_RK?Dnsz5Q*z{A58sUh}8h|Gh8x^^ixOsl5?BoE+I_k7Frx)9cXR_YN*vw z6Kzkm`+R}i@v|tO`FZ>Nrf`aWBs~<>%9PE#+%tYS@5c`h=EOOolO38Vqr+N_DXQjN zz*JNM3}Yy;jZ|n~b7QXjD#vWYGHOh~0Pz0+h;SI(wuZvln8fW#vL%zcDD6V*EFWHc zPd;9*f$&^bY8QJ`Id6iNQ<_9VPf;aBKZmq#+T{R)=#LpE^s5_$o&@mI?NRq}fuH*6 zMZhX^&EEIRD{zUFQpzNR=Mq8Yz3jrkkUtKl+I}KVg68~phn|%W6-c3Toi!BuX3>tc zsD`m1Q%)p%`@=MBtm|hvNCww7w)$)7pc?I{?Z+x5OEqC|1sqcOe56VWh;ooim!tZK zCr=_4u{w_uFB_foZi1 z43w^bvNR}vgToe5=jYdDPSJleM`XVl1^{I_+<9yp9nby8HD0gNfl*U z!-dkLrF7JhE7lkzyQ0Zj)->wm1a6270Lo3r3<_jo2}{_pv9^~t{q6v$?Ys^-SaNo1 z=A#l;z0{Sjbm+m^iD;4BP^!!&aV+wmiG+T zxb%T?q~V z!z1fe(bCP5YKVvu%B$4Sn_O+DU@S)lNm-VL?-MO1yQZ7K)L&k`40~a^`}Uo@LwFh&ov$(;<%rRypzvZk1N;9b;EEv`gp5p-Y`)EJf`^+jQ}}rF1FB< z@jbuV+b05WdnBSn(iA({i5sQG-0DNto-0;7*BjaCdrxW{PCt5VfS_FkOwL|{j@j6P z=SZeGn;h^%ntWfRPFBNthnKu2#c^t1iyPwV+B-jE z&DsWJ^x%{frKxikQbh`#)IrJ3v(?JN?fg95r-s2wmo8e#Kne&#RhR|93JgKy?{{U^gbHoo4JT&C2cb-AzELKVwrR2FqSi(712c?k6^>9>BJb=~G#L9+e$RGe3nvSV+OwpIShXbxn=vU+?+6PZl>?DJ7hy^~E8ClEZenK4!(f)8 zCCpMv0@MnCB|7Rjx%Fi5TkLUD_T|L6M-=Dpv$r~OCnZ;Moll)hcVJr zd_r?w9R;SuYcUK?p{9~~9?Ayq|=$|)bz4%$uG0PO4*(8J;+%EnDz5>h}a-5`lz zH2~cJFr``@c4M-0cG(!5ehO|GQkhGfph8Jc)S^ud-0?N5M|bkq{4oB;J__J{d~LbI z#B4f?7?L^V#QB0o!|7@zybA>DhlmSB9PyZ{5gR;tSsPGqr(5;qXF5EPkg zKsKlVgJye|)-AZc&vsv8p;(F2x8@`g#XzO+V@u@B%;F<+J_Yu7d^&#**TPOlq~+>d zQi7umrot%zGS^|Um!yWaxT&qKq^^qnZoNYeuaT5x%fp-;p3qBB#~gMcQxAwCOIZSs zVyvBweGGZN(e0+nnK@WIJ{nfwB_Unf9h{7TISaT3AW2__cxTJs^0$NdEgvV~0>2dI zDg};~nxhks6vUx2&kU2#1dR0bwT&atMI?wTWp&vXHd` zQi^UV%|IXG`??BJrL_A=h{DQQ+46*fr~cwn5}}>ZyPb4%A3wZI@j`-u(1)wp;hVQSYG8~iIIzTx#Q3<>DibGa?F_tLQ=$?#IaLVb`IwG zzew|ehufW@#i>e}Hx#l@g-cr8xu67}O${13QxfrEtKrAx!5!%6@k}~u7%?bnWTKA| z!wRCvxRo@P%}Vm2XdxkqQUDj%h4ZJ%nxz#X69FWoDJf6@+jYSe(EeiMv->@cz)S9m z%1Y@nQGL*(Qj(iw#_z@}K4tNCd_u1cqnJ(1*lbul)JcNRJwwxBxQws}TNT3~%IuTp z8Otjs;Al7;%$5xjkVS|}Tw2+V4fru(!FFhAa6^@S^boG zN0Do}d~>gl{vu-7M=Rh@OGV3khsxHUpLv$DDcV)U=foc{z_7?dEDbBMkfPgLTZl1u zjkz*k>2_)oM8H8@)P=B6yO2N@(VI)cya!@%b3a+NLe{xc2`G@Qz@;RRTqS`utB#S_ zUNwESc^j7eKdt8f01f#MpXg}$DhxXctp5P;qFO2%$_zqNOG{IVRtV}Od}ete4;1K# zva6ZOsB>z}&d6h3Q!$v?B5cA+rG%#HFJ^BcuNaj*q}dx=Xkl=>8wEB*gc)fQR!A%z zF71#MtbFJDMe>J;pKBgen zopY>w`1@{n-$jdZYtloDO$?ZhDIGly9zg2U(!m*>-=p{hJy*Ikt9-e09NO`0*fN!~ z)S{Gy5=|)1OXTc51?hOGqC)YCQJ+$>Pl~sFa;4ly0bxEPw<>r@{I^ez)vq^m9e5LF zlr1I;OISkAw4w%9H8WF!XLF!?+>v9$x$_r3X8hFd)HNGg_2SvM0tl0`jJ3S9f^r48 zoiBX3R@}jhRt$fb`IDZjUTTh8<+Y~4aEGayN2BJ zCP|kqj_@y$Ab|e>n+w{n792da$wzRJ;+O-L8_C|O#PI;IB+}B*JG7|; zPD4E9-dC1TspMsnM|`LEZdk2}CxXs3Owz*)!0?mAhpXp$+6=?&{4|vVHDPlUK?z@t zoanE&N>UQKN(NJB%m7z9mO-`6hJ;$c3tzC{ZSt~9lIEe_`Fy63#G+CNU;qp#8Jg?| zy{(-~kB2;$ThDywf?x=}8VM^Td|weLjRqHkVTm1Wb|~^WPzuCNJaH41rptXrxRo;J z-2wB?t~CO$oqUah$73Z+mcWV(^x$j2YaQF-Z!+Qh;XyAba>O-H$=t1kj28i-RgLSU z!=@^;VzYu;ZoVYwwY6~}v~2GgxL!T8vfBd$t)1T@S?|>^c|@c>@n@+HDqDy=+roCv z)|)SAFTGO4zW9LaQxugF3pi)b@op)`@XD+vp0<2qcBrI=v8ZU~okGf~htnaM!AUW^6u6Y>)0UnX)6X1=%H{+hM(hCqTyY}S1w}ZD7t#J& z4Z}!Gxg^hEZb={?Jw-UwKNUKhN?(b1Dq5x&EZt!$pNfh^VihE&0Wu&XDbmE;YB&(3 zb4eZJIWF1O#NGLtasnMomm_fnAvH)Y!nC<8ef{f{D?rjmRa;O+Liv?i0#^1Pflv|! z?O}Ze$Bu>xNn%uz4y;R6%|@QD(hNeDkM`|W$@914S7B(;%!+Y(Hlw9ldX^$Lj4KFQ zFsch%HmFU!*0H_st@s9Z4r+qCl%%K^ecHM5yT8Xdg2X2dt>vhaOOQ*}xf7OS)+_2| z#ju&JTT3G0(n?jtgt)mRBg9u^isJU{H5Ru6VQ1p7a~fz?>+4M_^lY`%y`L+)$Dxu~ zkR7Oe>BpPu<`{8VR+1WTf=KZRDnm%?9I6pxU3#d;T+Rq=hQw`c_^?dcvUd_e@em2P za@Dt)<94}Jj6B`>lGHpYQh+yhH`cT~$uKTVR;Wah)6h!rgRcIZ z2{UZYN zBoU>Drva;O%mT8Dzletw2A1}#K?h;WHke2?9wKR#%Nl0>ah#mgWJUh~1sEvgIO-b` zrpCY%=xu%^mA8~xk_3Sd8nqG zLnm5A&N@RV%#adPuqNSk<9OYmnX;WIsTJM=R@bDwld>YWEH6%dN z;S|W7G4M)9-_=Zj6D7)rB!g{ud$e}yrJ&*P#18NKd(y_^?$DA_1sFB|0BNwDpEIU+ zn541+bOJxc==Y!%5AFkUusE+UR@7EiO(k`Gbj>YoWn`t~k)7Gy<&leKe9XtAa~czs z0)V!ts&erY3a6DZFXB>-4NGr+ZC835eisUvX%ZyMN>gp*B`G}JA?uZ2i8Y2}MMp~w zJP}sg7pJO9m}XRb#AI?m z1uDQSg>7q_gRicur^`a>qQvP(_0o;Xl!p?DQa~l@E>3?u->AyBmfj-5_9G+1prRpB@`a;4?YtSWH^XzA$&XhSmqIK5%Eblh5{_lar( z6v6AIDO!)_E2_n&N>&X>Cgu56&zlDk()djbHIZR>P8UN31{sIb80c_#K=>>s7PPe$ zbv29uX~mDl*Gfc!VCfSmHsb9rNtGoDbN!?Q-~J;pOSpa>abKLWwH5yW$y>)e`-9Ix z2;BS4v~$cb4qB7NUGz+@YIkAD*+T(P*qf}nxQjP4$l9WbI^#$Pj4x?9*1il7EVLWKsl%yW?Z#8dHUG449Ax;mT>(8 z-SYS87ETrA!!Y2af$%hzxz^nX><`Fk$D{1INjO9j0U<0YVktwGk-4aOiXhOJekaNd zLmXyUNm5Bb#MtlEU2pl=?{Y!l)Q<|q*cJz+v*lXl#6>tzO;|8sZXOBZG|T@0IAV<( zHkfu5<;$i16>c^cw%6D7;A}7l5L^q`jM?qaEcnE;iSDRQTGp1Kd$x7s1=5@{DLa(} zf=Jw4>1z#6-MDHfr8PdQaQ-25Z=(wyAw=1T9}r@&I(ccW>_5GB;7mXpu0Spg#{>IB z(z5>m%klX>aaiEg^7Ju)8EyXnG2=GBaBFAZ+T!PH>3$U8Op`KjAQBX;sb~CKGX<&2 z(C$Mf^#a=d`OsD@j#m!`3see=yU%?+OK+gP_xIEh!t7+U97~1)&8c!S7QJY4XkUmQ z{S!)N!%%tx)viXt#8&mx@y$^)%N#+XoHJ!PSi}{qShj$Xt@h1xZX%o{$Q$K(0!Y+m z_d1;VfFYU)mXM<`S0Y6p&s>f3Ek#hR1=mtY7toWjxIIonCdrtvrzJ$Dq_D^XkmU9elIH&aah=jb?wX{#)xJ@=M^1f( zJW8SPi=F<^T-{w$9SUNfVvn@HB~c|%3GsN3IdbkFgj3VR#DZ>PW>5}{O8`l~6>X)4 znxx87d``mkXX0L*4RxhlY`j-?Cx9F46avIC3>!SHo!%+$u-}SQegplkKFppn;*>IC zcsGVVDPZ{4Gl#LumsoHn}y#u5b?OH|Rrjl)sX%yX3iuYLl>V3UZ#DK0{iJV0s# z)OGagJHcZm;PIwv$o}F=i@Jq#4@wN4{UQgB+~bD$mE-5yYsIcwlBRB7=kFQ(TIXB} zN~l^qLZ=AFxvLn)aJq_!&z6>>_I4oy&l6b2<0%$F#2X;12Zvff1czcn*ktxR9{IVh zFBptwK4Oqd5={vL?QW#LdEA58A8wDcUIX@d@uTe3hu}EHMm>l4pY}ZP!^IlZtf!5B z9~H)=#W4IznwnT$jY2(L1IY{J49Kf}tPI&ZL3pj8#1dsIcC`)&GZO2HYqyJUF1Mq(7?=FVTB`v~~`;hlXrpPae3?HAxDH1g$gz`a_06PED2dWRZV z=42BrvsBchM@kqhsEF)^ln~=M_5()Cl!__$O26{2Ng2}cCove@3_ z*qiY|TGD5%kPS`4`;SwRzHn+JsY2(c?@Xz0Xt1!1LkZMvk!<3npv^QSe@6v0#lfYeu4ts=yS1BaA?hfj*d+Mz`A z$hI)qca0lRrL`i%Ftz=ZEk_bcL7~b0DNE~EnR{+l8wQ0-VxSV_+z|QSOtZ+eZ-*6@ zdTPkzZ#7kX6VDV#6{nUWb1s7F75vVFL9UzKmJVNXf)oaT-r84O`co=iI%+YPj{a+Z zaFqwh62ZB(+4ALk_+LR^jz@{m*H^_J8x?X^8ftTQIJ{IN;HEC8GRBeFSOaU5zYnld z)+L#arnoLZs|{&SKPatZF=GplL6kT5O9!pg`RH?hV-}gfpk7$Ss%tRl>nmiZFuZEk ze5k~&*yutQ@@r)*NYtCUl4Z`7yrii`3<)PqUHx6+@3S$>#1O6aSW1aan1-bf-r_!_ z{{X_P?P<^c1z~n@0Tw+(0K@pUh6Aq6g zC_q(-cH)oPp3h-6l*uzvf|8Pw;4%80%XxXek?Wn3?It4)BM~dTC4u^sNJ}FpEFR-g zUT>dZueVRyi^o5<2O)C5i2f(zbv&WX{K3swwkgP})Ux5xO@?8WZ9#`q)U0aekxp0X zk`>uRthx2#yV~x}?7Syt`^i$3-}gYNOkAji0^~6+-i^i__Gh$PM;F=!N|`x5(VC!; zqd*-Z#F3fhmTmoD;7X}Wn_i++I4I4SD0Dj8P)O7gEwR?xapC(FDhS=M1P3l#Mst;% zb2N`{#VJj^kQd=6!>GM;r8wG^kL5%DG`JGfW6mm7%2D$()yEua8KjOeV`U>k;90i4 zh5K>uJ%eyo33j8qy8-ZZkDNcKb;a)#u_Tfj$9Pcs9O}{Wwz8&bs%$D;5_u^qspXEU zqB)L?tgGadDFqxUBE)82!Vhje5oOe>mUEx(W5>_eHMLf{QQIfzBEpXzlu%*uj3POo z;p$_QqLL~ko@3=-A-IcC-oRUHaJp+W-|l~k==P;Xhg{8S4syzvq1>1KUuK*RjnE>?3e-o;SfsK+C?d+p>~EL@adI!O2sSWm zMk%I-b;OYWNi zOMWto)4)Fvu$qstzl%JioVSYOHJERUo*DCum{u`C9exvwVbw_V*nvuOo;mR9S9WO& z0U17WGi$=#tbm=bG^S!wpjKP~y>R3Z#otDU8zUGd>>2V^FL-{gQvw2+kZ8x5unm(M z!gqjwW?!?X+7s;^%G{qWDUSGkjl7M`xO4Kkf};VKn0b2>qQ8NVVf(WL921>eU z*sZP@H+;wKe102dDJ4NkEE2VNi3BS$T-N#9gKuJNd=AmtVRIcSl{jw)vnVTfDpM^5 zO6 z#cvdOUAZg7PGsfy(i&Ot6H$g9ogj)j*TSo$rJhnzq*+XvLly*P2h!HPY`jP6aFQo) z6$z5UfpSH2u2dtPW63*7vBnD*iI%55+|>p-W<_WXy&5Rqb%Eavte8WbG?ely1va@C zx`T2K$8vYS4zTCM+(*CXm)N1%ir%#z) z$FQ}C;i^;unS~2eosT+2tdL8l*>r^*N`_XWl2)1GF|2O!k*tdBG_llzdmE2yk-?JG zo&uF%XmsU!M6#51KTy}<&(~OE!SQOW58-O)r%FnSIGU$4idjfx3c@glFr4XiK2ku; z2;e++4H&62%;X|;z11ta2CEE71T{&s9+5gbw9fArH9(|>C?7#3(g_x8x#u5ae#W0> z4;s9AF-lrF3{({LfCEmJ3aFqZth{`& z+HTi&M`3NHZ28@WmYK?!QgLSqCZ~7};;!rx{M@!}9>>|f%I(h3;Kck7Xy!|ll#lH9 z%LSOJgDRPhcg_cWxjx4{?e=u=W~0R}W9OHaONmaSWad3Wm7He9p5UwAoEih-@m(7ieF z5R&GqRw7xWV(Lh4l3!lq$N@59heVxd4{a{mAk16J1eH}*aFRuSFJG;c??d|1*0k`#%qqelleqib^cYtA`?nPNy4 zqGfFH*-7`!ss2MxZ%z%IUk+3#vAdb{UK?h)HoIam*;DDBm3>H zyj3w?8PYd=E~L9r{{Xly*M@)Md5@O+jJX>(!|JIi`M;Lrjm6rsB?9CTnQTVe5Ka3K zb<>L;EgSnidWHhp6MKMkggaJJ4jT}nNFh|<7?K8^Bcw5?>n5zKb!ekSshwW=QdVIR z5dGVVlMUe=V+FJM)Cr0nK<8(Y<<6;jYQvOwdvu zxsp#lEfmzTR7|N1aXQGcNUI9AY2|c2XCP~B$OE?AU!_czl!9C7%w!tWe6+~$i}Dl# z61kofkO?-*)@~fHXn|K8OG%P(C{Ciap2%)3bR<~V5Omv5uMlEZiPQ=$Y8u1sbgosPF`;LQT8c_8lT%4mQmYJ!a}yRofe&GGt+dpR6JzFg5(0m~ zB!Jn6A>R2hH!NBQ#Z2yGrAj5#mo98vifQWn9x!(>RQw$1BdBVni>9ra%c&?8K_uAN zXg9gN@5OHoib|$5r7L=_#n_tWYsH1_R)r%Fg7X5d9;Dr`c6~3S(vR3@BUfT{s`!hw z5bLAU!4zy~l}SE%Z?IMR0j~`gv!`OeyFPJ5r81Z(gR2rRV*OzTH*142Xp~)U%pUX_ zx1OA8YHWX#JU60fA*fo+PE6?T*$nE(bj&V52HsF@?PJ7qHjc;HDcv93oS*V7yh!6y zT7Q=q8xMrXZ6!YG0ahRuwznTNj$H8r#>uLk;fiL8B`=l~k&{FIWl{mY+Kp|+Cv0|_ zZY6UBvao`$2r5+r271};=~gjy*!`ADcNI02Fb@{^b~P>vt3k&~v~!*(&sddcsaRw* z(N7shfsLb;7@M<3ga*0p%1?c7#Xl2_#Y_Z}NMhkco{d^ng)73*c*E?O5_d@ekSIb! zioXwhp(vWRvm(AxA`nrXMaP*~Yj79%Pw?qsW59CeO`?jHni4=!NYR*6p#7ne#t{es zOr<0N;%+7Do@MKuA=?8hg(TSiB6HLb$weEVBm|2ZiJt!eiudx9Yn$9@#Oay^Nd)Rx zooe;_^@VtZiO!j1l+d#6MZs^n;`xW1%VeF zK{8=l)Tb;>0VdJhgepo9fRGA64?s!OfDKQ=#x%Kvw6PMpU{Hh@m zrwDakyeiGqmm?iJ00Hvp_-$}M@*1U$-Qd>px88@ROGKPe43)O%{1yhs?id7a1|ENE+CWvljfqG>2G1*>Aw>9Z(v0-pl4>%`E@XqD3x5Xe=NSyh-~(JxlM+h!L^UqO?b`2s{MZv zG9P$)`DYo@(@i|ikd+E;b88hhxf^bEH}Cc1b0#G+!WcLVUhi9$euCVs+7h))VmvQL z=*LecJZoDg3&P@wyu>t%3S6Cawqa}Bjr96`Ad;t3(Xy?^d<{7Zn3{B;)h$Z31^)m6 z?e}sxm3%NsOGfH`@wIP_24tDgnSF?+>K!6ey6JX6_mZtq^ zJmOQqLL-)VDUoC>F3SkL><8i`53bkZIkM%dTZ+56_BMYfrco5Kd)9K*&z72b^@QAM z7(&wO8Jg$#Sb!~Kl(CCSa+pO23c>7F^`%OSG??^V&&OQQiUbp!^zXTKnMZBFrKLE%X}#0k?5&?k#->W5-FT4_anEY1N)NC&ZD! zy-ysi^OP{t(z;VHRxJ5SNG^0{u>=e6Vmo4QKvHglmny170x~`Vyj*8vN{g3q-{kRGE>7u%tu2h@-(_? z_PHkawYaR~cI4@k77$2DFLoY=kDsJp_D^Kw?umQBOF(j1IXAt2*6L|&bD1Z{Ykne9 z=^Sj)Q^!7u8c5mvi=iYIJKXlv0mW+3uJL2SSKILa3o|Zu}pHoeNZ&q!kU~8;$ex zW0U^?I^#qtOs32Q*VL1!>^**7+i}wsQoRZJ@I)$>`8#GA{Hp|h8?~){?XJI{&gB09 zUJqfQ@{7dT;ON4J>_)X7*NHO25faB?a5T^xd;b97{QWq_0>F7RK$4{p$~wE8q8?bU z)h9tct+)X8_Z$0q_v4vqbr8XwoQ*1J?jK0*VDOoVs|?k4&w;fapE`(o!El0sw9-Zv=rO5`?5$pfTZZTD`NXoOLyLL8*eSl{3i!>a?iNNgJ3*1jc>R-LKe? zhkYyk)C&+CJ9*R>>r!$s`d$kMiUMq+0X6WA(~+wR`Sa2RfR>bAz;+vUww<&ie}AL~ z=O~qXJzME@5-FMc*3NqA9&wR6ws|NVMs}dca6E??)gdn$^rK<`+f!f#tT(Z@alP%X zyktUzF9}WM5cLj76|i#6m=v^ZiX=uae=!!!PnzDDx3#pfI*)EL6K!epriMakrG-Fi zSou}VO(ooA14|2mvD9g8hiyMzH#Cs#OBz#3`_>cT(xg>Hk|@NI+Kc&V=@O`_p-E;k zL>H>HG_=-oxd9;BO-^OF8WC&jYw?mvbkyFpIX|{h&M5|9dlojJ>+akQ?H6_w^3zdL zMJ%iuBTRZ>MoiFx9gLciS$wQ-ax^}iSmdY~AxI^X)XC|P<6482;-`v1RN{k2-WOxZ z>8822K7jDAnK5~AJbRXrkL>(B#f;NVCXiK8y+v51F~?)lbY?k<8-m+{Y(?i{Z5is2 zB?^lWlZS(x`CK0R4mSwo8qLaz&w zllH6tlZoN=Q0qh zQY(79^3IgZY9T&)Sm3F{D-uA_RYE=@@u^S%8k>V~EG=>G>=6ll(w(#5{{S=6)y^zG zQng6ST7F>Z!<5MLNodh5Dddh!&SE0wPMOe=we5R%_1|^>0FRb_Up-@kGT@Y-oc-f) z!`4`(4os^rK&`a_iTqaBGj2}*06jR)>wM2$@fj}-mumdP# zt*kva9`?Vl49>uNJQIcjY}z(mOH^rG?D^Eft!)%?N7O*<`KKYtxd*mVP3^9l>7d_; z2)#A9cIm7=!IetH0lYwPSyVE}9T5Z(w!(EpGbpH+c0Tw7Jji>l*I&%9sk02OrtGbc_Zn(-CzK+s)>% z*Fk%Yw)$U<_k%;n=6;YI?Uk~c{%2n<7U6*qt83)0Vr%?yU3ktJ0IBN&NHnXXO2 z%YR*eF87jD#1MQbqvQ$pyY#c=6-}YAwz$kG;qQN=9M zD!Qbi%7Fk;zQWc3ZJ^)RZUs?wkOMKOpvytV^r2|HY{89@g+eh?kfj8(tHfy6CCi$d zmk-7rFsem{D5q2{U_fK7l#NBsquc{;V|`7PEi)3}F|STcJl`y%sjCIchkK83TJ{uf zPY2$wn2_ zf*B}kW~%AClvM-*Gg|tQsQz~w1Hq`8k>a5TFTl?K0K86;LzPfu{{Ug7U{^5nY?yk8 zs8mZJxat9P1Zl4Rp1SuMaU9K}nQkofH_I(N#fyy~l+OvV0B8u#?_xhRgt&3fh>X-! z^<=6oJ&Lc83ur6`!25qIZ~>dWQ@mWba`!GSdh>{lUGssJ_=FOP3&$XmCtU+D2Ko_T zetLeqbG|E2YMwuzNWn`}l^_jXKGbl>8q&u1KgS_$3I71NoBMxfj(grI`PMo}8^WI$ z$CRxGEf75fVy5eI8!Kykw*;-W(_Otd&i9Ibb%M|X3u!^=^Mpl6LbQ?P8J9r73xVl- zTn)XyE(Ro*sbiDJOf()s7qJQnA%;+@Czj+jKmasw>N5!aR1;(L9^;#z%lhXS)TK0n z7$ZW}5Ji=V3KSi0lS`=d1nXg^)bT17fiWB+pqhX3X$bfMt`5P&QV$ z7LTU?0Aha===pxL5#-Ke#Hr~p$*B^uo_eZ?;DVjwW04H9kP#RBpxAZ;LB;d4xcO2W zc}0e1wbb^=92q6iJAuX7GgsNQ4HK^<|}$@ z4ScEgo#ZT7Bz3}CPPB;{OIb{zk}?K)GKTY|?o^xTMxy+4BWhtu1;d(Go<^TJM-zKH zjgJNJ^5`3kU zl#<1WYFt;9>ssqbtm81)iCe&?ppdFHL-MDWoKtetO$?GJoHI-SL7}INo3xBArH^|8 zHV1~lOHiqQSEU;HRJ%P6PYO{sdI_U7vmB{Yb9-7h;s`3K6+;pj-K>8bTSj5r+hecJ z!;TUHNuU*>pgHIB)(qZKfGQ;CQd+uc2o;zS#IYElNJP&9d_yvzE<)?8TISZaq>a7! zBw`q3Mvte;Q1BIji@AH}6Wf+CH(?}{$zU?A(SHrJ79(q0eeL;#aYfBqr#>!dPQRKM z=eat+CgI1YKUuL;)KEtxKLH>>>H{o8OMp&N7T^=;du@Gq;{!w7YrO{1!bs z8)@!=;bowU5cFVF@$w6q_xDz=_T)ycOQpBahHej{#ySzN? z{?5g#Zfx`^C%f;^RB8zYDm$v+G`9$(c{jxFSLduAwuT%*Xfd2G0Fs1ZmGD$i)f_I0 zffda zl0ypAQ{l8m8KR{wpLo#JF_FL~&{pYAPwHBc;V!q1eWdH5EVssHrIA3dXXco|r2!xgr;l zoFDzRH{QdCGPb4wpiLO5VZbz?7O$@^ZxoHAh8V?@hmf_sw_fCs>R6) zVVF#O$BR=@3@W9*<)E!eDkiwi1oA~25~-MgSndJ6?`{cRGY^SK7-hP(1i2@bswi`c ze%08UM-SsN$Vu@vt|;R+)vuv2yEZc#+C-JeB*M|<%tJFD!guecqS}2rm4=w_FsO%c z0TM zq^XVib@R*8S}K^(G!QjFK!DW9dT$dof)Gyp6shS|nvGBc*^3+M^{!CTP9{bnPbCDq zP(2@C!&3IQ)eJ9}d^zN7Czi9}wAC1{Cq!2g#A#}xt&)lwsN3Qumaz{>>H2r+MUlE~ zpcfj}_Kwjg3PAx*;5Y<;EX2~SOInQaa=>6P!6{Kz@jIk~^(+fqvlB<7*7S}^=306* z$1y3e%9B%ut#tnY0W^vg#TzFaQBA!I-n21E-mb1cHfP z6p%n*%|T!(YX0KUSo5wUTZQ3?J{qbkC#r%t1jI7b#wrmX?uL;YJ+lA_9mfoICK5(4 zEGUGzH3GNIo%)b@#F(5)+*q?$gImgiMCcLE;9DyZ;>01kjzeplZAw>*Q38`{A0>#+$^0aoZhCU?H zQutk6h;sm_u9uXcf+>=j1Ju+|O(t4rK+dJ)jqI}OO2#vL@!AJ?-`q+_454D}R;R^*pn zazwhBi8i~ta(BEo!|hx=)E()BmpSD0H9qx*IJ{5fxhdV_##XPU2wswtm)%H1ZrdAr z@5d3)$4Mp7OE_RE8zYrVe(_oJ?}<=Va;7-^uUhn&oDe+F%IfJ=HQ7|dPjm^@ZE~;~ zwclIuI01oSVVCSa(64IaX6}ydN>00~HK3z|L#JJ7#S(a(;)=~8)pJ%L(7Z1b)6@|o z#h&&WEyE_nj^jx>%Xy$A`5sQ}Uu(|n~ zilTM>$5J||CzX#Cu>VUqs+-d%60)2b%B(YLioL3`VePN2RC|8Apg2%!ileV|7 zwO(l}BY49j<~goS{ZG#0(@&-E!3bwGxb{E1XLtojZzJ#1<;}%7$hunXuKxg)?Y92_ z-u4>%Z6MsK2JXbh&IPO$`Np4{NkSZh4=0 zDMj&h4SIMgTEff(WUgVRo}<#&xZ^=1LB@iyo6^{aEgiB4yRRkTKz)9TaCrYI(l1-#?4U^2X;p6u#iO! zDd9A0a}k(_-EHuoQVnX<nPGfDrS&5 zkZ5dJoyDvTi34Vnu=r){%o?Uj3R#$3l!8dy2BeL0I=LA~m2KR9Hclv_Ow}PKo2gk! zP0f;cHk75>IiJVAP35dR$5z1b+%}UB!`>&TT1-1EQ9(2`k+=i^6$O9{G`7b4TK0a* z!Od12s}C(CAseMEl0yc4)?tz3QD=pCeW!~|xq@`f=iXwXPGkN=(VeP!RibAqb00YJ z7ATmvBx2Z}0bcRM1hkW03dk9pnChvnBC3UU2`ai;+HrTr?0t!e!KPj{64EzYea7$s zBQs`elbkKX?H!>j7-mRWQeD~0Ht{yA49U{^$6s<)7BAyJhwyVJHuyJ)Q3>%1+%7*F zc{2=;51^9~q;S)>Fk$eB>D?Ad55`rj4EGF6Xf5;Z*28T5k+r6sm9-Nz3abRAm4c1q zRG^lrpddMBts~JeGpAzkYnh0V-K-_Th+tTXf*qaR&bfy%etnGo!?l>NkC=ud;+U_O zlz9~*<~$RaDCdSgT;_~SFT`P#sZrDweL7g=0Hi=$zmBG)#U1nJLNz>f{XzbqVWsv) zM$W;^N|e3iVzA_bzZ9f}FygQP1D!1d_A9ff#cj{lVrHc>(=ZoP5&&6hn^220IF8)H z{>+@^;eS8E{8_XD%EKX**M-%g>+RyD#P0H1N6!>Ax9v0)gg@NG|vQc7w4bozC822vn^PB#;R#!1>e@{o~V|B*{#)%-l;$LR~3Q z0I(VG1QQg_){J6ssZu6Q1yaJ6S21c1QV9SPK>1Mm$FEc=YAeG@5DPRF^i?KRSlPnI z)p8`u*N%L~p(8*|-r!~=@aAlp2$sFl2ZXQ`7uLfj*0ivXCzO?UiXmO>!b_zN3%*)a z>K(n>JXhucfKcEmMO_rQo;`=tR^jwTjXd>ql@c0esi0GuIqG4Y6*N!No#D8-xxG^g zNbl5?hD^n=3@oZSzJJ7B5rCJ87ZF3&l5ALfO7R#qN+22#4*^Wh zLYL%V(X*xOji-g0iF0KFP)L?a0e=^ZaDZ;_@Y2}-03}sN;r&KALr+=EIISiXhnk2| zK`tJWytbM;C@JzWdR5FS1KdXHLAAJ;NnE*Lpl=<}Kq2bDwR5Io8Q^xRCT)Q(e&o4o zSOdMQjpI?hnQPz7#T&}}<%-~y%hacaS{js=ioTSX`;o_@#<^D&OjDEj zgBGj7D`_FbV5)g)*{Lb4rRebp+VKX0b}<4)rFAD<#PJ}RK1fu_b4wCP8^wlz0cr;g zK>P$F!^_z?tQxSJLj@=-5{~rBK~j_h6>k)|Cs*QO{)@&eQyRfBj}Q5>Slv0Aj}Ka< zPOJ?)bkeM`J!K?l@l4`7^rocOQ9TM_ zRJcQ#m6hn@=?T&%-o@E-l24rNor1lki3$r*u_ehI+;gaM^vW*3>m*?g6oJ3GQdANz zL35o5xT|xDSH}MUv^$xws)ocQsHlZxt;SvwhL)bdh+&BrDpgg+ba`Y_5>U*6LE)Yc zWPXh(mb1LTU&Pe7=FeR-gt8?}oxFx6OC*B+Dx1DqROyq)&o2}_OT_$0s>526N2Ce4ww|SdoX4WlKBQ$)TmAJ>nb?8|NBDj|qoDh#RST z3M5^s<+J=e7V!(htad-Lw}SpKa`powcx_G1JpIXh*UZpY!7Va)gC;o?oV!npQ$%{O zLU3}chRrXQWGeBJ8-%+*XiYf8VetwHQAz@ma#17@9n0m)`9U)_Ow`C;CRik;YOB4n zyRbg|BbK9Bo3WzfiE?_E9rfLQ9`%}smO-#m@ zHfjI~BA_v#%+}oPfVsnejjHGd~~K2{qNW>o+rmvAyV<)vGg$}2Xl#0_An zj-xE5c7|DiX1r;`=k$!m{8HZ60*R$lRSNBM;EJm3% zhf#aOEamg^(Ge0BMY+<#FBVslC_{2K<@wv zp#ja>=RS9eyvd?O)g>iNl_?>KYFnqDT9~Y8acY4)m|iIylo-VuIG&r#BbFv&5_)ER z7$Daw>1$Y8+!uqz%u>X;!8FW{f49KUej5-bfCw7aw{I$Y=ENKrL*F3pnzXzh6Qp-hAYS?K4Pp{GAOycEV@j|0FlZ-lNh$0bb+ z3loKB=t&xysn;#eQ#N66b~<m~6F(WCl1lWt45q)jkUtSPPaT$k3wWj(l^R1^&PihF(hv;?foEC~XZ&(~gmXl&*x zc+#5(vO*+W6=XM%22~|2*0{43IZlJP2aV&Ufht)FAQXaG*to3+3g&qT2M>uI^uz`w zDj=4txfyAtv&h2DH9V6xB+;|MPXz`gIzPjTq%|uVn2|#eG8oB_0j17sT$9Ima)e5E zt5Deb7c2|cC+13+JJJJ_Y>&4*+L}iGSHPjgu-;;tY0{z^d^(K8s~XdU3y=b;x<=Nv zfa$gPCPCgz!hBaCo79e8S=r0HaWQ+d5Q6Lg3>~_Uw>My74mk`Mb`L_Z#FXKAmI(8s zWM__5x(8)9bt1&(BonCy{0hJF>jih96z-Fi6G2m*yt4OvqUGvI3>D=>rRnUqlI9u2 zd0uBL=F2ab$D2@u0dD%kN(89xrl#arWJBN4j7N*auXQdOm(+9M7}&mWk;~X})z{-8{si{pv$1OiXM#(zLbu3hbK5r?v6NC`Dc@1>RgXXY2sq)Bm7AH|g ztu^=_CSw%li>HJF8m@|pdW4cfI?^q3bb2vf`JSDWhbl=f8Lmmc5l@!10>|w8`M`j9uDxNqM_}QDJCqEAY?%7SV@yGU2IO^3jup@EU>w%AP1p; zTk{^>O#c9>0Y!@kuq{{0xAvtX+vPtDpA*FCB<4DLx@uyS^)%QhM~1H*1y*Wav)RQi z5h4_*o}r#B`LZAcfy1qjuqT{He5Hm`x2p7V?OT2+N(dilZ86<$g%HBEsiDs^YV{G+ z)VMW7fZ+*{NHWET(?*L8m?^&66S3}+-A{823kuqq>xA|YCQ=goXwmKV{&k$sYPlv?VY%D%Ht_-8hOC%1qR!3u+<#o-WJDU^5M`+_h0Z>;W330{m>S2V5AS?n0 zGg@-;Z&22)lAURxNTRcn!bg>)CEDZ?#fdCS6LWG&KDzN$n=^iDRlG=2fxGdpd`^yB z+6qt%puvDF;w?^GsF`r2rs*hY{wE>I3F%KErH(*%zEl=%>~!MWvuK3!$+Io|=hg#Q z0EPfw!L-k(%0pcwuSYzxLRpz9tU))i>Ws$yf!6wueF@>ZDo7>9{{R-spKUro)6ga$ zfNBA76PM(@uw;P%-$^HIwtX6RtX~DrmV#6QOAX-6c-Uq|Ng7q*%M4>xhEoNPrjf-GsI{0P#-T$IVn_pBbvOBOV3XP` zE*B3ZD1?!^;)8mhdfZmfE;ngNlQlt0YUEp=?B)y7^&^reF0Pd8a-zkEd3>R-y{-n` zzPvD%wxr@oC?S<#1;L=Pah^w3FcNlzxvBv*1kmP7JBD-b_+hL;{{T2*BRV{-gkbWt zZ2tg-8bkalK?E<8QGEd0P6(BVm%qFy=Px}UQEJ_*2F;!mDa#sEP}-Nbm*ByaX!-)k zY|V8#>~&ibFJdk3cxopFN?OBsK{~ZHy=hnC*+Sz!S`t=G#`c{v;@`C-Q9%)}p#~*C z;#iVc+@FUxBpm^<)bFYJ@T2`n6F2050dgNP(fz$`5#jOD%-z?fmC3U;zuapTwh)UH zSfn-=lbErIMZh*zteJw}&;$M7fbdgLCr)zbeNNS`e=W}@->6RTV&Si&8aJj_&p5F# z8c`+#Qjr2>lA=zc#tF)~k4%~GKb;x4{=%CQ06&lWcg z=)_vQAr7XFqYK8VF+4*I>c>Zm(bi2tJY{LID6pEvsFsg3jG}1jsIx&iOU7A=wXMP( zt%ymGxha?e$Y5QFCFlsNYo|7h#!v4s>X9i)?^FmaLJdtb%r$gsM{Ici0L@+n_}|Mo zUpn}2%M{)eRCs;K@Ic|rUvD^a$ z_@PA>H;>?$bJwB@mc!01Rr@^G3UZ-kFw~x#)4pP3yGAxVJ(ISv7Rxd9ZKE{45cn!_`!^+&lgTu@iZ6_;BjlVH+Jy zvy$s7aP*dXm6&IyXU>MAl(mqtj!f3zoIh+NPL`=lM6yGNDFo=?v1h;9Il%V0Dng|X z_iMdclcBjeXbp~$%`}{eNr2bU;#8qksokWYSk~$BA}A%Ara;VdD5eV|ed3P1Xu4%v zIN5lKIOP#7AgM_txS>&_kZFB*Y6MxZIPs4N3rd^;yv2z;+f6>v^v~?;;r{^qFL1ai zd2hy^T=DP34sGXdU|Df4X~Mahhm!e2maw||NTaHTu7TjGmRgu4k)xOo#8$+caGz`7 z_OyYBRvU09#y|-JD+c~WqVuu`XON(rY9^&-cRQqA z2kp`S01NIx`!n+Y03&0Zy^mw~mm>I)iqPV;{I|>%2{$rw_B%(0C3OWgRwYcSOI)#2 z%2dpeD$LoWL|pdb_t}oyO53|#doLL&LlYqjm=+I&_hbr&Vhh~|;zk{O55hMJvy zbM+EuBuXmX007A?TD^xJIoYY^YnYWIzz9otM+}BU>+KaDJ>fw;qOK!|rqwbX`fzkIt&YVXvcS?=VpT4kW zrje5f#Nf*j0)lpsu>^uHH6(Tff#?YW<4zgRQWbK;FdyONL zCX#ruiTdn%Rdm&94CEIQWQl&|rCW%4Yoa?4TH4==C@b$KZh%hp90DBiZ(<)x!$}#` z(f;3kBFC@9Fsg1>uvhFiAGEw~m9=Wc$MNLBX} zya=P027m{8W$IvQlIE&^g}^E-Mve;>H7@@EyjWO095{a}{?4aT40JUiTwH<#WP&Z& zpEv8j2TL-Mvs9E2kU@RW!1znjgNH*{l?hzA=_(Izt49Y*yi)!V;*#LLA>j3ts%GbH&7|Gz#`;R=!k6;tdh>?cR$3K+Dt*$XB_M## zEJmJQ%rHLz-^Y&k`VMo4fBV%9AXH zH2|A1whBK~DgU2)6w%^IK1D?{LTaQ-hWOhRT5P zwel5a4M<5jVqVnQl4hYl{S%3hmnk3TG$owhPazgA9f?&*;ifZO^0bvE8KI787_zjT zTLnN4U~X&$?!ABmQZP$wB*brcma(gc4BoWY-`4RMDHtuKAt{$FAju_?gn&-)1dszA zEaXwYXE;RVjU&npHwmY=?zZ0t@VlcY8<^ zMiWc%s&889$2{Nrapm_%q?N>filqJ#YXGF^M#H!pYsb!e7?UMVY@#YnX=>kHJfrDc zMK>CblWSax>mSYU{8~9m4r1n>VTwwLDa}7DVp!EIiV2cB%3NNaEUdQGB#4k7(AxIU z`%hwVVnYLRIlTbA{xIY7&-E3CDcD%^yOZ(%03QPd6c``CQL7}4idJbOpT7{99L?u@ znF=?TTl#Isr!8cl%> zd7=uuUk{5IrlA;pHYWuwQT70$ zFnyBPvQWG-B@-=2!j*uenlL064j$}ncDpYi{f~SK`5g#dkQLrcdXKAG= zND0L(6tGU00kvQ`(V94)3!|&&oKB0ADJ8?;uEpl~3Mp|0G!QjSDmP9xXHrzUk1oa7 z?s&IPQNSS+mAuZ9$1qL(A1LyiF3nf!Qo*Y3C~|xAxxHeh$N3|eIbRjTaLVd=<*ufd zYH6A1v3DOI*9$ zHwtR}ZC`l8n+&IlqBme122>qa1zocF)zwXi7yKsU+lZBkByLLtkf7=WS6a2a@`xtR zn=K+}E`vpZQsu7Mfy-VI+rMGIwe-JaPJQN_M-k;|vHn))8L(N%xyukvDi`HDpbX)cuG=L z-Lgu8m=jZ4zpPz5W{JJ7z@4wM@oN}#&y;(Rvp}Q1LcmiRCbvB!;RlL-5%V91eD{g+ zh9qFA6ts9&H63&kWR9x?#;DS|f~E^A5Q!UsEtuv%h@DR!!y{-(#fg}VDv44iCR-Bh zRZ)EUYaT_8-PwzhXR%c2N*jO;-Q_5NK>q-cECCEgO>mJzfWcW?3_W&Ut!xyDkacVr z5@eD_^4W&OTHU*FWXx_ZT@;s6S=1@k=DhW|g*c3F>Ex`S?<`yzwGHZ9D(80>hip&7 zd?-ZiM=X%d3N&i3Fl4BF!DM0;NnYe@<-gZ~#@EFqRw9+Xne9StlqAD;ix79h(Mqvr zHlWu!Id|3;Ig^)g>=q0*o|wE+heJI<1>$K~2FMtTu?Ij%xb0)JoDMZp$Rv=XQpB** zgz>Jm>RtyQGZQ&PkEoK>Ek-ogJc0KN?IiU`%HX5OqhWR#ZK(IP$UFD%!*T#qnuAL_ zAAiYuBoY{C01mYLZZw_Vs{#lerLAhP9^|NLeeXC76Oz5 z_UCwEhb59t3WiyEayGwMN|J(DU7-tbhb_&uu;2am^zFq*8!1xp4oP5a=9M0ldT8{9 ziJX*%CB-jLc;8(#5L*Rmj5`&=t7*YA(^bPV!mFH1B1$rXZRO0O)*9)k;?*cC6SC!` zQ+8cWZXTrPO!VR&6Jz&rXq_mirmU7M>@)@V1{A4|g60n!JUYTw7se((wOws31uRB+ zAeF%klH6GxO~!7bDz0Nl`H&iXw>Ip z?|5B{?KR=7Nzqe@!m5Cx3LPEOM+if0t?V>Ep8%t2;EO3s3~B)`MRMT!>0TWU#_dk? ze|UgY`Mt&OQ_cE_uB&`lLL(HiPO!;Y zm#LH=EP~#41$DLc8|lRO&eg~+iE5xM2$k5P!|g0C4st@9dEc3Q^EGVU{GkEa_^I+1QWPm*;^{VP zX>M5vW9Oe3aTsuVh%jp!uA2$#sn&WnhENqB<7N4e9leCC0LtXdk(|Xh~_3?Cw=#cuAqW_zVKq!gf{C2v9p7l((U^+ zNyD&;dWyw{N+_wLBHt3>q?9*g2yQa=xX=xF+^jm*YNLBOFKQ1?55lG?*szp4mjf=k z8*mzfOsvco2cg0~C{@tWViG?~qcu!r#4(%sVT~9D2Sc6LFutT%aN0%=NlHS<-e(}z zw?2mcS;8D%CUzwuGUgPsIeO|I#oCoTsc@XbhSM2RG=(Cfs&gvBwlOTp_@WBgfkB}P zZ@$`Jh;dj%fP1ut)CSSIopPlrV6B}xe6*A*U?(zfrfx_g^`{uFWx{bNs@%YlbmA9P z2%zL*Y;{n#8rYAet-^C4f?s=5E5k$O@tn(?0o_pq)D=>+IUh{NNYjha!9zxpSDee# zz3u}%tO2WbPvnt2#BpLfVwNTUe`9TCvCt7`zG9KCP@N>1EmL-C?6n_ zXOlEUGA+pYdTcN2>Am*jq!qcNhGCmh>geCDm| zoJLlgsZPw<6=ty=FfV5&*VK0&yhc|rt(dlsz-g{ym~CzrD-nrI;ktrAYYWtW4D^T) zJaGb|FzB**S&3WaIx$Tw(Whgp_AH5o}HmZM# zjbM?O!WKysOCc)>$}F*fa}Z9XcPHGQBv>jJ=;q%o9RLM@9DosOa!oo@V1}*U-p)M`?r#P92VU*R> zNgV8B5(3d%%50#Ks5)NWhmFjuJ#T-Wf6PmVo}?) zW!4jX#d7&`8PLHo5TwrR?toqYRmB>O9=N8(&XB5u~bzJ&73zjI$5nVsr!2 z?`crQAh4*@=UCZLL!>=4H2It@VsiBu5J)V{02*nS+tarkDvB*e(wrb=%nBvLis;<9 z=>G6E;vqwwbkh2qz4i3Iw)O3=8$mn5r_AXBEsCFX0x3Y=R1Nd4lN6F=%iV>&_4U%) z+hZlAADQlQFtRwigEAubD_T^gD66fU0VhVD$S^-0i{! zQ*QTQ08-(_38`mjVW_UB1Vn^1ae|)Iu=D%rfKUqR`exXsYuc+8hDWZFN)@VT zqiH1_F_lQuq^bfb8rtA%s5o7(Fk+OocZy1juu_U>&qrp@Ar`z>X0X$+W<;?qE8U`$ zfO4lM%GMQ&7oU0K3+Egg4~Gk*cpjEoY(ht@3bL_|CrPMPfKpJq7A`Cr*EhAxOm@>w zCRXZXfLWcqRUDsN-=hS(2VzgzIF+JiAv2P-cv9rGG6b;ZH3m6@8K{n3BWIdG$_Y2o z(Lg9S{n;HbMx-ci_Z4NNl@jC=k$PYA>Q4ytTqLQo)Id(?cgPlO$ZFJHBgP~V=X4o? z2h1+Yd+KlIBkQlqsNEt!W$znP;$9RC1!5saI+R;rr)%P-;A+e;C*^J5k%QV1ZDUrV<) zr8!re50$fdA|#W!zP~HnUs8C1$)l6!^U^0Qha?XT*k$;vAHsQdN%~JwbzSY+_R!m7 zdy#!F>%%NGf(wxLB$6wg>&=+?)S}v3Wjm!ZTSCiD%L~e*Ff-bpG9l{L) z-)%HE--hY%14eN}L0%)}qN2Io^2u9;Rn0$gdDbL_QL=&Z0CCJm1m6sdQbja!DQB9V znsO{imZpqWii_!J!tLAI+)l$m!>+fJ~15Xt9UUv z6MARoU4FvxY$Bf%gsh6u$zlU8jcqgxEN$!$&}qQaBpLcru5V)g*X7O`;C7t+I7kGL z;4}G#x3}6VOhXHs4Xc)(T?bmiWB4tg0^4o=x^}PPP*Ac38QqI zNG=?JOXN*+_~P&_(nI%;B7xC1v9LPao$Y-`_Bi27002Pz+dn7F(hF3?B)M77GDStm z4{>{qWAGCoyi%4I*e;i_xY*xAzpth3#zb=rse#f#EGk;#BL4tkW91<`{Xef62yv4Y zDMgS7tx7=*MsHSsx#jK1JwQlbPkpUzz5f8G7;Ad-h2;!|DX&n#o7A)1@X%f}5TQ4H z4e#hdBE^Q=_ul&*t;Py;g-V!GwFkW!^56^c$}PTL#1^8KnmOcSl4@}{W+x~lUf`2( zK-XKHFWSyk< ztX7FcVk&AH!BB^AY06B+S~DPOzBvZs&Ya=qi%*5YBN8; zYMSSn`{!KZ<%UoR4jznLK266$1Dx(_4b-ql6$Pe-)50xsqW1I}T>f_SzXXY8g+Zoo z_<<(QNm~Furn6bxKkr>&dl3*>06IMP zw987s3|~1>BE*BG5hUi;{=cQ}eSrso=E*4z^&}*KoosC|+ zbF?Q&t!U)CWx3M!2Ktajx4(1q+>Rhfs(~L59wXp~sN5_;s3N>Ft@7m5W{Up+7=|>g zsbirc>}(Crwg>wH!-ROijqj^7@cL4bZo*CqkR6K#)PZaA<9ZDuy{t0BJdp;l`{D)l z1Oi8>)7$C5N(kL>TZ^&y9@%v+;|c<$lcu9m-#>T_=Ejw~dbD)s zQ?2vX4N$^r5XT((%NyP@LH5}1sIk5H;32Kysi4!J&$M*3h6i+Y0r)?x8iNjvm_;qG zqJv;f{<`14&s}xmWXcq9Ey48Bs}M{8fZ!19$L9!n!ssI^kjWx|WdIA?Pp{`|_xf-` zN-PT-P}7|)t!VJ3eAXlbovp_q`wp?PuMM?Co_3BHj%LbAsqdJ8KqtM;?dmVYqFNN> zn%q9Q7w38(Sk#%f1l-!B=gUv!pbb_c$_y}r4Jt26GqjG!OO_g){{Su{nLH4~BEf@D zar|FC1R+W!_>^>VeV>#KhYy~zP}35yj^_5T+Wxk=^*0|rBTR!a$pDwk2EMvym1%oU zjQ(r+>s~P?r6}p6k~pFSfw%(t?smSvJ%27Xr6!3XA*o?;O6kjfFu({luZE^GU;sS*dE-P@>=vZ*{iG~BhZ2c?d{+6;uK2>uR34XI39emK^*DsDfY!qr@s8o8llcNf2d{T4LE{5=g`}ia;TQ76-nZOeQV-OIZ$G z)UKK33a9M!Zjcaxm(ZWZKLou5UT||9>acu7#1+ngvk+_)0jN3+E(c?<933wZPy-fi z39nvxyXD3!c#W9kvOv9n6sV&x)0;*4;g^n_)yR{;)OE7dVX8#a(@4!NEb*zhMo9^1 zS3)j;U$&Ov-p$&WsZ$f)Et5ufW~&C|T#CgvY4(0jE>y<}LdNwHked=RXD04yUf`JQ zyeq`4Bg9M|d{>vAo`)28T3YC5Wo4&TzGh&*!F$^Kjr;NG+cRn5=Sv1+(g+!x%VyWk z+6u>w?LC)>z+woPkR`cdUZ9diY17w*VHb;1Q_E8dxt26(U{`f{6i*y1Aqwb)Db`6r zvq){W{36=@t;6Besd7}AN=Yf+SPV{~^393&tWvOHf{eh|sTOlhKc6-}R`Dhpxas0$ zb;s(N1Hn%$49-3wN5erZj;NA2x9>F8*0Hgx;`@7s!OJr-IN3yQxd|W^0rIWAn2e*T zvJ#d7X}xUu@};ZBI*A!D`ic?F7#}#{IDE5Hy?dMrtw5z{OES_{7~Y9h_cO^TTa3Vf zM;fB2m2<{1<4+bs&4jh4BR#_`_Xn1$}U7t9(~55w%7LY9Ti!^{#G5~}?tF~YB_ z7ScLr!@gSkEOQngHD54u*D%pkQP7-5d@~T1nv^v$a}g=Usihw)7yjlOmk=sJK?|lZ+}xeO1-(aFj&M*1tBZLcnV4i(khY&qKJMj;o|kSwzp&ZBe6~!U}7ZA zSV<;S^@)K+VJdKyZvx~TxNs}9zi5vR@!t$4@nv~a!^!Hf3^t1v$1zGuj0u*V4C_kr zv^5e-im{F>2B&ptO|q!k!EHT}{ZGSfHS9c2+U*>yJ|lH0mHMnn04sTH#%UGZ8E^#D zz#BWXn-^$oRqYS-j3nHAt?~$yDX3Bbsz}V#ShRDmiT?m=iVOy`_KpF|xL-0fXFsF@_q)0jIj(5q(S+_pDnyJfMk?IUb$ zB})!LT-7Mnr~K|{Nq5&W7vlRxkJ^X>61ljPfI>oMDL^m)012RAzy@X-#YHELe2qfU z{{YIq9&$brU3SY+hH{Kpi-_MtOHVygMv$3?^$b8H?_*$kFgs|H6}2(Il1hM|I1S_V z5(2=gu0w(D79(tJTv`N-Mk;d9k+~{T=ge9{KmjS-T8R2XTPD!L&oKR~@oY8*r2hbz z;lSiWA)1yd949hG0>Z{k#-{u?!|bed%FWtXwH;SBYP7G3MY1k3c7pbQ zW_wk&7-4X;6)dw9Zvk5oyX8VPrDBT3e$;%&T^NfB#j%%omF8J0)(T{KP0n<(5-v$A zeL|2lw**VsebTqP`HE1vQj|$KkV&K0BY3=EKczcuQ)R1Z?N&kECRmuKNFn!6ir^jI zVCPt(vCk6u!X?3)j;n;U1zK$w}Bm9TONRY3)Vn>{}e(}ew?dG`ju9|--hxT4IkQ=(OWiJ1~M z1Rx;-LZL=mg1c+2$$5j@n9Kyk6s(YUTX>r_fG_+t4M>}4e^2&)DP=235~hF>NCbxj zkx*ER8}p8~@X~x+#0(an5U0XxCa%d7R#8*KB%x)E3rjeb0Quup8H&eZHRIOyF4|tv zke>LZC8}Ap74ylf#y)iIcVlsVp4v*oNtC7GCy>i$ZQ!My(q7cjqTa>18m|b!xqhJ} z6;*uGEY$S0@D~`AQ^z2TK~qI48AvR^DMb!Njq_iN3QHuHDh^n?mh0#q(NUGNaYqt_ zmkHhhoYY#t=3UR7BkN~^o)B`sCU}3z{F{&RrWuRlGS1xH%yoE$7hbaqCYZ>6Ds}?q zSgeuJmixUMAYpzL&cqQg_>Y+y(S<(ENcEkQftMo=f}|nXIVel>-e;+I&(09}yAZ-@ zaV%o12c;C0tkY8AREkKZrKLw5G*l-ltgJ}QylTW>)db0%>WjG`sMfb4wGn5Ql!;`7 zripPtC?LZf?R>utfz0By{qIk%vxsUUhVjDZ2TxY6#ZXBTgIa$!Wt$ zSP4jSrYr${;bIu-Gxv^{JG`6%2{xgAG-C97(DD)9cnx1H(qZu7+}M$}5mc%1auxx@ zIyX#2hi6r=1Pt2&$8*$Bg-lW2sWo$$qnz5U!XMx}kug80At^0J>zJ(_-Luv?W5p>X z!8w{5epkl@Pb zE>y;F2M#0Sfk@(9LmMk*PB4Vf=>HsZO7#^e70Q7KcxrKFHp6(#6Nv2TL!UrX3{Er~Y+G+^dR6M|Jq z$wJ63ExhCab&sEa@geaa7o*2;o=dIgTpygJ<;q%|LZWOw2xG3nv5ZOBe#|mOF^%Dd zoSu-B3F1+93gGZ$wJCN0zlcy5e?0i-#m#4Ku5`WRoJ6^aONN#}cB494)E4ytzA4w5 znx?ClB~-$qH;`mrqdO?_$f}o>vWo^~zGHGuylQNfk@SW*-rV7O!rQy(->K~65s9aRvVsbAfy zl`2Ro2EW7w$lrzl1{4m%FNP5#YE4p@B}yB`i<(v6O6RNG(iEtXq`D%XAG?|kTx~Ym$a0vxUBCSi;KBf_I zN-ki-DlrOJ zXy)~$^P$bN5w8rc!fKf!#mmZ$tU?I7aX2K{-2f^MhbcEvrr`0B!jmzSK`i8g4o14( z^|`z@R@CA2RB_hFgJG4_F(M=qDuXJOPy){yu#|yd3t!9uJrqNX>AEp z@bbixcaMa%9Pa-BlRMSTU#SKm#ZTRorUBW3YS1&kC+X!5-Wg}YG5-J%sc^UiRg+;j zJkYtb2`ZVaVw8{FfR?$i0^5Q#eJXNg?CA=gNB{yI%Xmkt79?qtJb7l-mT?o*#1iB_ znpND8=FQHL%KksafOvW0wgt>M`oA_!S%G4>ja?LVB8}$7>Y))+!#+VNdRiM4TRNGQ zGcW~@3=y~H6eU=6H+GbuQNEA`{{U?bXz)te`@lJN02deYptXFng&sliZye`5R}JLe zUGVde&M{jRRZTr^F(qpnN+^*-#^{+kbjmLwnnD=4D;XCYB-&e7YT}-1u|)_J-76pf zkk)7+ z1`I%>%Vdac_i| zgPaO6SgDCZobDoGlEX#>0ZLl@C_4+n9CyOrRK;-2V+`>>nkb^8WvZr!8^LRZ0@4+A zo>}SU5-&q2K5&^zSc{8sMBDg%ue2qZf2K$*!C?R@&2Ry@e2w&ruV+!QHdNsiHzq21Z!_PS7SBrRNH_SM{s?+p|@TnBS=#(wrUO=pje^oK^Voy&+W5hH#lFLgb|QNdUE~m!LWujN>n{$BmeO zCitt2w~2i5S%Ua;h~d1$jAM9hW6N1fRfxpWG&GoP3$q2Qon;Y6E@dnT0EIT-+;Xw< z#JQLdse~)UrzK7Uxj#{_--&>+TPp*!q%K}94B&(k2Z&fT8lx)pA~g8#_JqT^{;<<{ zaZib0+_!_{QerfCty;7gg+&!D*=X9It8_6rMO4>3Y8O$pvk$Z}&p zf-|j4+>R0F@;eoU!Q<61O8(aHP$eS7okcRXPFg4*5`NGgAb5|s<|^lBwnjnXy5PR8-acS_35bg1d^!xmf}Roq-ZbEmo7#6-(2<3 z`QQHlE@SqV)%`^2LR7gkh(it6LP<(&1=7b;z&RW@S&O>G6fs2<4;m`>Tyzo9#Zyq!@)=$UiZZmyxfLOH3PqHXZE|=Q5sDaeI+Uk5 z0%@*)XF5j*XG>G0OO!xA{cSq(sr$vP$=sh&g3!Utc+jVqb6Bpb!Yy{Gq>lz+fz}~Y zERqHI?8HjncFqHXvEnQ?HeM&f31_IdZ@#(TLkThRKTc=>VNKB48f4#g)EIEad5aLG z6%gg~#2hTlKryRChB(nz%3d-^45ImgBGPvM#gNK=S2EQxh7JAY3 zHR0~jNcf42vE}?kRiJvAB#M%fUW-}!ggl9GEu0f(?oIXEj&V+qD)%+LGJc;6LmVv> z2n@yC4H*7-a4@yt{Z0+b9Or@aCpckrxW_L;iO^4ra`jY3dW!rSnrdTJK~GGcRa(?@ z6E0@tefDUk`j+$8gL-zN(uXF2DDUSL{^YOHGw5(p&;@UZrMA2c)d4ma4N0!6`80rx>46+G_gL zX&dn#Eq$Nt?kp}&K7J)+%#wv}s$!G@J||*Gy&u(!#aC@@oH|U|DUtvMU*eX%12>?r zv~ztAEY}`l!Em;fpsTE{pru(-rDEzCW{xLC48BtFMoTC*xhLO?fl9FR6qKcF1P$T| zYn~>Y8-NyypvFs?AzlQzDr33{4%{v+$(lO%#Lp42+!CW2{Y{T*R5K5CQ2OmzjdWU?2sJ$U?dq=hJ? ztU3)+Zq6*m*3?G;W7vgWFEUMwR88<`XEZd-%>4;wCM9JAl~b8>7h4uLCvr$QylI@J zsYOI7M1ZnYLTysOSTzPtMGdcJY{X#_o!Mwk>O+*FDJ8NypaW>CYx7GqlC+9d17%}t zlsX-CAUfLMXlw!W;VkLkJ8NLgohUi_f&gf-VdaIZ>2mjOSE1<(6&+bJvRuZ3!L_=8 zZ{<4W*HLcf{BVhZK!MbK_4_%7No3p_P##y{@uH5JN0kt)ZzD(@4r_;j4c&FqI>^4)pXwyCbXK2`?APXHIFwVsbpZ-57QrC8D#Wkz+3%)wVNC#D+FD{q)00HWmW zr@Q<#vV@wJex7vI?G>5swJDM+Np0Gf9{0#+q*uJxH8oVS$dE-YB?&7v%5(gP5}H*8zYAjqMfo7tDF;TMxwJ zN;;y>B4x@crjZE}q_1Ej^IxH_oLJve!5cekiH?bt0FlIKD@{fHsVbCJHB!kgg%pr# zOBQn9#(KdTimK`4crcifS*enycX=nXbW8~E5kk7WS0Dlni1p*Cn7N(r_5f8FIDf@F z^n(nbiD0!zHEX!NhqFKld5*R-B6Jx8bi$QKkl5-j54G=W4S0-W@hMujq^aD4N`B$A zVNR!W6D*}QWfpQ68+GCCcx|7UO9!QTRx&ceAIs8=(z1qkkV|GHN#!Lh2A0tAxtmQS zGUXGS5DrI^=fuC1m|QYcrv!ox3$duz=K%}VjOOk*}FfZ7q9%Hukp* z6*UD#K`0x?{w?eW;*j5QL;zGx7=;pP&CA4?77BC#(yWalhGOzqvl|<-+^8hnk)Q`b zU3Em2}Wz z)YC&4l*t6K(o1T7ym^SYSBxq!8m)jfHseB4r4RPYRkICxu(1ZG*cg&pl(NZKtt>0( z2p&e(q#xxaro;JXoZ*Zr$}pN?8D|$Zl~qq|Yyc!%e@+a-1Q}CFmZv2`fx3Je(?PL& z!hE+ipgC$<;?2XPB;x_`T6Dwb{lpbN5uO!xZlawv9oJgnjMU+Hpp4>ONlQsgvcPjl&XFsIx`!+? z0DRkL0T@*%kPALq{u`V{CW9HqXmLJeS*cQz9JMlGp@cmc zrRy1;e|UjrkO@^t8?P7wXDlH~pgX+oIzB)Sw2s7{;1wX1C_Cm}y8Wrdn7*)XL8GOK zDkG_5)k z#2OMgwVTwI=?p1HQ9&%lF<2szj8VH;XP!!QgcX6a-Hc0NXiwd(v{7viPyYZzhDy>B zKAejS6Z=0gNQPld*G}_+O4OG5=~zKgoFw5-Gz z4y2xgHX3B`t^uPmXc@=^#g~{i~KsYSlqc#)vt!(6!W+32arg? zVD(VZ+Z9h)LYJp6@yp&mYJ@Xs*00nI2K^x?quhiopQ znd(voWspHu@XQp3Co+&xnCjtMP#X6j5xw|3{Yw&itE3ii3C`x^>y>L`YW^z|i&pBB zyp*g0H(xsn7W1#XOPQG-syK)X7Ev9*%mSM!CfCe#%x`nKzGKCk4>+$53eCk%l+2z6 zjmt=Bgjj;9G_FuND~^F>BFs3cap8+RML%Xw0d$m!_;_{D;nbiJHN_BTTChkhFx6xYeAeJkD8-|K*OagG`MowpM~o2Vqv(P7>r9KCP>xfk{H7& z9YuhVnG}r!sLj~xZYj+ux~B5LF+ zyX1iE)fCA2S?wKZ;U9s&XRi|J`7OB@m${=9@ed2exny{i%b1otDez2lm8Qm~d{(+> zrj8V9Y&MLnnF|In1yTmKL5tdRCQVB$Jt|mwikpjdFq0pQ$ArAZrNu(X1oS4qjX^Qk zUua(hzRsQ&czw*=!-@DghvQtY1h6M9^PeN5(_#?fm6Z5`Qr6YirAz!IcrGUj$wOLH z$2%g*taDtCFBOTIHAo6k1d!Xx-6J{@#i@|a6XEe#>66lfh)(Li#miLC6qokM+{GE; zC)+!fF~0+RL&AJ^ixkJiT%F7umCL-zizIlBb}04ytu7CRV7P?T$sbA0eI!_fl`I-D zSf)ie#%>9hg2YV3Cv_w}m@p)q+vmI%t(A&SITMl%YC;_#)Lo8ZmFJy)P0`j0nh9y= zkg7!(EgK>g0l?0sZIVxBAVsg{zzlOaq>o|3bd z;;AN=8>5P{x={ZBcMasFRgeS@#Q@H4PTM__leCxmnLCn{CV*T5H=LJdcj9f9QGV>- zZKmuzF~j0gxw6c_5DJL_EEAre;HiYw^A<78 zFjNdLlm7r{a_CHAmFp?gsOBC}#$HIbh|$EdM*RY$dHxf#xcl{>owe6uO&sySS4-)0@Ku2bmmB7q^P8gro2<3S>mjO7-Sw`PQvH2dv7NbJj+pKl3X}& zY|TdGSkxN3pCRooAN>avg_36^rxJwBK?TO@lu!WF%nokF==q+BTECOA zEHF~y*l+Cm;{AW|;&uy6?D58{PU;IXqPrbVt*;(|gW8hk1gI?5rlqya^3PE10?Wh+ zpftpI5=m^?>*dI{k3|k}<>{#~xuh{fqPq;8?@u!*Hy0&Kpe29HeMlPXel7AR_nSUx z4ysU+Nw%lYE_Y&O9pwV=y_n)ghwsSRIO7o?3r!pbBBpxDBUx3mphTrhtbs;WYyK@f z&3pRsSeUNuK!+Y6{YiQf&kbZ;kCku4Y3J&ti;_8FRC4_q{6bL?T&~}BOo9crq_s^# zT>k*mO%#9!1!Dxmg+NRH0C1&ABOqL5VO@U!{h5PaCmfkUUs(+2CjzJDY%d)P;%_MP zCxiHIKggWY^vTV9wSr-*iZu;GR8zq{T^1dQQbLnvB)d~hmb+iOlQK591+3IB3$W0Y zBo!$ssU9NWfm`1Ec|kjCX3W`}LP`|6EP}@0P!=xb_&#yWJ{@9BA2Z;!C{?6LsxBm7 zF;q;B#1U}JNoFTfcfP!Nejx^A#e!?R%H}mPrfVs(=Eh%9_GW6HaF+)fLg2^Yu zM^37Y^3+qu7?6S;!zrV2q_yu2T{@x$xgoM=0N&&)THp}Z zX5%GcQ$9rFyi^ncSBQdAMI6zo_|6mU-JX?gU6h$q4)mR=gaCrYgy329zIszj(~)^{ zmR|yS*PExu@M>v!TCSQ2IdY^*Fu=NP=OB@Z9P6-UB@mP)~!{U;i^r0y! z2~}H4xN(&mN;Yxq+eZc`O_WJH!D$4!eck6E5l}VC*Q9*`{{VuH6E`*ZzxI%(sflN; zt@|_cO+00vK520rUaU9-=JJIZa_RzrHV2A-YVp%Q`UH%p$PP))Wr@(~^yPMoPiF9_ z-^R*z{{ZND&r}9ow)j%t#MnboTp4&p*_VL#gUb^JmDr@Sz5pN5k2~kl-XK<$XB4eKx3qXkpSr)P>cz9> zP3d-}41Zm}@TR4DU$I|?bnG*zt>%ofFv!7IAFe1BdxicTz#ChBJeO{etW5QgDza)H zkIKi?{{YiZ7qew%3Z$vE*aX&>CJq zcxmq6GKlp~I&#SB0T7UG1;eSZHY0F0I_aRd0nb>KET|iYH0J!yU2S-hPyw2rEQNCU z(>P73tu*t^N*r}+l%!D;bqWTAE~4aG{r>=7C|K-q@05_D0VTjCvZDe37r(SJ4nka$ zOzVG*$~pJNc;1ogA z0p+B%SO=jzYHS_|czIG2k#O36kwTN=5{0qyt2M```VIJ-WlTzNl4w81;f8hxk00K7 zGL%%nu{5D-@%Y#09}vId)yXt)V*Ibpl-PXm*J8$kjjEPJj#}EP2@1Tf#y5;KDKL%_ z?y}1eRk;9h^?&ro9GRFYGK$m!C4sxVNDP-Dvb~#@ar1xmYX+GZmCXo1GbTAuND3sW zsz7pbB;+z^_)%Y9jNm-Xlfg65Vpv^z;xuYcQd(;2cg(AmNngE7gKZEUIQFTDm5akF zQ2|AmD(o7J2r=P7CR))l*7tK`&fkdo7vT06$=_(n;pQ6CJ{!%@$qfcG1OPq|_3KI+ z3cBV4IvHJaql1;3UOcaD&&2FyELXcHz+BKD4@WvvI#w>*7X^pg3o^r%iVz*0pDSDk z&JzC8UuP_Gc@vnhx_D}_US7fLVy;?BcSDF!&@WP}5lHfdnpl_cDF-rLxF@r{rjdy~ z#N~LEM<;lP0qSk8uUg&)?JmKavrv1vCB-atJUPeDwxWe6hN&s8;&fbr&RtXnYXU%P z{w=jSo;?UoNI*&$qz?(9aa_Q!T62#*n>>VfN=qyTSR$a-op`y|j_Qa>3zq7;s$7z~ z?hd;9f#1`JiE>B``ce6`E_EjAJEF;RO3{OW8-#VwhJS0$dhp-u@ywrRJRg<0a~|d1 zZ{|nDC#lA|)gX*ofAQEe(XT~gj<%zwUaYwhs)3%sap&7(vr=&w`P)OhQdEgE)kP3e z8+m~QFm%*g+An(-w;0R@%{vzklr30{W*u%oebo2}sB#O`RApFp{{V>p0E9ju@@7Ba zcZi(Z%6KO&!O#8<^8O1`4=YwJMi{uKFVe;;=toJVSj1Fw#3{j%jH)$a6b=RKj?lx- z{Z<((B+H(VNjaqe>Pg9sKxP@3Z`-^K<;d9kN^az)l7OV8DN0FH;#`0mA_wfz^BV!e zYhV=5ATYSCifHf5_gzqTIp951UU|L z;IlW4kfD;Ms|Q-SB_>9aNwUfJB<3IjGiL8$WBKu~{&WaPNNwRmnH3zE)O@?SJ(FD2 zB=7DO2ViPCg1~1=k#v z&Em7fF>i}6QD2Fg$+MoMs0577dy-^P=C;|d@4fh=;&IBKF-lsA-Y?>Fquh`>(v*Yb z%U}~N3P=H%P;#Srk$x~Waau^FFPHR~ z;ieiZd;nRAFGsdS0@>0tmzc3A!gLaz0N2Q1RT7130uF#{+zk%a>2a}kLHo1 zft0VTpE`1DT!Ee9D8;MH@y#Vn?I0FmAkLs)RajKz%6qmzEpFTftVF{xMyyQ|d1Tf3 z#yB_`2qYyUhTs6=x6Sn+`oSr2!${HAMNbr~b$O}W1&QRgTt9nAEYbZJ9dJzObKRP{I|eKe(#k=pa69I@uJ zLdP=Mfl@R&TY`oqXT+1b4vr6@_Gp0MQ!!?ljVjuXE;w>Dg=|yANpZR8sBtv{DjDZf zBA_)S7bYnrBmrP}~1GnJH;PlwWiPA^2NN;=9GM#K&nQ!tksh#fw%{r&U!QXCn9<0rps_wzOIpC( zTK9!`fjIa=Q_7tm-|o)`$&#!p9&*ybszrUdfdt}<7s63!G4V}Ljw#J09I_;iAVFwe zQxQEWTlkUnxYygHj|c{*H@oU@7^Q`hq?bu9G(1EQM21BZLoRtx-I)sSpYAg*c z{F4C9kgejRq%p`3#$^8SqOPJjpa$_e#@Agz0kjNMTELTgk!$z9ylQqLQs@glk7qV- z!&Qz^l4P#oBpbL4XmZ!%z)HG^BTtE`ogj-vQdnhW_tVS)xYtes5`x^gW0gmjR&i$* zg92xg0#bMvW6sBy8(s!fVR&aWFrtD;s%jA((kSG!66$iuP|1?YZ)2BBTn#wX!75GK zf!NiWqxom9ZeXNMpCO4rE&fzL4-DEVJVuORmGx9}Hfd>Qc$nr40bfE12HRfyn{U7q z9bimA8>*;a1^5iO58>Q}Dr~89l>84rp&y0Bz$vkSb*bUbu_D0heg6On+T_^!a7qa&2QngLkVf+W8l1S$ zbB`g4N{qm)j20kot*$$ONb>@1ap~{JOf-(W$pHAvky_BxH_`p?7?hDo8EtE5LBDPP z0J3=Oj{r72n4118(j@Pt0O4L64RiapbqHQ0n8lc64ArhtDb zB$p%?I{8ujy`U^cHd+Cz0YY7~rkR1}YaIx*aAEjmJqdO~kV6ET*r`G1)occ70|ItC zA9i7cq?WMZ^20A^L=ztFK;nA z_xW%P*}){=hHdlQ!`T>6pbl;IT=27Xb4K%6WJG(YP_LMfx`UXKZ?HQ50A3cX?PXq8T)BdIh{_JO8V>rOml~Ta%9iS@XMHSB+Q2jxjQV`_h8*b}KxS(`gl%#L zw^3o-{dKuF;b>O!sAyfQZY^w}nQ7fS?RxX$=|dVTp;=*NjRn;-VxroDcD9FJ-(7gr zqOJDcEa8Kl2Od0wQt`~TZGt~{NV*kP^AH3$(22idbksI$o z5El^0*^2qleiyOSui@04xZz>@U#hHyDk|iP z0d?{Quq$u^=2Axb3z1{$b!LVzmHq2K2tSoS55HR4iJ_(>X{>%IPib78>qQnn@cNvWye%*LOMVCgeLLS-p} zfMNvzt(z?Tv%F_KCDE9RFdkqBdtYAU+QZ)7oIxpM8j^F>`M;z6;hOgqDZ#5=o}a_{ zm?u+1B~!;8G*X+-O#v=koa}DRFO9f>9|+OE_eLpG3D>+0El~L>0gQExQ3=H1r?sskaP5QY?@;0hOY#R7oU~T)oZX z@X}a-&=4*=8v|?l+qb7~I*wQyfO1(?ZH! zY|$-+oSSy;eebyWT}=EpdgK9e%s8|2;h27K?`3TF2^n)(l)3T9!8br+467PW=FJ8>rX(E5I1ROyt>xM!7WDOyLoX86$heqkK>fyrv# zyuK6g!JIz2t_d*lK?hQ?rZKEpi4xR4v`Xqto2l*&o9o2bS6bzrD$`FZM;vvlL>jS_M!-!JebIqXbvNPeClGM+ zr8NU&TD!UicQt=VRWA%DAw^*-p(A-AO;cYJ{i{wfE|0r{H`{k07= zj~u`9?i552DjTU1NhjVCH7#bn^)e%Cpp-3PVTrLJ+ggfoud^)0Y+17~YCGu_Q3ipT zRvB=iiw?iXI!O7thD<7&TrZUQVq+d1h2~=<(6IP-tF3YS*^BDYE%R6tbFuR~TB&%6 zQn2V==%E3^O&qv(H3Zw%5XSlHWm;T25=i9&dMdC* zqZa_|6x!=;Hn#oE_)j#kQ(O^hSdK^U79G#+4byRUvFUM_ETTm{XsL`IyIyE^Dt^0P zYyO{33YNX#IR+y(zso}Tm{lN!67{(!tM$w5@tt&TAPLk0Rg?(STm@5W1?-~s@{0m{ zakZeDhq!k5D19%>q%U!SAe{+(^gQ~~&;>Hf(=}0*hh{CYvG0D?H@9z2I#LN|aYm?j ze@EBW(ZZ$)Qvd<8BG+v{ie8W!qM8UENV2uJQP^!_2X9S1etbZ=bS1Ji8S~~(IDLei zCL~namFPp)-HXsgUyFex^0r&WbLQ{4z0Z9u{@hma02iP&RY>AKG+cIiz>>o!rx$Ne zSgY|+k1WMah?^i_P0R+@d)ssCzte?ts90MuZ9kr|X~3)*bz@5b$I6;LEej?m%NP>g zYKY1(BrTs^!BFA03 z6p=Q9x8nZ*hv%P2!8s!#kajj6xdzggt1w}7^T8aoQB1(GpW#(j*$jXM&Hxt!O9Qpd zxSMun@ACeAE9zoJ*i+_@@!A}DW?JcvO0o-ef<#&%UO0#Zyo7_NxxSa!a83y`3YkC~ z+&k2_1J%z6fp#4JeE46At{o_m<1Gq^S|%g$wry?e@9lmJS`r(=k#}G+XjhB_AORc( zZeG_mfY^m})61PvghD2XA_Rt!*zQO1eQ&0}FqYsmky^J0`R4-4{{R-d)|`JHP$rfj z(g|y<#A+h~;2&MIBHQnAzYv5dIjObu`~A2~6pew+UQX8pM702eF` zt9$$Nf+R>UymK#6O>F*EzPSRc2AL#Slp{(sE&=+j!O;GnD{-}e0AK}f-#!RDB_J>Z z$U+pjyWy1&(vkWj%yOyAo4K&CCjO%R_qZY@bLEr1mj=8De1|TlqYX()3cN&``CirO zX9QTooOqPAwDdD%aQO)XTQ&6r`;PofKf8OI)Qb!HIJ_UbENSzXUpQpKDNE;?DA2RS z#(ygLPvv|2{V&9_QWTOHI$fwMR<9fB94Md`2D)XZJi&U7mQTbmsbr`&QMn?*z}Vbs zEvVdB{{UVFnINfd=DA$h+Riw8Tu&uvA)NWObJx^R45x{hgn!ADa%D_b3Gd zNC%jAtsU;o_R0*yg~cWxQsy*`A}UL<146ee+<*xt+XJn&Cy8BT01^!VzaaTs(3ie# zboj~grOrMO5l!N3b-Rqbx!Y;axn`Pz_{1H>z&-wQ2wKt z^XbabPum@&*f<5U@v_q}4-!d9urzBs<6B%!{8K;B**rz6N^!q zJs~JAKv*284uIv(w1)0U@fxp|>hVZxX{oU+BbX@L48-YbAc>%W$O!$X6q!t-qC4F} z5W?PF&lL{Q;PE?If2d9_bfA&+q^TjoYebMgEm%yQxixELfCI2<03MVdIWtE=;I&>D zP0Dy=JjsLL)EJfkYiWA)5xA?zaLj#5;C#UqQJ8ff39c#e(MZNvkPtHHIPkrvv$ph| zqN9eLI}s||lM1FJhA-h!P&rst;m#KuhnU7{*yu>7udsRzT-ow?_2LJDJi~%=J{!+; ze8I|C-z(wr;_1zU_T~o+6?CspG%Cp?=?PU}RY=T)0l4C&EBbe{_SOb|)5c)t$;Qf` zJzKH|a#T|=rO$Q~a!on$hmyAb(%Ey2mSz+VBaggQ=L(EJ znQ;ovOiE5#suXfWn71us)flD~Sp{XxlVOs}CTe&pGZdDIlGNugMHasvfw22MftQ3t zwc$jiOLV1Ekd+b=z&RkB4R3x2;P7k2czu&Bl*o}N z5~|AxNBKD>*_GPY2IO(9e$LtZT_$&Nhwp%-?bMl}s2XE$ zSkj@6fSB}r9>Jf7!X{1+2B}hr0?Z4sG-f2wzrJ>dGx+o3e~eX-VC`9fa;_Joa-}mI zK9Z7+3Pn!@weqtThMf7jF(Fh-fID$h**%)V>`Cifz_pdkQpWKM45bxO-Kc!3YD7gV zv0Eb#Fyb-t7d~+%NeoH?i6x3^01smPtred#S798VIKv~w==tv-N~y&~P8Ter3P=oL zqM57YP$Wfjm4rxj1dVhTkupN%fP@{;1r4%r01OL)4@=q)Phr)J{`Y+&2ZI#>DNMEQ zjY>c+#5v?^36*@~jZEo=Vl_0h7=27dop8HTgmOHqH2(m3lGIY?hyu3@zN|X&$p7VGyQ?STTHG+L5eiq`shxTeo zBPBzvMABzu>4xaqSG!3h&2j-JdwX#SN`ii(EbK^bughL>=rXo0(83%%^-LIPDc$f$ z{>W{?LJ_(--n_wt(OEMaFleoCLXxFye+jj=JB|KUv5+J%pftM*@sB~mY~{EZ{4 zzRUjrX+CD~8=Y|6YY(T76vEbIdh8;l%VG6&24qUAcw=H-96|{5JZ_*zE%LD{cx|$_ zto$s%H%kL&Cykg4#TXw*ulA3#I6bK+bzurv6j2E(2X!KZf_XDnF(1^IE^@zw9x&nl z9{r&?c83ncrhZ@e-d|c+s(_Hbx`ySo-O4dky%COtMK)V&`~^)YN+U`3TadxG5GC09b+f zzY6e)7mHU?asx*hLM?lGdhy46CagF3 z*_|SSrG+2vILCM+FsPZJrHvI=Y>VF7ajad_W6#W3T^Cj|86;$zF(fr*I4W`!H|fTV z4YmWeoOOs;n=iWnISoOX;`y^=VX`Mn3h=9Vim@*2{9eD#aTzJ1oER$vbtxED$jTiq zq>ys3BH)iJTIzMvg=z0(rA0f*sSXJly<0Z~{_w;F&RPLd7;ce7xD89Y2F$lx$KPMD z$JrMXn~?c)p812BD5)?`Yoda_8Z0t&lC;Moym3=hDQAuvz>9T^s3?Zu0(extrld?$ zhak0F(~G@m`Dk>HOxRl?Gi0Uafb2sWRj6`o^=SIC+>POfBVl!T%|;7=P|)Exe^(X7 zF=}{Zjv87x?=4MDWn;Whx~iEO;zjB)D{E=Mik~|Yqq?O4Ud2ETEDgTmElQJvz+slP zZm5Ksr~_J567;w=p}S@Luzj#RPQtua@vohE#{rTL`ETQf7t8ZgQpG_>Jp~SEI?={e z4q4a|?9qgfsgc-%0+1AqH2{%&aU8WMrPNO8ht05oF|uMdls{lQWl{)H4iWy(mtx`&EC zp1G$J#H%Z*d7sjQk=E9&cJc4-!8keMf%IM{;H7I1H<+m5BJAw&U3EI<|x z*SAc(;vmW!t5GTju1cyeQeOGz#p8D;(bYTjDByyEPG7<4@biH| zE#7JBVJb_PaLCfc>hiAo8vrFCrYTo-7U5Iu`NEmYIFzY7#Ia#hl^NdrMIn!$dBTUC zgjIMKKblGpgN54!mYw3MGQ?j*l$^auvka)mLuIvvfx$ouq)>3uu3|hM7|ELI@l+N( z^r#eJ6r@lt4U5oCJx9ezgW{!}&{7TXS>1c)#KfRUawo6Qc)* zOO+8@+s}!ip!>#j%~OQ*tEaA(ny#h{(9tBX@e`(UQfjgrJSmpN5ZDoJ1|+$uxy8*!&PpEx#Lq)K9C zq~-LExj&h%gjhv(ASk852gFJ~FB51;8Gs34-on<~*N3|wWt?6I5sDy@EUu=% zN`TKgw^wKb9gGt3l4XDZR^EE7Y)A|>+zs~F-(D-d*+l7t zsQ46I6J{qbLfor(V7WtjT+jdn1r`8g3pel9B*vf}0Q@9g!spii06Uxf&k@V2j}k6efM;M!Uq>2NI`4oiMMsyD zAG|p7zb5l9GE{Z2${Af^%Q>ico2Dd*9ORBB3z*2DM!id+YaMv*T1>?tiw2{QZZvm$ z-$i)sp@c$Ms;tCh;^CX5Ryd!B{{U!u-x=uetTq~sRpq=}3&OFCet0ETr~Q*bKkl&! z!j_K|sVkK!X`B%m0mX+86^h@IB^5XT056aX#=rvE7v~iGMEO&eOt2m90D8E3dEU{` zo-%!uX}n_QPEmQWYK#X0!SK~M^U$E59L4JDvbxd1Q6TtuY03g_6Fgv>n~pe z@hZAHb&fTHwxN*28JQ7F$r~vwOAQV99%_`eF;P%C65}zMYk9`MU6Cq09o)AZsnpjZ zN**CbD11W3X_pSChY6;`>F|oh>h-YnnUQ2^>DEGBrjB4kIT=llZZHs(jpU}3`axhH zPv71f6p5H4GEpIJON)vMIMXWE&56_Fba3L;6I9l-$kY>4Nl}SbEOf?-2$D9WjfP5S zqi_#SHH^Bc0j}4&>_#&Pf_K6}tI%p~%Krc>iNkFyQY9ilRa&k=G~hvTX6L0oefZ_h z7$yYhZ_PDTRdYpCT{}t{nkO@s8NmPsARCp)t9^6> zTUyZ>JN6zxUY7SSa2hQbY($eYc2a=>uEY$iXa<*vv*Q`&5z8XT!Cj;+X3X2MYwvOa zzo_qF#_;l(s1NZZP_q~2IdtO$8RK|@)VN^I=Z~ZGhb$JSr znnpX=+}MCY;}(Ke9P;sR5c(5sGUXhZ;M^qn5o(O+X~gtslTiWl#TW#TLAu*^%t=x% zF50(n#Gi3Ixp;>Tl2esmAyVu#etA1Ut6a1f3N@)4)UUl*P&T|)@i^g!CCrT?hIuYc z@6#lMd+B@ITMy5Ulj7-v>ageJ2QdU|?j*g06U_XliPOsS2)|`kLp^0BO2pk2jAm{43utX6_GfHLN>Fh)d`{%E{!B}f z&Kda&J>!WRHxIUUWW-7WT*4GL)*V8CI6qZOwP|({QuD8dn1?HJmo0O(M>}#KH{kr? zjAB?9FU88-&q<5obrt-(G?C*|)#0&~tER#5*`t<@s=lQm6V=380ML~N=d(8N`jP(L z8f2EEs>Qj{i{vW9lu$AI1$#Y83Y?V<;yJfdqt%P@iqn(4JLc~iUb~lYSm8);{AAWi zEkgy0k_i!^j%taR2{X1%q-v#BLfMpS!&#{_j^dORncWO)@~lRt6imfPz^8p^QnyY- z{zw7(h-zp6&TXcM}zd*Iw-=&nQ;tFixv^dB8G&cqq1ZJKnDZQ zmoW&I5;s6ogJMHn#&pcT0TN&~hx)c5czxi6s!-h)BY3ld_a5QnqP$(^SSWtSe`3bw zdRG^9}Kq*7}g_%Xo1%S(hUiOC1nTFVMrAwQZ4%H*1lXI6pt*`G*Y!qb45(zN<2cIHkP7U=*f7@VJ{>( z0|4wS<6?beOwwGiBY3c3QIk^LA#BAbbfh65HG)MNwP9SrV+OgC7pkh|LUCHjE2fgA z>8GieGSp6ywq=c3zVZ4>p5s7Rah1#$VjEFf!L$Ra9QGDRDo^^#9^f2yOotOn3R$ot{l_Oxp0Sj zOJ1+Qixlk0yr zyh$uF(zFuPp}9G9)EYaM)}M`aso2X5DoFsh3w+c>s>y1j!rEF`i!(;65EnU_kab$a zLzRgGO)hq}tqP_YW|tg8>6w35gsEH1Wz0xOQ3060=A8WmS5*wrE@?|F;YmJB%tLwE zNwFnKK45e@lY8-6#F>U^dhx3^mGh?vx8Xaq%1M;8lEBzGpt&UR^=5^)!k3wADWIgL z6HHP`YI-Uok~D@>=L$dt)C((XYiL2Y5@BQshKF>TkPdu$$4bH^_p{U`sMM5z zA296BO>4@zMWKRn-98y!^{VeCcybXjyV=wR4|DjNXBytb9R{{tpM?lmQi&q^m*J-} zdbA|RZ6&TxbB7)a1&4P5gPYN{=L9iIihLrGu^8~UaVesiB6w1kBO!`wegqNu`T*Fz z{!?>(cxNz4K`xY+H({SgdbxjVtwEYlccv_sw)&`8TK<%KLZ3U()6Ij`;;_-v{AEeO zV-GG=k}5K9(@5+Jv0Wrp0`2&LI`EfiOP4VWk`qE)1~#pS!%D-wiWI59DQZxADMaQd z#+ec2#6>nFZ1;?gm}tmZ06f%ML8m z8ojb$Tb&~+Ib~5Kh&rz?NmW`f$OHcLu5fGVR9%`bbUS_JLsHa)!sqp+ZI!LB|vp|BK z2!#xU+Rdv0U|#G&Vt9)kCQO_FoZ!`hO~<9O&?JfL=wF+p>^w%BZRo>3zEQ< z@1?GIOFm?>!%uc((6sHvJ5k|&xNWa+cO@VSO*C!fg~g>?|!9nk;)f;gEa3l60aM-o4p zpP5FXy5-B-rQ2U_KJi_1b}1$^j8oxQY|SkcISV{wv~xJpSubEDu@_e&2R!!$85W{KrOs+U5{%%kxF zN`v?>b88d8vy!Pv`T^p=nqQwEjuiR8B~zxTq#?>fknH4U#`b3A77ZNKypokn^l{Z< zvSG;ZRZPzwdWyiXoIMa&2;y~fElSv=fupz_093h!gMq?>ufOpXsfnGnrxKMO6{T5tOk_gGtTKr9YfQ|>l(Dt-OAIj zOCF+3GM8g~fRpXT#}BmRrb>6WS(wm27Rx%n0eE63i95aAvR#N52TEC(UcE02Nk$-! zmb7FN8gnY-v0Jp6!9q7sNh*7SP4y>%MmZRRF)3yQkU3u_tt6ly`qLij;QaCUG4pg=4 zSLR~e*?j+)4sfCYr=;5V50i6jt6z58v&hhpMz@=-O@qdYxRpSVz(mZ_9X4U6g|DPgw3F! zmZGyi_Q+QE8d^N(A2kOWJAz5x;`AfWHq805sx2KAD||eeX=RqGQJDE;>&#@UWfr&H z%t%`cs*7K46Pc$FrYa;Puq2YrMgh;8a(cY8C(WLzXqq=fwyQazVNe5B^(K^u+%~=+ z*zvNsRd!@-;3&;(x-bIZc0GXuV{R{7HfT5=>o6Mn0_++3P`q6521>B$Kys!6mj!^k zzseHu(aDt9g+?oa^8GBamF5bkhYK`}^$itKQ!n4i61PcYBH}q3$PI|!k2>uP{0y0M z=TDlHcT<$+$^=xqef`;&VkCgI?p0gF8r8`<->#3sK85|Bd3T&}eqqOO?rp)R_+-QB z60wYCh*wZNiA_B`b&v?^ndOL?*_p~Z-Ix$~@r|?EEF!V^GlIpE%R{70EUy(o0E~`# z8%EcIGjOUiP%K$Q0%{Fv9DHY_b`OePEqGzb@8b{I*P6Mnm#aKBUkH3I=59zby*oAs z%e_jRE0}OBLRFGi#IY5s4EQ-kGsg;vq{?$~>6jBg6DmyUPU}KcLR=b$%C;KiouaEV zWY0s)z~R?1K<^R*^B{@}S(=ord{_HpcmaoUKQ;0`Ip8md)coJz&x=@{RuO>Vw3v%j z%Y$iaP*_7tAZ-nq)1ygo@tZ@XhBzE zmK=GvYVdO>AzP|iZ$MNstB^sl$md8C1B{h`+So~$*>dJd6A(d~kiQ66u`Wim0kx0p z51c;Fo&xyu;fh1c_Z1twAB`)VZaq+H&vP)4*I`?DdJ& za&9+Jm9kMuSxL({>?moQ7r>#Qpq`p+LYN+!OHBhR)kzkTO3uZacl%mL3O%yEYYE;|S(eXOEX`LZ1sKi%d46I#{ z2I$x_AuE{a<%LlG` zb95@PYKB=rR%W50sG36o9%X2nNLc3bOwmW4`4ob-qNhvQ(x(R-fi6KIuRsH6!z)%9 z;6kP2QUM`J06mMnY7Oak(8pK(s5ws<& zughG?1zht2%lFjSq+=|MWD(g9lmH9EV&>zvDpu-N;1?=C;#IAg`Q$Q&n`D*Gl4cUK z;bODALEgxc{As61jYD5kuA@?Wops`ch$K!{Ma#E8Hi$9U zef^a=N%0cy4MmNdeA76vCys1tb4f!Clhha{Eeb@^yTb$7u3*C^z`33}Dk*Thdm6&WrS%WJuU~UK}HkZ6Ts+zv<4oZHhvdExt>SqoB zr^5vHWxv#Bq%yZ~v$w8XftWX-0=B7oMQ`>c5pw?k+w%&XBE*aKgy&2a1xsaAnztFH zSjB*{g;2Rgfn6+Z!JBZIosvi+d0oH-{730ke1V{RvV?mwYj(kVqj&q}&MCf;VM^CH z{?R#h7g{rR3c`88&}m{oy{&s|eQY-#oOm|LM|6pYE$diX{{T4~N6~ZUc%{Gp09zr6 z;!Sz-4&Hyy5Byi4c=_&zz(}%SSfM$V%9q7yua&GUH1^v~xb^Z{ab&+)rqBL~gwwcBwSM0WeGXP@U+|JiAZe-JZY#>VdHy5Prc-gL^xB%h{6XC* z<~9U$T|y!^}n|RW499_WkviX)H_hn2h5A-?KFn(i2ne!vT9}R)+>xbY1=RlR}qJ6I9hPfsVtOqRS_f=hUar;~=&p_+pPfIr3P+5FC&1XNxtP*hi8 z6!orPXfXLq^(lKykjgCwKrpnkSb-<`MTe&d_U0dV4pzj45ML&}bt8t6uuCGQ+T{A@ z^H`6_CC?~QlBAOL*39QH8MFsmZLXVJPW%D0R8=BUL;nDVxn7xm<=Pv`{{U&|>`Uiw zm5w9-0Ejmx&CT8j;*9jGRR=EP6gaF)AYPPBQ9>b>c~}pKky2$362fd40zd;#rT+k@ zQ}+{xKqN9!6}lPRRmIO=w0Ph3GX|Vq4s^nhOrk@Sf#nI@M3horMml@voa!EJ(HwbrRZn7vE6_0(C6+`f~N@a0)q>|=%T81N_u=+hP1pc*UBJvj_QOQ z&c0m4X~&%Z08;jDI~TIoHw!Ghh7Okx^(y0#eQh3x{W;qBEC$&UF<}ioM{{@r&$^I6 zBF;@SkECC04;J}L!)$6)!f@Eh$FPZMIeqD{{{Y$xS&CK$hN}l!WV)*?ZI(q*ayP#o zQ`r5PkDiobaZ|gID5rX)ajS3!@qhlJZEOY+GZBUo<}PR?0+3jjO&-DY@}rM}mHdm& zGgsDB({h$HaO$IoVsuLe89H?6;+dLq=vOpPM$MIDC(NT;=m)xC_O{QLDpa4=%Tl*O zOR+DbzPSxLADQuTrp;QX6z=bb z*S?0@uyiRM?6s+2ha04^cOsAM)XoE3t<*Y-fdZtH>7W_wtY#N5mPvCIVUL+*kwi;d+F9HsBn+7e|+{d~*}6#VBwH9fdiLf;mQLWn=+X@=1{Z8HiEG zID7^J2%|ALd2))pN;2i41eUoe0F%V=UZ$Wm#SLDW2ZuW+v(o2Gm5H4*c`E^IY37b^nBsiLi2QVc zWLRXW0w}5DVoNMgk1AijP^8#uPYIKZoir|N#|bW5N%@oC zO8Q&&9?9=Jwawm0PzQBo%3mVq=6OX__?>np8b_^AvBnI+h)9td_P$FJ#G7U(F}}NS zty88pqYXwc*P-XX8RE)$8){ zu`G)a4+?vA_-NT1BSw;~vO0%da{vg~9ezi-;8F@s>zY#k0K7#o5E$wo$e6+FDU{`N z_lDs?BSW=-?PIX*>&Bewe9R2H4u6=2*ql%^2RC^E9Yr>1o3duy4YV3|<4$h%)-ed) z4$s2PU0xtdT|DayO&}o{h6co4Z)0oNn-Qr7+)kScy&ujeOrTrB=YY3gyTE#ymc6bR zBAHdl@*_nkT&NC;z#9SpHa6l}YbZ5QBSJ|7gK4D<6qJAmgagQZhcC&zM1q!9#OAK5 zh=@-}q+nX=bpWo$_rAW~{7E)yRv1%|XRqP&taTHsXF%-Gf~XvcVteORABEETp!Cc7 za4PAAQ^%<9Mm5v4-3sF%uFG>RTce@I6jPN{mw+62Lqld{HIE6VcPb~4Qs4s8` zRtyA-y0EhY<_FY-C?I4DGd+##^Mk~5@CjIBP|O~#HPOai)r>wmrna`f6R)XxswXcr z)mh1Dsu+^WRC$69(VYgC0CCp*!lSzEc$Ofu*1F!;h*5=1v?Uvk5*pU@$=bBM4yLaL zOViFBn&p!_!a*j+;fMg=*ZJ`j)Xp|412!aQOvpF%v~}Dk{wMzcX#7E1TDpMUMym+G z=4gzi!V%ixijsG@xAovjvoR<@4oDQP^O~EN%9^!ebm5Xf@TR;5XEI*dy`Zf|DE|Nt zA~dQx(UPT2fFxTo+iw1!D~YhGB@*v70(jH`Qq3BJCE^%`)=IHeE?Br7lv;EzgW9SkrA!u6o7>(h;N;I$-^ z(oBsUlf^2aLp)CLNW#Qw=tJ7tTIcDf5``I*Ux+h@bC}e|%(U4_No_zr?-;_yRbs`Q zmbom<&Pg{pn374qe*8{AOtgVu&E#~Bg#!u!U?>MmLHse^IotvGV>b2#dfZ>XbA7#d zgK#5Z4=M5|hnC=eZhVAdQu{vfU$ zDW$||q$(OWe7Q)vn~vbzFa(`Gr+y;D%TY;XC>AD#gIgjQ`MfH{nUgTfDF7%7iX7a% z-QVq$AI0FK&oxrV(wN3bVh}(NWy$~m>A%S7ejt)&1f>L$)FhH#waxt9@}(lXhsNR% zktC@^p@AwSlgygguFb2)e2S@6iXup!N;GMS7Yb*S@UFU$2bcrjYjEoiE@FUTavU{t ztMDWUDQcZCIZN1TAJh42((DhV8D$xxLS(=hbE+U?jU9gP*Upb0#d9Rqm0P zXJ@15>cPFCdTAG=ss)G^+Qe)AzwLd7kP=c03uqyll;n_4wwZH)Q>qbjYn@3u-o$@r z(*Bxs!$IUDn1Hnl8nl0inNC(Vx{SL5b|3qHFHIRc?$qV{WX@o9O;BFw3=&v$t;KF^ z-)LdLmGKGI2=WUne+u5@wx>-`p}!092r@&c@wq?8NRn>Rmxh${3orz`U+@Q3=@{d* z^%NOtqyXn@i8mw@zHRN_eFcd08gTo*THo^w5eY1aRgyU31>Bn! zVo3xZ+FL+-d+>&Go?_V0n+gk7knIZr05PEX(hX9u%^_l`3PIMhTQaZ~0{6bQzWdvL zCX-au(wd!I{@Gdp#ViYMgRL|+Zz9#>3H9}>nW2f^YMCzHP+H4-f^Yb(a7E6C(|!#o zpi|L>0dKdRU|^o{AcDoJ*STS@4v_~5LbWbPc92AM7a4(KS-WgW7T)7~o(ILu-IQM; zf7pKAV7xq~Ac9Vi+_tG9yOltoH~W#Y0%%TN8fw)aq}-WS0QzT09!Ykao(b8Xz49dB)T zBLcDA%Ng0;zb-mO}oiZROkYV8b$hN}>YO5~BH%AIvU%yK32fVaJd zgKGdz#@sn&Eh6pJxL=q&xK=CJvnpCsEHE}CBm+uRf#rO<;Z2Lx;Nn2cQ6*B%M=2_@ z76R_C`~-_!Ev`U5{0-jBmbD-|3pijYT2s@8h9<)7(~Ss5;UR~KuUnILy}k$1f>PF077WJszRcG@i207>?{Oy1nKf*e9FD)Ss||YC@cStkFvvo;n^St`MY+%y zc-2tw#YgcHOoYq#O#-NAb>FB!9!nhw9+wxt8tylh;v^`u+f3%20fVc1;L7``2zuAI*tbb~>pY^=3b^DCUh0tLmmoj7!i$bK{*EpBiW z#VCJ*gY`N9_pLbP&H=8DPOyg4($S;Z2}lK{=_yo=;PYs#mZJ03F*%|aQjvl%-VDD z4k`wKoai5bl@d%6MR3qk%)r=!np_)^bv?nj(@=OQr2>!CKjV&q7fc{kP7P~g zT~A+HMRicE9Ft$CZT|ot@*8#=Z~AfH&yNtfY7*S(5bpgu*j#LTjcumBoMaIj_<_!+ z%*I1sE(WL*Qf6QAm|i(fpqq@)Qkwb$ZG$rs;Oawpg^9ly=TqimAWk5{Vrmq|y;y1N zR4CN%up8@hYo7b@j&(k948#!ma?0Fu=K`~fMHv=tZhQLw0D9~E=QRXt8$ujr%v)N1 zGWh=hyIZ%XZ_9|2B%s!yl32e=9-fUFN(&ML0q*{v0D*X(6;Fx5l~r??Z=3)a9q)Y& z#-jJvL4B+={6BaNEcI_({JFhg{1!Cf$qG?ys(RhYjP|~DNP8egTOOc|IqjZY}nUaqOw%`;0gv5};a+DRGQ5bVyx zv1b-mB<5wXHyjX^DQCo@q8W;bEbp0ijRc?yB_Lja0nX6lhv4f)4492wN{AAk2x4Y8 z%*5t5Cigeol1&k_jBh*7s=oW>+gIC9vr}Yj)s7A=K^tRxY~Imjy55F z?i+s;gx^2@;@aNXt}k$P;AEL$WR(C|*D*p(tNG)ZI7uNXA*sX-Ue>t}Z+Nl1Hs<>L z0~4l(naZO})PyS$DoicsjzB{^pZx;%_O}|t;tm*kRs(%XCXdDIlf6$W_@*;p?F3I;>=F#gV3N$~XC{K#am!lt)gQuC zz$@sgR;mUfb&NJ>U3bd_hT=j00B)nTj=Xvf7i(bg(!fHB<6?Jwjt* zhjg&u?$8noF>7(PF6~4-L19Y#PMpSn#6z0K_RXfGY)`$f?t8&82||eqBp10PbM^D+ z)=6rcHdqNyfVYSN#rT}7Q&->w;q=qIe-4f#WhPh|zY(O;@f)3AdmZ)`<5+b}dOgm$ z6UFi#`BF?krK|(zko!BqI*Qkl0*);pmchDXHlO!e{)c<}@YyAMqJgN#HaWW%tL7^7 zcvwJlKu9-kK9L;K%<5y2LW3@seKpp=Txnxt{I%9p4Z`X?fg-hjO@BBRV!>5`ZF1#I z@9D}NO&dtEp7yoL*FmAV*8RU*TTU`y3kP+D-JAJq(@I&Pt_o!UG}I0rm&%XOMRAN_ zG8o!8g~``IJ$-H8zMcJdt74_x)YOMzX}yBl5Ld>{p-pt5+@{Chc8o1`fBkAU~+t7kr>cr0^2Flz!9MKupD-Y zdRK|3&tGU|CTz3y5M1Y6tZsRoGtz7rJhn*H8}BCT%^)N?INC6m{6556*xyOhF0LH< z3w+OqIB_$jrh=xHqiO5+;|ALaaw4aOCWYQ;| zUgxC`0TD}@O$k?-Ez9xcXl}r8nFR7jYq3x+Y)KmceQqzO%jqT>Lc7NbAPSw*Y3ey^ zPBD`vnlUG-9RArsK5C_wIOBpln9@k#jkVRHrYvu3cQ^JRoi{UMRo$?q0CF{9ds?qk zQ_cXJJt_>`^Zl|Ou(%bvK?=xQEEYL62H+bT8y)UOzUP2@zWF6XQ(#B6e&w#w8az#t zllhDn49_L=6Mb|iPyE|&Z_A-9(ak-5qEr)Fn=?7~gOTCsYY+~A8-eIXx_9>U7vga! zXa}kJ)(Az;zdvZku9T!qV~mj`nO94W+5!IDZ@X(ZlRJEGyb&y#)X|!zmxb!ADp`8D zh3qT?YnRs7*ZF+7fS}}Uk@on|dMfTR5BSgDC=}eeOb6a9ZVsd}D{p=7Ex)%D3^^bY zRQ);TZRrvOq*)+x06_|TKA9qpI1?dV0b#YhJpi|q50@GGX02M8RM#-iuk7y|hAb-! zsDVs_HdA}{2iEJc7uQg2xz}P5B?%ONKYRW?;3dxlk!CGXW<0+9L}{*~iDPDwkqyZt z01l+?bRhkImXXae()N4)?)CiSVo62!YUcUsbFcBjuntFqA%d8^tn#YJlV&3* z6R(@0eSfS>{_zyV?o;OH(jJMexpWrvqGRwYJO zB`G7uNK1gSz!m^Fw>m(=YSl#t7GqF&F}DW(VM~kQD^VpZwYYRuD$3@V)GAcdkOiV> z?hbd*u9w@j#}&*@Hg*$wTIPj^DNC2&FH=C|n%jgwk+8P#k@}e%E@a6h1#hVZUK5xm z$s)AkIgiFUvk;b=3?`1L2vR-QUcDxP{NCYEYSs+pNyM}?Ow zJV>@6fu>>RwY?3&#tCXk2~#k)Mtp&DU3pSHW3oTfiTEIlMD-QZ7ufEb4?@8?|j7oz6;BKN7Ic)C$IihQ|^PyL`M%?Ky_ zq;GG2G%*upkEnrmbF0)ned)p#<9iFX!d^xpJET8wNh~hgt^2rz3i)a4Czh&?N!XjQ z9%GjGHom)F*ZKFb;AKn-J|IoaYg5enym|)0!5j`1GO@@)R1%T&AXb8uYU@vP5vk;o zSygpeq?G_2?lcFsqt}01aiWzU^0}z4xd=CCArj;ni(@5=I~21y@VOM=JtJ->O*JK9 zNn>RU6}BSe>vQgVoo(;O4qoPzxruf@Cl8B~q$JcjZ)>*=Q}Gfvqb%nOjCcOlmZ| zqeV?O2e{k4^wM~5E?JV2YHn+A9-Lz%8#RlD&AA(Z$8a?4c*i>M>7;kOPG`)B+>%Qi z@yQ&3Nfe7DRyHIH7D7g)4Ye1s?k~myMTs1#9FPsbJnJ89{{Z2`_Q9m^&Wj!J!<%cW zCgqHFow2MAqD$1tgX6{*TIwoj7Q-t=_njpG5u7 z9(US(ikaZdNMZ>zX9VQ+Chh0KI)@VG2yvR){A!A@)=*+qRTERz&l^V76t8m-Xi@&` zt9fs0gQdaY{FS0~&hV*{ShLdldU+Bf%JEVrOD10K@dVV?rhA^_!$Z0OwI!x0a zHHECE_W)%V`I`+a080Ql4m>IE&sl#`sbB>GyG(;KeZ#r)u!{oAa~#W(6u9rGFE~6kLe+uqO8ebg&q6Zk2{uNwQ|MfFCf|x0uVwR^@QqLW;3k zu93vlz~_Qd8)h)1g=2O?;Ic@=K=-C(L-?EKydRV;AL&KOL$}HdL$~2wn_6Nm>|csMPfZ zG02Q{39a~5v}C6cl7u87O>`s$I2;9YV@%o_?7g#&*|?yoyWQP9JLhqOlSgAt9b>6J z)8B2ZZ^gb=$N6%D6nZXM#%GG2iwB~PqMd5+xF4%5xP;Qj9HM7K(V9HQndA%i%bC4jB!F68m|b{W3gU7=nkK}r??C=?V0z|b@2lzf=xTGXwpGSJ4bQ!)tBmEX%x z8fXJce={%xDwAav0@fB}Ro$opPnDV4`dH;tNb{pIYUU|>$=)RCnLPb#m0hBa=RRpl z28R!#RhD+@M^KFAgh7_!l}^WhFcZB&4F}#CFpN%I z8bFN2DUp&kj`qx0Zld-Vxi=loaVn{6@k!n4rmU;;lI}~$)^!1e zRyR8W04y1R21uZ4Gw3U?<(=Luv+-hMfWVuS_-gmm{?T>dm{is4hETyrCM8g6;;n*$ zhMBVoW3wc6btt*SGK+OtjgscaPCDM1N;XwGHw)*T9A^q<&QeKr5-Mt&E=~?1MeHICaRzW+*gW)ThcxmHBN3mo&8 zMbsp+EtWzQE_~TQ9AvykAG{$-3@>{RA)WK1MV|wVIO$+dlij!;AQeNr}`cj}D6L@r7H>D*kCDbq=SPOBk z_lUR7zZxc%qllnx0@t{&y?8WN^i>#*MNLj4i`4u^BVJwQOu14h0}~7hdj$%lC<4Px z0Na6z3P~mEb2oBJ>&r+kT6amHplfIF7$rij5osRzWMcVPmH-k>wZ4M()A@0QC3Hz3 z@V=Duf>Bdiu%I>h`@rsKl*Kw^x%Qs!utWG>~`0WL+q5YHWuG|qXRKP z%d)%Vxf&?7!%*=NRojySc7_GnjP%u=z(T1;z3Tpu@lEj)OVLz$<&lVuV_?$AZfz1r z8fGM3!$Q~JQ^f*m4|_O2_ygvmUs-y|c72bBLA{1Cc`6>F-8(zVI5X4d@oT2%8RSN#&9XX<}&L zKxu;~NEePV-%Ge7T9U(y(%kICJ>qF{ z=7a;>tDrpVN9&|mba>_uio6m~S5eI3CSVYy(X$~L{l+*Ye2OCEa;9&egNhRAP9&LNmnq=;&dKp-PiGS~x^Ol+ER|vba)m>Q1^N z7@STs5|Fn@Bx=RUejaSWtrsj7%)xB=8>4Y+4gpd|^SH4!y{&A7aCbG=;uYBDAzM4; zdg`LVV`h3;11X3Y-H8Gc=vpzdsatT}63n9I%}964LCv%sFBH6d>5{Q3XWc6-1Gejy zENINci)(r+tjz;Pr}$N*atSsh>MytepDEie!-LS1F(Y=LdS4?`>v-=6IddkbbTg4^ zaMW7Vxra_w<$w8}SDLXWhYyIPOEnyFNi|hnMT`+biJn=*W*uChI3T*Q$9`>LYFv)H7|W`T;D2(q;}tj{sD7F8q{^T<^}sV4W+}Ps)m+lBveu} zD?Lq9F#iA!(nfPf8s(PFl-Y&2ux#GXVwTfqCDK4O50SfyX>UC0*zLW9+)$FXP$W>A zTEsIK_#>s??CIdgGf_4nPc3E>RVisI>S=5InVLA*Mk%JdBIYMl0QbGk&AfJd1u+N; zmoX}2l3#QZLzZebZC+VLNnNDcNGjc2wIw9(xCHLGVO-cTtMRNS_>uNLp6a= zcrmo6euYv>!jhp;2&Y<95)(^;Vbaz8VRCUnUbQ;RbGN%;UtbixtJT}2E=Kl z3VsS~g{=!4!3rs}iW65OpsCI6Pfo#YSvZ+#AhA+hJs6r?wqGw5bwkxtNM(S%Jxo%@ z@XHevo+pgnGLoSVj~VFOGu zJYyZNl3L1|*kW3VsoaN=klTd2IRRU8a%IXw0%fEUlqD|9BH#ziz21?Sxg+#RP*Rx9 zE;ox1Kw!X%4!?8M{{ZlhkC`R=WZ~0t&17`=B`<_NEYowfAe_Xwo)FxtUp)mbA5U49)a_S@Ei`E^Cq5vP)WH~7rpt*`q=`!yWr`lGgEZ*^symaJPiIn* zE<~AVLJ*zQB`%bJR6xvtFLQsiQ}M~fO~lXMT9y69(PWT3R`C)Vv}}ZRXW2^?`t_#na-WQgclnJBC9AJsdTHntzF%NiqB~hG|)i{_^cj())O5+b9`&;I~u=_Po^W1A>w z^68**6oKDM>IW4Kh@h>pjVvEk_5Y}Qm!zrdAMJ&?3JB*|c6Av{!u#lE-D!EWew$>aV z-NFDgYTm~zzb?$tN8056q>xMR^{Fl#a}=Y8CE;fh{iT8_g9fXrVzm=3O#LjaM_g&+ zEdwiyn2O&#ky$0Sad6yW9oj+Gu1$ISe0X0hqH0$yYzPGJFy7={&+q3AcyA+fA3X9; ziyZ1JVla3&%UC})V>DDC)Edk`9>u9JfmsX+8Isf115+tnsMoo$(cGn}crp^A1035R zcv->xIfmOSvx6BTelk-lxZYJjC&EPyADdh~vgeFcp^4#+Lzr~fWdVhVxK&|rS6vGE zPi;6A2va+fMyEax?qGEgf>J_3K`At=gXiU`&K9a65fohcW|1VCSseLdhz!Vt9RtX= z$?1Co+li8bTBMO%(f&U;!8F_`duhwB+bFovsFExdA{8|~JT#>}HAO_VKMMrYd`m}7 z6t3$}8_y$5(Zr~|W@!j6OK@%>E@dDPv$~oZu`NozMxmOSL`H1co5pI^QkxQ@KmyDQ zumesSMBF<7DGZWU7g129WTso*B)?iR>@`5@Y{1xV2;j^%320I#P9z|JS<5vJY%T2X zXh)03iHb6%sI1t6Nw-r+%yq0`S2`{kOFH!8iEAed=d!W~IczU%xovI5hTJe(z&oq} z6yVl=K2@N4LZ1?pLX?4?PAi*e^&VV8<5ZX?AskgTQ81K5LP<_?2`r;3yl6nlt;3LR z2s`j5C-mE=cqPd35(nY`06a`N!p+AZ0f*gR16nr!vv($w$ zOp&&!7Hs*JGkXTmF!O3j;;}Onw9Haa005AZmK4g>ugu{t)a@#8(|2*Q48oGdEcF7p zR2?$X&~AeZsD@{H%G~Thj3SLQk0~G$Z>YWZJcb`+}s29L|FiOhi&{{T61{cbH;1k_azByz1ZQqv=5i!5~#Nei(a zRd+xxbUW*7aNie(n>8simI)veqw+rNYZtwjjgcgTuXGw@#r1j@)%_t7j{uUnUEeG$ zlhiDTmRmZr0+$o3LYe=q?T%f(!Sg*E@;Dv(tE%hDLcZM5D0U3 zYUnaHg}T}*sv4We)Ob;dyll&52fdGQJ9a(A_%2lL`dDf`xaD9N*1Y1ah*G3aQ=bSn zy^FW+rx>#^zY*&>D*(dq%r_1dScW63q>-(`roPu}ZT~zhFPaqjS*((Dltgz;_iw9g;RB~&|8U7 zJ$Q^drHQV+(l>!1`Gamo^#akviFjEU;JK0%w7BrIq|`MSij6B?ky?uCoNE%F9mHxT z>1URXhKe;QBEt)^M>MD`okv9tDN$n~B;Nc8t>mNvqEskJE=d=!IBg<)l+BpQNJ^HX zl$3+I2?THee9{bH(NfmeR8duR16D&kbW($2vzy2i<^Ca}*lnm9a8?wOn2MH-yqgeoLV~`KLP(Os{3{KZRoOd`f$NoXt zhQDT^y=T@Btt>%+~h+vAxCh$S1=?JwZUSbY4>w!Q=s=kVvY)0=lD+Za~yt z$7^r|$!l7R6(kkcbhSAHO1s-A$(WSxEi4=o2>=?~o3}kHNSn@d(nUpwVbHinFi0jj zuBE!3VRCLzHSK-Hj}v0jWF|&Lgt@bZzE|S)u8{^FSek`97Y6+3!(MzLDv@QOdXsQm zILjc=*^ij12H-cKBKNlomZGI7xnfRcCnI$U0*u0(j4@%g)Tv&oxv5p)k{a38WA~EI zI+3cbQ+2C%ZD}W?)-h13~UpUM}PpI{as^7#dy)cp~xxf*hn8d0T@) z8Vd0q0VW?#GfPugYbve#q9~ljPY_?j_mHS_aprF^y^ZB?uNJj`oc&-NRvlARR#M6* zAk{ZxmkgVX6soDDucxJ_p@w=>6(g0qmK8PV*$T2;h75qXQV3FX8gaKaa@ssYB2uL* z#N-PCU9FifXY=M_!ouq$7$h*wBB-OLbf%IO>P=Y!K2?Fk+#|w(30Z7I1IJP)iE~9- zrN&0A95zk3D#T14~Q6vHYCG#1UdyY+bX~HWKqJ=61k_Aa*hyrtgmf$IC`K@NL zy^XVXxrZ7NI(THD6LJzR{09TioLBawkepf>AOoNPT+|HdUp6qGicBW1sHY5>rJfg7 zFO{tt5=rxDO^IRZM+~s33EdQM+C9bFt3F&K(6%lXSdl43oXZ4|0MC}a1Dc2)l`CtemEtiIQj~9%Bm%{% zYQP#j^~xWqahmC6#AB~m;A%Rij}c7y5>%>z*@YW|xtcnImdI>uJDYHvNk$=H?xd>Q z$^f2jYhrKqiY(j?4OodYkd5g{Qe8lOOkK?wyVKHws#Nt=biA1L7^HOy^zyi->VwuG z;t~=XG3HoYTQS&!=He74SjJ0{M5&mt6)r1I6mwko#^<96GiXXohO2l81YNvB#`Vvo zj9^^jPf^P_ly#CAYtbjDp@IC=@*~3>Hh}K=*-Kd6q9)^Ac(mZsl&x5O>ZvMXC`0mQ z()Z|M#e={Rh$Mi7kzfKq;LHPt=TXz>$Jqy+xgVI|WQvOqz&V=_TsW%-i3L3HN=L>) z1nSLHYLyIgNfRz+Yv>Oi1^rR%{?(MZhCCIfzmhEK9zi%@cpiWJzFHgm5j;e5G=@)tGXbbPzwP6JoW{F8{);&^$T`Ev%Rq;fe{ zw->6X!i3n}GDA>}P-)(wkdRr*lR9F?=I}MMhs>HWA^lmjg0Zqe{{U)P3M2eO7wFtG z;|RRn&UJn!WABY(abUc?O-n8@J`;oT;d)vO77E*kqNS{y{A&C)NwywZQ#?okRt!sV zcf)LnE0HMT6y-<-K}UJcd%*jf5u6<(3R5KtSS8X42CUf-r~5%X7P`Ds(?y9^S7Q^= z(={|zc%6MtAvmRl^3y`I)yp)!D3lJAVZulJ3OKOfaB?uo-NSBy{{R$?(bOaXq0RYH zCrAQ_0XcYCHR8=!Cj^8`B)tbECS_>#$RiDK0_p&+KvBOfZ>HAUg7K1>0Ym^us|IVn zKzZLNgp?V96AJ)9FLnmy{d}O;hy2GZ9wSqlIIiF zMU)1X3z7&n;*+;9ClM&NhQ{vo$cC&7wdFjG=}Ah<00{uu>tfY?29$XI#{U4}%l6ad zDo$L${4cDc!TEa)!>MA138>>(TN104QYWvS5t5u$)<54=NQ;_D9g8zuo<1k-w#4l} zVtYeBv=T)9p|Wv!g-ygu-;Rh5|g~aPD$z<){$oa0K|jGiY!0G&$5q!34-95<`Lr;ioAu2(qlE0^wl%+^-nAF z?i*8y)WY*eBS9rhXP{(&qdaG%S(MoN?_(uk`$4iM?ah)ACD2!hl`Sbj3Q`J``@63| z9{h9{p4aUZ%G%p6XU#}jR=Gx5SOk}t5~ykC zR8kFp?RxT~aid3leZDIst?^^T>YAw9Aul5MLi#C^2MOUXhpR>e$nA7^LYsgATUc?M z83b$-x~ru$xA+rQ8L4WPOQ2OZp3fJHxVXe$+I^>@T`hBsH^*o{mfbL8zyGfz+)xJ zNOVb>wg7*M4o#L?R=LB!EaUaOw~W(c*nFw}0!*eMAZaS2s#Dd8)Tt{Q17;UKcyU*QZD{n=h!hQJ|edi zYz}%}Y2_M>2M4039T6&X6)dv#X17eF(K#$~g?kc3xQ7s>B^!#&uzDKVz4`GmRoUH( zpMu+X57Wz3#EG)|$%=I-e{nzLL)p%HwFGnr+W^$b_N(#oBU-i4pA)%`vWT>q(J5;x zpqipQ`hfAfkYfNSBny(NF#2}DWU!>e|=3Com{0}OrFi*8lGqrTdO&wo> z_{^}(t*8`u)HAqY{{U`sa+}*RI$wgjMyZ7ofpXIj&Pf0TWGdOwyqL1S%1kNSSmz{< z(&BDt840#SPfM6W`ybJozqQXI`Y7THILR&;>M1x60H8###v-avYk0&mf^E2 zm0_-+@Xr~EkiN=ImKO7qDTpS3gemUq&NYQwK29h90Gou;2$s3~$vUL1BIE}>Zy(yW z2s2X30VGQ_vMV3NR1>bk*8^P#zo#A{vJkSFaeF`oOL39PjK-&(%`V4;eBx_1 zzdTLzkdNw%{udaX1pfeIzYl0BCxUwXHm{i@#OT(cWRjWX<_h`aT8Nd5&`COw(3Y@a zpd@kS{i8~TE@|Bj-V!JosKZ@e`O-eH{+LaWy^k#$vYiB1oyPM=$d60;I(0JS^T@ z1zRyT2e7y1eq;|$1H~?0Aq$pfgn|eaV`j+lf0ZE>Q?PO>TbJXPq*Oj4iSUd(;?(oN z(bGLLn1sx-hG`1saI39``jfw5$C7rB0K5{_h?6z$Z+|@K%ztPh4o;zs^rgKco$IFN z40j5xnl+lX80tjx#JyQoo&<-i7!vv?n#V;4LPmgbPLqnpW97|4%G8jysVYbeSO=x8 zLt$LtssNJDL36EMuU=ll9y~ay>vE*9PLR`_D-o}vnpP$>F*JR4l2XSa5J(sP9fuZN zG>JGo9JS3*1O%QuNPb!7@Ma!x4VVn~%TZ$4-|<0xr>CaoPFr6I&3Yy?&zNQ=v^6w} zl0{2BJqeQxV_OMjr%@$4u0xgNazg^gk8SJ@(8DPbCSmbXrYIzDN(2=o(L^bjyIs%P zJoC2G6FU!x!-Rpqye+68pEGtPx<~Sn;}3_puO#z~e6Lp{%MwwhBZpO)43f7D0nUQx+=~b{uIxWhF?OIboYTaw5VD#s!916b5~-uLVq-D-wy4@v~5wYD%39 z8ph#NCZ(S$Rj9WQGIC}GVTSbNr~sk$C5=E;##YWPY+J<77I~Vll&L&I#W89+ZeGV| zaeONnufiv%#4!4EEjmeC8c&gG;DR&Nc4f^pEM0-U_^Hj=+a6r3SLlG4Sx0pnpnWGH zOK=UVIfFL7D`~BGV~yV_B{fo%qDKD!5??;1@zb2?&s^o<a#FZ*Q>;=AjnQ8LX^ zrlW9X71i&Ya0fU~HZ6gZ{;2IS*x2gqa@RJ5xTy-9hVIsq*%B(pPsbBSVN~A_Bw%J|8BpdT#FBL(MS#~%-^lUG z#^mG#kigW60vu@hwVo>T6Wn45AkejHT$ay2yIv4HX6IUe4tY|q6orsuc$z*N%WxLE zO0)_t>Z-R$&CP~Hw0C^%rvMj(&3 zSovXy&XOxbJl$5GJ!M>#HhE>KmAbPtGu?@2EOp#k=G;`~%|KGrLQ9uE5O`Gc_H#e`Q}$IeEUf@Ox4%xND_s+U`kY+Mz#rr(O-`kn!qG|Zw2 z6tM7yrGTM4#(g5wv-WC4z_o`iz?+Qf;+!v@aYt73O?>L`#XPaWF}op4oTsxB_`B+T zxQ1R8Bg9EA9D`?|vyjyM7`3E#Y?P7$Xc+17q7@AGM~p_&v$7X##d?D~1}U z_~vYcDv2!BaN@kd`R3#ze(h@fY8&UlR+@okSe0aBkgb6rg#y>L^!}U%F!KQ^ zVp}pv^EIw{n$h5Nm3QlyqDo4)fG)y;fCbxyJzxeCi8*(a1rmTm1^~2(HMk^SUe~|O zfy7f}%>y^hiKEatrE~j;X1qXB0$VE)Kx>toLsbj3!RhmoSPMAske~&ER{TnThCL#aqKx9!A{f9M58_~McRXq&MeOh*T8Lf5h^or1mO{FzU~QYY zCrx)E$6XH{CZqx>z&Dxn{o+*1a$Ao8+EeEU(Is^?ESD-=F}MS859@u#;GfTl#FDEM zs1EI?E_I2Lf?D|&86TO^way~TRRpamQqjcf0Z^djd*&l;*nxAoI_@rKRF#A#godW1 z*~#njk=YGH6U6CJ(Qdtnjc%loa-zd9&}nTn@9%yGNLW=9$GMp z--#MQa02ID^A+w#zN5DjpQE7rMvadxTh}gd-AyD{jz!n57RLJ6s0Uw5-@j{)`~@_c zu{0piwqL)iz>6itO}PI6A2~+Ks%YSuGyVw}u_S*H8e45U`g>?emS51GQPO72ZQG;< z=}Oj`(8jfm*hW)UDKU?4-l;kbZ?&vJzo#9V-n{Drt!XMCk~lr=)ECm)=UBo@hp0iB z$stB{B%88}HNifk)3&^6D0Ndi3jve-))q~ap88=(alJwq46_Ya{vyNVm<=@*U2~7$ zNHH=_oY4>IJwyUpPd%rkRVG9@>+sIs(M| z`t7gFTk*v5T|kn2S(Ee6-W*6C1h@`UUM0FY=6cw`il;~^qzu`FfZFH*=OPe_(a_lCA2oZFo`^budwOse*{A#P8U_*<=(Mh~3y>6@H1EHtzk6?caU&&#Kql>- zb0gGxM*&_UFLrUlzF9cR<_&WGC~%6@pCD~nH5Uf|08ZBL`dn}(HbNIDo#R^`SE0%H z@W>cnj>0Px2-Ib29NNdsaF20(PHa-K>Y2i}Llkk}%c~P`x3{f`*7v=%;w&-(B+CNf zH)bZLuTB+>;IM-Xge6L1fW$jj(YUlnr&d~s5!nfo&t@0cSm?uDzL)y(+{Y~B)Ev*u z;jSGinJ@sO)Rwzy?|N|O1cR6ADPnxg1&OgBk*2oO{dBhr7Mg@~h54@qe7+Qgg{{FW%gr-ABJAmtyy68Y4Tn~GC-uBLY+6}!0_<8!2 zrcPF+1Ls$uRkj?VTQ3JY2l-ZHdne0W{+JJAMJ&*bxIp0gW z7uJvO4N8eqITx$el^nl#fbqS~V#JGH&2g~Xdyn_O988?1xw*MMXYl^fD>>aD8o4cB zGA#Q3BNmD=88SqK6J=p#aeXWZIfnKk<8i>F5V!i)23{l5mWfk_N`r(XzMx&r=-m!Y?rZF0ML_Tlv}yIxBi?&gao7lknLIu_0AOU?w}}D+`V!+4|W_xXc6?; zmP-hWKT+guNx2FI&BeulwYKba2=ylG32{PgFjH;<(rHqovf;uU2@Dd?^} z$+S;z!XBbE_&VfZEt{tPYa7_y+WL!PGwBhq763&79c!eq5;Q6l>$;7U-*xT*(0Xx` z0HrJV`SU#}0t+-Zh`$V8ATc5xuGfwscd`G2X`$vZWsFPlg#^u||{l!x`l6sk>lp7iDMS;1#gx|iM@AKldG}T9! zt3l$Hrz%FGNd3{j%eSu9_TYCqpEDbCsq-=FNEjT$H?8&G=j-$19O``HH8~&yXK?oE z`$m#H-BK@aUG&qwo`m{wqDi?YoEIiRP&^*}O?~ac@v_3;*j!%5!s7ee(*5nf83T~S zjSEDGComqWs<0lQAJBvP>D!D1i$L)9NzczWj1jqDr?$X1Qym z5D-!x%nglo%kvMMpUYKT!6Yq*;&IVpaL&@u!6J-}RS^5LpLh*s(HU)X_^ zpfs(t_v;niueKy%B{nKs%XX-6z>3rm{IBj#Y$us9{%QS{R_2njd8r_JnvznDVp1(w zRQbh3X8Bch+>3BhrfwnA;VesvSBaywgb1ypvas7RSlk){$wG-q0H)1mBCc(5p1()D zCFe?y4{*#km2o^uOh*k?r=z2MQJtLCG1U@sOMus~P{T{;b>J*7XmPl5XrzEhB`ysO zOM)ptW9DwrZ5&=R8mwj>N|J=kTA2fMTuFBipMGjjediNR1(N`9n2e`T;+YIOeq zUuzC5m=4>mBniRnJWg&y-nv_rpezq=7l)dOc!aD3kdl(32Q!hNbHr;JDba*+*3(ET z;b{qnr)!7-B#NK@RX_P+()QFF9z73b?JPb!c48M(QU$B!ULz{!9-)HTm|T3IQe3GZ zhalVr9>0554!tMDG*%msSZFub>PN1hrxs~bO2A57wJF!-&lYGK5__eSadA^ea{mBe z?)k*{@PuWUm2yV6I@sUT>My3e7Qoy?%RCHW8&5+pHg~1BLxfVK)kyVP5DV3pmX7A@xeeCqIZ2W5} zBY1(#jE5TW(g9)|wM7U`#DkNSNlk^p7{KfF$? zSkIHVYg{nptzVo)#pz|8qD;%H78e^a7QUlK%caJoXl=wRQf3nSsvw((KDB_v$A9vx z-qk!jxl$me6!HEce@^>t^cVU15!;=|43ONYGq|?Dn4L2~ql$F$G5Vf?m83F6M)o$h ze!vTjPM=Nq+zz};62y+Ya{doI;FzY4IUW8TNXk672Viy^9@iJ+B57ER-2ODojejCF zlrG&UP%qws3xGm{>3i7xt@7g{bWT_-=BHC<=kRf;%C?Fnj!3{&2X_Dl2fm`m*4pjH zFwjBr=ge(g>0df>I`f38*d=X{IM?uurrocXQ?|dB_Z&oL7j5B6Gn$Hqt6Qfk!wE}L zr4olG?xIL>&G}x#tYHj2Ng|CQX%+~{C2l64xm8^WJ%_K$jd#TV0Fci8(->RC2@Jm%Ug(?7IUXAA(s<~$irAcZzj~@8Rh2xJ2!vKPv z8Lw`lob$1^mlA+ZppFzz#Z2!AI@gh~Vhc7==9^pknYZ?uOr4gAcqwi`T9Oh-G=1xn z)}w`l98UnlC3sNtrww8~<9#u0Fj-50TN|I+xQdI8rDg=i zjqj(e#rO{qwNWIw#3MQq;-ev^hLxi{H^Xe5oiS-t#H~klC&gOlaBhDQqFQIIi8EKN zFkdW9(drg<*HT~1Zge}JQ^K4_X(a%6aVSX_E(HS&tH>7-9OcNt;x{DW)U<~1km;lT z=FG=PJAz3~f+W#YVt9pYwFVbwow~8apn$?Py98fQEo}v~94^|MZcaM`-L7gTEgiq9Q2N2yF{()983eUMaIvY= ze#7+d?k~i!rjgt6H9S(ucyt~eVLios9bAz?(4#NL^mK4@dr zu-&W1BM6)_<)tV@w8~%r1Rw;GK%oVmqWqzd(myUyd~l97sg_~z>mv!4m4?nD1j!?8 zO|Ey}eh|){iEhT4S1j6thK@MG=`*Ec=cud%g&L#))h5&rq3ggxmL)ReQSQgn8+7uCgc5nWG+F_ChFZbIyR4Y-m?oD1(L*xg6( zzzQ6r+PewZ9kGm@oPOAsIWp8zvA$HG&QJL`(%Jz=F;c}22L$oWQB6HxnVJNN-VeMx zw35hN>USjC+iAwk$&*P1z_InCJD(>xnD^7Oc8u9+!{O&kl_e=mwxCw(Kuy6G09f^c zH9WytAu+)ecytJ%VoD`dcLVrdav7MO`q-PB4%~!GO;*PDVt4@j#s2_vE(5YSIZN+x zGbT)$^)r-aO9U4zm6ZxPu;l@Zvo>m9TIW-)_x0P3C~`a5+`8*c_WEaT+ZS%YuMZ! zN9BCoSNxBeaj5xt4sYltq{>>{07DbJIEFN%3v!7S($u@c^)kv?<17|dXH(zzfRZkI z5-d9nxb236$V3h>kuKbKdsccln@BAKqa4tU|D+4B4rmJ^+xKr+u6at4p{du^EMxCN!g)H$FLx04q zo>l~%ZV0g?-uwFThZ81e(np|b+tttJkWz6H@hOtID&BA{uI`m^@2IAt962|dF&uCp-#r(_VZ4J0GNhv8}c(#|0G1yPkNl+rJMqC3~ z`RAm4uJEIo>A9nmu)Ja>rD*Em4D{%Pd@WqoX`m{izy}X1uD(Xt4lP&-$=wdr0gJnO zaIL8xDYvj{!p~VWsc`yVm^pbgKN`4@$xb99MUWE8pd6=N2p7tB02=|NxVPZcNli-@ zIp{qilRYzz@!VjM_@kwb?RLZP1Sfa~i8r%ylh4k0gTZ=tqG$iQGdgp&GG>&lS5@uS*#Oy

    eRa1y@>JN-Pqll0VuedGq14Y4_CC89LB2 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
    InkmkQi;Ra(2D@k4`x5&TKv6GcX4s>7BoSNS-h! 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%0A-=T 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 wX=Zrc4peK0$_cOn+u(Tl5_?^9ua-A1xau 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 wX=Zrc4peK0$_cOn+u(Tl5_?^9ua-A1xau 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 literal 9287 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
    OEbU6Vp+#g&Q*uW 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 5df4267de68921775c89dc68ab0bb7a7aa66dca7..4bde6a7cf7667647be299b5061576b3191cafbf8 100644 GIT binary patch literal 3898 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 Aa{vGU literal 4082 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 5df4267de68921775c89dc68ab0bb7a7aa66dca7..4bde6a7cf7667647be299b5061576b3191cafbf8 100644 GIT binary patch literal 3898 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 Aa{vGU literal 4082 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index e27545cddca227a87dc4513ff1b20bf3c0b7d014..6b1b3782b28ed50b0778ff8a6ce86c73459cf369 100644 GIT binary patch literal 6000 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 YmG}QokQ+;?d?NtlrIn>>KbZvo4+H~f&;S4c literal 6536 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 YmG}QokQ+;?d?NtlrIn>>KbZvo4+H~f&;S4c literal 6536 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 uEIwh1T-3Pf5yd+ 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%0AkP@3~h=Ju9upA68ns88@)aORb_GBt# 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%0AkP@3~h=Ju9upA68ns88@)aORb_GBt# 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 diff --git a/app/src/prerelease/res/mipmap-hdpi/ic_launcher.png b/app/src/prerelease/res/mipmap-hdpi/ic_launcher.png index 3174c2acb344bf2c55b4a4c804e3bd1396bfab93..bfff3638ea031bda0d344c75e03c8f842471e1e1 100644 GIT binary patch delta 2707 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 wh7kb?k diff --git a/app/src/prerelease/res/mipmap-mdpi/ic_launcher_round.png b/app/src/prerelease/res/mipmap-mdpi/ic_launcher_round.png index c3d7464db8a51bf752351ff007d9e8a9e6dba5d1..21a0023f9ae1b922b44bf33fb57c98b7224999df 100644 GIT binary patch delta 1740 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 wh7kb?k diff --git a/app/src/prerelease/res/mipmap-xhdpi/ic_banner.png b/app/src/prerelease/res/mipmap-xhdpi/ic_banner.png index bbf989196907b971729af8f29ab1f285a09a81a2..f518ca520af51dc986f0e894a8740854bf9a09ee 100644 GIT binary patch literal 7918 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 SFREb%s(Tvx>UFAi(f4h)v6|_{aw4&lw5XR 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 G#Qy+o+L;po diff --git a/app/src/prerelease/res/mipmap-xhdpi/ic_launcher.png b/app/src/prerelease/res/mipmap-xhdpi/ic_launcher.png index 2318107ff65412bb19c773a39d95f7b31a22c90b..cd4a3b76539acfec0e39fc532df84c4092439baf 100644 GIT binary patch literal 3893 zcmV-556bX~P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 De0h4$ literal 4024 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 De0h4$ literal 4024 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 Y|7%=>AaxnX@Bjb+07*qoM6N<$f&|L`M*si- diff --git a/app/src/prerelease/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/prerelease/res/mipmap-xxhdpi/ic_launcher_round.png index 0cbf782a9db7a0288093fbe710dafdf163fc7216..69b5f01ffe5c8d73d10ca94231cdd17064f5f8b8 100644 GIT binary patch literal 5982 zcmV-k7oq5hP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 Y|7%=>AaxnX@Bjb+07*qoM6N<$f&|L`M*si- diff --git a/app/src/prerelease/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/prerelease/res/mipmap-xxxhdpi/ic_launcher.png index 4cb990592fbe0b6ef27942a2be095cf7ec367e50..de5e4d1cfc33a6578930b7071604bcc65292a3ba 100644 GIT binary patch literal 8298 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 NNlsn1R>nN^e*g>11B(Cv literal 8956 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 diff --git a/app/src/prerelease/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/prerelease/res/mipmap-xxxhdpi/ic_launcher_round.png index 4cb990592fbe0b6ef27942a2be095cf7ec367e50..de5e4d1cfc33a6578930b7071604bcc65292a3ba 100644 GIT binary patch literal 8298 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 NNlsn1R>nN^e*g>11B(Cv literal 8956 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 diff --git a/app/src/release/res/mipmap-xhdpi/ic_banner.png b/app/src/release/res/mipmap-xhdpi/ic_banner.png index 7a3b1b330cd0d8a36a1d0ce8d5773236f8a898f9..d1b9bdfb859f5f0c457a8f7b70f180267f6b1e3b 100644 GIT binary patch literal 9195 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 literal 9287 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 From 3e09ea97047c0f92ab6e4db2c9912d7315be27b3 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:38:45 +0200 Subject: [PATCH 081/888] Probably fixed the extremely weird crashes on Android TV --- .../cloudstream3/ui/result/EpisodeAdapter.kt | 3 +- .../cloudstream3/ui/result/ResultFragment.kt | 60 ++++++++++++++++++- .../main/res/layout/fragment_result_tv.xml | 20 +++++-- 3 files changed, 73 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 3abd827e..6fc81473 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -60,7 +60,7 @@ class EpisodeAdapter( private val clickCallback: (EpisodeClickEvent) -> Unit, private val downloadClickCallback: (DownloadClickEvent) -> Unit, ) : RecyclerView.Adapter() { - private var cardList: MutableList = mutableListOf() + var cardList: MutableList = mutableListOf() private val mBoundViewHolders: HashSet = HashSet() private fun getAllBoundViewHolders(): Set? { @@ -239,7 +239,6 @@ class EpisodeAdapter( itemView.setOnLongClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_OPTIONS, card)) - return@setOnLongClickListener true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 5fc61146..41defa41 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -95,6 +95,7 @@ import kotlinx.android.synthetic.main.fragment_result.result_vpn import kotlinx.android.synthetic.main.fragment_result_swipe.* import kotlinx.android.synthetic.main.fragment_result_tv.* import kotlinx.android.synthetic.main.result_sync.* +import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking @@ -412,7 +413,39 @@ open class ResultFragment : ResultTrailerPlayer() { is ResourceSome.Success -> { result_episodes?.isVisible = true result_episode_loading?.isVisible = false + + /* + * Okay so what is this fuckery? + * Basically Android TV will crash if you request a new focus while + * the adapter gets updated. + * + * This means that if you load thumbnails and request a next focus at the same time + * the app will crash without any way to catch it! + * + * How to bypass this? + * This code basically steals the focus for 500ms and puts it in an inescapable view + * then lets out the focus by requesting focus to result_episodes + */ + + // Do not use this.isTv, that is the player + val isTv = isTvSettings() + val hasEpisodes = + !(result_episodes?.adapter as? EpisodeAdapter?)?.cardList.isNullOrEmpty() + + if (isTv && hasEpisodes) { + // Make it impossible to focus anywhere else! + temporary_no_focus?.isFocusable = true + temporary_no_focus?.requestFocus() + } + (result_episodes?.adapter as? EpisodeAdapter?)?.updateList(episodes.value) + + if (isTv && hasEpisodes) main { + delay(500) + temporary_no_focus?.isFocusable = false + // This might make some people sad as it changes the focus when leaving an episode :( + result_episodes?.requestFocus() + } } } } @@ -458,7 +491,14 @@ open class ResultFragment : ResultTrailerPlayer() { val storedData = getStoredData(activity ?: context ?: return) ?: return //viewModel.clear() - viewModel.load(activity, storedData.url ?: return, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) + viewModel.load( + activity, + storedData.url ?: return, + storedData.apiName, + storedData.showFillers, + storedData.dubStatus, + storedData.start + ) } } @@ -916,7 +956,14 @@ open class ResultFragment : ResultTrailerPlayer() { if (storedData?.url != null) { result_reload_connectionerror.setOnClickListener { - viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) + viewModel.load( + activity, + storedData.url, + storedData.apiName, + storedData.showFillers, + storedData.dubStatus, + storedData.start + ) } result_reload_connection_open_in_browser?.setOnClickListener { @@ -952,7 +999,14 @@ open class ResultFragment : ResultTrailerPlayer() { if (restart || !viewModel.hasLoaded()) { //viewModel.clear() - viewModel.load(activity, storedData.url, storedData.apiName, storedData.showFillers, storedData.dubStatus, storedData.start) + viewModel.load( + activity, + storedData.url, + storedData.apiName, + storedData.showFillers, + storedData.dubStatus, + storedData.start + ) } } } diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 7c5b4edd..a428b80f 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -420,14 +420,14 @@ + android:minWidth="250dp" + android:nextFocusRight="@id/result_bookmark_button"> @@ -753,6 +753,16 @@ android:orientation="horizontal" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:listitem="@layout/result_episode" /> + + From 7e28517e5bb19ba9fe701a53015b07d4ff196eae Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Thu, 22 Sep 2022 21:04:55 +0200 Subject: [PATCH 082/888] Fix bookmark button for emulator layout --- .../java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 41defa41..1ec2dd39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -294,7 +294,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_reload_connection_open_in_browser?.isVisible = true } 2 -> { - result_bookmark_fab?.isGone = isTvSettings() + result_bookmark_fab?.isGone = isTrueTvSettings() result_bookmark_fab?.extend() //if (result_bookmark_button?.context?.isTrueTvSettings() == true) { // when { From 7a640b58cb84458e495d0c52beed39667ffb0ee2 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:24:41 +0200 Subject: [PATCH 083/888] Fix app not responding when clicking extensions in settings --- .../ui/settings/extensions/ExtensionsViewModel.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt index b5f82ae8..897e7366 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt @@ -3,21 +3,19 @@ package com.lagradost.cloudstream3.ui.settings.extensions import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.apmap import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.debugAssert -import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.PluginManager.getPluginsOnline import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.ui.result.UiText import com.lagradost.cloudstream3.ui.result.txt -import kotlinx.coroutines.launch +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe data class RepositoryData( @JsonProperty("name") val name: String, @@ -46,7 +44,8 @@ class ExtensionsViewModel : ViewModel() { val pluginStats: LiveData> = _pluginStats //TODO CACHE GET REQUESTS - fun loadStats() = viewModelScope.launchSafe { + // DO not use viewModelScope.launchSafe, it will ANR on slow internet + fun loadStats() = ioSafe { val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES @@ -61,6 +60,7 @@ class ExtensionsViewModel : ViewModel() { PluginManager.OnlinePluginData(savedData, onlineData) } }.flatten().distinctBy { it.onlineData.second.url } + val total = onlinePlugins.count() val disabled = outdatedPlugins.count { it.isDisabled } val downloadedTotal = outdatedPlugins.count() From c4295f55ae21923f8c6d56c18b8452ce50f06ed0 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 23 Sep 2022 14:20:53 +0200 Subject: [PATCH 084/888] Fix internal plugin updater --- .../cloudstream3/mvvm/ArchComponentExt.kt | 7 +++ .../cloudstream3/plugins/PluginManager.kt | 62 +++++++++++++------ .../cloudstream3/plugins/RepositoryManager.kt | 20 +++++- 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index 5c3276fa..e5c03d64 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -15,6 +15,7 @@ import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext const val DEBUG_EXCEPTION = "THIS IS A DEBUG EXCEPTION!" +const val DEBUG_PRINT = "DEBUG PRINT" class DebugException(message: String) : Exception("$DEBUG_EXCEPTION\n$message") @@ -24,6 +25,12 @@ inline fun debugException(message: () -> String) { } } +inline fun debugPrint(tag: String = DEBUG_PRINT, message: () -> String) { + if (BuildConfig.DEBUG) { + Log.d(tag, message.invoke()) + } +} + inline fun debugWarning(message: () -> String) { if (BuildConfig.DEBUG) { logError(DebugException(message.invoke())) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index c4d1f66f..bf7e694c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -8,12 +8,10 @@ import android.content.res.Resources import android.os.Environment import android.widget.Toast import android.content.Context -import android.content.Intent import android.os.Build import android.util.Log import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat -import androidx.core.net.toUri import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -28,6 +26,7 @@ import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData import com.lagradost.cloudstream3.utils.VideoDownloadManager.sanitizeFilename import com.lagradost.cloudstream3.APIHolder.removePluginMapping import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent +import com.lagradost.cloudstream3.mvvm.debugPrint import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.utils.Coroutines.ioSafe @@ -37,7 +36,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.extractorApis import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import org.acra.log.debug import java.io.File import java.io.InputStreamReader import java.util.* @@ -223,13 +221,14 @@ object PluginManager { // Iterates over all offline plugins, compares to remote repo and returns the plugins which are outdated val outdatedPlugins = getPluginsOnline().map { savedData -> - onlinePlugins.filter { onlineData -> savedData.internalName == onlineData.second.internalName } + onlinePlugins + .filter { onlineData -> savedData.internalName == onlineData.second.internalName } .map { onlineData -> OnlinePluginData(savedData, onlineData) } }.flatten().distinctBy { it.onlineData.second.url } - debug { + debugPrint { "Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}" } @@ -244,7 +243,7 @@ object PluginManager { activity, pluginData.onlineData.second.url, pluginData.savedData.internalName, - pluginData.onlineData.first + File(pluginData.savedData.filePath) ).let { success -> if (success) updatedPlugins.add(pluginData.onlineData.second.name) @@ -417,24 +416,45 @@ object PluginManager { ) + "." + name.hashCode() } + + /** + * Used for fresh installs + * */ suspend fun downloadAndLoadPlugin( activity: Activity, pluginUrl: String, internalName: String, repositoryUrl: String ): Boolean { - try { - val folderName = getPluginSanitizedFileName(repositoryUrl) // Guaranteed unique - val fileName = getPluginSanitizedFileName(internalName) - unloadPlugin("${activity.filesDir}/${ONLINE_PLUGINS_FOLDER}/${folderName}/$fileName.cs3") + val folderName = getPluginSanitizedFileName(repositoryUrl) // Guaranteed unique + val fileName = getPluginSanitizedFileName(internalName) + val file = File("${activity.filesDir}/${ONLINE_PLUGINS_FOLDER}/${folderName}/$fileName.cs3") + downloadAndLoadPlugin(activity, pluginUrl, internalName, file) + return true + } - Log.d(TAG, "Downloading plugin: $pluginUrl to $folderName/$fileName") + /** + * Used for updates. + * + * Uses a file instead of repository url, as extensions can get moved it is better to directly + * update the files instead of getting the filepath from repo url. + * */ + private suspend fun downloadAndLoadPlugin( + activity: Activity, + pluginUrl: String, + internalName: String, + file: File, + ): Boolean { + try { + unloadPlugin(file.absolutePath) + + Log.d(TAG, "Downloading plugin: $pluginUrl to ${file.absolutePath}") // The plugin file needs to be salted with the repository url hash as to allow multiple repositories with the same internal plugin names - val file = downloadPluginToFile(activity, pluginUrl, fileName, folderName) + val newFile = downloadPluginToFile(pluginUrl, file) return loadPlugin( activity, - file ?: return false, - PluginData(internalName, pluginUrl, true, file.absolutePath, PLUGIN_VERSION_NOT_SET) + newFile ?: return false, + PluginData(internalName, pluginUrl, true, newFile.absolutePath, PLUGIN_VERSION_NOT_SET) ) } catch (e: Exception) { logError(e) @@ -468,7 +488,8 @@ object PluginManager { // the NotificationChannel class is new and not in the support library if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = EXTENSIONS_CHANNEL_NAME //getString(R.string.channel_name) - val descriptionText = EXTENSIONS_CHANNEL_DESCRIPT//getString(R.string.channel_description) + val descriptionText = + EXTENSIONS_CHANNEL_DESCRIPT//getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_LOW val channel = NotificationChannel(EXTENSIONS_CHANNEL_ID, name, importance).apply { description = descriptionText @@ -479,10 +500,11 @@ object PluginManager { notificationManager.createNotificationChannel(channel) } } + private fun createNotification( context: Context, extensionNames: List - ): Notification? { + ): Notification? { try { if (extensionNames.isEmpty()) return null @@ -497,8 +519,10 @@ object PluginManager { .setColor(context.colorFromAttribute(R.attr.colorPrimary)) .setContentTitle(context.getString(R.string.plugins_updated, extensionNames.size)) .setSmallIcon(R.drawable.ic_baseline_extension_24) - .setStyle(NotificationCompat.BigTextStyle() - .bigText(content)) + .setStyle( + NotificationCompat.BigTextStyle() + .bigText(content) + ) .setContentText(content) if (!hasCreatedNotChanel) { @@ -508,7 +532,7 @@ object PluginManager { val notification = builder.build() with(NotificationManagerCompat.from(context)) { // notificationId is a unique int for each notification that you must define - notify((System.currentTimeMillis()/1000).toInt(), notification) + notify((System.currentTimeMillis() / 1000).toInt(), notification) } return notification } catch (e: Exception) { 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 ee0b60b8..e3203787 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -84,7 +84,7 @@ object RepositoryManager { // Normal parsed function not working? // return response.parsedSafe() tryParseJson>(response.text)?.toList() ?: emptyList() - } catch (t : Throwable) { + } catch (t: Throwable) { logError(t) emptyList() } @@ -102,9 +102,27 @@ object RepositoryManager { }.flatten() } + suspend fun downloadPluginToFile( + pluginUrl: String, + file: File + ): File? { + return suspendSafeApiCall { + file.mkdirs() + + // Overwrite if exists + if (file.exists()) { file.delete() } + file.createNewFile() + + val body = app.get(pluginUrl).okhttpResponse.body + write(body.byteStream(), file.outputStream()) + file + } + } + suspend fun downloadPluginToFile( context: Context, pluginUrl: String, + /** Filename without .cs3 */ fileName: String, folder: String ): File? { From c714b77687c6c3751ef84ea864cafbae4c568080 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Fri, 23 Sep 2022 16:32:38 +0200 Subject: [PATCH 085/888] add "material you" theme --- .../lagradost/cloudstream3/CommonActivity.kt | 2 ++ app/src/main/res/values-es/array.xml | 17 ++++------------ app/src/main/res/values-pl/array.xml | 4 ++++ app/src/main/res/values-tr/array.xml | 17 ++++------------ app/src/main/res/values-vi/array.xml | 16 ++++----------- app/src/main/res/values/array.xml | 4 ++++ app/src/main/res/values/styles.xml | 20 +++++++++++++++++++ 7 files changed, 42 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 49143498..6bd41f39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -166,12 +166,14 @@ object CommonActivity { "Light" -> R.style.LightMode "Amoled" -> R.style.AmoledMode "AmoledLight" -> R.style.AmoledModeLight + "Monet" -> R.style.MonetMode else -> R.style.AppTheme } val currentOverlayTheme = when (settingsManager.getString(act.getString(R.string.primary_color_key), "Normal")) { "Normal" -> R.style.OverlayPrimaryColorNormal + "Monet" -> R.style.OverlayPrimaryColorMonet "CarnationPink" -> R.style.OverlayPrimaryColorCarnationPink "DarkGreen" -> R.style.OverlayPrimaryColorDarkGreen "Maroon" -> R.style.OverlayPrimaryColorMaroon diff --git a/app/src/main/res/values-es/array.xml b/app/src/main/res/values-es/array.xml index 658ba7ae..47e747fd 100644 --- a/app/src/main/res/values-es/array.xml +++ b/app/src/main/res/values-es/array.xml @@ -14,19 +14,6 @@ @id/cast_button_type_forward_30_seconds - - Todos - Películas y TV - Anime - Documental - - - 0 - 1 - 2 - 3 - - @string/resolution_and_title @string/title @@ -207,6 +194,7 @@ Normal + Material You Rosa clavel Verde oscuro Vino @@ -225,6 +213,7 @@ Normal + Monet CarnationPink DarkGreen Maroon @@ -247,12 +236,14 @@ Gris Amoled Destello + Material You AmoledLight Black Amoled Light + Monet diff --git a/app/src/main/res/values-pl/array.xml b/app/src/main/res/values-pl/array.xml index c40b7f87..abf5b582 100644 --- a/app/src/main/res/values-pl/array.xml +++ b/app/src/main/res/values-pl/array.xml @@ -203,6 +203,7 @@ Normalny + Material You Goździk różowy Ciemnozielony Kasztanowaty @@ -221,6 +222,7 @@ Normal + Monet CarnationPink DarkGreen Maroon @@ -243,12 +245,14 @@ Szary Amoled Flashbang + Material You AmoledLight Black Amoled Light + Monet diff --git a/app/src/main/res/values-tr/array.xml b/app/src/main/res/values-tr/array.xml index ec9acd0e..e5bb2be2 100644 --- a/app/src/main/res/values-tr/array.xml +++ b/app/src/main/res/values-tr/array.xml @@ -14,19 +14,6 @@ @id/cast_button_type_forward_30_seconds - - Hepsi - Film ve Dizi - Anime - Belgesel - - - 0 - 1 - 2 - 3 - - @string/resolution_and_title @string/title @@ -207,6 +194,7 @@ Normal + Material You Karanfil Pembesi Koyu Yeşil Kestane @@ -225,6 +213,7 @@ Normal + Monet CarnationPink DarkGreen Maroon @@ -247,12 +236,14 @@ Gri Amoled Flaş Bombası + Material You AmoledLight Black Amoled Light + Monet diff --git a/app/src/main/res/values-vi/array.xml b/app/src/main/res/values-vi/array.xml index 5e70223b..dbdc7a0d 100644 --- a/app/src/main/res/values-vi/array.xml +++ b/app/src/main/res/values-vi/array.xml @@ -14,18 +14,6 @@ @id/cast_button_type_forward_30_seconds - - Tất cả - Phim lẻ và Phim bộ - Anime - Phim tài liệu - - - 0 - 1 - 2 - 3 - @string/resolution_and_title @@ -207,6 +195,7 @@ Mặc định + Material You Hồng nhạt Xanh lam đậm Nâu sẫm @@ -225,6 +214,7 @@ Normal + Monet CarnationPink DarkGreen Maroon @@ -247,12 +237,14 @@ Xám Amoled Sáng + Material You AmoledLight Black Amoled Light + Monet diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 13d4f2dc..df97a741 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -213,6 +213,7 @@ Normal + Material You Carnation Pink Dark Green Maroon @@ -231,6 +232,7 @@ Normal + Monet CarnationPink DarkGreen Maroon @@ -253,12 +255,14 @@ Gray Amoled Flashbang + Material You AmoledLight Black Amoled Light + Monet diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2fb9b5b4..26c6b36c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -95,6 +95,16 @@ #000 + + + + + + + + @@ -145,7 +151,7 @@ @color/colorPrimaryBlue #4855A2 #5A6BCB - #5A6BCB + @color/whiteText @color/colorPrimaryBlue @@ -155,7 +161,7 @@ @color/colorPrimaryPurple #4704A3 #7125DB - #7125DB + @color/whiteText @color/colorPrimaryPurple @@ -164,7 +170,7 @@ @color/colorPrimaryGreen #007363 #39C1AE - #39C1AE + @color/blackText @color/colorPrimaryGreen @@ -173,7 +179,7 @@ @color/colorPrimaryGreenApple #319B5A #51C57E - #51C57E + @color/blackText @color/colorPrimaryGreenApple @@ -182,7 +188,7 @@ @color/colorPrimaryRed #B62B2B @color/colorPrimaryRed - @color/colorPrimaryRed + @color/whiteText @color/colorPrimaryRed @@ -192,7 +198,7 @@ @color/colorPrimaryBanana #9B7D31 #C5B251 - #C5A851 + @color/blackText @color/colorPrimaryBanana @@ -201,7 +207,7 @@ @color/colorPrimaryParty #C1495B #FD798C - #BF5968 + @color/blackText @color/colorPrimaryParty @@ -210,7 +216,7 @@ @color/colorPrimaryPink #DD1280 #FF4DAE - #DD1280 + @color/blackText @color/colorPrimaryPink @@ -219,7 +225,7 @@ @color/colorPrimaryCarnationPink #83366f #BD5DA5 - #BD5DA5 + @color/blackText @color/colorPrimaryCarnationPink @@ -229,7 +235,7 @@ @color/colorPrimaryMaroon #370C0C #451010 - #451010 + @color/whiteText @color/colorPrimaryMaroon @@ -239,7 +245,7 @@ @color/colorPrimaryDarkGreen #003d00 #004500 - #004500 + @color/whiteText @color/colorPrimaryDarkGreen @@ -249,7 +255,7 @@ @color/colorPrimaryNavyBlue #000073 #000080 - #000080 + @color/whiteText @color/colorPrimaryNavyBlue @@ -259,7 +265,7 @@ @color/colorPrimaryGrey #484848 #515151 - #515151 + @color/whiteText @color/colorPrimaryGrey @@ -269,7 +275,7 @@ @color/colorPrimaryWhite #CCCCCC #FFFFFF - #FFFFFF + @color/blackText @color/colorPrimaryWhite @@ -279,7 +285,7 @@ @color/colorPrimaryBrown #582700 #622C00 - #622C00 + @color/whiteText @color/colorPrimaryBrown From d349190238d99e0604e71c4be0dcff42fbfb08f4 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Mon, 31 Oct 2022 01:16:15 +0100 Subject: [PATCH 144/888] scroll --- .../cloudstream3/ExampleInstrumentedTest.kt | 4 +- .../com/lagradost/cloudstream3/MainAPI.kt | 2 +- .../lagradost/cloudstream3/MainActivity.kt | 2 +- .../lagradost/cloudstream3/ParCollections.kt | 24 ++- .../cloudstream3/extractors/Fastream.kt | 6 +- .../cloudstream3/extractors/Pelisplus.kt | 10 +- .../extractors/VidSrcExtractor.kt | 6 +- .../cloudstream3/extractors/Vidstream.kt | 10 +- .../cloudstream3/extractors/Zplayer.kt | 4 +- .../extractors/helper/AsianEmbedHelper.kt | 4 +- .../metaproviders/CrossTmdbProvider.kt | 6 +- .../metaproviders/MultiAnimeProvider.kt | 2 +- .../cloudstream3/plugins/PluginManager.kt | 21 ++- .../cloudstream3/plugins/RepositoryManager.kt | 4 +- .../cloudstream3/ui/APIRepository.kt | 23 ++- .../cloudstream3/ui/home/HomeFragment.kt | 103 +++++++------ .../cloudstream3/ui/home/HomeScrollAdapter.kt | 60 ++++++++ .../ui/home/HomeScrollTransformer.kt | 13 ++ .../cloudstream3/ui/home/HomeViewModel.kt | 39 ++++- .../cloudstream3/ui/player/GeneratorPlayer.kt | 2 +- .../cloudstream3/ui/player/LinkGenerator.kt | 4 +- .../ui/result/ResultViewModel2.kt | 2 +- .../cloudstream3/ui/result/SyncViewModel.kt | 4 +- .../cloudstream3/ui/search/SearchViewModel.kt | 6 +- .../extensions/ExtensionsViewModel.kt | 4 +- .../settings/extensions/PluginsViewModel.kt | 4 +- .../cloudstream3/utils/BackupUtils.kt | 2 - app/src/main/res/layout/fragment_home.xml | 141 ++++++++++-------- .../lagradost/cloudstream3/ProviderTests.kt | 4 +- 29 files changed, 337 insertions(+), 179 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollTransformer.kt diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index 201ddea3..2a3e13e5 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -180,7 +180,7 @@ class ExampleInstrumentedTest { @Test fun providerCorrectHomepage() { runBlocking { - getAllProviders().apmap { api -> + getAllProviders().amap { api -> if (api.hasMainPage) { try { val homepage = api.getMainPage() @@ -217,7 +217,7 @@ class ExampleInstrumentedTest { runBlocking { val invalidProvider = ArrayList>() val providers = getAllProviders() - providers.apmap { api -> + providers.amap { api -> try { println("Trying $api") if (testSingleProviderApi(api)) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 940d3391..da257d69 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1066,7 +1066,7 @@ interface LoadResponse { ) { if (!isTrailersEnabled || trailerUrls == null) return trailers.addAll(trailerUrls.map { TrailerData(it, referer, addRaw) }) - /*val trailers = trailerUrls.filter { it.isNotBlank() }.apmap { trailerUrl -> + /*val trailers = trailerUrls.filter { it.isNotBlank() }.amap { trailerUrl -> val links = arrayListOf() val subs = arrayListOf() if (!loadExtractor( diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 4c193f42..eb83b08a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -592,7 +592,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { api.init() } - inAppAuths.apmap { api -> + inAppAuths.amap { api -> try { api.initialize() } catch (e: Exception) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt b/app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt index badb6631..46955427 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt @@ -1,8 +1,7 @@ package com.lagradost.cloudstream3 import com.lagradost.cloudstream3.mvvm.logError -import kotlinx.coroutines.async -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.* //https://stackoverflow.com/questions/34697828/parallel-operations-on-kotlin-collections /* @@ -26,10 +25,25 @@ fun Iterable.pmap( return ArrayList(destination) }*/ + +@OptIn(DelicateCoroutinesApi::class) +suspend fun Map.amap(f: suspend (Map.Entry) -> R): List = + with(CoroutineScope(GlobalScope.coroutineContext)) { + map { async { f(it) } }.map { it.await() } + } + fun Map.apmap(f: suspend (Map.Entry) -> R): List = runBlocking { map { async { f(it) } }.map { it.await() } } + +@OptIn(DelicateCoroutinesApi::class) +suspend fun List.amap(f: suspend (A) -> B): List = + with(CoroutineScope(GlobalScope.coroutineContext)) { + map { async { f(it) } }.map { it.await() } + } + + fun List.apmap(f: suspend (A) -> B): List = runBlocking { map { async { f(it) } }.map { it.await() } } @@ -38,6 +52,12 @@ fun List.apmapIndexed(f: suspend (index: Int, A) -> B): List = runB mapIndexed { index, a -> async { f(index, a) } }.map { it.await() } } +@OptIn(DelicateCoroutinesApi::class) +suspend fun List.amapIndexed(f: suspend (index: Int, A) -> B): List = + with(CoroutineScope(GlobalScope.coroutineContext)) { + mapIndexed { index, a -> async { f(index, a) } }.map { it.await() } + } + // run code in parallel /*fun argpmap( vararg transforms: () -> R, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt index 16b109be..0d5a5c78 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink @@ -21,10 +21,10 @@ class Fastream: ExtractorApi() { Pair("file_code",id), Pair("auto","1") )).document - response.select("script").apmap { script -> + response.select("script").amap { script -> if (script.data().contains("sources")) { val m3u8regex = Regex("((https:|http:)\\/\\/.*\\.m3u8)") - val m3u8 = m3u8regex.find(script.data())?.value ?: return@apmap + val m3u8 = m3u8regex.find(script.data())?.value ?: return@amap generateM3u8( name, m3u8, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt index cc743d5e..de469b22 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt @@ -1,7 +1,7 @@ package com.lagradost.cloudstream3.extractors import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink @@ -35,7 +35,7 @@ class Pelisplus(val mainUrl: String) { callback: (ExtractorLink) -> Unit ): Boolean { try { - normalApis.apmap { api -> + normalApis.amap { api -> val url = api.getExtractorUrl(id) api.getSafeUrl(url, subtitleCallback = subtitleCallback, callback = callback) } @@ -51,8 +51,8 @@ class Pelisplus(val mainUrl: String) { val qualityRegex = Regex("(\\d+)P") //a[download] - pageDoc.select(".dowload > a")?.apmap { element -> - val href = element.attr("href") ?: return@apmap + pageDoc.select(".dowload > a")?.amap { element -> + val href = element.attr("href") ?: return@amap val qual = if (element.text() .contains("HDP") ) "1080" else qualityRegex.find(element.text())?.destructured?.component1() @@ -84,7 +84,7 @@ class Pelisplus(val mainUrl: String) { //val name = element.text() // Matches vidstream links with extractors - extractorApis.filter { !it.requiresReferer || !isCasting }.apmap { api -> + extractorApis.filter { !it.requiresReferer || !isCasting }.amap { api -> if (link.startsWith(api.mainUrl)) { api.getSafeUrl(link, extractorUrl, subtitleCallback, callback) } 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 287fe4d4..b910f9dd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt @@ -1,7 +1,7 @@ package com.lagradost.cloudstream3.extractors import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import kotlinx.coroutines.delay @@ -69,12 +69,12 @@ open class VidSrcExtractor : ExtractorApi() { } else "" } - serverslist.apmap { server -> + serverslist.amap { server -> val linkfixed = server.replace("https://vidsrc.xyz/", "https://embedsito.com/") if (linkfixed.contains("/pro")) { val srcresponse = app.get(server, referer = absoluteUrl).text val m3u8Regex = Regex("((https:|http:)//.*\\.m3u8)") - val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@apmap + val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@amap val passRegex = Regex("""['"](.*set_pass[^"']*)""") val pass = passRegex.find(srcresponse)?.groupValues?.get(1)?.replace( Regex("""^//"""), "https://" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt index 1d853b2d..7eb7fbac 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt @@ -1,7 +1,7 @@ package com.lagradost.cloudstream3.extractors import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.argamap import com.lagradost.cloudstream3.utils.ExtractorLink @@ -37,7 +37,7 @@ class Vidstream(val mainUrl: String) { val extractorUrl = getExtractorUrl(id) argamap( { - normalApis.apmap { api -> + normalApis.amap { api -> val url = api.getExtractorUrl(id) api.getSafeUrl( url, @@ -55,8 +55,8 @@ class Vidstream(val mainUrl: String) { val qualityRegex = Regex("(\\d+)P") //a[download] - pageDoc.select(".dowload > a")?.apmap { element -> - val href = element.attr("href") ?: return@apmap + pageDoc.select(".dowload > a")?.amap { element -> + val href = element.attr("href") ?: return@amap val qual = if (element.text() .contains("HDP") ) "1080" else qualityRegex.find(element.text())?.destructured?.component1() @@ -87,7 +87,7 @@ class Vidstream(val mainUrl: String) { //val name = element.text() // Matches vidstream links with extractors - extractorApis.filter { !it.requiresReferer || !isCasting }.apmap { api -> + extractorApis.filter { !it.requiresReferer || !isCasting }.amap { api -> if (link.startsWith(api.mainUrl)) { api.getSafeUrl(link, extractorUrl, subtitleCallback, callback) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt index 6108d2c5..d17b427d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink @@ -36,7 +36,7 @@ open class ZplayerV2 : ExtractorApi() { val m3u8regex = Regex("((https:|http:)\\/\\/.*\\.m3u8)") m3u8regex.findAll(testdata).map { it.value - }.toList().apmap { urlm3u8 -> + }.toList().amap { urlm3u8 -> if (urlm3u8.contains("m3u8")) { val testurl = app.get(urlm3u8, headers = mapOf("Referer" to url)).text if (testurl.contains("EXTM3U")) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt index e70a9474..0b401c06 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors.helper import android.util.Log import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.loadExtractor @@ -18,7 +18,7 @@ class AsianEmbedHelper { val doc = app.get(url).document val links = doc.select("div#list-server-more > ul > li.linkserver") if (!links.isNullOrEmpty()) { - links.apmap { + links.amap { val datavid = it.attr("data-video") ?: "" //Log.i("AsianEmbed", "Result => (datavid) ${datavid}") if (datavid.isNotBlank()) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt index b01d188c..07aa904e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt @@ -39,7 +39,7 @@ class CrossTmdbProvider : TmdbProvider() { ): Boolean { tryParseJson(data)?.let { metaData -> if (!metaData.isSuccess) return false - metaData.movies?.apmap { (apiName, data) -> + metaData.movies?.amap { (apiName, data) -> getApiFromNameNull(apiName)?.let { try { it.loadLinks(data, isCasting, subtitleCallback, callback) @@ -64,10 +64,10 @@ class CrossTmdbProvider : TmdbProvider() { val matchName = filterName(this.name) when (this) { is MovieLoadResponse -> { - val data = validApis.apmap { api -> + val data = validApis.amap { api -> try { if (api.supportedTypes.contains(TvType.Movie)) { //|| api.supportedTypes.contains(TvType.AnimeMovie) - return@apmap api.search(this.name)?.first { + return@amap api.search(this.name)?.first { if (filterName(it.name).equals( matchName, ignoreCase = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt index 0ab44b68..e8ac1876 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt @@ -45,7 +45,7 @@ class MultiAnimeProvider : MainAPI() { override suspend fun load(url: String): LoadResponse? { return syncApi.getResult(url)?.let { res -> - val data = SyncUtil.getUrlsFromId(res.id, syncUtilType).apmap { url -> + val data = SyncUtil.getUrlsFromId(res.id, syncUtilType).amap { url -> validApis.firstOrNull { api -> url.startsWith(api.mainUrl) }?.load(url) }.filterNotNull() diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 35e041be..c0f35601 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -217,18 +217,17 @@ object PluginManager { * 3. If outdated download and load the plugin * 4. Else load the plugin normally **/ - fun updateAllOnlinePluginsAndLoadThem(activity: Activity) { + fun updateAllOnlinePluginsAndLoadThem(activity: Activity) = ioSafe { // Load all plugins as fast as possible! loadAllOnlinePlugins(activity) - ioSafe { afterPluginsLoadedEvent.invoke(true) - } + val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES - val onlinePlugins = urls.toList().apmap { + val onlinePlugins = urls.toList().amap { getRepoPlugins(it.url)?.toList() ?: emptyList() }.flatten().distinctBy { it.second.url } @@ -249,7 +248,7 @@ object PluginManager { val updatedPlugins = mutableListOf() - outdatedPlugins.apmap { pluginData -> + outdatedPlugins.amap { pluginData -> if (pluginData.isDisabled) { //updatedPlugins.add(activity.getString(R.string.single_plugin_disabled, pluginData.onlineData.second.name)) unloadPlugin(pluginData.savedData.filePath) @@ -270,9 +269,9 @@ object PluginManager { createNotification(activity, updatedPlugins) } - ioSafe { + // ioSafe { afterPluginsLoadedEvent.invoke(true) - } + // } Log.i(TAG, "Plugin update done!") } @@ -280,9 +279,9 @@ object PluginManager { /** * Use updateAllOnlinePluginsAndLoadThem * */ - fun loadAllOnlinePlugins(activity: Activity) { + fun loadAllOnlinePlugins(activity: Activity) = ioSafe { // Load all plugins as fast as possible! - (getPluginsOnline()).toList().apmap { pluginData -> + (getPluginsOnline()).toList().amap { pluginData -> loadPlugin( activity, File(pluginData.filePath), @@ -291,7 +290,7 @@ object PluginManager { } } - fun loadAllLocalPlugins(activity: Activity) { + fun loadAllLocalPlugins(activity: Activity) = ioSafe { val dir = File(LOCAL_PLUGINS_PATH) removeKey(PLUGINS_KEY_LOCAL) @@ -299,7 +298,7 @@ object PluginManager { val res = dir.mkdirs() if (!res) { Log.w(TAG, "Failed to create local directories") - return + return@ioSafe } } 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 e3203787..2564abd0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -4,7 +4,7 @@ import android.content.Context import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall @@ -95,7 +95,7 @@ object RepositoryManager { * */ suspend fun getRepoPlugins(repositoryUrl: String): List>? { val repo = parseRepository(repositoryUrl) ?: return null - return repo.pluginLists.apmap { url -> + return repo.pluginLists.amap { url -> parsePlugins(url).map { repositoryUrl to it } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index ce695873..ef50019c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -6,6 +6,10 @@ import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope.coroutineContext +import kotlinx.coroutines.async import kotlinx.coroutines.delay class APIRepository(val api: MainAPI) { @@ -27,7 +31,7 @@ class APIRepository(val api: MainAPI) { return data.isEmpty() || data == "[]" || data == "about:blank" } - private val cacheHash: HashMap, LoadResponse> = hashMapOf() + private val cacheHash: HashMap, LoadResponse> = hashMapOf() } val hasMainPage = api.hasMainPage @@ -42,7 +46,7 @@ class APIRepository(val api: MainAPI) { return safeApiCall { if (isInvalidData(url)) throw ErrorLoadingException() val fixedUrl = api.fixUrl(url) - val key = Pair(api.name,url) + val key = Pair(api.name, url) cacheHash[key] ?: api.load(fixedUrl)?.also { // we cache 20 responses because ppl often go back to the same shit + 20 because I dont want to cause too much memory leak if (cacheHash.size > 20) cacheHash.remove(cacheHash.keys.random()) @@ -78,6 +82,7 @@ class APIRepository(val api: MainAPI) { delay(delta) } + @OptIn(DelicateCoroutinesApi::class) suspend fun getMainPage(page: Int, nameIndex: Int? = null): Resource> { return safeApiCall { api.lastHomepageRequest = unixTimeMS @@ -103,11 +108,15 @@ class APIRepository(val api: MainAPI) { ) } } else { - api.mainPage.apmap { data -> - api.getMainPage( - page, - MainPageRequest(data.name, data.data, data.horizontalImages) - ) + with(CoroutineScope(coroutineContext)) { + api.mainPage.map { data -> + async { + api.getMainPage( + page, + MainPageRequest(data.name, data.data, data.horizontalImages) + ) + } + }.map { it.await() } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index e86a0742..9792fa43 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -547,51 +547,14 @@ class HomeFragment : Fragment() { when (preview) { is Resource.Success -> { home_preview?.isVisible = true - - preview.value.apply { - home_preview_tags?.text = tags?.joinToString(" • ") ?: "" - home_preview_tags?.isGone = tags.isNullOrEmpty() - home_preview_image?.setImage(posterUrl, posterHeaders) - home_preview_title?.text = name - home_preview_play?.setOnClickListener { - activity?.loadResult(url, apiName, START_ACTION_RESUME_LATEST) - //activity.loadSearchResult(url, START_ACTION_RESUME_LATEST) - } - home_preview_info?.setOnClickListener { - activity?.loadResult(url, apiName) - //activity.loadSearchResult(random) - } - // very ugly code, but I dont care - val watchType = DataStoreHelper.getResultWatchState(preview.value.getId()) - home_preview_bookmark?.setText(watchType.stringRes) - home_preview_bookmark?.setCompoundDrawablesWithIntrinsicBounds( - null, - getDrawable(home_preview_bookmark.context, watchType.iconRes), - null, - null - ) - home_preview_bookmark?.setOnClickListener { fab -> - activity?.showBottomDialog( - WatchType.values().map { fab.context.getString(it.stringRes) } - .toList(), - DataStoreHelper.getResultWatchState(preview.value.getId()).ordinal, - fab.context.getString(R.string.action_add_to_bookmarks), - showApply = false, - {}) { - val newValue = WatchType.values()[it] - home_preview_bookmark?.setCompoundDrawablesWithIntrinsicBounds( - null, - getDrawable(home_preview_bookmark.context, newValue.iconRes), - null, - null - ) - home_preview_bookmark?.setText(newValue.stringRes) - - updateWatchStatus(preview.value, newValue) - reloadStored() - } - } + (home_preview_viewpager?.adapter as? HomeScrollAdapter)?.apply { + setItems(preview.value) + // home_preview_viewpager?.setCurrentItem(1000, false) } + + //.also { + //home_preview_viewpager?.adapter = + //} } else -> { home_preview?.isVisible = false @@ -606,6 +569,58 @@ class HomeFragment : Fragment() { searchText.setTextColor(color) searchText.setHintTextColor(color) } + + home_preview_viewpager?.apply { + setPageTransformer(false, HomeScrollTransformer()) + adapter = HomeScrollAdapter { load -> + load.apply { + home_preview_tags?.text = tags?.joinToString(" • ") ?: "" + home_preview_tags?.isGone = tags.isNullOrEmpty() + home_preview_image?.setImage(posterUrl, posterHeaders) + home_preview_title?.text = name + home_preview_play?.setOnClickListener { + activity?.loadResult(url, apiName, START_ACTION_RESUME_LATEST) + //activity.loadSearchResult(url, START_ACTION_RESUME_LATEST) + } + home_preview_info?.setOnClickListener { + activity?.loadResult(url, apiName) + //activity.loadSearchResult(random) + } + // very ugly code, but I dont care + val watchType = DataStoreHelper.getResultWatchState(load.getId()) + home_preview_bookmark?.setText(watchType.stringRes) + home_preview_bookmark?.setCompoundDrawablesWithIntrinsicBounds( + null, + getDrawable(home_preview_bookmark.context, watchType.iconRes), + null, + null + ) + home_preview_bookmark?.setOnClickListener { fab -> + activity?.showBottomDialog( + WatchType.values().map { fab.context.getString(it.stringRes) } + .toList(), + DataStoreHelper.getResultWatchState(load.getId()).ordinal, + fab.context.getString(R.string.action_add_to_bookmarks), + showApply = false, + {}) { + val newValue = WatchType.values()[it] + home_preview_bookmark?.setCompoundDrawablesWithIntrinsicBounds( + null, + getDrawable(home_preview_bookmark.context, newValue.iconRes), + null, + null + ) + home_preview_bookmark?.setText(newValue.stringRes) + + updateWatchStatus(load, newValue) + reloadStored() + } + } + } + + } + } + observe(homeViewModel.apiName) { apiName -> currentApiName = apiName // setKey(USER_SELECTED_HOMEPAGE_API, apiName) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt new file mode 100644 index 00000000..b36d7582 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt @@ -0,0 +1,60 @@ +package com.lagradost.cloudstream3.ui.home + +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import com.lagradost.cloudstream3.LoadResponse +import com.lagradost.cloudstream3.utils.UIHelper.setImage + + +class HomeScrollAdapter(private val onPrimaryCallback: (LoadResponse) -> Unit) : PagerAdapter() { + private var items: List = listOf() + + fun setItems(newItems: List) { + items = newItems + + notifyDataSetChanged() + } + + override fun getCount(): Int { + return Int.MAX_VALUE//items.size + } + + override fun getItemPosition(`object`: Any): Int { + return POSITION_NONE//super.getItemPosition(`object`) + } + + private fun getItemAtPosition(idx: Int): LoadResponse { + return items[idx % items.size] + } + + override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) { + super.setPrimaryItem(container, position, `object`) + onPrimaryCallback.invoke(getItemAtPosition(position)) + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val image = ImageView(container.context) + val item = getItemAtPosition(position) + image.scaleType = ImageView.ScaleType.CENTER_CROP + image.setImage(item.posterUrl ?: item.backgroundPosterUrl, item.posterHeaders) + + // val itemView: View = mLayoutInflater.inflate(R.layout.pager_item, container, false) + + // val imageView: ImageView = itemView.findViewById(R.id.imageView) as ImageView + // imageView.setImageResource(mResources.get(position)) + + container.addView(image) + + return image + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + container.removeView(`object` as View) + } + + override fun isViewFromObject(view: View, `object`: Any): Boolean { + return view === `object` + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollTransformer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollTransformer.kt new file mode 100644 index 00000000..04b6964b --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollTransformer.kt @@ -0,0 +1,13 @@ +package com.lagradost.cloudstream3.ui.home + +import android.view.View +import androidx.viewpager.widget.ViewPager + +class HomeScrollTransformer : ViewPager.PageTransformer { + override fun transformPage(page: View, position: Float) { + page.setPadding( + maxOf(0, (-position * page.width / 2).toInt()), 0, + maxOf(0, (position * page.width / 2).toInt()), 0 + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index af24973d..43d849cf 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -21,6 +21,8 @@ import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi import com.lagradost.cloudstream3.ui.WatchType +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.Coroutines.ioWork import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds @@ -33,6 +35,7 @@ import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.cloudstream3.utils.VideoDownloadHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.async import kotlinx.coroutines.withContext import java.util.* import kotlin.collections.set @@ -58,9 +61,9 @@ class HomeViewModel : ViewModel() { val bookmarks: LiveData>> = _bookmarks private val _resumeWatching = MutableLiveData>() - private val _preview = MutableLiveData>() + private val _preview = MutableLiveData>>() val resumeWatching: LiveData> = _resumeWatching - val preview: LiveData> = _preview + val preview: LiveData>> = _preview fun loadResumeWatching() = viewModelScope.launchSafe { val resumeWatching = withContext(Dispatchers.IO) { @@ -210,7 +213,7 @@ class HomeViewModel : ViewModel() { } - private fun load(api: MainAPI?) = viewModelScope.launchSafe { + private fun load(api: MainAPI?) = ioSafe { repo = if (api != null) { APIRepository(api) } else { @@ -236,7 +239,35 @@ class HomeViewModel : ViewModel() { ExpandableHomepageList(filteredList, 1, home.hasNext) } } + val items = data.value.mapNotNull { it?.items }.flatten() + val responses = ioWork { + items.flatMap { it.list }.shuffled().take(6).map { searchResponse -> + async { repo?.load(searchResponse.url) } + }.map { it.await() }.mapNotNull { if (it != null && it is Resource.Success) it.value else null } } + //.amap { searchResponse -> + // repo?.load(searchResponse.url) + ///} + + //.map { searchResponse -> + // async { repo?.load(searchResponse.url) } + // }.map { it.await() } + + + if (responses.isEmpty()) { + _preview.postValue( + Resource.Failure( + false, + null, + null, + "No homepage responses" + ) + ) + } else { + _preview.postValue(Resource.Success(responses)) + } + + /* items.randomOrNull()?.list?.randomOrNull()?.url?.let { url -> // backup request in case first fails var first = repo?.load(url) @@ -264,7 +295,7 @@ class HomeViewModel : ViewModel() { "No homepage items" ) ) - } + }*/ _page.postValue(Resource.Success(expandable)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e20a6c7b..816b1298 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -344,7 +344,7 @@ class GeneratorPlayer : FullScreenPlayer() { seasonNumber = currentTempMeta.season, lang = currentLanguageTwoLetters.ifBlank { null } ) - val results = providers.apmap { + val results = providers.amap { try { it.search(search) } catch (e: Exception) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 2c8a5372..1f242481 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.ui.player -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.* import java.net.URI @@ -46,7 +46,7 @@ class LinkGenerator( subtitleCallback: (SubtitleData) -> Unit, offset: Int ): Boolean { - links.apmap { link -> + links.amap { link -> if (!extract || !loadExtractor(link, referer, { subtitleCallback(PlayerSubtitleHelper.getSubtitleData(it)) }) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 7c099793..f424989e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1972,7 +1972,7 @@ class ResultViewModel2 : ViewModel() { ): List = coroutineScope { var currentCount = 0 - return@coroutineScope loadResponse.trailers.apmap { trailerData -> + return@coroutineScope loadResponse.trailers.amap { trailerData -> try { val links = arrayListOf() val subs = arrayListOf() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt index 513d68e8..91415d26 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis @@ -197,7 +197,7 @@ class SyncViewModel : ViewModel() { /// modifies the current sync data, return null if you don't want to change it private fun modifyData(update: ((SyncAPI.SyncStatus) -> (SyncAPI.SyncStatus?))) = ioSafe { - syncs.apmap { (prefix, id) -> + syncs.amap { (prefix, id) -> repos.firstOrNull { it.idPrefix == prefix }?.let { repo -> if (repo.hasAccount()) { val result = repo.getStatus(id) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt index b629b73f..aceda644 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt @@ -9,7 +9,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.SearchResponse -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.ui.APIRepository @@ -108,9 +108,9 @@ class SearchViewModel : ViewModel() { repos.filter { a -> (ignoreSettings || (providersActive.isEmpty() || providersActive.contains(a.name))) && (!isQuickSearch || a.hasQuickSearch) - }.apmap { a -> // Parallel + }.amap { a -> // Parallel val search = if (isQuickSearch) a.quickSearch(query) else a.search(query) - if (currentSearchIndex != currentIndex) return@apmap + if (currentSearchIndex != currentIndex) return@amap currentList.add(OnGoingSearch(a.name, search)) _currentSearch.postValue(currentList) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt index 897e7366..63ed5357 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.plugins.PluginManager @@ -49,7 +49,7 @@ class ExtensionsViewModel : ViewModel() { val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES - val onlinePlugins = urls.toList().apmap { + val onlinePlugins = urls.toList().amap { RepositoryManager.getRepoPlugins(it.url)?.toList() ?: emptyList() }.flatten().distinctBy { it.second.url } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt index 536dc33b..894a9331 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt @@ -10,7 +10,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.apmap +import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.PluginManager.getPluginPath @@ -101,7 +101,7 @@ class PluginsViewModel : ViewModel() { Toast.LENGTH_SHORT ) } - }.apmap { (repo, metadata) -> + }.amap { (repo, metadata) -> PluginManager.downloadAndLoadPlugin( activity, metadata.url, diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 08c03d6c..338b1ed2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -13,7 +13,6 @@ import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.module.kotlin.readValue import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.apmap import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.plugins.PLUGINS_KEY import com.lagradost.cloudstream3.plugins.PLUGINS_KEY_LOCAL @@ -28,7 +27,6 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_S import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_TOKEN_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY -import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY import com.lagradost.cloudstream3.utils.DataStore.getDefaultSharedPrefs import com.lagradost.cloudstream3.utils.DataStore.getSharedPrefs diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index bce49c22..3d7e3ba5 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -279,30 +279,40 @@ --> - + + android:layout_height="500dp" + android:visibility="gone" + tools:visibility="visible"> + + + + + + android:alpha="1" + android:background="@drawable/background_shadow" + android:rotation="180" + android:visibility="visible" /> + + android:layout_height="wrap_content" + android:orientation="vertical"> - + android:textSize="20dp" + android:layout_margin="20dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/search" + android:textColor="@color/white" + app:drawableLeftCompat="@drawable/search_icon" + app:tint="@color/white" /> + --> + + android:layout_gravity="center" + android:gravity="center" + android:orientation="horizontal" + android:padding="20dp"> + app:tint="?attr/white" /> + + + app:tint="?attr/white" /> @@ -522,15 +535,15 @@ + android:orientation="horizontal" + app:singleSelection="true"> diff --git a/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt b/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt index 34bd9f18..846dfdb5 100644 --- a/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt +++ b/app/src/test/java/com/lagradost/cloudstream3/ProviderTests.kt @@ -162,7 +162,7 @@ class ProviderTests { // @Test // fun providerCorrectHomepage() { // runBlocking { -// getAllProviders().apmap { api -> +// getAllProviders().amap { api -> // if (api.hasMainPage) { // try { // val homepage = api.getMainPage() @@ -197,7 +197,7 @@ class ProviderTests { // suspend fun providerCorrect() { // val invalidProvider = ArrayList>() // val providers = getAllProviders() -// providers.apmap { api -> +// providers.amap { api -> // try { // println("Trying $api") // if (testSingleProviderApi(api)) { From 7272dc67b74c0e36177222a15c3cbd20ea34bd5b Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Mon, 31 Oct 2022 12:33:09 +0100 Subject: [PATCH 145/888] fix chip tint and make adding repos by url easier --- .../cloudstream3/plugins/RepositoryManager.kt | 22 +++++++++++ .../settings/extensions/ExtensionsFragment.kt | 38 +++++++------------ app/src/main/res/values/styles.xml | 13 ++++--- 3 files changed, 43 insertions(+), 30 deletions(-) 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 2564abd0..542e2136 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -70,6 +70,28 @@ object RepositoryManager { getKey("PREBUILT_REPOSITORIES") ?: emptyArray() } + suspend fun parseRepoUrl(url: String): String? { + val fixedUrl = url.trim() + return if (fixedUrl.contains("^https?://".toRegex())) { + fixedUrl + } else if (fixedUrl.contains("^(cloudstreamrepo://)|(https://cs\\.repo/)".toRegex())) { + fixedUrl.replace("^(cloudstreamrepo://)|(https://cs\\.repo/)".toRegex(), "").let { + return@let if (!it.contains("^https?://".toRegex())) + "https://${it}" + else fixedUrl + } + } 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 + } + } + } + } else null + } + suspend fun parseRepository(url: String): Repository? { return suspendSafeApiCall { // Take manifestVersion and such into account later diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 418519e2..49f40879 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -33,8 +33,6 @@ import com.lagradost.cloudstream3.widget.LinearRecycleViewLayoutManager import kotlinx.android.synthetic.main.add_repo_input.* import kotlinx.android.synthetic.main.fragment_extensions.* -const val PUBLIC_REPOSITORIES_LIST = "https://recloudstream.github.io/repos/" - class ExtensionsFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, @@ -186,15 +184,7 @@ class ExtensionsFragment : Fragment() { (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager?)?.primaryClip?.getItemAt( 0 )?.text?.toString()?.let { copy -> - // Fix our own repo links and only paste the text if it's a link. - if (copy.startsWith("http")) { - val fixedUrl = if (copy.startsWith("https://cs.repo")) { - "https://" + copy.substringAfter("?") - } else { - copy - } - dialog.repo_url_input?.setText(fixedUrl) - } + dialog.repo_url_input?.setText(copy) } // dialog.list_repositories?.setOnClickListener { @@ -206,21 +196,21 @@ class ExtensionsFragment : Fragment() { // dialog.text2?.text = provider.name dialog.apply_btt?.setOnClickListener secondListener@{ val name = dialog.repo_name_input?.text?.toString() - val url = dialog.repo_url_input?.text?.toString() - if (url.isNullOrBlank()) { - showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT) - return@secondListener - } - ioSafe { - val fixedName = if (!name.isNullOrBlank()) name - else RepositoryManager.parseRepository(url)?.name ?: "No name" + val url = dialog.repo_url_input?.text?.toString() + ?.let { it1 -> RepositoryManager.parseRepoUrl(it1) } + if (url.isNullOrBlank()) { + showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT) + } else { + val fixedName = if (!name.isNullOrBlank()) name + else RepositoryManager.parseRepository(url)?.name ?: "No name" - val newRepo = RepositoryData(fixedName, url) - RepositoryManager.addRepository(newRepo) - extensionViewModel.loadStats() - extensionViewModel.loadRepositories() - this@ExtensionsFragment.activity?.downloadAllPluginsDialog(url, fixedName) + val newRepo = RepositoryData(fixedName, url) + RepositoryManager.addRepository(newRepo) + extensionViewModel.loadStats() + extensionViewModel.loadRepositories() + this@ExtensionsFragment.activity?.downloadAllPluginsDialog(url, fixedName) + } } dialog.dismissSafe(activity) } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 70ac7516..f0bb2214 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -81,6 +81,7 @@ @color/transparent @color/chip_color_text @color/chip_color_text + @color/chip_color_text From c09b6881e5ac00fc7b2b9a4b096cd96e6076bde6 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Wed, 2 Nov 2022 22:56:03 +0100 Subject: [PATCH 159/888] bump --- app/build.gradle.kts | 4 ++-- .../lagradost/cloudstream3/ui/home/HomeFragment.kt | 12 ++++++++++-- app/src/main/res/layout/fragment_home.xml | 6 +++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 99eec423..a2c31d0b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,8 +47,8 @@ android { minSdk = 21 targetSdk = 30 - versionCode = 52 - versionName = "3.1.6" + versionCode = 53 + versionName = "3.2.0" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index a73fc873..ac6daa53 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -74,8 +74,10 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectSt import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView import com.lagradost.cloudstream3.utils.UIHelper.getResourceColor import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount +import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.setImageBlur @@ -548,7 +550,13 @@ class HomeFragment : Fragment() { observe(homeViewModel.preview) { preview -> // Always reset the padding, otherwise the will move lower and lower - home_watch_holder?.setPadding(0, 0, 0, 0) + // home_fix_padding?.setPadding(0, 0, 0, 0) + home_fix_padding?.let { v -> + val params = v.layoutParams + params.height = 0 + v.layoutParams = params + } + when (preview) { is Resource.Success -> { home_preview?.isVisible = true @@ -569,7 +577,7 @@ class HomeFragment : Fragment() { false ) home_preview?.isVisible = false - context?.fixPaddingStatusbar(home_watch_holder) + context?.fixPaddingStatusbarView(home_fix_padding) } } } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 4eb7b9ee..e6270a77 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -405,7 +405,11 @@ - + + + android:id="@+id/player_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/black" + app:auto_show="true" + app:backgroundTint="@android:color/black" + app:controller_layout_id="@layout/player_custom_layout" + app:hide_on_touch="false" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:show_timeout="0" /> + android:id="@+id/player_loading_overlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/black" + android:backgroundTint="@android:color/black" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:text="@string/skip_loading" + android:textAllCaps="false" + android:textColor="?attr/textColor" + android:visibility="gone" + app:cornerRadius="4dp" + app:icon="@drawable/ic_baseline_skip_next_24" + app:iconTint="?attr/textColor" + app:rippleColor="?attr/colorPrimary" + tools:visibility="visible" /> + android:id="@+id/main_load" + android:layout_width="50dp" + android:layout_height="50dp" + android:layout_gravity="center" /> + android:id="@+id/video_go_back_holder_holder" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="5dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_width="30dp" + android:layout_height="30dp" + android:layout_gravity="center" + android:contentDescription="@string/go_back_img_des" + android:src="@drawable/ic_baseline_arrow_back_24" + app:tint="@android:color/white" /> + android:id="@+id/player_loading_go_back" + android:layout_width="70dp" + android:layout_height="70dp" + android:layout_gravity="center" + android:background="@drawable/video_tap_button_always_white" + android:clickable="true" + android:contentDescription="@string/go_back_img_des" + android:focusable="true" /> + + + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="start" + android:textColor="@color/white" + android:textStyle="bold" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="78% at 18kb/s" /> - - + android:id="@+id/video_torrent_seeders" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="0dp" + android:gravity="start" + android:textColor="@color/white" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@+id/player_video_title" + tools:text="17 seeders" /> \ No newline at end of file diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 9bbded4e..2cdcbf22 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -318,6 +318,25 @@ + + #66000000 #C0121212 + #4D121212 #121212 #66B5B5B5 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5665ea5c..144d2477 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -638,4 +638,13 @@ Browser App not found All Languages + + Skip %s + Opening + Ending + Recap + Mixed ending + Mixed opening + Credits + Intro From 9e67e856a0d12d326bcab23edc5925c881f9a496 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sat, 5 Nov 2022 00:40:31 +0100 Subject: [PATCH 164/888] small fix for multi request --- .../com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e1f1d99d..f4d2cd2f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -166,7 +166,8 @@ class GeneratorPlayer : FullScreenPlayer() { isActive = true setPlayerDimen(null) setTitle() - hasRequestedStamps = false + if (!sameEpisode) + hasRequestedStamps = false loadExtractorJob(link.first) // load player @@ -186,7 +187,8 @@ class GeneratorPlayer : FullScreenPlayer() { ), ) } - player.addTimeStamps(listOf()) // clear stamps + if (!sameEpisode) + player.addTimeStamps(listOf()) // clear stamps } private fun sortLinks(useQualitySettings: Boolean = true): List> { From 60a2f7c1c51456d025f92c191b51cf38e411ae21 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sat, 5 Nov 2022 01:27:35 +0100 Subject: [PATCH 165/888] clear history --- .../cloudstream3/ui/search/SearchFragment.kt | 39 ++++++++++++++++++- app/src/main/res/drawable/delete_all.xml | 9 +++++ app/src/main/res/layout/fragment_search.xml | 19 +++++++++ app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/delete_all.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index bcb36f7e..e6e290c1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.search +import android.content.DialogInterface import android.content.res.Configuration import android.os.Bundle import android.view.LayoutInflater @@ -10,6 +11,7 @@ import android.widget.AbsListView import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.ListView +import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment @@ -28,6 +30,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.getApiSettings import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.mvvm.Resource @@ -343,7 +346,7 @@ class SearchFragment : Fragment() { searchViewModel.updateHistory() } - search_history_recycler?.isVisible = showHistory + search_history_holder?.isVisible = showHistory search_master_recycler?.isVisible = !showHistory && isAdvancedSearch search_autofit_results?.isVisible = !showHistory && !isAdvancedSearch @@ -352,7 +355,41 @@ class SearchFragment : Fragment() { } }) + search_clear_call_history?.setOnClickListener { + activity?.let { ctx -> + val builder: AlertDialog.Builder = AlertDialog.Builder(ctx) + val dialogClickListener = + DialogInterface.OnClickListener { _, which -> + when (which) { + DialogInterface.BUTTON_POSITIVE -> { + removeKeys(SEARCH_HISTORY_KEY) + searchViewModel.updateHistory() + } + DialogInterface.BUTTON_NEGATIVE -> { + } + } + } + + try { + builder.setTitle(R.string.clear_history).setMessage( + ctx.getString(R.string.delete_message).format( + ctx.getString(R.string.history) + ) + ) + .setPositiveButton(R.string.sort_clear, dialogClickListener) + .setNegativeButton(R.string.cancel, dialogClickListener) + .show() + } catch (e: Exception) { + logError(e) + // ye you somehow fucked up formatting did you? + } + } + + + } + observe(searchViewModel.currentHistory) { list -> + search_clear_call_history?.isVisible = list.isNotEmpty() (search_history_recycler.adapter as? SearchHistoryAdaptor?)?.updateList(list) } diff --git a/app/src/main/res/drawable/delete_all.xml b/app/src/main/res/drawable/delete_all.xml new file mode 100644 index 00000000..a5e8775c --- /dev/null +++ b/app/src/main/res/drawable/delete_all.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 083cd64e..6df5837f 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -112,6 +112,11 @@ android:nextFocusLeft="@id/nav_rail_view" android:visibility="gone" tools:listitem="@layout/homepage_parent" /> + + + + + \ 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 144d2477..e3ef9f6b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -647,4 +647,7 @@ Mixed opening Credits Intro + + Clear history + History From 60bcbf0060750f661f5ae53f197b29b71eae365c Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 5 Nov 2022 19:54:04 +0100 Subject: [PATCH 166/888] A lil cache fixing & search fixes --- app/build.gradle.kts | 6 +++--- .../main/java/com/lagradost/cloudstream3/CommonActivity.kt | 2 ++ .../com/lagradost/cloudstream3/ui/search/SearchFragment.kt | 6 +++--- .../ui/settings/extensions/ExtensionsFragment.kt | 4 +++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4a1fcada..f72eb321 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,8 +47,8 @@ android { minSdk = 21 targetSdk = 30 - versionCode = 54 - versionName = "3.2.2" + versionCode = 55 + versionName = "3.2.3" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") @@ -190,7 +190,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.3.4") + implementation("com.github.Blatzar:NiceHttp:0.3.5") // Util to skip the URI file fuckery 🙏 implementation("com.github.tachiyomiorg:unifile:17bec43") diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index af04a1a2..342dc6f7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -61,6 +61,7 @@ object CommonActivity { } } + @MainThread fun showToast(act: Activity?, @StringRes message: Int, duration: Int) { if (act == null) return showToast(act, act.getString(message), duration) @@ -69,6 +70,7 @@ object CommonActivity { const val TAG = "COMPACT" /** duration is Toast.LENGTH_SHORT if null*/ + @MainThread fun showToast(act: Activity?, message: String?, duration: Int? = null) { if (act == null || message == null) { Log.w(TAG, "invalid showToast act = $act message = $message") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index e6e290c1..4da88af7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -131,9 +131,9 @@ class SearchFragment : Fragment() { context?.let { ctx -> val default = enumValues().sorted().filter { it != TvType.NSFW } .map { it.ordinal.toString() }.toSet() - val preferredTypes = PreferenceManager.getDefaultSharedPreferences(ctx) - .getStringSet(this.getString(R.string.prefer_media_type_key), default) - ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } ?: default + val preferredTypes = (PreferenceManager.getDefaultSharedPreferences(ctx) + .getStringSet(this.getString(R.string.prefer_media_type_key), default)?.ifEmpty { default } ?: default) + .mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } val settings = ctx.getApiSettings() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 49f40879..fbf10499 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -200,7 +200,9 @@ class ExtensionsFragment : Fragment() { val url = dialog.repo_url_input?.text?.toString() ?.let { it1 -> RepositoryManager.parseRepoUrl(it1) } if (url.isNullOrBlank()) { - showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT) + main { + showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT) + } } else { val fixedName = if (!name.isNullOrBlank()) name else RepositoryManager.parseRepository(url)?.name ?: "No name" From 4fb65e724290a5a130f10c665e45acf0c8f20a99 Mon Sep 17 00:00:00 2001 From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com> Date: Sun, 6 Nov 2022 04:55:41 +0800 Subject: [PATCH 167/888] Update Simplified Chinese Translation (#198) --- app/src/main/res/values-zh/strings.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 8f436fe9..a9cc91b7 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -577,4 +577,17 @@ 投屏 浏览器 未找到应用 + 所有语言 + + 跳过 %s + 片头 + 片尾 + 前情回顾 + 混合片尾 + 混合片头 + 致谢名单 + 介绍 + + 清除历史记录 + 历史记录 From 8fa00f4ca902683430d1f12f128edb645a09e78d Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Sat, 5 Nov 2022 22:15:34 +0100 Subject: [PATCH 168/888] added setting for skip op and changed key for player seek amount --- .../cloudstream3/ui/player/GeneratorPlayer.kt | 11 +- app/src/main/res/values/strings.xml | 5 +- app/src/main/res/xml/settings_player.xml | 190 +++++++++--------- 3 files changed, 112 insertions(+), 94 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index f4d2cd2f..95a9393f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -187,6 +187,7 @@ class GeneratorPlayer : FullScreenPlayer() { ), ) } + if (!sameEpisode) player.addTimeStamps(listOf()) // clear stamps } @@ -874,7 +875,15 @@ class GeneratorPlayer : FullScreenPlayer() { if (duration <= 0L) return // idk how you achieved this, but div by zero crash if (!hasRequestedStamps) { hasRequestedStamps = true - viewModel.loadStamps(duration) + val fetchStamps = context?.let { ctx -> + val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) + settingsManager.getBoolean( + ctx.getString(R.string.enable_skip_op_from_database), + true + ) + } ?: true + if (fetchStamps) + viewModel.loadStamps(duration) } viewModel.getId()?.let { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3ef9f6b..e2ebf0ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,7 +28,7 @@ pip_enabled_key double_tap_enabled_key double_tap_pause_enabled_key - double_tap_seek_time_key + double_tap_seek_time_key2 swipe_vertical_enabled_key autoplay_next_key display_sub_key @@ -57,6 +57,7 @@ filter_sub_lang_key pref_filter_search_quality_key enable_nsfw_on_providers_key + enable_skip_op_from_database %d %s | %s @@ -650,4 +651,6 @@ Clear history History + Show skip popups for opening/ending + diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml index 6946a5c9..0be6313f 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -1,126 +1,132 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:icon="@drawable/ic_outline_subtitles_24" + android:key="@string/subtitle_settings_key" + android:title="@string/player_subtitles_settings" + app:summary="@string/player_subtitles_settings_des" /> + android:icon="@drawable/ic_outline_subtitles_24" + android:key="@string/subtitle_settings_chromecast_key" + android:title="@string/chromecast_subtitles_settings" + app:summary="@string/chromecast_subtitles_settings_des" /> + android:icon="@drawable/ic_baseline_hd_24" + android:key="@string/quality_pref_key" + android:title="@string/watch_quality_pref" /> + android:icon="@drawable/netflix_play" + android:key="@string/player_pref_key" + android:title="@string/player_pref" /> + android:icon="@drawable/ic_baseline_text_format_24" + android:key="@string/prefer_limit_title_key" + android:title="@string/limit_title" /> + android:icon="@drawable/ic_baseline_text_format_24" + android:key="@string/prefer_limit_title_rez_key" + android:title="@string/limit_title_rez" /> + android:icon="@drawable/ic_baseline_picture_in_picture_alt_24" + android:summary="@string/picture_in_picture_des" + android:title="@string/picture_in_picture" + app:defaultValue="true" + app:key="@string/pip_enabled_key" /> + android:icon="@drawable/ic_baseline_aspect_ratio_24" + android:summary="@string/player_size_settings_des" + android:title="@string/player_size_settings" + app:defaultValue="true" + app:key="@string/player_resize_enabled_key" /> + android:icon="@drawable/ic_baseline_speed_24" + android:summary="@string/eigengraumode_settings_des" + android:title="@string/eigengraumode_settings" + app:defaultValue="false" + app:key="@string/playback_speed_enabled_key" /> + android:icon="@drawable/ic_baseline_ondemand_video_24" + android:summary="@string/swipe_to_seek_settings_des" + android:title="@string/swipe_to_seek_settings" + app:defaultValue="true" + app:key="@string/swipe_enabled_key" /> - + android:icon="@drawable/ic_baseline_ondemand_video_24" + android:summary="@string/swipe_to_change_settings_des" + android:title="@string/swipe_to_change_settings" + app:defaultValue="true" + app:key="@string/swipe_vertical_enabled_key" /> + android:icon="@drawable/ic_baseline_skip_next_24" + android:summary="@string/autoplay_next_settings_des" + android:title="@string/autoplay_next_settings" + app:defaultValue="true" + app:key="@string/autoplay_next_key" /> + android:icon="@drawable/ic_baseline_skip_next_24" + android:title="@string/video_skip_op" + app:defaultValue="true" + android:summary="@string/enable_skip_op_from_database_des" + app:key="@string/enable_skip_op_from_database" /> + + + android:defaultValue="10" + android:max="60" + android:title="@string/double_tap_to_seek_amount_settings" + app:adjustable="true" + app:defaultValue="10" + app:icon="@drawable/go_forward_30" + app:key="@string/double_tap_seek_time_key" + app:min="5" + app:seekBarIncrement="5" + app:showSeekBarValue="true" /> + android:icon="@drawable/baseline_sync_24" + android:summary="@string/episode_sync_settings_des" + android:title="@string/episode_sync_settings" + app:defaultValue="true" + app:key="@string/episode_sync_enabled_key" /> + android:icon="@drawable/ic_baseline_storage_24" + android:key="@string/video_buffer_disk_key" + android:summary="@string/video_disk_description" + android:title="@string/video_buffer_disk_settings" /> + android:icon="@drawable/ic_baseline_storage_24" + android:key="@string/video_buffer_size_key" + android:summary="@string/video_ram_description" + android:title="@string/video_buffer_size_settings" /> + android:icon="@drawable/ic_baseline_storage_24" + android:key="@string/video_buffer_length_key" + android:summary="@string/video_ram_description" + android:title="@string/video_buffer_length_settings" /> + android:icon="@drawable/ic_baseline_delete_outline_24" + android:key="@string/video_buffer_clear_key" + android:title="@string/video_buffer_clear_settings" /> \ No newline at end of file From aef6f93efe212837e0009035c082c6ea3f2bcb08 Mon Sep 17 00:00:00 2001 From: darkdemon Date: Sun, 6 Nov 2022 16:43:45 +0530 Subject: [PATCH 169/888] - Open all extractor classes - Add StreamTape clones[Streamtape.net, ShaveTape.cash] - optimize imports for AstreamHub, GMplayer --- .../lagradost/cloudstream3/extractors/AStreamHub.kt | 7 ++++--- .../lagradost/cloudstream3/extractors/Acefile.kt | 2 +- .../lagradost/cloudstream3/extractors/AsianLoad.kt | 2 +- .../lagradost/cloudstream3/extractors/Blogger.kt | 2 +- .../lagradost/cloudstream3/extractors/BullStream.kt | 2 +- .../lagradost/cloudstream3/extractors/Embedgram.kt | 2 +- .../lagradost/cloudstream3/extractors/Fastream.kt | 2 +- .../lagradost/cloudstream3/extractors/Filesim.kt | 2 +- .../lagradost/cloudstream3/extractors/GMPlayer.kt | 3 +-- .../lagradost/cloudstream3/extractors/Linkbox.kt | 2 +- .../com/lagradost/cloudstream3/extractors/Mcloud.kt | 7 ------- .../lagradost/cloudstream3/extractors/Mp4Upload.kt | 2 +- .../cloudstream3/extractors/MultiQuality.kt | 2 +- .../com/lagradost/cloudstream3/extractors/Mvidoo.kt | 2 +- .../lagradost/cloudstream3/extractors/Pelisplus.kt | 2 +- .../lagradost/cloudstream3/extractors/PlayLtXyz.kt | 2 +- .../lagradost/cloudstream3/extractors/Solidfiles.kt | 2 +- .../lagradost/cloudstream3/extractors/StreamTape.kt | 13 +++++++++++-- .../lagradost/cloudstream3/extractors/Streamhub.kt | 2 +- .../lagradost/cloudstream3/extractors/Streamplay.kt | 2 +- .../lagradost/cloudstream3/extractors/Supervideo.kt | 11 ++++++----- .../cloudstream3/extractors/UpstreamExtractor.kt | 2 +- .../lagradost/cloudstream3/extractors/VideoVard.kt | 2 +- .../lagradost/cloudstream3/extractors/WcoStream.kt | 6 ++++++ .../lagradost/cloudstream3/extractors/YourUpload.kt | 2 +- .../lagradost/cloudstream3/extractors/Zorofile.kt | 2 +- .../lagradost/cloudstream3/utils/ExtractorApi.kt | 2 ++ 27 files changed, 50 insertions(+), 39 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt index 18602664..b0051ba7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt @@ -2,10 +2,11 @@ package com.lagradost.cloudstream3.extractors import android.util.Log import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.base64Decode -import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities -class AStreamHub : ExtractorApi() { +open class AStreamHub : ExtractorApi() { override val name = "AStreamHub" override val mainUrl = "https://astreamhub.com" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt index fe46791b..18198f44 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt @@ -4,7 +4,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.base64Decode import com.lagradost.cloudstream3.utils.* -class Acefile : ExtractorApi() { +open class Acefile : ExtractorApi() { override val name = "Acefile" override val mainUrl = "https://acefile.co" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt index cf16f200..7a62fb52 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.M3u8Helper import com.lagradost.cloudstream3.utils.getQualityFromName import java.net.URI -class AsianLoad : ExtractorApi() { +open class AsianLoad : ExtractorApi() { override var name = "AsianLoad" override var mainUrl = "https://asianembed.io" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt index cae77322..44e700b1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt @@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -class Blogger : ExtractorApi() { +open class Blogger : ExtractorApi() { override val name = "Blogger" override val mainUrl = "https://www.blogger.com" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt index e5368bc3..71fa7066 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt @@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper -class BullStream : ExtractorApi() { +open class BullStream : ExtractorApi() { override val name = "BullStream" override val mainUrl = "https://bullstream.xyz" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt index 35569663..45a06dcc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName import com.lagradost.cloudstream3.utils.httpsify -class Embedgram : ExtractorApi() { +open class Embedgram : ExtractorApi() { override val name = "Embedgram" override val mainUrl = "https://embedgram.com" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt index 0d5a5c78..f813d7ea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 -class Fastream: ExtractorApi() { +open class Fastream: ExtractorApi() { override var mainUrl = "https://fastream.to" override var name = "Fastream" override val requiresReferer = false 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 5c8af1c5..8e3dc730 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -class Filesim : ExtractorApi() { +open class Filesim : ExtractorApi() { override val name = "Filesim" override val mainUrl = "https://files.im" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt index af02ee8a..52c45096 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt @@ -3,10 +3,9 @@ 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.M3u8Helper import com.lagradost.cloudstream3.utils.Qualities -class GMPlayer : ExtractorApi() { +open class GMPlayer : ExtractorApi() { override val name = "GM Player" override val mainUrl = "https://gmplayer.xyz" override val requiresReferer = true 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 52fc5532..73734e2a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName -class Linkbox : ExtractorApi() { +open class Linkbox : ExtractorApi() { override val name = "Linkbox" override val mainUrl = "https://www.linkbox.to" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt deleted file mode 100644 index 29d98557..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -open class Mcloud : WcoStream() { - override var name = "Mcloud" - override var mainUrl = "https://mcloud.to" - override val requiresReferer = true -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt index 68a4a103..93a280ed 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getAndUnpack -class Mp4Upload : ExtractorApi() { +open class Mp4Upload : ExtractorApi() { override var name = "Mp4Upload" override var mainUrl = "https://www.mp4upload.com" private val srcRegex = Regex("""player\.src\("(.*?)"""") diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt index 0c0b5c68..44657196 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getQualityFromName import java.net.URI -class MultiQuality : ExtractorApi() { +open class MultiQuality : ExtractorApi() { override var name = "MultiQuality" override var mainUrl = "https://gogo-play.net" private val sourceRegex = Regex("""file:\s*['"](.*?)['"],label:\s*['"](.*?)['"]""") diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt index c00df942..9e5f5e74 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities -class Mvidoo : ExtractorApi() { +open class Mvidoo : ExtractorApi() { override val name = "Mvidoo" override val mainUrl = "https://mvidoo.com" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt index de469b22..45ec4c2f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt @@ -14,7 +14,7 @@ import org.jsoup.Jsoup * overrideMainUrl is necessary for for other vidstream clones like vidembed.cc * If they diverge it'd be better to make them separate. * */ -class Pelisplus(val mainUrl: String) { +open class Pelisplus(val mainUrl: String) { val name: String = "Vidstream" private fun getExtractorUrl(id: String): String { diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt index 9a031556..2b286abb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -class PlayLtXyz: ExtractorApi() { +open class PlayLtXyz: ExtractorApi() { override val name: String = "PlayLt" override val mainUrl: String = "https://play.playlt.xyz" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt index 849f5fc8..cc34781c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt @@ -8,7 +8,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName -class Solidfiles : ExtractorApi() { +open class Solidfiles : ExtractorApi() { override val name = "Solidfiles" override val mainUrl = "https://www.solidfiles.com" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt index af436ff3..ece8dc4b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt @@ -5,7 +5,15 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities -class StreamTape : ExtractorApi() { +class StreamTapeNet : StreamTape() { + override var mainUrl = "https://streamtape.net" +} + +class ShaveTape : StreamTape(){ + override var mainUrl = "https://shavetape.cash" +} + +open class StreamTape : ExtractorApi() { override var name = "StreamTape" override var mainUrl = "https://streamtape.com" override val requiresReferer = false @@ -16,7 +24,8 @@ class StreamTape : ExtractorApi() { override suspend fun getUrl(url: String, referer: String?): List? { with(app.get(url)) { linkRegex.find(this.text)?.let { - val extractedUrl = "https:${it.groups[1]!!.value + it.groups[2]!!.value.substring(3,)}" + val extractedUrl = + "https:${it.groups[1]!!.value + it.groups[2]!!.value.substring(3)}" return listOf( ExtractorLink( name, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt index 2765ae17..c7689c58 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.JsUnpacker import com.lagradost.cloudstream3.utils.Qualities import java.net.URI -class Streamhub : ExtractorApi() { +open class Streamhub : ExtractorApi() { override var mainUrl = "https://streamhub.to" override var name = "Streamhub" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt index 3f5e5bd6..e6bbfeba 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt @@ -9,7 +9,7 @@ import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import java.net.URI -class Streamplay : ExtractorApi() { +open class Streamplay : ExtractorApi() { override val name = "Streamplay" override val mainUrl = "https://streamplay.to" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt index 955345aa..dd49d994 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt @@ -11,7 +11,7 @@ data class Files( @JsonProperty("label") val label: String? = null, ) - open class Supervideo : ExtractorApi() { +open class Supervideo : ExtractorApi() { override var name = "Supervideo" override var mainUrl = "https://supervideo.tv" override val requiresReferer = false @@ -20,10 +20,13 @@ data class Files( val response = app.get(url).text val jstounpack = Regex("eval((.|\\n)*?)").find(response)?.groups?.get(1)?.value val unpacjed = JsUnpacker(jstounpack).unpack() - val extractedUrl = unpacjed?.let { Regex("""sources:((.|\n)*?)image""").find(it) }?.groups?.get(1)?.value.toString().replace("file",""""file"""").replace("label",""""label"""").substringBeforeLast(",") + val extractedUrl = + unpacjed?.let { Regex("""sources:((.|\n)*?)image""").find(it) }?.groups?.get(1)?.value.toString() + .replace("file", """"file"""").replace("label", """"label"""") + .substringBeforeLast(",") val parsedlinks = parseJson>(extractedUrl) parsedlinks.forEach { data -> - if (data.label.isNullOrBlank()){ // mp4 links (with labels) are slow. Use only m3u8 link. + if (data.label.isNullOrBlank()) { // mp4 links (with labels) are slow. Use only m3u8 link. M3u8Helper.generateM3u8( name, data.id, @@ -34,8 +37,6 @@ data class Files( } } } - - return extractedLinksList } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt index 1eb384c4..09e47d03 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt @@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper -class UpstreamExtractor : ExtractorApi() { +open class UpstreamExtractor : ExtractorApi() { override val name: String = "Upstream" override val mainUrl: String = "https://upstream.to" override val requiresReferer = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt index 41e77967..30a1d8fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt @@ -11,7 +11,7 @@ class VideovardSX : WcoStream() { override var mainUrl = "https://videovard.sx" } -class VideoVard : ExtractorApi() { +open class VideoVard : ExtractorApi() { override var name = "Videovard" // Cause works for animekisa and wco override var mainUrl = "https://videovard.to" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt index d99485ea..6cc486cd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt @@ -53,6 +53,12 @@ class VizcloudSite : WcoStream() { override var mainUrl = "https://vizcloud.site" } +class Mcloud : WcoStream() { + override var name = "Mcloud" + override var mainUrl = "https://mcloud.to" + override val requiresReferer = true +} + open class WcoStream : ExtractorApi() { override var name = "VidStream" // Cause works for animekisa and wco override var mainUrl = "https://vidstream.pro" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt index 3c564f67..c7aa989d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName -class YourUpload: ExtractorApi() { +open class YourUpload: ExtractorApi() { override val name = "Yourupload" override val mainUrl = "https://www.yourupload.com" override val requiresReferer = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt index 84785b6c..43c4eefb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt @@ -10,7 +10,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper -class Zorofile : ExtractorApi() { +open class Zorofile : ExtractorApi() { override val name = "Zorofile" override val mainUrl = "https://zorofile.com" override val requiresReferer = true 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 1a1afb68..24708e99 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -205,6 +205,8 @@ val extractorApis: MutableList = arrayListOf( VideovardSX(), Mp4Upload(), StreamTape(), + StreamTapeNet(), + ShaveTape(), //mixdrop extractors MixDropBz(), From 1226426389ac327514f3189826b8712516dd9270 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 6 Nov 2022 20:16:48 +0100 Subject: [PATCH 170/888] More crash fixes --- .../lagradost/cloudstream3/CommonActivity.kt | 3 ++- .../com/lagradost/cloudstream3/MainAPI.kt | 11 +++++++++-- .../ui/settings/SettingsUpdates.kt | 19 +++++++++++++------ app/src/main/res/values/strings.xml | 2 +- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 342dc6f7..47a195d1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -61,8 +61,9 @@ object CommonActivity { } } + /** duration is Toast.LENGTH_SHORT if null*/ @MainThread - fun showToast(act: Activity?, @StringRes message: Int, duration: Int) { + fun showToast(act: Activity?, @StringRes message: Int, duration: Int? = null) { if (act == null) return showToast(act, act.getString(message), duration) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 4b271192..5c9f3071 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -81,7 +81,8 @@ object APIHolder { synchronized(allProviders) { initMap() return apiMap?.get(apiName)?.let { apis.getOrNull(it) } - ?: allProviders.firstOrNull { it.name == apiName } + // Leave the ?. null check, it can crash regardless + ?: allProviders.firstOrNull { it?.name == apiName } } } @@ -244,11 +245,17 @@ object APIHolder { fun Context.filterProviderByPreferredMedia(hasHomePageIsRequired: Boolean = true): List { // We are getting the weirdest crash ever done: // java.lang.ClassCastException: com.lagradost.cloudstream3.TvType cannot be cast to com.lagradost.cloudstream3.TvType - // enumValues() might be the cause, hence I am trying TvType.values() + // Trying fixing using classloader fuckery + val oldLoader = Thread.currentThread().contextClassLoader + Thread.currentThread().contextClassLoader = TvType::class.java.classLoader + val default = TvType.values() .sorted() .filter { it != TvType.NSFW } .map { it.ordinal } + + Thread.currentThread().contextClassLoader = oldLoader + val defaultSet = default.map { it.toString() }.toSet() val currentPrefMedia = try { PreferenceManager.getDefaultSharedPreferences(this) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 6b19042a..78f6d628 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -4,12 +4,14 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.os.Bundle +import android.os.TransactionTooLargeException import android.view.View import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceFragmentCompat import com.lagradost.cloudstream3.CommonActivity +import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref @@ -81,12 +83,17 @@ class SettingsUpdates : PreferenceFragmentCompat() { dialog.text1?.text = text dialog.copy_btt?.setOnClickListener { - val serviceClipboard = - (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?) - ?: return@setOnClickListener - val clip = ClipData.newPlainText("logcat", text) - serviceClipboard.setPrimaryClip(clip) - dialog.dismissSafe(activity) + // Can crash on too much text + try { + val serviceClipboard = + (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?) + ?: return@setOnClickListener + val clip = ClipData.newPlainText("logcat", text) + serviceClipboard.setPrimaryClip(clip) + dialog.dismissSafe(activity) + } catch (e: TransactionTooLargeException) { + showToast(activity, R.string.clipboard_too_large) + } } dialog.clear_btt?.setOnClickListener { Runtime.getRuntime().exec("logcat -c") diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2ebf0ab..9381372c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -652,5 +652,5 @@ Clear history History Show skip popups for opening/ending - + Too much text. Unable to save to clipboard. From e95d117ebcb5f6821d53be9f4cad6bd997be23f1 Mon Sep 17 00:00:00 2001 From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com> Date: Mon, 7 Nov 2022 18:49:53 +0800 Subject: [PATCH 171/888] Update Simplified Chinese Translation (#199) --- app/src/main/res/values-zh/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index a9cc91b7..19d9bd43 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -590,4 +590,6 @@ 清除历史记录 历史记录 + 显示跳过片头/片尾弹窗 + 文本过多,无法保存到剪贴板。 From 2e7823034bc99768e119abd44131e55ba1240cc5 Mon Sep 17 00:00:00 2001 From: Davide <49226282+pizidavi@users.noreply.github.com> Date: Fri, 11 Nov 2022 16:21:56 +0100 Subject: [PATCH 172/888] Updated Italian translation (#206) --- app/src/main/res/values-it/strings.xml | 61 +++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 86206213..fa1653c6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -153,6 +153,10 @@ Scorri a sinistra o a destra per controllare il tempo del video Scorri per cambiare le impostazioni Passa il dito sul lato sinistro o destro per cambiare la luminosità o il volume + + Riproduci automaticamente l\'episodio successivo + Avvia l\'episodio successivo al termine di quello in corso + Doppio tocco per andare avanti/indietro Doppio tocco per mettere in pausa Tocca due volte il lato destro o sinistro dello schermo per mandare avanti o indietro il video @@ -176,7 +180,7 @@ Cerca Accounts Aggiornamenti e Backup - + Info Ricerca avanzata Dividi i risultati della ricerca per provider @@ -185,7 +189,9 @@ Mostra tag [filler] per anime Mostra trailer Mostra poster da Kitsu + Nascondi la qualità video selezionata dai risultati di ricerca + Aggiorna automaticamente i plugin Mostra gli aggiornamenti dell\'app Cerca automaticamente nuovi aggiornamenti all\'avvio Aggiorna alle prerelease @@ -207,9 +213,12 @@ Spiacente, l\'applicazione è andata in crash. Una segnalazione anonima di bug sarà inviata agli sviluppatori Stagione + %s %d%s Nessuna stagione Episodio Episodi + %d-%d + %d %s S E Nessun episodio trovato @@ -250,6 +259,8 @@ Documentari Drama Asiatici Livestreams + NSFW + Altri Film @@ -261,6 +272,8 @@ Documentario Drama Asiatico Livestream + NSFW + Altro Source error Remote error @@ -332,7 +345,9 @@ Lingua provider Layout app Media preferito + Abilita NSFW sui provider supportati Encoding Sottotitoli + Provider Interfaccia utente Auto @@ -437,11 +452,11 @@ Errore - + Filtra in base alla lingua preferita + Extra Trailer Link allo stream - - + Referer Prossimo Guarda video in queste lingue @@ -471,6 +486,7 @@ Scaricato: %d Disabilitato: %d Non scaricato: %d + Aggiornati %d plugin Aggiungi una repository per installare l\'estensione dei siti Vedi le repository della community Lista pubblica @@ -484,10 +500,41 @@ Applica al riavvio Safe Mode abilitata - Si è verificato un crash irrecuperabile e abbiamo disabilitato automaticamente tutte le estensioni, in modo che possiate trovare e rimuovere l\'estensione che causa il problema. + Si è verificato un crash irrecuperabile. Tutte le estensioni sono state disabilitate, in modo da trovare e rimuovere l\'estensione che causa il problema. Vedi informazioni del crash + + Voto: %s + Descrizione + Versione + Stato + Dimensione + Autori + Supportati + Lingua + Prima installa l\'estensione + HLS Playlist - + Video player preferito + Player interno + VLC + MPV + Web Video Cast + Browser + App non trovata + Tutte le lingue + + Salta %s + + + Riassunto + + + Crediti + + + Cancella cronologia + Cronologia + Mostra popup per salta sigla iniziale/finale + Testo troppo lungo. Impossibile salvare negli appunti. From 639de891c6009e5b04650907cd0fccc268fbda8f Mon Sep 17 00:00:00 2001 From: SANCTI-afk <63229113+SANCTI-afk@users.noreply.github.com> Date: Fri, 11 Nov 2022 17:22:13 +0200 Subject: [PATCH 173/888] Arabic language minor update (#204) --- app/src/main/res/values-ar/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index edac2760..bda3cf2a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -20,7 +20,7 @@ CloudStream تشغيل بواسطة CloudStream - الصفحة الرئيسية + الرئيسية البحث التنزيلات الإعدادات @@ -31,8 +31,8 @@ لايوجد بيانات المزيد من الخيارات الحلقة التالية - أنواع - شارك + النوع + مشاركة فتح في الويب تخطي التحميل …تحميل @@ -230,7 +230,7 @@ تقييم المدة الزمنية موقع - ملخص + القصة في قائمة الانتظار الترجمة ليست موجودة From 81adb10c1f4111c51819b1f3d0f716d1f84d72b1 Mon Sep 17 00:00:00 2001 From: TubaApollo <86665265+TubaApollo@users.noreply.github.com> Date: Fri, 11 Nov 2022 16:22:26 +0100 Subject: [PATCH 174/888] german translation update (#210) --- app/src/main/res/values-de/strings-de.xml | 53 +++++++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-de/strings-de.xml b/app/src/main/res/values-de/strings-de.xml index e1d657c7..065990c5 100644 --- a/app/src/main/res/values-de/strings-de.xml +++ b/app/src/main/res/values-de/strings-de.xml @@ -19,11 +19,11 @@ CloudStream Mit CloudStream abspielen Startseite - Suche + Suchen Downloads Einstellungen - Suche… + Suchen… Suche %s… Keine Daten vorhanden @@ -32,15 +32,15 @@ Genres Teilen In Browser öffnen - Buffern überspringen + Puffern überspringen Lädt… Am schauen Pausiert Abgeschlossen Abgebrochen - Möchte schauen - None + Geplant + Nichts Erneut anschauen Film abspielen @@ -90,7 +90,7 @@ Löschen Speichern - Players Geschwindigkeit + Player Geschwindigkeit Untertiteleinstellungen Textfarbe @@ -275,8 +275,8 @@ Quellenfehler Remotefehler Renderfehler - Unerwarteter Player-Fehler - Download-Fehler, Speicherberechtigungen prüfen + Unerwarteter Playerfehler + Downloadfehler, Speicherberechtigungen prüfen Chromecast-Episode Chromecastmirror @@ -453,7 +453,7 @@ Trailer Link zum Stream Referent - Nächste + Weiter Videos in diesen Sprachen ansehen Vorherige Einrichtung überspringen @@ -497,4 +497,39 @@ Spuren Aktivieren der NSFW auf unterstützten Anbietern Anbieter + + Bewertung: %s + Beschreibung + Version + Status + Größe + Autoren + Unterstützt + Sprache + Zuerst muss die Erweiterung installiert werden + + HLS Playlist + + Bevorzugter Videoplayer + Interner Player + VLC + MPV + Web Video Cast + Browser + App nicht gefunden + Alle Sprachen + + Überspringen %s + Opening + Ending + Zusammenfassung + Vermischte Endings + Vermischte Openings + Abspann + Intro + + Verlauf löschen + Verlauf + Überspringen Button für Openings/Endings anzeigen + Zu viel Text. Kann nicht in der Zwischenablage gespeichert werden. From 456cd2e6e2e3cd15a74b5fcb37188365df3125bf Mon Sep 17 00:00:00 2001 From: Kylianalex <66625058+Kylianalex@users.noreply.github.com> Date: Fri, 11 Nov 2022 16:22:35 +0100 Subject: [PATCH 175/888] Updated French translation (#207) Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> --- app/src/main/res/values-fr/strings.xml | 68 +++++++++++++------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c98173ce..e3673393 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -10,18 +10,18 @@ Aucune Donnée Plus d\'options Retour - Episode suivant + Épisode suivant Miniature Genres Partager - Ouvrir dans le naviguateur + Ouvrir dans le navigateur Passer le chargement Chargement… En visionnage - En pose + En pause Terminé Abandonné - A regarder + À regarder Aucun Lire Streamer le Torrent @@ -29,15 +29,15 @@ Sous-titres Réessayer la connection… Retour - Miniature de l\'Episode - Lire l\'Episode + Miniature de l\'Épisode + Lire l\'Épisode Télécharger Téléchargé Téléchargement Téléchargement en pause Téléchargement commencé - Echec du Téléchargement + Échec du Téléchargement Téléchargement Annulé Téléchargement Terminé Erreur lors du téléchargement des liens @@ -68,34 +68,34 @@ Couleur de fond Couleur de la fenètre Type de bordure - Elevation des sous-titres + Élévation des sous-titres Aperçu de l\'arrière-plan Police Rechercher en utilisant les fournisseurs Rechercher en utilisant les types %d Benenes données au dev Aucune Benenes donnée - Séléction automatique de la langue + Sélection automatique de la langue Télécharger les langues - Maintenir pour réinitialliser les valeurs par défault - Continer à regarder + Maintenir pour réinitialiser les valeurs par défaut + Continuer à regarder Supprimer Plus d\'info Un VPN peut être requit pour que ce fournisseur fonctionne - Ce fournisseur est un torrent, un VPN est recommendé + Ce fournisseur est un torrent, un VPN est recommandé Description Aucune description trouvée Aucune description trouvée Lecteur en mode Picture-in-Picture Continuer la lecture dans une fenêtre miniature en superposition sur d\'autres applis - Boutton de redimentionnement du lecteur + Bouton de redimensionnement du lecteur Supprimer les bordures noires Sous-titres Paramètres des sous-titres du lecteur Vitesse de lecture Ajouter l\'option de vitesse sur le lecteur Balayer pour avancer rapidement - Balayer vers la gauche ou la droite pour controler le temps du lecteur vidéo + Balayer vers la gauche ou la droite pour contrôler le temps du lecteur vidéo Balayer pour changer les paramètres Balayer sur le coté droit ou gauche pour changer le niveau de luminosité ou de volume Taper deux fois pour rechercher @@ -106,13 +106,13 @@ Rechercher Informations Recherche Avancée - Donne les résultats séparé par les fournisseur + Donne les résultats séparés par les fournisseurs N\'envoyer les données que lors d\'un crash N\'envoyer aucune données Afficher les mises-à-jour de l\'application Chercher des mises-à-jour automatiquement au démarage - Mettre à jour vers une version béta - Rechercher pour une mise à jour vers une version béta au lieu des version complètes seulement + Mettre à jour vers une version bêta + Rechercher pour une mise à jour vers une version bêta au lieu des version complètes seulement Github L\'application Light Novel par les mêmes devs Application d\'animés par les mêmes devs @@ -122,24 +122,24 @@ Language de l\'application Ce fournisseur ne supporte pas le Chromecast Aucun lien trouvé - Lien copié dans le presse-papiers + Lien copié dans le presse-papier Lecture de l\'episode Réinitialiser aux valeurs par défault - Désolé, l\'application à crashé. Un rapport de bug anonyme va être envoyé aux devloppeurs + Désolé, l\'application à crashé. Un rapport de bug anonyme va être envoyé aux développeurs Saison Pas de Saison - Episode - Episodes + Épisode + Épisodes S E Supprimer le Fichier Supprimer Pause Reprendre - Cela va supprimer définitivement %s\nÊtes vous sûr ? + Cela va supprimer définitivement %s\nÊtes-vous sûr ? En cours Terminé - Status + Statut Année Note Durée @@ -159,9 +159,9 @@ Erreur de la source Erreur distante Erreur d\'affichage - Erreur innatendue du lecteur + Erreur inattendue du lecteur Erreur du téléchargement, vérifier l\'autorisation du stockage - Episode Chromecast + Épisode Chromecast Miroir Chromecast Lecture dans l\'application Lecture dans %s @@ -207,18 +207,18 @@ Disposition de l\'application Disposition TV Language des fournisseurs - Médias préfères + Médias préférées Auto Acteurs: %s %d min Rechercher sur %s... - A re-regarder + À re-regarder Copier Coller Effacer Enregister Importer des polices en les plaçants dans %s - Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échoué si elle n\'existe pas sur le site. + Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échouer si elle n\'existe pas sur le site. Afficher les logs 🐈 Sous-titres Chromecast Paramètres des sous-titres Chromecast @@ -228,7 +228,7 @@ Restaurer les données sauvegardées Sauvegarder les données Fichier de sauvegarde chargé - Echec de la restauration des données depuis le fichier + Échec de la restauration des données depuis le fichier Restauration des données réussie Permission d\'accès au stockage manquante Erreur pendant la sauvegarde %s @@ -250,7 +250,7 @@ Causera des crashs aléatoire si mit trop haut. Ne le changez pas si vous avez un appareil avec peu de ram comme une télévision android ou un vieux téléphone. Causera des problèmes si mit trop haut et si vous avez un appareil avec peu de stockage comme une télévision android ou un vieux téléphone. Bouton aléatoire - Afficher le boutton aléatoire + Afficher le bouton aléatoire Disposition émulateur Position du titre du poster Mettre le titre sous le poster @@ -272,15 +272,15 @@ Contour Déprimé Ombre - Elevation + Élévation Synchroniser les sous-titres 1000ms Délai des sous-titres Utilisez si les sous-titres sont affichés %dms trop tôt Utilisez si les sous-titres sont affichés %dms trop tard Aucun délai de sous-titre - Le rapide rendard brun saute au-dessus du chien paresseux - Recommendé + Portez ce vieux whisky au juge blond qui fume + Recommandé %s chargé Charger depuis le fichier Fichier téléchargé @@ -289,7 +289,7 @@ Arrière plan Source Aléatoire - A venir ... + À venir ... Image de l\'affiche Connecté %s Définir le statut de visionage From cf22ada266191a3421dc8a213cdcd6f9fd3833b8 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:07:08 +0100 Subject: [PATCH 176/888] Fix VoeExtractor --- .../cloudstream3/extractors/VoeExtractor.kt | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt index d2f3f832..ad3f0150 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt @@ -13,39 +13,42 @@ open class VoeExtractor : ExtractorApi() { override val requiresReferer = false private data class ResponseLinks( - @JsonProperty("hls") val url: String?, + @JsonProperty("hls") val hls: String?, + @JsonProperty("mp4") val mp4: String?, @JsonProperty("video_height") val label: Int? //val type: String // Mp4 ) override suspend fun getUrl(url: String, referer: String?): List { - val extractedLinksList: MutableList = mutableListOf() - val doc = app.get(url).text - if (doc.isNotBlank()) { - val start = "const sources =" - var src = doc.substring(doc.indexOf(start)) - src = src.substring(start.length, src.indexOf(";")) + val html = app.get(url).text + if (html.isNotBlank()) { + val src = html.substringAfter("const sources =").substringBefore(";") + // Remove last comma, it is not proper json otherwise .replace("0,", "0") - .trim() + // Make json use the proper quotes + .replace("'", "\"") + //Log.i(this.name, "Result => (src) ${src}") - parseJson(src)?.let { voelink -> - //Log.i(this.name, "Result => (voelink) ${voelink}") - val linkUrl = voelink.url - val linkLabel = voelink.label?.toString() ?: "" + parseJson(src)?.let { voeLink -> + //Log.i(this.name, "Result => (voeLink) ${voeLink}") + + // Always defaults to the hls link, but returns the mp4 if null + val linkUrl = voeLink.hls ?: voeLink.mp4 + val linkLabel = voeLink.label?.toString() ?: "" if (!linkUrl.isNullOrEmpty()) { - extractedLinksList.add( + return listOf( ExtractorLink( name = this.name, source = this.name, url = linkUrl, quality = getQualityFromName(linkLabel), referer = url, - isM3u8 = true + isM3u8 = voeLink.hls != null ) ) } } } - return extractedLinksList + return emptyList() } } \ No newline at end of file From 9a93b375f37bdec866b21965438712e312ef30f8 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 12 Nov 2022 22:29:22 +0100 Subject: [PATCH 177/888] Fixed: Lock when switching episodes Lock on RTL layouts Skipping to the next season --- .../cloudstream3/ui/player/FullScreenPlayer.kt | 2 +- .../cloudstream3/ui/result/ResultViewModel2.kt | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) 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 0f9a6548..509c2187 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 @@ -612,6 +612,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { //player_media_route_button?.isClickable = !isGone player_go_back_holder?.isGone = isGone player_sources_btt?.isGone = isGone + player_skip_episode?.isGone = isGone } private fun updateLockUI() { @@ -1101,7 +1102,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } protected fun uiReset() { - isLocked = false isShowing = false // if nothing has loaded these buttons should not be visible diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 0c26f69c..da900b0a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1582,7 +1582,6 @@ class ResultViewModel2 : ViewModel() { return } - val episodes = currentEpisodes[indexer] val ranges = currentRanges[indexer] if (ranges?.contains(range) != true) { @@ -1594,7 +1593,6 @@ class ResultViewModel2 : ViewModel() { } } - val size = episodes?.size val isMovie = currentResponse?.isMovie() == true currentIndex = indexer currentRange = range @@ -1604,6 +1602,7 @@ class ResultViewModel2 : ViewModel() { text to r } ?: emptyList()) + val size = currentEpisodes[indexer]?.size _episodesCountText.postValue( some( if (isMovie) null else @@ -1683,9 +1682,12 @@ class ResultViewModel2 : ViewModel() { generator = if (isMovie) { getMovie()?.let { RepoLinkGenerator(listOf(it), page = currentResponse) } } else { - episodes?.let { list -> - RepoLinkGenerator(list, page = currentResponse) - } + val episodes = currentEpisodes.filter { it.key.dubStatus == indexer.dubStatus } + .toList() + .sortedBy { it.first.season } + .flatMap { it.second } + + RepoLinkGenerator(episodes, page = currentResponse) } if (isMovie) { From 2b29e8078fe540a91ccaf6b9f91b9263a80acb6f Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 13 Nov 2022 01:40:49 +0100 Subject: [PATCH 178/888] Added intent to start searching --- app/src/main/AndroidManifest.xml | 11 +++++ .../lagradost/cloudstream3/MainActivity.kt | 42 +++++++++++++++---- .../syncproviders/AccountManager.kt | 3 ++ .../cloudstream3/ui/search/SearchFragment.kt | 19 ++++++++- .../main/res/navigation/mobile_navigation.xml | 7 +++- 5 files changed, 72 insertions(+), 10 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 47676059..ae8479fe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -110,6 +110,17 @@ + + + + + + + + + + + diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index ff74d6cc..b999199f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -16,11 +16,9 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity -import androidx.navigation.NavController -import androidx.navigation.NavDestination +import androidx.navigation.* import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.NavGraph.Companion.findStartDestination -import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import androidx.preference.PreferenceManager @@ -44,6 +42,7 @@ import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.PluginManager.loadSinglePlugin @@ -52,9 +51,11 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2A import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.inAppAuths import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO +import com.lagradost.cloudstream3.ui.search.SearchFragment import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isEmulatorSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings @@ -88,11 +89,9 @@ import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_result_swipe.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import okhttp3.ConnectionSpec -import okhttp3.OkHttpClient -import okhttp3.internal.applyConnectionSpec import java.io.File import java.net.URI +import java.net.URLDecoder import java.nio.charset.Charset import kotlin.reflect.KClass @@ -147,7 +146,7 @@ val VLC = ResultResume( val MPV = ResultResume( MPV_PACKAGE, //"is.xyz.mpv.MPVActivity.result", // resume not working :pensive: - position = "position", + position = "position", duration = "duration", ) @@ -188,6 +187,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" + /** + * Setting this will automatically enter the query in the search + * next time the search fragment is opened. + * This variable will clear itself after one use. Null does nothing. + * + * This is a very bad solution but I was unable to find a better one. + **/ + private var nextSearchQuery: String? = null + /** * Fires every time a new batch of plugins have been loaded, no guarantee about how often this is run and on which thread * */ @@ -206,6 +214,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { isWebview: Boolean ): Boolean = with(activity) { + // Invalid URIs can crash + fun safeURI(uri: String) = normalSafeApiCall { URI(uri) } + if (str != null && this != null) { if (str.startsWith("https://cs.repo")) { val realUrl = "https://" + str.substringAfter("?") @@ -241,10 +252,14 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { return true } } - } else if (URI(str).scheme == appStringRepo) { + } else if (safeURI(str)?.scheme == appStringRepo) { val url = str.replaceFirst(appStringRepo, "https") loadRepository(url) return true + } else if (safeURI(str)?.scheme == appStringSearch) { + nextSearchQuery = + URLDecoder.decode(str.substringAfter("$appStringSearch://"), "UTF-8") + nav_view.selectedItemId = R.id.navigation_search } else if (!isWebview) { if (str.startsWith(DOWNLOAD_NAVIGATE_TO)) { this.navigate(R.id.navigation_downloads) @@ -619,6 +634,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController + + navController.addOnDestinationChangedListener { _: NavController, navDestination: NavDestination, bundle: Bundle? -> + // Intercept search and add a query + if (navDestination.matchDestination(R.id.navigation_search) && !nextSearchQuery.isNullOrBlank()) { + bundle?.apply { + this.putString(SearchFragment.SEARCH_QUERY, nextSearchQuery) + nextSearchQuery = null + } + } + } + //val navController = findNavController(R.id.nav_host_fragment) /*navOptions = NavOptions.Builder() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index 825ff673..388e1774 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -43,6 +43,9 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { const val appString = "cloudstreamapp" const val appStringRepo = "cloudstreamrepo" + // Instantly start the search given a query + const val appStringSearch = "cloudstreamsearch" + val unixTime: Long get() = System.currentTimeMillis() / 1000L val unixTimeMs: Long diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 4da88af7..4e59e6a0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -73,6 +73,14 @@ class SearchFragment : Fragment() { } } } + + const val SEARCH_QUERY = "search_query" + + fun newInstance(query: String): Bundle { + return Bundle().apply { + putString(SEARCH_QUERY, query) + } + } } private val searchViewModel: SearchViewModel by activityViewModels() @@ -132,7 +140,8 @@ class SearchFragment : Fragment() { val default = enumValues().sorted().filter { it != TvType.NSFW } .map { it.ordinal.toString() }.toSet() val preferredTypes = (PreferenceManager.getDefaultSharedPreferences(ctx) - .getStringSet(this.getString(R.string.prefer_media_type_key), default)?.ifEmpty { default } ?: default) + .getStringSet(this.getString(R.string.prefer_media_type_key), default) + ?.ifEmpty { default } ?: default) .mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } val settings = ctx.getApiSettings() @@ -487,6 +496,14 @@ class SearchFragment : Fragment() { search_master_recycler?.adapter = masterAdapter search_master_recycler?.layoutManager = GridLayoutManager(context, 1) + // Automatically search the specified query, this allows the app search to launch from intent + arguments?.getString(SEARCH_QUERY)?.let { query -> + if (query.isBlank()) return@let + main_search?.setQuery(query, true) + // Clear the query as to not make it request the same query every time the page is opened + arguments?.putString(SEARCH_QUERY, null) + } + // SubtitlesFragment.push(activity) //searchViewModel.search("iron man") //(activity as AppCompatActivity).loadResult("https://shiro.is/overlord-dubbed", "overlord-dubbed", "Shiro") diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 6ae2fa04..14d750a0 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -274,7 +274,12 @@ app:exitAnim="@anim/exit_anim" app:popEnterAnim="@anim/enter_anim" app:popExitAnim="@anim/exit_anim" - tools:layout="@layout/fragment_search" /> + tools:layout="@layout/fragment_search"> + + Date: Tue, 15 Nov 2022 16:32:31 +0100 Subject: [PATCH 179/888] Fix next episode button showing up erroneously --- .../com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 509c2187..c79cdd76 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 @@ -612,7 +612,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { //player_media_route_button?.isClickable = !isGone player_go_back_holder?.isGone = isGone player_sources_btt?.isGone = isGone - player_skip_episode?.isGone = isGone + player_skip_episode?.isClickable = !isGone } private fun updateLockUI() { From c9fe7c79dc7823bfa54adf29dc33c4cb7f50ed93 Mon Sep 17 00:00:00 2001 From: MXC48 <82712837+MXC48@users.noreply.github.com> Date: Fri, 18 Nov 2022 15:11:47 +0100 Subject: [PATCH 180/888] update the strings.xml in french (#211) * update the strings.xml in french * fix build error * Update and rename app/src/main/res/values-fr/strings.xml to application/src/principal/res/valeurs-fr/strings.xml Removal of "sort_copy" "sort_close" "sort_clear" "sort_save" in duplicate Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> --- .../src/principal/res/valeurs-fr}/strings.xml | 115 +++++++++++++++++- 1 file changed, 111 insertions(+), 4 deletions(-) rename {app/src/main/res/values-fr => application/src/principal/res/valeurs-fr}/strings.xml (73%) diff --git a/app/src/main/res/values-fr/strings.xml b/application/src/principal/res/valeurs-fr/strings.xml similarity index 73% rename from app/src/main/res/values-fr/strings.xml rename to application/src/principal/res/valeurs-fr/strings.xml index e3673393..6398d7ab 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/application/src/principal/res/valeurs-fr/strings.xml @@ -213,10 +213,6 @@ %d min Rechercher sur %s... À re-regarder - Copier - Coller - Effacer - Enregister Importer des polices en les plaçants dans %s Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échouer si elle n\'existe pas sur le site. Afficher les logs 🐈 @@ -293,4 +289,115 @@ Image de l\'affiche Connecté %s Définir le statut de visionage + Annuler + Copier + Fermer + Vider + Enregistrer + + Vitesse du lecteur + + Paramètres des sous-titres + Couleur du texte + Couleur des contours + Couleur d'arrière-plan + Couleur de la fenêtre + Type de bordure + Elevation des sous-titres + Police + Taille de la police + + Recherche par fournisseur + Recherche par types + + %d Donner une banane aux devs + Aucun Bananes donné + + Sélection automatique de la langue + Télécharger les langues + Langue des sous-titres + Maintenir pour rétablir les valeurs par défaut + Importez des polices en les plaçant dans %s + Continuer à regarder + + Retirer + Plus d'informations + @string/home_play + + Un VPN peut être nécessaire pour que ce fournisseur fonctionne correctement + Ce fournisseur est un torrent, un VPN est recommandé + + Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n'existent pas sur le site. + + Description + Aucune trace trouvée + Aucune description trouvée + + Afficher le logcat 🐈 + + Picture-in-picture + Poursuite de la lecture dans un lecteur miniature au-dessus d'autres applications + Bouton de redimensionnement du lecteur + Supprimer les bordures noires + Sous-titres + Paramètres des sous-titres du lecteur + Sous-titres Chromecast + Paramètres des sous-titres Chromecast + + Mode Eigengravy + Ajout d'une option de vitesse dans le lecteur + Balayez pour chercher + Balayez vers la gauche ou la droite pour contrôler le temps dans le lecteur vidéo. + Balayez pour modifier les paramètres + Glissez sur le côté gauche ou droit pour modifier la luminosité ou le volume. + + Lecture automatique du prochain épisode + Démarrer l'épisode suivant lorsque l'épisode en cours se termine + + Double tape pour chercher + Double tape pour mettre en pause + Player seek amount + Tapez deux fois sur le côté droit ou gauche pour aller en avant ou en arrière. + + Tapez au milieu pour mettre en pause + Utiliser la luminosité du système + Utiliser la luminosité du système dans le lecteur d'applications au lieu du + sombre + + + Mise à jour de la progression de la veille + Synchronisation automatique de la progression de votre épisode en cours + + Restaurer des données à partir d'une sauvegarde + + Sauvegarde des données + Fichier de sauvegarde chargé + Échec de la restauration des données du fichier %s + Données stockées avec succès + Permissions de stockage manquantes, veuillez réessayer + Erreur de sauvegarde %s + + Recherche + Comptes + Mises à jour et sauvegarde + + Info + Recherche avancée + Vous donne les résultats de la recherche séparés par fournisseur + Envoi de données uniquement en cas d'accident + N'envoie aucune donnée + Afficher les épisodes spéciaux pour les animés + Montrer les bandes-annonces + Montrer les affiches de kitsu + Masquer la qualité vidéo sélectionnée dans les résultats de recherche + + Mises à jour automatiques des plugins + Afficher les mises à jour de l'application + Recherche automatique de nouvelles mises à jour au démarrage + Mettre à jour vers une version bêta + Recherche pour une mise à jour vers une version bêta au lieu des version complètes seulement + Github + Application Light Novel par les mêmes devs + Anime app by the same devs + Rejoignez le Discord From dbd91d788c773a58d4a78f4d2d700584720b252d Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:11:25 +0100 Subject: [PATCH 181/888] ?? --- .../res/valeurs-fr => app/src/main/res/values-fr}/strings.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {application/src/principal/res/valeurs-fr => app/src/main/res/values-fr}/strings.xml (100%) diff --git a/application/src/principal/res/valeurs-fr/strings.xml b/app/src/main/res/values-fr/strings.xml similarity index 100% rename from application/src/principal/res/valeurs-fr/strings.xml rename to app/src/main/res/values-fr/strings.xml From 263f74fb9cf6cca91e327b0e7e7e12fc9f27e9e8 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Fri, 18 Nov 2022 20:24:24 +0100 Subject: [PATCH 182/888] Removed a million duplicates in values-fr to make it compile --- app/src/main/res/values-fr/strings.xml | 101 ++++--------------------- 1 file changed, 13 insertions(+), 88 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6398d7ab..f3c6a4c3 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -62,61 +62,7 @@ Appliquer Annuler Vitesse de lecture - Paramètres de sous-titres - Couleur du texte - Couleur de la bordure exterieur - Couleur de fond - Couleur de la fenètre - Type de bordure - Élévation des sous-titres Aperçu de l\'arrière-plan - Police - Rechercher en utilisant les fournisseurs - Rechercher en utilisant les types - %d Benenes données au dev - Aucune Benenes donnée - Sélection automatique de la langue - Télécharger les langues - Maintenir pour réinitialiser les valeurs par défaut - Continuer à regarder - Supprimer - Plus d\'info - Un VPN peut être requit pour que ce fournisseur fonctionne - Ce fournisseur est un torrent, un VPN est recommandé - Description - Aucune description trouvée - Aucune description trouvée - Lecteur en mode Picture-in-Picture - Continuer la lecture dans une fenêtre miniature en superposition sur d\'autres applis - Bouton de redimensionnement du lecteur - Supprimer les bordures noires - Sous-titres - Paramètres des sous-titres du lecteur - Vitesse de lecture - Ajouter l\'option de vitesse sur le lecteur - Balayer pour avancer rapidement - Balayer vers la gauche ou la droite pour contrôler le temps du lecteur vidéo - Balayer pour changer les paramètres - Balayer sur le coté droit ou gauche pour changer le niveau de luminosité ou de volume - Taper deux fois pour rechercher - - Taper deux fois pour mettre en pause - - Taper deux fois sur le coté droit ou gauche pour avancer ou reculer - Rechercher - Informations - Recherche Avancée - Donne les résultats séparés par les fournisseurs - N\'envoyer les données que lors d\'un crash - N\'envoyer aucune données - Afficher les mises-à-jour de l\'application - Chercher des mises-à-jour automatiquement au démarage - Mettre à jour vers une version bêta - Rechercher pour une mise à jour vers une version bêta au lieu des version complètes seulement - Github - L\'application Light Novel par les mêmes devs - Application d\'animés par les mêmes devs - Rejoindre le serveur Discord Donner une benene aux devs benenes données Language de l\'application @@ -192,16 +138,12 @@ Couleur principale Thème de l\'application Vitesse (%.2fx) - Utiliser la luminosité du système Général DNS avec HTTPS Afficher les animés en Anglais (Dub) / sous-titrés Disposition en mode téléphone %s Ep %d Note : %.1f - Taille de la police - Utiliser la luminosité du système dans le lecteur de l\'application au lieu d\'un écran noir - Afficher les épisodes spéciaux pour les animés Zoom Adapter à l\'écran Disposition de l\'application @@ -211,23 +153,8 @@ Auto Acteurs: %s %d min - Rechercher sur %s... + Rechercher sur %s… À re-regarder - Importer des polices en les plaçants dans %s - Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échouer si elle n\'existe pas sur le site. - Afficher les logs 🐈 - Sous-titres Chromecast - Paramètres des sous-titres Chromecast - Taper au milieu pour mettre en pause - Mettre à jour la progression de visionnage - Synchroniser automatiquement votre progression de l\'épisode actuel - Restaurer les données sauvegardées - Sauvegarder les données - Fichier de sauvegarde chargé - Échec de la restauration des données depuis le fichier - Restauration des données réussie - Permission d\'accès au stockage manquante - Erreur pendant la sauvegarde %s Aucun épisode trouvé Documentaires OVA @@ -285,22 +212,20 @@ Arrière plan Source Aléatoire - À venir ... + À venir … Image de l\'affiche Connecté %s Définir le statut de visionage - Annuler Copier Fermer Vider Enregistrer - Vitesse du lecteur Paramètres des sous-titres Couleur du texte Couleur des contours - Couleur d'arrière-plan + Couleur d\'arrière-plan Couleur de la fenêtre Type de bordure Elevation des sous-titres @@ -321,13 +246,13 @@ Continuer à regarder Retirer - Plus d'informations + Plus d\'informations @string/home_play Un VPN peut être nécessaire pour que ce fournisseur fonctionne correctement Ce fournisseur est un torrent, un VPN est recommandé - Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n'existent pas sur le site. + Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n\'existent pas sur le site. Description Aucune trace trouvée @@ -336,7 +261,7 @@ Afficher le logcat 🐈 Picture-in-picture - Poursuite de la lecture dans un lecteur miniature au-dessus d'autres applications + Poursuite de la lecture dans un lecteur miniature au-dessus d\'autres applications Bouton de redimensionnement du lecteur Supprimer les bordures noires Sous-titres @@ -345,14 +270,14 @@ Paramètres des sous-titres Chromecast Mode Eigengravy - Ajout d'une option de vitesse dans le lecteur + Ajout d\'une option de vitesse dans le lecteur Balayez pour chercher Balayez vers la gauche ou la droite pour contrôler le temps dans le lecteur vidéo. Balayez pour modifier les paramètres Glissez sur le côté gauche ou droit pour modifier la luminosité ou le volume. Lecture automatique du prochain épisode - Démarrer l'épisode suivant lorsque l'épisode en cours se termine + Démarrer l\'épisode suivant lorsque l\'épisode en cours se termine Double tape pour chercher Double tape pour mettre en pause @@ -361,14 +286,14 @@ Tapez au milieu pour mettre en pause Utiliser la luminosité du système - Utiliser la luminosité du système dans le lecteur d'applications au lieu du + Utiliser la luminosité du système dans le lecteur d\'applications au lieu du sombre Mise à jour de la progression de la veille Synchronisation automatique de la progression de votre épisode en cours - Restaurer des données à partir d'une sauvegarde + Restaurer des données à partir d\'une sauvegarde Sauvegarde des données Fichier de sauvegarde chargé @@ -384,15 +309,15 @@ Info Recherche avancée Vous donne les résultats de la recherche séparés par fournisseur - Envoi de données uniquement en cas d'accident - N'envoie aucune donnée + Envoi de données uniquement en cas d\'accident + N\'envoie aucune donnée Afficher les épisodes spéciaux pour les animés Montrer les bandes-annonces Montrer les affiches de kitsu Masquer la qualité vidéo sélectionnée dans les résultats de recherche Mises à jour automatiques des plugins - Afficher les mises à jour de l'application + Afficher les mises à jour de l\'application Recherche automatique de nouvelles mises à jour au démarrage Mettre à jour vers une version bêta Recherche pour une mise à jour vers une version bêta au lieu des version complètes seulement From a8f3d18c2eca4e284a2c00b4d4558fc7760f23c9 Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Sat, 19 Nov 2022 18:53:34 +0800 Subject: [PATCH 183/888] [Feature] Get duration from string in format of '00 hr 00 min 00 sec', in any combination (#215) --- .../com/lagradost/cloudstream3/MainAPI.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 5c9f3071..95d1faaa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1153,6 +1153,27 @@ fun getDurationFromString(input: String?): Int? { return values[1].toIntOrNull() } } + Regex("(\\s\\d+\\shr)|(\\s\\d+\\shour)|(\\s\\d+\\smin)|(\\s\\d+\\ssec)").findAll(input).let { values -> + var seconds = 0 + values.forEach { + val time_text = it.value + if (time_text.isNotBlank()) { + val time = time_text.filter { s -> s.isDigit() }.trim().toInt() + val scale = time_text.filter { s -> !s.isDigit() }.trim() + //println("Scale: $scale") + val timeval = when (scale) { + "hr", "hour" -> time * 60 * 60 + "min" -> time * 60 + "sec" -> time + else -> 0 + } + seconds += timeval + } + } + if (seconds > 0) { + return seconds / 60 + } + } return null } From 9bca7a0780e69f1065ffb723de934c1f470cdf1c Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:32:32 +0800 Subject: [PATCH 184/888] Fix duration regex, returning null on first checker (#218) --- app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 95d1faaa..e8ad476a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1143,9 +1143,9 @@ fun getDurationFromString(input: String?): Int? { if (values.size == 3) { val hours = values[1].toIntOrNull() val minutes = values[2].toIntOrNull() - return if (minutes != null && hours != null) { - hours * 60 + minutes - } else null + if (minutes != null && hours != null) { + return hours * 60 + minutes + } } } Regex("([0-9]*)m").find(cleanInput)?.groupValues?.let { values -> From e21c8f8038fcf9c2f5e04388c6a2766ef8330658 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Wed, 23 Nov 2022 15:57:56 +0100 Subject: [PATCH 185/888] Fixed DdosGuardKiller, SSL on android 9 and some OpenSubtitles fixes --- app/build.gradle.kts | 3 ++- .../com/lagradost/cloudstream3/network/DdosGuardKiller.kt | 7 ++++--- .../com/lagradost/cloudstream3/network/RequestsHelper.kt | 4 ++++ .../syncproviders/providers/OpenSubtitlesApi.kt | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f72eb321..26e7d3a5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -191,7 +191,8 @@ dependencies { // implementation("com.squareup.okhttp3:okhttp:4.9.2") // implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1") implementation("com.github.Blatzar:NiceHttp:0.3.5") - + // To fix SSL fuckery on android 9 + implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 implementation("com.github.tachiyomiorg:unifile:17bec43") diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt index dca3ee00..b5783f78 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/DdosGuardKiller.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.network import androidx.annotation.AnyThread import com.lagradost.cloudstream3.app -import com.lagradost.nicehttp.Requests.Companion.await +import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.cookies import kotlinx.coroutines.runBlocking import okhttp3.Interceptor @@ -41,7 +41,8 @@ class DdosGuardKiller(private val alwaysBypass: Boolean) : Interceptor { savedCookiesMap[request.url.host] // If no cookies are found fetch and save em. ?: (request.url.scheme + "://" + request.url.host + (ddosBypassPath ?: "")).let { - app.get(it, cacheTime = 0).cookies.also { cookies -> + // Somehow app.get fails + Requests().get(it).cookies.also { cookies -> savedCookiesMap[request.url.host] = cookies } } @@ -51,6 +52,6 @@ class DdosGuardKiller(private val alwaysBypass: Boolean) : Interceptor { request.newBuilder() .headers(headers) .build() - ).await() + ).execute() } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt index 8bf1f91b..a1d84f6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/RequestsHelper.kt @@ -4,15 +4,19 @@ import android.content.Context import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.USER_AGENT +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ignoreAllSSLErrors import okhttp3.Cache import okhttp3.Headers import okhttp3.Headers.Companion.toHeaders import okhttp3.OkHttpClient +import org.conscrypt.Conscrypt import java.io.File +import java.security.Security fun Requests.initClient(context: Context): OkHttpClient { + normalSafeApiCall { Security.insertProviderAt(Conscrypt.newProvider(), 1) } val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) val dns = settingsManager.getInt(context.getString(R.string.dns_pref), 0) baseClient = OkHttpClient.Builder() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt index bfa65f62..f22fdd8b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt @@ -15,6 +15,8 @@ import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPIManager import com.lagradost.cloudstream3.utils.AppUtils +import java.net.URLEncoder +import java.nio.charset.StandardCharsets class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi { override val idPrefix = "opensubtitles" @@ -175,7 +177,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi val searchQueryUrl = when (imdbId > 0) { //Use imdb_id to search if its valid true -> "$host/subtitles?imdb_id=$imdbId&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" - false -> "$host/subtitles?query=$queryText&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" + false -> "$host/subtitles?query=${URLEncoder.encode(queryText.lowercase(), StandardCharsets.UTF_8.toString())}&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" } val req = app.get( From 9be50eb28b861f90fc6a350fb9aea715a28390ff Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Sun, 27 Nov 2022 12:57:40 +0800 Subject: [PATCH 186/888] [Feature] Filter extension list automatically by preferred media language. --- .../ui/settings/extensions/PluginsFragment.kt | 16 ++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/settings_providers.xml | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index bacd26c8..aa49c0e9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -8,6 +8,9 @@ import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.preference.PreferenceManager +import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings +import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.mvvm.observe @@ -45,6 +48,19 @@ class PluginsFragment : Fragment() { pluginViewModel.languages = listOf() pluginViewModel.search(null) + // Filter by language set on preferred media + activity?.let { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(it) + val filter = settingsManager.getBoolean(getString(R.string.pref_filter_ext_by_lang_key), false) + if (filter) { + val providerLangs = it.getApiProviderLangSettings().toList() + if (!providerLangs.contains(AllLanguagesName)) { + pluginViewModel.languages = providerLangs + //Log.i("DevDebug", "providerLang => ${pluginViewModel.languages.toJson()}") + } + } + } + val name = arguments?.getString(PLUGINS_BUNDLE_NAME) val url = arguments?.getString(PLUGINS_BUNDLE_URL) val isLocal = arguments?.getBoolean(PLUGINS_BUNDLE_LOCAL) == true diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9381372c..b4485c26 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -58,6 +58,7 @@ pref_filter_search_quality_key enable_nsfw_on_providers_key enable_skip_op_from_database + pref_filter_ext_by_lang_key %d %s | %s @@ -448,6 +449,7 @@ App Layout Preferred media Enable NSFW on supported providers + Filter Extension list by Preferred Language Subtitle encoding Providers Layout diff --git a/app/src/main/res/xml/settings_providers.xml b/app/src/main/res/xml/settings_providers.xml index a177865b..ffcd3511 100644 --- a/app/src/main/res/xml/settings_providers.xml +++ b/app/src/main/res/xml/settings_providers.xml @@ -21,4 +21,9 @@ android:icon="@drawable/ic_baseline_extension_24" android:summary="@string/apply_on_restart" app:defaultValue="false"/> + \ No newline at end of file From c513708d7432a1df0113796d413822cf5654b9f3 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sun, 27 Nov 2022 10:37:36 +0100 Subject: [PATCH 187/888] smol tweaks to the previous commit --- .../ui/settings/extensions/PluginsFragment.kt | 13 ++++--------- app/src/main/res/values/strings.xml | 2 -- app/src/main/res/xml/settings_providers.xml | 5 ----- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index aa49c0e9..bd44a058 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -8,7 +8,6 @@ import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.R @@ -50,14 +49,10 @@ class PluginsFragment : Fragment() { // Filter by language set on preferred media activity?.let { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(it) - val filter = settingsManager.getBoolean(getString(R.string.pref_filter_ext_by_lang_key), false) - if (filter) { - val providerLangs = it.getApiProviderLangSettings().toList() - if (!providerLangs.contains(AllLanguagesName)) { - pluginViewModel.languages = providerLangs - //Log.i("DevDebug", "providerLang => ${pluginViewModel.languages.toJson()}") - } + val providerLangs = it.getApiProviderLangSettings().toList() + if (!providerLangs.contains(AllLanguagesName)) { + pluginViewModel.languages = mutableListOf("none") + providerLangs + //Log.i("DevDebug", "providerLang => ${pluginViewModel.languages.toJson()}") } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b4485c26..9381372c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -58,7 +58,6 @@ pref_filter_search_quality_key enable_nsfw_on_providers_key enable_skip_op_from_database - pref_filter_ext_by_lang_key %d %s | %s @@ -449,7 +448,6 @@ App Layout Preferred media Enable NSFW on supported providers - Filter Extension list by Preferred Language Subtitle encoding Providers Layout diff --git a/app/src/main/res/xml/settings_providers.xml b/app/src/main/res/xml/settings_providers.xml index ffcd3511..a177865b 100644 --- a/app/src/main/res/xml/settings_providers.xml +++ b/app/src/main/res/xml/settings_providers.xml @@ -21,9 +21,4 @@ android:icon="@drawable/ic_baseline_extension_24" android:summary="@string/apply_on_restart" app:defaultValue="false"/> - \ No newline at end of file From 58593ac8daabc829aab3618f18272c5518242ee7 Mon Sep 17 00:00:00 2001 From: jhih_yu Date: Wed, 30 Nov 2022 04:45:00 +0900 Subject: [PATCH 188/888] Add zh_TW (#202) * Add zh_TW --- README.md | 2 + .../lagradost/cloudstream3/CommonActivity.kt | 13 +- .../ui/settings/SettingsGeneral.kt | 7 +- app/src/main/res/values-zh-rTW/strings.xml | 591 ++++++++++++++++++ 4 files changed, 608 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/values-zh-rTW/strings.xml diff --git a/README.md b/README.md index 5e961c61..dcd4c5ed 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ ***The list of supported languages:*** * 🇱🇧 Arabic * 🇧🇬 Bulgarian +* 🇨🇳 Chinese Simplified +* 🇹🇼 Chinese Traditional * 🇭🇷 Croatian * 🇨🇿 Czech * 🇳🇱 Dutch diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 47a195d1..5f02661d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -108,9 +108,18 @@ object CommonActivity { } } + /** + * Not all languages can be fetched from locale with a code. + * This map allows sidestepping the default Locale(languageCode) + * when setting the app language. + **/ + val appLanguageExceptions = hashMapOf( + "zh_TW" to Locale.TRADITIONAL_CHINESE + ) + fun setLocale(context: Context?, languageCode: String?) { if (context == null || languageCode == null) return - val locale = Locale(languageCode) + val locale = appLanguageExceptions[languageCode] ?: Locale(languageCode) val resources: Resources = context.resources val config = resources.configuration Locale.setDefault(locale) @@ -421,4 +430,4 @@ object CommonActivity { } return null } -} \ No newline at end of file +} 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 8ea76cda..551a80ab 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 @@ -47,7 +47,7 @@ fun getCurrentLocale(context: Context): String { // Change locale settings in the app. // val dm = res.displayMetrics val conf = res.configuration - return conf?.locale?.language ?: "en" + return conf?.locale?.toString() ?: "en" } // idk, if you find a way of automating this it would be great @@ -75,7 +75,8 @@ val appLanguages = arrayListOf( Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"), Triple("", "Romanian", "ro"), Triple("", "Italian", "it"), - Triple("", "Chinese", "zh"), + Triple("", "Chinese Simplified", "zh"), + Triple("\uD83C\uDDF9\uD83C\uDDFC", "Chinese Traditional", "zh_TW"), Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"), Triple("", "Czech", "cs"), Triple("", "Croatian", "hr"), @@ -368,4 +369,4 @@ class SettingsGeneral : PreferenceFragmentCompat() { e.printStackTrace() } } -} \ 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 new file mode 100644 index 00000000..5b71a3f9 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,591 @@ + + + + %d %s | %s + %s • %s + %s / %s + %s %s + +%d + -%d + %d + %d + %.1f/10.0 + %d + %s 共 %d 集 + 演員:%s + 第 %d 集即將發佈於 + %dd %dh %dm + %dh %dm + %dm + + + 封面 + @string/result_poster_img_des + 劇集封面 + 主封面 + 隨機下一個 + @string/play_episode + 返回 + @string/home_change_provider_img_des + 更改片源 + 預覽背景 + + + 速度(%.2fx) + 評分:%.1f + 發現新版本!\n%s -> %s + 填充 + %d 分鐘 + + CloudStream + 使用 CloudStream 播放 + 主頁 + 搜尋 + 下載 + 設定 + + 搜尋… + 搜尋 %s… + + 無資料 + 更多選項 + 下一集 + @string/synopsis + 類型 + 分享 + 在瀏覽器中打開 + 跳過載入 + 載入中… + + 正在觀看 + 暫時擱置 + 觀看完畢 + 放棄觀看 + 計畫觀看 + + 重新觀看 + + 播放電影 + 播放直播 + 播放種子 + 來源 + 字幕 + 重試連接… + 返回 + 播放劇集 + + + 下載 + 已下載 + 下載中 + 下載暫停 + 下載開始 + 下載失敗 + 下載取消 + 下載完畢 + %s - %s + 播放 + + 載入連結錯誤 + 內部存儲 + + 配音 + 字幕 + + 刪除檔案 + 播放檔案 + 繼續下載 + 暫停下載 + + 禁用自動錯誤報告 + 更多資訊 + 隱藏 + 播放 + 資訊 + 篩選書籤 + 書籤 + 移除 + 設定觀看狀態 + 套用 + 取消 + 複製 + 關閉 + 清除 + 保存 + + 播放速度 + + 字幕設定 + 字體顏色 + 輪廓顏色 + 背景顏色 + 視窗顏色 + 邊緣類型 + 字幕高度 + 字體 + 字體大小 + + 按片源搜尋 + 按類型搜尋 + + 送開發者 %d 根香蕉 + 不送香蕉 + + 自動選擇語言 + 下載語言 + 字幕語言 + 按住重設為預設值 + 將字體導入到 %s + 繼續觀看 + + 移除 + 更多資訊 + @string/home_play + + 此片源可能需要 VPN 才能正常使用 + 此片源是種子,建議使用 VPN + + 站點不提供元數據,如果站點上不存在元數據,影片載入將失敗。 + + 簡介 + 未找到簡介 + 未找到簡介 + + 顯示 logcat 🐈 + + 字母畫面 + 在其他應用程式上的子母畫面中繼續播放 + 播放器調整大小按鈕 + 移除黑色邊框 + 字幕 + 播放器字幕設定 + Chromecast 字幕 + Chromecast 字幕設定 + + 播放速度 + 在播放器中添加播放速度選項 + 活動控制進度 + 左右滑動控制播放進度 + 滑動更改設定 + 上下滑動更改亮度或音量 + + 自動播放下一集 + 播放完畢後播放下一集 + + 輕按兩下以控制進度 + 輕按兩下以暫停 + 輕按兩下以控制進度時間 + 在右側或左側輕按兩次以向前或向後快轉 + + 輕按兩下中間以暫停 + 使用系統亮度 + 在應用程序播放器中使用系統亮度替代黑色遮罩 + + 更新觀看進度 + 自動同步當前劇集進度 + + 從備份中恢復資料 + + 備份資料 + 已載入備份資料 + 無法從 %s 檔案中還原資料 + 成功儲存資料 + 缺少儲存權限,請重試 + 備份 %s 錯誤 + + 搜尋 + 帳號 + 更新與備份 + + 資訊 + 進階搜尋 + 為您提供按片源分開的搜尋結果 + 僅在崩潰時傳送資料 + 不傳送資料 + 顯示動畫外傳 + 顯示預告片 + 顯示來自 Kitsu 的封面 + 在搜尋結果中隱藏選中的影片畫質 + + 自動更新外掛程式 + 顯示應用更新 + 啟動時自動搜尋更新 + 更新至預覽版 + 搜尋預覽版更新而不是僅搜尋正式版 + Github + 由相同開發者開發的輕小說應用程式 + 由相同開發者開發的動漫應用程式 + 加入 Discord + 送開發者一根香蕉 + 送香蕉 + + 應用程式語言 + + 此片源不支援 Chromecast + 未找到連結 + 連結已複製到剪貼簿 + 播放劇集 + 重設為預設值 + 很抱歉,應用崩潰了,將傳送一份匿名錯誤報告給開發者 + + + %s %d%s + 無季 + + + %d-%d + %d %s + S + E + 未找到劇集 + + 刪除文件 + 刪除 + @string/sort_cancel + 暫停 + 繼續 + -30 + +30 + 這將永遠刪除 %s\n你確定嗎? + 剩餘 %d 分鐘 + + + 連載中 + 已完結 + 狀態 + 年份 + 評分 + 時間 + 網站 + 簡介 + + 已加入佇列 + 無字幕 + 預設 + + 空閒 + 已使用 + 應用程式 + + + 電影 + 電視劇 + 卡通 + 動漫 + 種子 + 紀錄片 + 原創動畫錄影帶 + 亞洲劇 + 直播 + NSFW + 其他 + + + 電影 + 電視劇 + 卡通 + @string/anime + @string/ova + 種子 + 紀錄片 + 亞洲劇 + 直播 + NSFW + 其他 + + 來源錯誤 + 遠端錯誤 + 渲染器錯誤 + 意料之外的播放器錯誤 + 下載錯誤,請檢查儲存權限 + + Chromecast 劇集 + Chromecast 鏡像 + 在應用程式中播放 + 在 %s 中播放 + 在瀏覽器中播放 + 複製連結 + 自動下載 + 下載鏡像 + 重新載入連結 + 下載字幕 + + 畫質標籤 + 配音標籤 + 字幕標籤 + 標題 + show_hd_key + show_dub_key + show_sub_key + show_title_key + 封面內容 + + 未找到更新 + 检查更新 + + 鎖定 + 調整大小 + 來源 + 跳過片頭 + + 不再顯示 + 跳過此更新 + 更新 + 偏好播放畫質 + 影片播放器標題最大字數 + 影片播放器標題 + + 影片緩衝大小 + 影片緩衝長度 + 影片快取存儲 + 清除影片和圖片快取 + + 如果設定得太高會導致隨機崩潰。 如果您的記憶體不足(例如 Android TV 或舊手機),請不要更改 + 如果您將其設定得太高,可能會導致儲存空間不足的系統(例如 Android TV 設備)出現問題 + + DNS over HTTPS + 用於繞過網路服務供應商的封鎖 + + 複製片源 + 移除片源 + 添加具有不同URL的現有站點複製 + + 下載路徑 + + Nginx 伺服器連結 + + 顯示有配音/字幕的動漫 + + 適應螢幕 + 拉伸 + 縮放 + + 免責聲明 + legal_notice_key + Any legal issues regarding the content on this application + should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. + + In case of copyright infringement, please directly contact the responsible parties or the streaming websites. + + The app is purely for educational and personal use. + + CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. + CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or + manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, + user-friendly interface. + + It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the + responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use + CloudStream 3 at your own risk. + + 通用 + 隨機按鈕 + 在主頁中顯示隨機按鈕 + 片源語言 + 應用佈局 + 偏好類型 + 在支援的片源中啟用 NSFW 內容 + 字幕編碼 + 片源 + 佈局 + + 自動 + 電視佈局 + 手機佈局 + 模擬器佈局 + + 主題色 + 應用程式主題 + 封面標題位置 + 將標題移到封面下方 + + + + anilist_key + mal_key + opensubtitles_key + nginx_key + 密碼 + 用戶名 + 電子郵件 + IP + 網站名稱 + 網站連結 + 語言代號 (zh_TW) + + + %s %s + 帳號 + 登出 + 登入 + 切換帳號 + 添加帳號 + 創建帳號 + 添加同步 + 已添加 %s + 同步 + 評分 + %d / 10 + /?? + /%d + 已驗證 %s + 驗證 %s 失敗 + + + + 普通 + 全部 + 最大 + 最小 + @string/none + 輪廓 + 凹陷 + 陰影 + 凸出 + 同步字幕 + 1000ms + 字幕延遲 + 如果字幕過早顯示 %dms ,請使用此選項 + 如果字幕過晚顯示 %dms ,請使用此選項 + 無字幕延遲 + + + The quick brown fox jumps over the lazy dog + + 推薦 + 已載入 %s + 從檔案載入 + 從網路載入 + 下載的檔案 + 主角 + 配角 + 群演 + + 來源 + 隨機 + + 即將到來… + + Cam + Cam + Cam + HQ + HD + TS + TC + BlueRay + WP + DVD + 4K + SD + UHD + HDR + SDR + Web + + 封面圖片 + 播放器 + 解析度與標題 + 標題 + 解析度 + 無效 ID + 無效資料 + 無效連結 + 錯誤 + 移除隱藏式字幕 + 移除字幕廣告 + 按偏好片源語言過濾 + 附加 + 預告片 + 播放連結 + 推薦 + 下一個 + 觀看這些語言的影片 + 上一個 + 跳過設定 + 更改應用程式的外觀以適應你的設備 + 崩潰報告 + 你想要看什麼 + 完成 + 擴充功能 + 添加資源庫 + 資源庫名稱 + 資源庫連結 + 外掛程式已載入 + 外掛程式已刪除 + 載入 %s 失敗 + 18+ + 開始下載 %d %s + 下載 %d %s 成功 + 全部 %s 已經下載 + 批次下載 + 外掛程式 + 外掛程式 + 這也將刪除所有資源庫外掛程式 + 刪除資源庫 + 下載你所需的片源 + 已下載:%d + 已禁用:%d + 未下載:%d + 已更新 %d 外掛程式 + CloudStream 預設沒有安裝任何片源。您需要從資源庫安裝站點。\n\n由於 Sky Uk Limited 的無腦 DMCA 刪除🤮,我們無法在應用程式中連結資源庫站點。\n\n加入我們的 Discord 獲得連結或自己在網路上搜尋 + 查看 + 公開列表 + 字幕全大寫 + + 從此資源庫下載所有外掛程式? + %s (禁用) + 軌道 + 音頻軌道 + 影片軌道 + 重新啟動時生效 + + 安全模式已啟用 + 發生了不可恢復的崩潰,我們已自動禁用所有外掛程式,因此您可以找到並刪除導致問題的應用程式。 + 查看崩潰資訊 + + 評分:%s + 簡介 + 版本 + 狀態 + 大小 + 作者 + 類型 + 語言 + 請先安裝外掛程式 + + HLS 播放清單 + + 偏好影片播放器 + 內部播放器 + VLC + MPV + 網路影片播放 + 瀏覽器 + 未找到應用 + 所有語言 + + 跳過 %s + 片頭 + 片尾 + 前情回顧 + 混合片尾 + 混合片頭 + 致謝名單 + 介紹 + + 清除歷史紀錄 + 歷史紀錄 + From 723c554bc86c3d6f45fa6d9abd05f0ef2874297b Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Wed, 30 Nov 2022 03:46:31 +0800 Subject: [PATCH 189/888] [Feature] Automatically download plugin, based on language setting (#172) --- .../lagradost/cloudstream3/MainActivity.kt | 12 +- .../cloudstream3/plugins/PluginManager.kt | 107 ++++++++++++++++-- app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/settings_updates.xml | 5 + 4 files changed, 115 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index b999199f..d7351dc7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -45,6 +45,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.plugins.PluginManager +import com.lagradost.cloudstream3.plugins.PluginManager.loadAllOnlinePlugins import com.lagradost.cloudstream3.plugins.PluginManager.loadSinglePlugin import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis @@ -568,7 +569,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { ) { PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) } else { - PluginManager.loadAllOnlinePlugins(this@MainActivity) + loadAllOnlinePlugins(this@MainActivity) + } + + //Automatically download not existing plugins + if (settingsManager.getBoolean( + getString(R.string.auto_download_plugins_key), + false + ) + ) { + PluginManager.downloadNotExistingPluginsAndLoad(this@MainActivity) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index b9c775c0..f2dbb02f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -13,11 +13,13 @@ import androidx.core.app.NotificationManagerCompat import com.fasterxml.jackson.annotation.JsonProperty import com.google.gson.Gson import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.removePluginMapping import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.MainAPI.Companion.settingsForProvider import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.mvvm.debugPrint import com.lagradost.cloudstream3.mvvm.logError @@ -26,6 +28,8 @@ import com.lagradost.cloudstream3.plugins.RepositoryManager.ONLINE_PLUGINS_FOLDE import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.plugins.RepositoryManager.downloadPluginToFile import com.lagradost.cloudstream3.plugins.RepositoryManager.getRepoPlugins +import com.lagradost.cloudstream3.ui.result.UiText +import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.extensions.REPOSITORIES_KEY import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData import com.lagradost.cloudstream3.utils.Coroutines.main @@ -219,9 +223,7 @@ object PluginManager { fun updateAllOnlinePluginsAndLoadThem(activity: Activity) { // Load all plugins as fast as possible! loadAllOnlinePlugins(activity) - - afterPluginsLoadedEvent.invoke(true) - + afterPluginsLoadedEvent.invoke(true) val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES @@ -265,16 +267,98 @@ object PluginManager { } main { - createNotification(activity, updatedPlugins) + val uitext = txt(R.string.plugins_updated, updatedPlugins.size) + createNotification(activity, uitext, updatedPlugins) } - // ioSafe { + // ioSafe { afterPluginsLoadedEvent.invoke(true) - // } + // } Log.i(TAG, "Plugin update done!") } + /** + * Automatically download plugins not yet existing on local + * 1. Gets all online data from online plugins repo + * 2. Fetch all not downloaded plugins + * 3. Download them and reload plugins + **/ + fun downloadNotExistingPluginsAndLoad(activity: Activity) { + val newDownloadPlugins = mutableListOf() + val urls = (getKey>(REPOSITORIES_KEY) + ?: emptyArray()) + PREBUILT_REPOSITORIES + val onlinePlugins = urls.toList().apmap { + getRepoPlugins(it.url)?.toList() ?: emptyList() + }.flatten().distinctBy { it.second.url } + + val providerLang = activity.getApiProviderLangSettings() + //Log.i(TAG, "providerLang => ${providerLang.toJson()}") + + // Iterate online repos and returns not downloaded plugins + val notDownloadedPlugins = onlinePlugins.mapNotNull { onlineData -> + val sitePlugin = onlineData.second + //Don't include empty urls + if (sitePlugin.url.isBlank()) { return@mapNotNull null } + if (sitePlugin.repositoryUrl.isNullOrBlank()) { return@mapNotNull null } + + //Omit already existing plugins + if (getPluginPath(activity, sitePlugin.internalName, onlineData.first).exists()) { + Log.i(TAG, "Skip > ${sitePlugin.internalName}") + return@mapNotNull null + } + + //Omit lang not selected on language setting + val lang = sitePlugin.language ?: return@mapNotNull null + //If set to 'universal', don't skip any language + if (!providerLang.contains(AllLanguagesName) && !providerLang.contains(lang)) { + return@mapNotNull null + } + //Log.i(TAG, "sitePlugin lang => $lang") + + //Omit NSFW, if disabled + sitePlugin.tvTypes?.let { tvtypes -> + if (!settingsForProvider.enableAdult) { + if (tvtypes.contains(TvType.NSFW.name)) { + return@mapNotNull null + } + } + } + val savedData = PluginData( + url = sitePlugin.url, + internalName = sitePlugin.internalName, + isOnline = true, + filePath = "", + version = sitePlugin.version + ) + OnlinePluginData(savedData, onlineData) + } + //Log.i(TAG, "notDownloadedPlugins => ${notDownloadedPlugins.toJson()}") + + notDownloadedPlugins.apmap { pluginData -> + downloadAndLoadPlugin( + activity, + pluginData.onlineData.second.url, + pluginData.savedData.internalName, + pluginData.onlineData.first + ).let { success -> + if (success) + newDownloadPlugins.add(pluginData.onlineData.second.name) + } + } + + main { + val uitext = txt(R.string.plugins_downloaded, newDownloadPlugins.size) + createNotification(activity, uitext, newDownloadPlugins) + } + + // ioSafe { + afterPluginsLoadedEvent.invoke(true) + // } + + Log.i(TAG, "Plugin download done!") + } + /** * Use updateAllOnlinePluginsAndLoadThem * */ @@ -527,12 +611,14 @@ object PluginManager { private fun createNotification( context: Context, - extensionNames: List + uitext: UiText, + extensions: List ): Notification? { try { - if (extensionNames.isEmpty()) return null - val content = extensionNames.joinToString(", ") + if (extensions.isEmpty()) return null + + val content = extensions.joinToString(", ") // main { // DON'T WANT TO SLOW IT DOWN val builder = NotificationCompat.Builder(context, EXTENSIONS_CHANNEL_ID) .setAutoCancel(false) @@ -541,7 +627,8 @@ object PluginManager { .setSilent(true) .setPriority(NotificationCompat.PRIORITY_LOW) .setColor(context.colorFromAttribute(R.attr.colorPrimary)) - .setContentTitle(context.getString(R.string.plugins_updated, extensionNames.size)) + .setContentTitle(uitext.asString(context)) + //.setContentTitle(context.getString(title, extensionNames.size)) .setSmallIcon(R.drawable.ic_baseline_extension_24) .setStyle( NotificationCompat.BigTextStyle() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9381372c..db042b95 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,6 +6,7 @@ search_type_list auto_update auto_update_plugins + auto_download_plugins_key skip_update_key prerelease_update manual_check_update @@ -269,6 +270,7 @@ Hide selected video quality on Search results Automatic plugin updates + Automatically download plugins Show app updates Automatically search for new updates on start Update to prereleases diff --git a/app/src/main/res/xml/settings_updates.xml b/app/src/main/res/xml/settings_updates.xml index eaceb785..3a17f393 100644 --- a/app/src/main/res/xml/settings_updates.xml +++ b/app/src/main/res/xml/settings_updates.xml @@ -33,6 +33,11 @@ android:icon="@drawable/ic_baseline_extension_24" android:key="@string/auto_update_plugins_key" android:title="@string/automatic_plugin_updates" /> + Date: Wed, 30 Nov 2022 21:23:19 +0100 Subject: [PATCH 190/888] Fixed MPV return intent --- .../lagradost/cloudstream3/CommonActivity.kt | 4 +-- .../lagradost/cloudstream3/MainActivity.kt | 36 ++++++++++++++++--- 2 files changed, 33 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 5f02661d..ef55eff0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -155,8 +155,8 @@ object CommonActivity { val resultCode = result.resultCode val data = result.data if (resultCode == AppCompatActivity.RESULT_OK && data != null && resumeApp.position != null && resumeApp.duration != null) { - val pos = data.getLongExtra(resumeApp.position, -1L) - val dur = data.getLongExtra(resumeApp.duration, -1L) + val pos = resumeApp.getPosition(data) + val dur = resumeApp.getDuration(data) if (dur > 0L && pos > 0L) DataStoreHelper.setViewPos(getKey(resumeApp.lastId), pos, dur) removeKey(resumeApp.lastId) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index d7351dc7..c038d23a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -115,13 +115,15 @@ val VLC_COMPONENT = ComponentName(VLC_PACKAGE, "$VLC_PACKAGE.gui.video.VideoPlay val MPV_COMPONENT = ComponentName(MPV_PACKAGE, "$MPV_PACKAGE.MPVActivity") //TODO REFACTOR AF -data class ResultResume( +open class ResultResume( val packageString: String, val action: String = Intent.ACTION_VIEW, val position: String? = null, val duration: String? = null, var launcher: ActivityResultLauncher? = null, ) { + val defaultTime = -1L + val lastId get() = "${packageString}_last_open_id" suspend fun launch(id: Int?, callback: suspend Intent.() -> Unit) { val intent = Intent(action) @@ -135,21 +137,45 @@ data class ResultResume( callback.invoke(intent) launcher?.launch(intent) } + + open fun getPosition(intent: Intent?): Long { + return defaultTime + } + + open fun getDuration(intent: Intent?): Long { + return defaultTime + } } -val VLC = ResultResume( +val VLC = object : ResultResume( VLC_PACKAGE, "org.videolan.vlc.player.result", "extra_position", "extra_duration", -) +) { + override fun getPosition(intent: Intent?): Long { + return intent?.getLongExtra(this.position, defaultTime) ?: defaultTime + } -val MPV = ResultResume( + override fun getDuration(intent: Intent?): Long { + return intent?.getLongExtra(this.duration, defaultTime) ?: defaultTime + } +} + +val MPV = object : ResultResume( MPV_PACKAGE, //"is.xyz.mpv.MPVActivity.result", // resume not working :pensive: position = "position", duration = "duration", -) +) { + override fun getPosition(intent: Intent?): Long { + return intent?.getIntExtra(this.position, defaultTime.toInt())?.toLong() ?: defaultTime + } + + override fun getDuration(intent: Intent?): Long { + return intent?.getIntExtra(this.duration, defaultTime.toInt())?.toLong() ?: defaultTime + } +} val WEB_VIDEO = ResultResume(WEB_VIDEO_CAST_PACKAGE) From e21574774911a4228116ad2203e54a1c9196a77f Mon Sep 17 00:00:00 2001 From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com> Date: Fri, 2 Dec 2022 05:07:47 +0800 Subject: [PATCH 191/888] Update Simplified Chinese Translation (#229) --- app/src/main/res/values-zh/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 19d9bd43..d609b9af 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -209,6 +209,7 @@ 在搜索结果中隐藏选中视频画质 自动更新插件 + 自动下载插件 显示应用更新 启动时自动搜索更新 更新至预览版 From b79e2d768f4bdb39aaa3406b499b3edb5bfec8e2 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sat, 3 Dec 2022 02:42:16 +0100 Subject: [PATCH 192/888] Fixed subtitle elevation again --- .../ui/player/NonFinalTextRenderer.java | 699 +++++++++--------- 1 file changed, 366 insertions(+), 333 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java b/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java index 8602ce25..ce39a841 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java @@ -15,6 +15,8 @@ */ package com.lagradost.cloudstream3.ui.player; +import static com.google.android.exoplayer2.text.Cue.DIMEN_UNSET; +import static com.google.android.exoplayer2.text.Cue.LINE_TYPE_NUMBER; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkState; import static java.lang.annotation.ElementType.TYPE_USE; @@ -23,8 +25,10 @@ import android.os.Handler; import android.os.Handler.Callback; import android.os.Looper; import android.os.Message; + import androidx.annotation.IntDef; import androidx.annotation.Nullable; + import com.google.android.exoplayer2.BaseRenderer; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; @@ -43,13 +47,17 @@ import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; + import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; // DO NOT CONVERT TO KOTLIN AUTOMATICALLY, IT FUCKS UP AND DOES NOT DISPLAY SUBS FOR SOME REASON +// IF YOU CHANGE THE CODE MAKE SURE YOU GET THE CUES CORRECT! + /** * A renderer for text. * @@ -59,365 +67,390 @@ import java.util.List; */ public class NonFinalTextRenderer extends BaseRenderer implements Callback { - private static final String TAG = "TextRenderer"; + private static final String TAG = "TextRenderer"; - /** - * @param trackType The track type that the renderer handles. One of the {@link C} {@code - * TRACK_TYPE_*} constants. - * @param outputHandler - */ - public NonFinalTextRenderer(int trackType, @Nullable Handler outputHandler) { - super(trackType); - this.outputHandler = outputHandler; - } - - @Documented - @Retention(RetentionPolicy.SOURCE) - @Target(TYPE_USE) - @IntDef({ - REPLACEMENT_STATE_NONE, - REPLACEMENT_STATE_SIGNAL_END_OF_STREAM, - REPLACEMENT_STATE_WAIT_END_OF_STREAM - }) - private @interface ReplacementState {} - /** The decoder does not need to be replaced. */ - private static final int REPLACEMENT_STATE_NONE = 0; - /** - * The decoder needs to be replaced, but we haven't yet signaled an end of stream to the existing - * decoder. We need to do so in order to ensure that it outputs any remaining buffers before we - * release it. - */ - private static final int REPLACEMENT_STATE_SIGNAL_END_OF_STREAM = 1; - /** - * The decoder needs to be replaced, and we've signaled an end of stream to the existing decoder. - * We're waiting for the decoder to output an end of stream signal to indicate that it has output - * any remaining buffers before we release it. - */ - private static final int REPLACEMENT_STATE_WAIT_END_OF_STREAM = 2; - - private static final int MSG_UPDATE_OUTPUT = 0; - - @Nullable private final Handler outputHandler; - private TextOutput output = null; - private SubtitleDecoderFactory decoderFactory = null; - private FormatHolder formatHolder = null; - - private boolean inputStreamEnded; - private boolean outputStreamEnded; - private boolean waitingForKeyFrame; - private @ReplacementState int decoderReplacementState; - @Nullable private Format streamFormat; - @Nullable private SubtitleDecoder decoder; - @Nullable private SubtitleInputBuffer nextInputBuffer; - @Nullable private SubtitleOutputBuffer subtitle; - @Nullable private SubtitleOutputBuffer nextSubtitle; - private int nextSubtitleEventIndex; - private long finalStreamEndPositionUs; - - /** - * @param output The output. - * @param outputLooper The looper associated with the thread on which the output should be called. - * If the output makes use of standard Android UI components, then this should normally be the - * looper associated with the application's main thread, which can be obtained using {@link - * android.app.Activity#getMainLooper()}. Null may be passed if the output should be called - * directly on the player's internal rendering thread. - */ - public NonFinalTextRenderer(TextOutput output, @Nullable Looper outputLooper) { - this(output, outputLooper, SubtitleDecoderFactory.DEFAULT); - } - - /** - * @param output The output. - * @param outputLooper The looper associated with the thread on which the output should be called. - * If the output makes use of standard Android UI components, then this should normally be the - * looper associated with the application's main thread, which can be obtained using {@link - * android.app.Activity#getMainLooper()}. Null may be passed if the output should be called - * directly on the player's internal rendering thread. - * @param decoderFactory A factory from which to obtain {@link SubtitleDecoder} instances. - */ - public NonFinalTextRenderer( - TextOutput output, @Nullable Looper outputLooper, SubtitleDecoderFactory decoderFactory) { - super(C.TRACK_TYPE_TEXT); - this.output = checkNotNull(output); - this.outputHandler = - outputLooper == null ? null : Util.createHandler(outputLooper, /* callback= */ this); - this.decoderFactory = decoderFactory; - formatHolder = new FormatHolder(); - finalStreamEndPositionUs = C.TIME_UNSET; - } - - @Override - public String getName() { - return TAG; - } - - @Override - public @Capabilities int supportsFormat(Format format) { - if (decoderFactory.supportsFormat(format)) { - return RendererCapabilities.create( - format.cryptoType == C.CRYPTO_TYPE_NONE ? C.FORMAT_HANDLED : C.FORMAT_UNSUPPORTED_DRM); - } else if (MimeTypes.isText(format.sampleMimeType)) { - return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_SUBTYPE); - } else { - return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE); - } - } - - /** - * Sets the position at which to stop rendering the current stream. - * - *

    Must be called after {@link #setCurrentStreamFinal()}. - * - * @param streamEndPositionUs The position to stop rendering at or {@link C#LENGTH_UNSET} to - * render until the end of the current stream. - */ - // TODO(internal b/181312195): Remove this when it's no longer needed once subtitles are decoded - // on the loading side of SampleQueue. - public void setFinalStreamEndPositionUs(long streamEndPositionUs) { - checkState(isCurrentStreamFinal()); - this.finalStreamEndPositionUs = streamEndPositionUs; - } - - @Override - protected void onStreamChanged(Format[] formats, long startPositionUs, long offsetUs) { - streamFormat = formats[0]; - if (decoder != null) { - decoderReplacementState = REPLACEMENT_STATE_SIGNAL_END_OF_STREAM; - } else { - initDecoder(); - } - } - - @Override - protected void onPositionReset(long positionUs, boolean joining) { - clearOutput(); - inputStreamEnded = false; - outputStreamEnded = false; - finalStreamEndPositionUs = C.TIME_UNSET; - if (decoderReplacementState != REPLACEMENT_STATE_NONE) { - replaceDecoder(); - } else { - releaseBuffers(); - checkNotNull(decoder).flush(); - } - } - - @Override - public void render(long positionUs, long elapsedRealtimeUs) { - if (isCurrentStreamFinal() - && finalStreamEndPositionUs != C.TIME_UNSET - && positionUs >= finalStreamEndPositionUs) { - releaseBuffers(); - outputStreamEnded = true; + /** + * @param trackType The track type that the renderer handles. One of the {@link C} {@code + * TRACK_TYPE_*} constants. + * @param outputHandler + */ + public NonFinalTextRenderer(int trackType, @Nullable Handler outputHandler) { + super(trackType); + this.outputHandler = outputHandler; } - if (outputStreamEnded) { - return; + @Documented + @Retention(RetentionPolicy.SOURCE) + @Target(TYPE_USE) + @IntDef({ + REPLACEMENT_STATE_NONE, + REPLACEMENT_STATE_SIGNAL_END_OF_STREAM, + REPLACEMENT_STATE_WAIT_END_OF_STREAM + }) + private @interface ReplacementState { } - if (nextSubtitle == null) { - checkNotNull(decoder).setPositionUs(positionUs); - try { - nextSubtitle = checkNotNull(decoder).dequeueOutputBuffer(); - } catch (SubtitleDecoderException e) { - handleDecoderError(e); - return; - } + /** + * The decoder does not need to be replaced. + */ + private static final int REPLACEMENT_STATE_NONE = 0; + /** + * The decoder needs to be replaced, but we haven't yet signaled an end of stream to the existing + * decoder. We need to do so in order to ensure that it outputs any remaining buffers before we + * release it. + */ + private static final int REPLACEMENT_STATE_SIGNAL_END_OF_STREAM = 1; + /** + * The decoder needs to be replaced, and we've signaled an end of stream to the existing decoder. + * We're waiting for the decoder to output an end of stream signal to indicate that it has output + * any remaining buffers before we release it. + */ + private static final int REPLACEMENT_STATE_WAIT_END_OF_STREAM = 2; + + private static final int MSG_UPDATE_OUTPUT = 0; + + @Nullable + private final Handler outputHandler; + private TextOutput output = null; + private SubtitleDecoderFactory decoderFactory = null; + private FormatHolder formatHolder = null; + + private boolean inputStreamEnded; + private boolean outputStreamEnded; + private boolean waitingForKeyFrame; + private @ReplacementState int decoderReplacementState; + @Nullable + private Format streamFormat; + @Nullable + private SubtitleDecoder decoder; + @Nullable + private SubtitleInputBuffer nextInputBuffer; + @Nullable + private SubtitleOutputBuffer subtitle; + @Nullable + private SubtitleOutputBuffer nextSubtitle; + private int nextSubtitleEventIndex; + private long finalStreamEndPositionUs; + + /** + * @param output The output. + * @param outputLooper The looper associated with the thread on which the output should be called. + * If the output makes use of standard Android UI components, then this should normally be the + * looper associated with the application's main thread, which can be obtained using {@link + * android.app.Activity#getMainLooper()}. Null may be passed if the output should be called + * directly on the player's internal rendering thread. + */ + public NonFinalTextRenderer(TextOutput output, @Nullable Looper outputLooper) { + this(output, outputLooper, SubtitleDecoderFactory.DEFAULT); } - if (getState() != STATE_STARTED) { - return; + /** + * @param output The output. + * @param outputLooper The looper associated with the thread on which the output should be called. + * If the output makes use of standard Android UI components, then this should normally be the + * looper associated with the application's main thread, which can be obtained using {@link + * android.app.Activity#getMainLooper()}. Null may be passed if the output should be called + * directly on the player's internal rendering thread. + * @param decoderFactory A factory from which to obtain {@link SubtitleDecoder} instances. + */ + public NonFinalTextRenderer( + TextOutput output, @Nullable Looper outputLooper, SubtitleDecoderFactory decoderFactory) { + super(C.TRACK_TYPE_TEXT); + this.output = checkNotNull(output); + this.outputHandler = + outputLooper == null ? null : Util.createHandler(outputLooper, /* callback= */ this); + this.decoderFactory = decoderFactory; + formatHolder = new FormatHolder(); + finalStreamEndPositionUs = C.TIME_UNSET; } - boolean textRendererNeedsUpdate = false; - if (subtitle != null) { - // We're iterating through the events in a subtitle. Set textRendererNeedsUpdate if we - // advance to the next event. - long subtitleNextEventTimeUs = getNextEventTime(); - while (subtitleNextEventTimeUs <= positionUs) { - nextSubtitleEventIndex++; - subtitleNextEventTimeUs = getNextEventTime(); - textRendererNeedsUpdate = true; - } + @Override + public String getName() { + return TAG; } - if (nextSubtitle != null) { - SubtitleOutputBuffer nextSubtitle = this.nextSubtitle; - if (nextSubtitle.isEndOfStream()) { - if (!textRendererNeedsUpdate && getNextEventTime() == Long.MAX_VALUE) { - if (decoderReplacementState == REPLACEMENT_STATE_WAIT_END_OF_STREAM) { + + @Override + public @Capabilities int supportsFormat(Format format) { + if (decoderFactory.supportsFormat(format)) { + return RendererCapabilities.create( + format.cryptoType == C.CRYPTO_TYPE_NONE ? C.FORMAT_HANDLED : C.FORMAT_UNSUPPORTED_DRM); + } else if (MimeTypes.isText(format.sampleMimeType)) { + return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_SUBTYPE); + } else { + return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE); + } + } + + /** + * Sets the position at which to stop rendering the current stream. + * + *

    Must be called after {@link #setCurrentStreamFinal()}. + * + * @param streamEndPositionUs The position to stop rendering at or {@link C#LENGTH_UNSET} to + * render until the end of the current stream. + */ + // TODO(internal b/181312195): Remove this when it's no longer needed once subtitles are decoded + // on the loading side of SampleQueue. + public void setFinalStreamEndPositionUs(long streamEndPositionUs) { + checkState(isCurrentStreamFinal()); + this.finalStreamEndPositionUs = streamEndPositionUs; + } + + @Override + protected void onStreamChanged(Format[] formats, long startPositionUs, long offsetUs) { + streamFormat = formats[0]; + if (decoder != null) { + decoderReplacementState = REPLACEMENT_STATE_SIGNAL_END_OF_STREAM; + } else { + initDecoder(); + } + } + + @Override + protected void onPositionReset(long positionUs, boolean joining) { + clearOutput(); + inputStreamEnded = false; + outputStreamEnded = false; + finalStreamEndPositionUs = C.TIME_UNSET; + if (decoderReplacementState != REPLACEMENT_STATE_NONE) { replaceDecoder(); - } else { + } else { + releaseBuffers(); + checkNotNull(decoder).flush(); + } + } + + @Override + public void render(long positionUs, long elapsedRealtimeUs) { + if (isCurrentStreamFinal() + && finalStreamEndPositionUs != C.TIME_UNSET + && positionUs >= finalStreamEndPositionUs) { releaseBuffers(); outputStreamEnded = true; - } } - } else if (nextSubtitle.timeUs <= positionUs) { - // Advance to the next subtitle. Sync the next event index and trigger an update. - if (subtitle != null) { - subtitle.release(); - } - nextSubtitleEventIndex = nextSubtitle.getNextEventTimeIndex(positionUs); - subtitle = nextSubtitle; - this.nextSubtitle = null; - textRendererNeedsUpdate = true; - } - } - if (textRendererNeedsUpdate) { - // If textRendererNeedsUpdate then subtitle must be non-null. - checkNotNull(subtitle); - // textRendererNeedsUpdate is set and we're playing. Update the renderer. - updateOutput(subtitle.getCues(positionUs)); - } - - if (decoderReplacementState == REPLACEMENT_STATE_WAIT_END_OF_STREAM) { - return; - } - - try { - while (!inputStreamEnded) { - @Nullable SubtitleInputBuffer nextInputBuffer = this.nextInputBuffer; - if (nextInputBuffer == null) { - nextInputBuffer = checkNotNull(decoder).dequeueInputBuffer(); - if (nextInputBuffer == null) { + if (outputStreamEnded) { return; - } - this.nextInputBuffer = nextInputBuffer; } - if (decoderReplacementState == REPLACEMENT_STATE_SIGNAL_END_OF_STREAM) { - nextInputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); - checkNotNull(decoder).queueInputBuffer(nextInputBuffer); - this.nextInputBuffer = null; - decoderReplacementState = REPLACEMENT_STATE_WAIT_END_OF_STREAM; - return; - } - // Try and read the next subtitle from the source. - @ReadDataResult int result = readSource(formatHolder, nextInputBuffer, /* readFlags= */ 0); - if (result == C.RESULT_BUFFER_READ) { - if (nextInputBuffer.isEndOfStream()) { - inputStreamEnded = true; - waitingForKeyFrame = false; - } else { - @Nullable Format format = formatHolder.format; - if (format == null) { - // We haven't received a format yet. - return; + + if (nextSubtitle == null) { + checkNotNull(decoder).setPositionUs(positionUs); + try { + nextSubtitle = checkNotNull(decoder).dequeueOutputBuffer(); + } catch (SubtitleDecoderException e) { + handleDecoderError(e); + return; } - nextInputBuffer.subsampleOffsetUs = format.subsampleOffsetUs; - nextInputBuffer.flip(); - waitingForKeyFrame &= !nextInputBuffer.isKeyFrame(); - } - if (!waitingForKeyFrame) { - checkNotNull(decoder).queueInputBuffer(nextInputBuffer); - this.nextInputBuffer = null; - } - } else if (result == C.RESULT_NOTHING_READ) { - return; } - } - } catch (SubtitleDecoderException e) { - handleDecoderError(e); + + if (getState() != STATE_STARTED) { + return; + } + + boolean textRendererNeedsUpdate = false; + if (subtitle != null) { + // We're iterating through the events in a subtitle. Set textRendererNeedsUpdate if we + // advance to the next event. + long subtitleNextEventTimeUs = getNextEventTime(); + while (subtitleNextEventTimeUs <= positionUs) { + nextSubtitleEventIndex++; + subtitleNextEventTimeUs = getNextEventTime(); + textRendererNeedsUpdate = true; + } + } + if (nextSubtitle != null) { + SubtitleOutputBuffer nextSubtitle = this.nextSubtitle; + if (nextSubtitle.isEndOfStream()) { + if (!textRendererNeedsUpdate && getNextEventTime() == Long.MAX_VALUE) { + if (decoderReplacementState == REPLACEMENT_STATE_WAIT_END_OF_STREAM) { + replaceDecoder(); + } else { + releaseBuffers(); + outputStreamEnded = true; + } + } + } else if (nextSubtitle.timeUs <= positionUs) { + // Advance to the next subtitle. Sync the next event index and trigger an update. + if (subtitle != null) { + subtitle.release(); + } + nextSubtitleEventIndex = nextSubtitle.getNextEventTimeIndex(positionUs); + subtitle = nextSubtitle; + this.nextSubtitle = null; + textRendererNeedsUpdate = true; + } + } + + if (textRendererNeedsUpdate) { + // If textRendererNeedsUpdate then subtitle must be non-null. + checkNotNull(subtitle); + // textRendererNeedsUpdate is set and we're playing. Update the renderer. + updateOutput(subtitle.getCues(positionUs)); + } + + if (decoderReplacementState == REPLACEMENT_STATE_WAIT_END_OF_STREAM) { + return; + } + + try { + while (!inputStreamEnded) { + @Nullable SubtitleInputBuffer nextInputBuffer = this.nextInputBuffer; + if (nextInputBuffer == null) { + nextInputBuffer = checkNotNull(decoder).dequeueInputBuffer(); + if (nextInputBuffer == null) { + return; + } + this.nextInputBuffer = nextInputBuffer; + } + if (decoderReplacementState == REPLACEMENT_STATE_SIGNAL_END_OF_STREAM) { + nextInputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); + checkNotNull(decoder).queueInputBuffer(nextInputBuffer); + this.nextInputBuffer = null; + decoderReplacementState = REPLACEMENT_STATE_WAIT_END_OF_STREAM; + return; + } + // Try and read the next subtitle from the source. + @ReadDataResult int result = readSource(formatHolder, nextInputBuffer, /* readFlags= */ 0); + if (result == C.RESULT_BUFFER_READ) { + if (nextInputBuffer.isEndOfStream()) { + inputStreamEnded = true; + waitingForKeyFrame = false; + } else { + @Nullable Format format = formatHolder.format; + if (format == null) { + // We haven't received a format yet. + return; + } + nextInputBuffer.subsampleOffsetUs = format.subsampleOffsetUs; + nextInputBuffer.flip(); + waitingForKeyFrame &= !nextInputBuffer.isKeyFrame(); + } + if (!waitingForKeyFrame) { + checkNotNull(decoder).queueInputBuffer(nextInputBuffer); + this.nextInputBuffer = null; + } + } else if (result == C.RESULT_NOTHING_READ) { + return; + } + } + } catch (SubtitleDecoderException e) { + handleDecoderError(e); + } } - } - @Override - protected void onDisabled() { - streamFormat = null; - finalStreamEndPositionUs = C.TIME_UNSET; - clearOutput(); - releaseDecoder(); - } - - @Override - public boolean isEnded() { - return outputStreamEnded; - } - - @Override - public boolean isReady() { - // Don't block playback whilst subtitles are loading. - // Note: To change this behavior, it will be necessary to consider [Internal: b/12949941]. - return true; - } - - private void releaseBuffers() { - nextInputBuffer = null; - nextSubtitleEventIndex = C.INDEX_UNSET; - if (subtitle != null) { - subtitle.release(); - subtitle = null; + @Override + protected void onDisabled() { + streamFormat = null; + finalStreamEndPositionUs = C.TIME_UNSET; + clearOutput(); + releaseDecoder(); } - if (nextSubtitle != null) { - nextSubtitle.release(); - nextSubtitle = null; + + @Override + public boolean isEnded() { + return outputStreamEnded; } - } - private void releaseDecoder() { - releaseBuffers(); - checkNotNull(decoder).release(); - decoder = null; - decoderReplacementState = REPLACEMENT_STATE_NONE; - } - - private void initDecoder() { - waitingForKeyFrame = true; - decoder = decoderFactory.createDecoder(checkNotNull(streamFormat)); - } - - private void replaceDecoder() { - releaseDecoder(); - initDecoder(); - } - - private long getNextEventTime() { - if (nextSubtitleEventIndex == C.INDEX_UNSET) { - return Long.MAX_VALUE; - } - checkNotNull(subtitle); - return nextSubtitleEventIndex >= subtitle.getEventTimeCount() - ? Long.MAX_VALUE - : subtitle.getEventTime(nextSubtitleEventIndex); - } - - private void updateOutput(List cues) { - if (outputHandler != null) { - outputHandler.obtainMessage(MSG_UPDATE_OUTPUT, cues).sendToTarget(); - } else { - invokeUpdateOutputInternal(cues); - } - } - - private void clearOutput() { - updateOutput(Collections.emptyList()); - } - - @SuppressWarnings("unchecked") - @Override - public boolean handleMessage(Message msg) { - switch (msg.what) { - case MSG_UPDATE_OUTPUT: - invokeUpdateOutputInternal((List) msg.obj); + @Override + public boolean isReady() { + // Don't block playback whilst subtitles are loading. + // Note: To change this behavior, it will be necessary to consider [Internal: b/12949941]. return true; - default: - throw new IllegalStateException(); } - } - private void invokeUpdateOutputInternal(List cues) { - output.onCues(cues); - output.onCues(new CueGroup(cues)); - } + private void releaseBuffers() { + nextInputBuffer = null; + nextSubtitleEventIndex = C.INDEX_UNSET; + if (subtitle != null) { + subtitle.release(); + subtitle = null; + } + if (nextSubtitle != null) { + nextSubtitle.release(); + nextSubtitle = null; + } + } - /** - * Called when {@link #decoder} throws an exception, so it can be logged and playback can - * continue. - * - *

    Logs {@code e} and resets state to allow decoding the next sample. - */ - private void handleDecoderError(SubtitleDecoderException e) { - Log.e(TAG, "Subtitle decoding failed. streamFormat=" + streamFormat, e); - clearOutput(); - replaceDecoder(); - } + private void releaseDecoder() { + releaseBuffers(); + checkNotNull(decoder).release(); + decoder = null; + decoderReplacementState = REPLACEMENT_STATE_NONE; + } + + private void initDecoder() { + waitingForKeyFrame = true; + decoder = decoderFactory.createDecoder(checkNotNull(streamFormat)); + } + + private void replaceDecoder() { + releaseDecoder(); + initDecoder(); + } + + private long getNextEventTime() { + if (nextSubtitleEventIndex == C.INDEX_UNSET) { + return Long.MAX_VALUE; + } + checkNotNull(subtitle); + return nextSubtitleEventIndex >= subtitle.getEventTimeCount() + ? Long.MAX_VALUE + : subtitle.getEventTime(nextSubtitleEventIndex); + } + + private void updateOutput(List cues) { + if (outputHandler != null) { + outputHandler.obtainMessage(MSG_UPDATE_OUTPUT, cues).sendToTarget(); + } else { + invokeUpdateOutputInternal(cues); + } + } + + private void clearOutput() { + updateOutput(Collections.emptyList()); + } + + @SuppressWarnings("unchecked") + @Override + public boolean handleMessage(Message msg) { + switch (msg.what) { + case MSG_UPDATE_OUTPUT: + invokeUpdateOutputInternal((List) msg.obj); + return true; + default: + throw new IllegalStateException(); + } + } + + private void invokeUpdateOutputInternal(List cues) { + // See https://github.com/google/ExoPlayer/issues/7934 + // SubripDecoder texts tend to be DIMEN_UNSET which pushes up the + // subs unlike WEBVTT which creates an inconsistency + + List fixedCues = cues.stream().map( + cue -> { + Cue.Builder builder = cue.buildUpon(); + + if (cue.line == DIMEN_UNSET) + builder.setLine(-1f, LINE_TYPE_NUMBER); + + return builder.setSize(DIMEN_UNSET).build(); + } + ).collect(Collectors.toList()); + + output.onCues(fixedCues); + output.onCues(new CueGroup(fixedCues)); + } + + /** + * Called when {@link #decoder} throws an exception, so it can be logged and playback can + * continue. + * + *

    Logs {@code e} and resets state to allow decoding the next sample. + */ + private void handleDecoderError(SubtitleDecoderException e) { + Log.e(TAG, "Subtitle decoding failed. streamFormat=" + streamFormat, e); + clearOutput(); + replaceDecoder(); + } } From eb90b79bf9abfceedc9b9967e5d5260f84344745 Mon Sep 17 00:00:00 2001 From: SANCTI-afk <63229113+SANCTI-afk@users.noreply.github.com> Date: Sat, 3 Dec 2022 15:17:33 +0200 Subject: [PATCH 193/888] Arabic language update for latest keys (#231) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * arabicLanguage100% * Update strings.xml * Arabic Full * translated(preffVplayerBtn) * renamed homeBtn for arabic layout * Arabic language update No more typical × Common language instead ✓ * Arabic translation minor update Last commit ready to be merged * arabic language update for latest keys * ready to merge * last minor edit and ready to merge --- app/src/main/res/values-ar/strings.xml | 34 ++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index bda3cf2a..b3676fa6 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -6,7 +6,7 @@ الملصق الرئيسي التالي عشوائي - ارجع للخلف + رجوع تغيير المصدر معاينة الخلفية @@ -38,7 +38,7 @@ …تحميل أشاهده - في الانتظار + في الإنتظار مكتمل مهمل أخطط لمشاهدته @@ -100,7 +100,7 @@ لون الخلفية لون النافذة نوع الحافة - ارتفاع الترجمة + إرتفاع الترجمة الخط حجم الخط @@ -111,7 +111,7 @@ لم يتم إعطاء موز تحديد اللغة تلقائيًا - تحميل اللغات + لغات التحميل لغة الترجمة إضغط بإستمرار لإعادة التعيين للإعدادات الافتراضية إستيراد خطوط بوضعها هنا %s @@ -185,9 +185,10 @@ إخفاء جودة الفيديو المختارة من نتائج البحث تحديث الإضافات تلقائيًا + تنزيل الإضافات تلقائيًا التحديث التلقائي البحث تلقائيًا عن التحديثات الجديدة عند البداية - التحديث إلى الاصدارات التجريبيه (بيتا) + التحديث إلى الاصدارات التجريبية (بيتا) البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط Github تطبيق روايات خفيف من نفس المطورين @@ -255,7 +256,7 @@ فيلم مسلسل - كارتون + كرتون @string/anime @string/ova تورنت @@ -353,7 +354,7 @@ عام زر العشوائي إظهار زر العشوائي علي الشاشة الرئيسية - لغات الموفر + لغات المزود واجهة التطبيق المحتوي المفضل تفعيل محتوي البالغين داخل المزودين المدعومين @@ -378,13 +379,13 @@ mal_key opensubtitles_key nginx_key - password123 - MyCoolUsername - hello@world.com + كلمة المرور + إسم المستخدم + البريد الإلكتروني 127.0.0.1 - MyCoolSite - example.com - Language code (en) + إسم الموقع + رابط الموقع + اللغة (الإنجليزية) + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/background_card" + android:layout_width="114dp" + android:layout_height="180dp" + android:layout_margin="2dp" + android:layout_marginBottom="2dp" + android:elevation="10dp" + android:foreground="@drawable/outline_drawable" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:id="@+id/imageView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> + android:id="@+id/title_shadow" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_gravity="bottom" + android:clickable="false" + android:focusable="false" + android:src="@drawable/title_shadow" + tools:ignore="ContentDescription" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="@color/textColor" + android:textStyle="bold" + tools:text="The Perfect Run" /> + android:id="@+id/search_item_download_play" + android:layout_width="60dp" + android:layout_height="60dp" + android:layout_gravity="center" + android:src="@drawable/play_button" /> + android:id="@+id/watchProgress" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="5dp" + android:layout_gravity="bottom" + android:layout_marginBottom="-1.5dp" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" + tools:progress="50" /> - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="end" + android:orientation="vertical"> + android:id="@+id/text_is_dub" + style="@style/DubButton" + android:layout_gravity="end" /> + android:id="@+id/text_is_sub" + style="@style/SubButton" + android:layout_gravity="end" /> + android:id="@+id/text_flag" + style="@style/SearchBox" + android:layout_gravity="end" + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="🇸🇪" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/home_result_grid_expanded.xml b/app/src/main/res/layout/home_result_grid_expanded.xml index 3cf4e7f9..b697c1de 100644 --- a/app/src/main/res/layout/home_result_grid_expanded.xml +++ b/app/src/main/res/layout/home_result_grid_expanded.xml @@ -5,58 +5,58 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/background_card" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="2dp" + android:backgroundTint="@color/transparent" + android:foreground="@drawable/outline_drawable" + app:cardCornerRadius="@dimen/rounded_image_radius" + app:cardElevation="0dp"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:id="@+id/image_holder" + android:layout_width="114dp" + android:layout_height="180dp" + android:elevation="10dp" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:id="@+id/imageView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> + android:id="@+id/search_item_download_play" + android:layout_width="60dp" + android:layout_height="60dp" + android:layout_gravity="center" + android:src="@drawable/play_button" /> + android:id="@+id/watchProgress" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="5dp" + android:layout_gravity="bottom" + android:layout_marginBottom="-1.5dp" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" + tools:progress="50" /> - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="end" + android:orientation="vertical"> + android:id="@+id/text_is_dub" + style="@style/DubButton" + android:layout_gravity="end" /> + android:id="@+id/text_is_sub" + style="@style/SubButton" + android:layout_gravity="end" /> + android:id="@+id/text_flag" + style="@style/SearchBox" + android:layout_gravity="end" + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="🇸🇪" + tools:visibility="visible" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:minLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="?attr/textColor" + android:textSize="13sp" + tools:text="The Perfect Run\nThe Perfect Run\nhello" /> diff --git a/app/src/main/res/layout/search_result_grid.xml b/app/src/main/res/layout/search_result_grid.xml index 98fe5812..f3c35ca4 100644 --- a/app/src/main/res/layout/search_result_grid.xml +++ b/app/src/main/res/layout/search_result_grid.xml @@ -1,98 +1,89 @@ + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/outline_drawable" + android:orientation="vertical"> + + + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" /> - - + android:id="@+id/title_shadow" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_gravity="bottom" + android:clickable="false" + android:focusable="false" + android:src="@drawable/title_shadow" + tools:ignore="ContentDescription" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="@color/textColor" + android:textStyle="bold" /> - + + + + + + + - - - - - - + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="🇸🇪" + tools:visibility="visible" /> diff --git a/app/src/main/res/layout/search_result_grid_expanded.xml b/app/src/main/res/layout/search_result_grid_expanded.xml index 710c6cf8..eb859af5 100644 --- a/app/src/main/res/layout/search_result_grid_expanded.xml +++ b/app/src/main/res/layout/search_result_grid_expanded.xml @@ -1,90 +1,81 @@ + android:clickable="true" + android:focusable="true" + android:foreground="@drawable/outline_drawable" + android:orientation="vertical"> + android:id="@+id/background_card" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="2dp" + android:layout_marginBottom="2dp" + android:elevation="10dp" + app:cardBackgroundColor="?attr/primaryGrayBackground" + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:layout_height="match_parent" + android:contentDescription="@string/search_poster_img_des" + android:duplicateParentState="true" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> - + + + + + + + - - - - - - + android:background="@color/transparent" + android:textSize="20sp" + android:visibility="gone" + tools:text="🇸🇪" + tools:visibility="visible" /> + android:id="@+id/imageText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:ellipsize="end" + android:gravity="center" + android:maxLines="2" + android:minLines="2" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingEnd="5dp" + android:paddingBottom="5dp" + android:textColor="?attr/textColor" + android:textSize="13sp" + tools:text="The Perfect Run\nThe Perfect Run" /> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c3e51ab5..7c2e798b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -25,13 +25,13 @@ #FFF #000 - #3d50fa + #121950 #121213 #3B65F5 - #F54A3B + #571711 #F53B66 - #3BF585 + #BEC8FF ?attr/colorPrimaryDark #FF6F63 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e748868b..dac8b9cd 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -16,5 +16,4 @@ 2000 3dp - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9c2f62fc..4fde7ae8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -97,6 +97,24 @@ @color/white @color/whiteText + + + + + + - + + + + + + + + + From 2771dcb6124726ade7aec8a9e46655f5ff6987f9 Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Sat, 28 Jan 2023 22:38:55 +0000 Subject: [PATCH 303/888] update version code --- app/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 808c0cc3..93e386b6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,8 +47,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 56 - versionName = "3.5.0" + versionCode = 57 + versionName = "4.0.0" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") @@ -253,4 +253,4 @@ tasks.withType().configureEach { } } } -} \ No newline at end of file +} From 9905618a47d9f3d47abe5a4f627fce0733e1f072 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 29 Jan 2023 16:15:28 +0100 Subject: [PATCH 304/888] Added safe mode file as a last resort --- .../lagradost/cloudstream3/MainActivity.kt | 9 +++++++-- .../cloudstream3/plugins/PluginManager.kt | 19 +++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 5720b7a7..eddec15e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -347,7 +347,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } - var lastPopup : SearchResponse? = null + var lastPopup: SearchResponse? = null fun loadPopup(result: SearchResponse) { lastPopup = result viewModel.load( @@ -716,7 +716,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { changeStatusBarState(isEmulatorSettings()) - if (lastError == null) { + + if (PluginManager.checkSafeModeFile()) { + normalSafeApiCall { + showToast(this, R.string.safe_mode_file, Toast.LENGTH_LONG) + } + } else if (lastError == null) { ioSafe { getKey(USER_SELECTED_HOMEPAGE_API)?.let { homeApi -> mainPluginsLoadedEvent.invoke(loadSinglePlugin(this@MainActivity, homeApi)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 54fe5d75..28dfc092 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -144,8 +144,10 @@ object PluginManager { return getKey(PLUGINS_KEY_LOCAL) ?: emptyArray() } - private val LOCAL_PLUGINS_PATH = - Environment.getExternalStorageDirectory().absolutePath + "/Cloudstream3/plugins" + private val CLOUD_STREAM_FOLDER = + Environment.getExternalStorageDirectory().absolutePath + "/Cloudstream3/" + + private val LOCAL_PLUGINS_PATH = CLOUD_STREAM_FOLDER + "plugins" public var currentlyLoading: String? = null @@ -421,6 +423,19 @@ object PluginManager { afterPluginsLoadedEvent.invoke(forceReload) } + /** + * This can be used to override any extension loading to fix crashes! + * @return true if safe mode file is present + **/ + fun checkSafeModeFile(): Boolean { + val folder = File(CLOUD_STREAM_FOLDER) + if (!folder.exists()) return false + val files = folder.listFiles { _, name -> + name.equals("safe", ignoreCase = true) + } + return files?.any() ?: false + } + /** * @return True if successful, false if not * */ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cee6bccc..a4375ce3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -630,4 +630,5 @@ Open with 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. From fd2648df459e4cdc0089ea5119de6da349d211c5 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 29 Jan 2023 16:31:16 +0100 Subject: [PATCH 305/888] made the checkSafeModeFile() crash-proof --- .../cloudstream3/plugins/PluginManager.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 28dfc092..3533d6a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -428,12 +428,14 @@ object PluginManager { * @return true if safe mode file is present **/ fun checkSafeModeFile(): Boolean { - val folder = File(CLOUD_STREAM_FOLDER) - if (!folder.exists()) return false - val files = folder.listFiles { _, name -> - name.equals("safe", ignoreCase = true) - } - return files?.any() ?: false + return normalSafeApiCall { + val folder = File(CLOUD_STREAM_FOLDER) + if (!folder.exists()) return@normalSafeApiCall false + val files = folder.listFiles { _, name -> + name.equals("safe", ignoreCase = true) + } + files?.any() + } ?: false } /** From 6e9b1cb855fa298f0df3c8b015a4cd8583821ddc Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:51:25 +0100 Subject: [PATCH 306/888] Made source dialog fullscreen and added some Extractors --- .../cloudstream3/extractors/Filesim.kt | 41 ++++++++++++++----- .../cloudstream3/extractors/GuardareStream.kt | 5 +++ .../cloudstream3/ui/player/GeneratorPlayer.kt | 10 ++--- .../cloudstream3/utils/ExtractorApi.kt | 2 + .../layout/player_select_source_and_subs.xml | 2 + 5 files changed, 42 insertions(+), 18 deletions(-) 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 8e3dc730..bc910a7e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -1,32 +1,51 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import java.net.URI + +class FileMoon : Filesim() { + override val mainUrl = "https://filemoon.to" + override val name = "FileMoon" +} open class Filesim : ExtractorApi() { override val name = "Filesim" override val mainUrl = "https://files.im" override val requiresReferer = false - override suspend fun getUrl(url: String, referer: String?): List { - val sources = mutableListOf() + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { with(app.get(url).document) { - this.select("script").map { script -> + this.select("script").forEach { script -> if (script.data().contains("eval(function(p,a,c,k,e,d)")) { - val data = getAndUnpack(script.data()).substringAfter("sources:[").substringBefore("]") - tryParseJson>("[$data]")?.map { - M3u8Helper.generateM3u8( - name, - it.file, - "$mainUrl/", - ).forEach { m3uData -> sources.add(m3uData) } + val data = getAndUnpack(script.data()) + val foundData = Regex("""sources:\[(.*?)]""").find(data)?.groupValues?.get(1) ?: return@forEach + val fixedData = foundData.replace("file:", """"file":""") + + parseJson>("[$fixedData]").forEach { + callback.invoke( + ExtractorLink( + name, + name, + it.file, + "$mainUrl/", + Qualities.Unknown.value, + URI(it.file).path.endsWith(".m3u8") + ) + ) } } } } - return sources } private data class ResponseSource( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt index f25cb5ba..2adc00d5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt @@ -6,6 +6,11 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* +class Vanfem : GuardareStream() { + override var name = "Vanfem" + override var mainUrl = "https://vanfem.com/" +} + class CineGrabber : GuardareStream() { override var name = "CineGrabber" override var mainUrl = "https://cinegrabber.com" diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e15dcee6..67f58195 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -11,9 +11,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.inputmethod.EditorInfo import android.widget.* -import android.widget.TextView.OnEditorActionListener import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.animation.addListener @@ -528,7 +526,7 @@ class GeneratorPlayer : FullScreenPlayer() { } } - var selectSourceDialog: AlertDialog? = null + var selectSourceDialog: Dialog? = null // var selectTracksDialog: AlertDialog? = null override fun showMirrorsDialogue() { @@ -540,10 +538,8 @@ class GeneratorPlayer : FullScreenPlayer() { player.handleEvent(CSPlayerEvent.Pause) val currentSubtitles = sortSubs(currentSubs) - val sourceBuilder = AlertDialog.Builder(ctx, R.style.AlertDialogCustomBlack) - .setView(R.layout.player_select_source_and_subs) - - val sourceDialog = sourceBuilder.create() + val sourceDialog = Dialog(ctx, R.style.AlertDialogCustomBlack) + sourceDialog.setContentView(R.layout.player_select_source_and_subs) selectSourceDialog = sourceDialog 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 bd4f8705..1ad3639b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -291,6 +291,7 @@ val extractorApis: MutableList = arrayListOf( Supervideo(), GuardareStream(), CineGrabber(), + Vanfem(), // StreamSB.kt works // SBPlay(), @@ -321,6 +322,7 @@ val extractorApis: MutableList = arrayListOf( DesuDrive(), Filesim(), + FileMoon(), Linkbox(), Acefile(), SpeedoStream(), diff --git a/app/src/main/res/layout/player_select_source_and_subs.xml b/app/src/main/res/layout/player_select_source_and_subs.xml index 369f6776..067e4ad5 100644 --- a/app/src/main/res/layout/player_select_source_and_subs.xml +++ b/app/src/main/res/layout/player_select_source_and_subs.xml @@ -44,6 +44,7 @@ android:nextFocusLeft="@id/sort_subtitles" android:nextFocusRight="@id/apply_btt" android:requiresFadingEdge="vertical" + tools:layout_height="100dp" tools:listitem="@layout/sort_bottom_single_choice" /> @@ -117,6 +118,7 @@ android:nextFocusLeft="@id/sort_providers" android:nextFocusRight="@id/cancel_btt" android:requiresFadingEdge="vertical" + tools:layout_height="200dp" tools:listfooter="@layout/sort_bottom_footer_add_choice" tools:listitem="@layout/sort_bottom_single_choice" /> From c7c5fa250e177dbf22a9ea463c721c63f3feb79a Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 31 Jan 2023 09:12:25 +0100 Subject: [PATCH 307/888] Translated using Weblate (Polish) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Russian) Currently translated at 96.5% (562 of 582 strings) Translated using Weblate (Russian) Currently translated at 91.4% (532 of 582 strings) Translated using Weblate (Greek) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Russian) Currently translated at 90.3% (526 of 582 strings) Translated using Weblate (Russian) Currently translated at 90.3% (526 of 582 strings) Translated using Weblate (Russian) Currently translated at 88.3% (514 of 582 strings) Translated using Weblate (Russian) Currently translated at 87.9% (512 of 582 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (German) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Italian) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (582 of 582 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Polish) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Italian) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Vietnamese) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (581 of 581 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (581 of 581 strings) Co-authored-by: Aitor Salaberria Co-authored-by: Alex Georgiou Co-authored-by: Cliff Heraldo Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Hosted Weblate Co-authored-by: JL Pilgram Co-authored-by: Julian Co-authored-by: NickSkier Co-authored-by: Rex_sa Co-authored-by: Sdarfeesh Co-authored-by: Skrripy Co-authored-by: Translator-3000 Co-authored-by: eightyy8 Co-authored-by: gallegonovato Co-authored-by: gnu-ewm Co-authored-by: kaajjo Co-authored-by: tuan041 Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/el/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 17 ++++ app/src/main/res/values-de/strings.xml | 17 ++++ app/src/main/res/values-el/strings.xml | 20 ++++- app/src/main/res/values-es/strings.xml | 17 ++++ app/src/main/res/values-in/strings.xml | 21 ++++- app/src/main/res/values-it/strings.xml | 17 ++++ app/src/main/res/values-pl/strings.xml | 17 ++++ app/src/main/res/values-ru/strings.xml | 107 ++++++++++++++++++++----- app/src/main/res/values-uk/strings.xml | 15 ++++ app/src/main/res/values-vi/strings.xml | 53 ++++++++---- app/src/main/res/values-zh/strings.xml | 17 ++++ 11 files changed, 278 insertions(+), 40 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3a0c97e7..f318478e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -521,4 +521,21 @@ بدأ التحديث تم تنزيل الإضافة إزالة من المشاهدة + الترتيب الأبجدي (من الألف إلى الياء) + اختر المكتبة + المتصفح + محدث (من الأحدث إلى الأقدم) + يبدو أن هذه القائمة فارغة ، حاول التبديل إلى قائمة أخرى + التقييم (من الأعلى إلى الأدنى) + التقييم (من الأدنى إلى الأعلى) + الترتيب الأبجدي (من ي إلى أ) + يبدو أن مكتبتك فارغة :( +\nتسجيل الدخول إلى حساب مكتبة أو إضافة عروض إلى مكتبتك المحلية + محدث (من القديم إلى الجديد) + فرز حسب + افرز + فتح بواسطة + المكتبة + تم العثور على ملف الوضع الآمن! +\nلا يتم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف. \ 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 00aa5b97..63ed5444 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -489,4 +489,21 @@ Die Anwendung wird beim Beenden aktualisiert Das Plugin wurde heruntergeladen Von geschaut entfernen + Bibliothek + Browser + Sortieren nach + Sortieren + Bewertung (gut bis schlecht) + Bewertung (schlecht bis gut) + Aktualisiert (neu bis alt) + Aktualisiert (alt bis neu) + Alphabetisch (A bis Z) + Alphabetisch (Z bis A) + Bibliothek auswählen + Öffnen mit + Sieht aus, als wäre deine Bibliothek leer :( +\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu + 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. \ 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 dc7088cc..0d0b7fb2 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -314,7 +314,7 @@ Αναφορά κατάρρευσης Τι θα θέλατε να δείτε Έγινε - Πρόσθετα + Extensions Προσθήκη αποθετηρίου Όνομα αποθετηρίου Σύνδεσμος αποθετηρίου @@ -490,4 +490,22 @@ Το πρόσθετο κατέβει Ενημέρωση ξεκίνησε Η εφαρμογή θα ενημερωθεί κατά την έξοδο + Αλφαβητικά (Ω προς Α) + Ταξινόμηση + Κριτική (Χαμηλή προς Υψηλή) + Ενημερωμένο (Καινούριο προς παλιό) + Ενημερωμένο (Παλιό προς Καινούργιο) + Βιβλιοθήκη + Κριτική (Υψηλή προς χαμηλή) + Ταξινόμηση με βάση + Αλφαβητικά (Α προς Ω) + Διάλεξε βιβλιοθήκη + Φαίνεται πως η λίστα είναι άδεια, δοκίμασε να μεταβείς σε μία άλλη + Αφαίρεση από παρακολουθημένα + Περιηγητής + Άνοιγμα με + Φαίνεται πως η βιβλιοθήκη σου είναι άδεια :( +\nΣυνδέσου σε έναν λογαριασμό που έχει βιβλιοθήκη, ή πρόσθεσε σειρές στην τοπική βιβλιοθήκη σου + Βρέθηκε αρχείο Ασφαλούς Λειτουργίας! +\nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο. \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 08ae5bf1..37e5c431 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -489,4 +489,21 @@ Actualización iniciada Complemento descargado Quitar de visto + Ordenar por + Ordenar + Valoración (más a menos) + Valoración (menos a más) + Actualizado (nuevo a viejo) + Actualizado (viejo a nuevo) + Alfabéticamente (A a Z) + Navegador + Biblioteca + Parece que esta lista está vacía, intenta cambiar a otra + Alfabéticamente (Z a A) + Seleccionar biblioteca + Abrir con + Parece que tu biblioteca está vacía :( +\nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local + ¡Se encontró un archivo en modo seguro! +\nNo cargar ninguna extensión al inicio hasta que se elimine el archivo. \ 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 83dc6ee9..96c5950b 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -453,7 +453,7 @@ Semua fitur tambahkan dimatikan karena crash, untuk memudahkanmu mencari penyebab crash. Kode bahasa (en) Ambil dari internet - Putar vidio di bahasa ini + Putar video di bahasa ini Tambah Repositori Pilih ini untuk menghapus semua repositori plugin Lewati pengaturan @@ -483,7 +483,7 @@ Gerakan Beberapa perangkat tidak mendukung penginstal paket mode baru. Coba mode lama jika pembaruan tidak dapat diinstal. Aksi - Referensi + Referer Ya Pasang dulu fitur tambahan Semua Bahasa @@ -512,4 +512,21 @@ Aplikasi akan diperbaharui pada saat keluar Pembaharuan Dimulai Hapus dari tontonan + Browser + Pilih pustaka + Yahh daftar pustaka kamu kosong :( +\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu + Pustaka + Urutkan berdasar + Urutkan + Peringkat (Rendah ke Tinggi) + Update (Lama ke Terbaru) + Peringkat (Tinggi ke Rendah) + Update (Terbaru ke Lama) + Abjad (A ke Z) + Abjad (Z ke A) + Buka dengan + Yahh daftar ini kosong, coba ganti ke yang lain + Mode aman file ditemukan! +\nTidak memuat ekstensi pada startup sampai berkas dihapus. \ 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 b4ba292e..419818a2 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -511,4 +511,21 @@ Aggiornamento avviato Plugin scaricato Rimuovi dai già visti + Browser + Ordina per + Punteggio (Decrescente) + Punteggio (Crescente) + Aggiornato (Da nuovo a vecchio) + Aggiornato (Da vecchio a nuovo) + Alfabetico (A - Z) + Alfabetico (Z - A) + Sembra che la tua libreria sia vuota :( +\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale + Seleziona libreria + Apri con + Libreria + Ordina + 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. \ 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 244ae2e1..e4b74300 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -492,4 +492,21 @@ Rozpoczęto aktualizację Pobrano rozszerzenie Usuń z obejrzanych + Przeglądarka + Data aktualizacji (od nowego do starego) + Sortuj według + Sortuj + Otwórz za pomocą + Ocena (od najwyższej do najniższej) + Ocena (od najniższej do najwyższej) + Data aktualizacji (od starego do nowego) + Alfabetycznie (od A do Z) + Alfabetycznie (od Z do A) + Wybierz bibliotekę + Biblioteka + Wygląda na to, że twoja biblioteka jest pusta :( +\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki + 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. \ 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 39e74794..537bdb7d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -25,12 +25,12 @@ Серия %d будет выпущен в Плакат \@нить/результат_плокат_картинка_ - Серия плакат - Главный плакат + Постер Эпизода + Главный постер Следующий случайный Вернуться Изменить поставщика - Фон предпросмотр + Предпросмотр фона Скорость (%.2fx) Оценили: %.1f Новое обновление найдено! @@ -48,31 +48,31 @@ Поиск %s… Нет данных Дополнительные опции - Следующий серия + Следующий эпизод Жанры Поделиться - Открыть в браузер + Открыть в браузере Пропустить загрузку Просмотр Приостановленно Завершено Брошенный - План по смотреть + План посмотреть Никто Пересмотрю Смотреть фильм - Проиграть трейлер + Воспроизвести трейлер Воспроизвести Livestream Источники Субтитры - Проиграть серия + Воспроизвести эпизод Повторная попытка подключение… Вернуться - Скачали + Скачано Скачивание Скачать приостановленный Скачать начатый - Скачать отменено + Скачать отменённый Скачать выполнено Инфо Обновление началось @@ -116,8 +116,8 @@ Удалить файл Проиграть файл Внутренняя память - Скачать резюме - Приостановить скачать + Продолжить Скачать + Приостановить скачивание Отключить автоматическое информирование об ошибках Импортируйте шрифты поместив их в %s Продолжить смотреть @@ -174,7 +174,7 @@ Э Эпизоды не найдены Удалить файл - Возобновить + Продолжить -30 +30 Это будет удалено безвозвратно%s @@ -193,7 +193,7 @@ Другое Ошибка загрузки, проверьте разрешения хранилища Копировать ссылку - Автоматическая загрузка + Автоскачивание Загрузка. Зеркало Сезон Аниме приложение от тех же разработчиков @@ -217,7 +217,7 @@ Торрент Документальный Азиатская драма - Общий + Основные Провайдеры Макет Расширения @@ -240,7 +240,7 @@ Обновление не найдено Изменить размер Источник - Проверьте наличие обновления + Проверить обновления Клон сайта DNS через HTTPS Удалить сайт @@ -248,7 +248,7 @@ Синхронизация субтитров Добавить клон существующего сайта с другим URL-адресом Используется для обхода блокировок интернет провайдера - Путь загрузки + Путь скачивания учитывая бенен Обновить Основной цвет @@ -304,7 +304,7 @@ Пропустить это обновление URL-адрес NGINX-сервера Создать учётную запись - Добавить трекинг + Добавить слежение Добавлено %s Синхронизировать Оценено @@ -393,7 +393,7 @@ Отключено: %d %s %s %s аутентифицировано - Не удалось перейти к %s + Не удается логин на %s Макс Минимум Очертание @@ -416,20 +416,83 @@ Главное Источник Случайный - Скоро будет… + Скоро… Этикетка Sub Фон - Вид + Oтoбpaжeниe Трейлер %s (отключено) Следующий В CloudStream по умолчанию не установлены сайты. Вам необходимо установить сайты из репозиториев. \n -\nИз-за безмозглой DMCA-атаки со стороны Sky UK Limited 🤮 мы не можем связать сайт репозитория в приложении. +\nИз-за безмозглой DMCA-атаки со стороны Sky UK Limited 🤮 мы не можем привязать сайт репозитория в приложении. \n \nПрисоединяйтесь к нашему Discord или ищите в интернете. Недопустимые данные Разрешение и название Предыдущий Разрешение + Браузер + Библиотека + Обновленный (старый - новый) + Алфавитный (А - Я) + Алфавитный (Я - А) + Выбрать библиотеку + Открыть с + Похоже, ваша библиотека пуста :( +\nВойдите в аккаунт с библиотекой или добавьте сериалы в локальную библиотеку + Сортировка + Открытый список + Рейтинг (высокий - низкий) + Рейтинг (низкий - высокий) + Обновленный (новый - старый) + Сортировать по + PackageInstaller + Кодировка субтитров + Загрузить из файла + Рейтинг: %s + Скачано %d %s + Все %s уже скачаны + Начата загрузка %d %s… + Не скачано: %d + Скачать все плагины из этого репозитория\? + Включен безопасный режим + Скачано: %d + Обновлено %d плагинов + Загрузить из интернета + Загрузка обновления приложения… + Недопустимый URL + Применить при перезапуске + Отчеты ошибках + Что вы хотите увидеть + Смотрите видео на этих языках + Скачано файл + Изображение постера + Пакетная загрузка + Скачайте список сайтов, который вы хотите использовать + Отображать Аниме с Дубляжом/Субтитрами + Включить NSFW на поддерживаемых провайдерах + Убрать скрытые субтитры из субтитров + Дополнительно + Изменить вид интерфейса, чтобы соответствовать устройству + Аудио дорожки + Это также удалит все плагины репозитория + Просмотреть репозитории сообщества + Видео дорожки + Все расширения были отключены из-за сбоя, чтобы помочь вам найти то, которое вызывает проблемы. + Повтор + Слишком много текста. Не удалось сохранить в буфер обмена. + Установка обновления приложения… + Не удалось установить новую версию приложения + Файл безопасного режима найден! +\nНе загружаются никакие расширения при запуске, пока файл не будет удален. + Приложение будет обновлено после выхода + Похоже, этот список пуст, попробуйте переключиться на другой + Все субтитры заглавными + Показывать всплывающие окна для пропуска вступления/заключения + Фильтровать по предпочитаемому языку медиа + Неверный ID + Ссылка на стрим + Отображать рандомную кнопку на Главной странице + Рандомная кнопка \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 93e51c84..821d062a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -489,4 +489,19 @@ Програму не знайдено Змішаний опенінг Видалити з переглянутого + За оновленням (від старого до нового) + За оновленням (від нового до старого) + Бібліотека + Сортувати + За рейтингом (від високого до низького) + Сортувати за + За алфавітом (від А до Я) + За рейтингом (від низького до високого) + Схоже, ваша бібліотека порожня :( +\nУвійдіть в обліковий запис бібліотеки або додайте серіали до вашої локальної бібліотеки + За алфавітом (від Я до А) + Виберіть бібліотеку + Відкрити з + Браузер + Схоже, цей список порожній, спробуйте перейти до іншого \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 3aa5cf69..db647b5d 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -66,7 +66,7 @@ Tải thành công Trực tiếp Đã có lỗi xảy ra - Bộ nhớ máy + Bộ nhớ trong Lồng Tiếng Phụ Đề Xóa Tệp @@ -118,7 +118,7 @@ Không tìm thấy thông tin Hiển thị Logcat 🐈 Chế độ cửa sổ nhỏ - Tiếp tục xem phim khi thoát app hoặc đang tìm kiếm + Tiếp tục xem phim khi thoát ứng dụng hoặc khi tìm kiếm Bật nút thu phóng khi xem Xóa khoảng đen của phim Phụ đề @@ -159,7 +159,7 @@ Không gửi dữ liệu Hiển thị tập phụ cho anime Hiển thị trailer - Hiển thị poster từ kitsu + Hiển thị poster từ Kitsu Ẩn chất lượng video khi tìm kiếm Tự động cập nhật plugin Hiển thị thông báo cập nhật App @@ -210,7 +210,7 @@ Không có phụ đề Mặc Định Còn trống - Đã dùng + Đã sử dụng App Phim Lẻ @@ -228,7 +228,7 @@ Phim Lẻ Phim Bộ Hoạt Hình - \@string/anime + Anime \@string/ova Torrent Phim Tài Liệu @@ -261,7 +261,7 @@ Khóa Thu Phóng Tuỳ chọn - Tập tiếp + Tua nhanh Không hiện lại Bỏ qua Cập nhật @@ -272,8 +272,8 @@ Thời lượng bộ nhớ đệm Dung lượng video cache Xoá hình ảnh và video - Sẽ gây lỗi nếu đặt quá cao. Không thay đổi nếu máy có dung lượng ram thấp, chẳng hạn như Android TV hoặc điện thoại cũ - Sẽ thể gây lỗi trên các máy có dung lượng lưu trữ thấp, chẳng hạn như thiết bị Android TV nếu bạn đặt nó quá cao + Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng ram thấp như Android TV. + Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng lưu trữ thấp như Android TV. DNS over HTTPS Rất hữu ích để bỏ chặn ISP Sao chép trang web @@ -410,7 +410,7 @@ Đã xoá plugin Không tải được %s 18+ - Bắt đầu tải %d %s + Bắt đầu tải %d %s… Tải xuống %d %s thành công Toàn bộ %s đã được tải xuống Tải hàng loạt @@ -422,7 +422,11 @@ Đã tải: %d Đã vô hiệu: %d Không tải: %d - Thêm kho lưu trữ để cài tiện ích + CloudStream không có sẵn trang web nào. Bạn cần cài đặt các trang web từ kho lưu trữ. +\n +\nDo Sky UK Limited đã gỡ xuống theo DMCA một cách thiếu suy nghĩ 🤮 chúng tôi không thể cài sẵn trang web. +\n +\nHãy tham gia Discord của chúng tôi hoặc tìm kiếm trực tuyến. Xem kho lưu trữ của cộng đồng Danh sách công khai In hoa toàn bộ phụ đề @@ -437,18 +441,18 @@ Xem thông tin sự cố Lịch sử Đánh dấu là đã xem - Tự động tải plugin + Tự động tải xuống plugin Thiết lập lại Bộ cài APK Một số máy không hỗ trợ trình cài đặt gói mới. Hãy thử tùy chọn cũ nếu các bản cập nhật không cài đặt. %s %d%s - Xem Trailer - Tự động tải plugins còn thiếu. + Xem giới thiệu + Tự động tải plugin còn thiếu. Bắt đầu cập nhật Liên kết Danh sách HLS Trình phát ưu tiên - Trình phát mặc địng + Trình phát mặc định Đánh giá: %s Không Phiên bản @@ -487,7 +491,7 @@ Danh đề Giới thiệu Xoá lịch sử - Hiển thị cửa sổ tua cho mở đầu/kết thúc + Hiển thị nút tua nhanh cho mở đầu/kết thúc Văn bản quá dài. Không thể lưu vào bộ nhớ tạm. Xoá khỏi đã xem Bạn có chắc muốn thoát\? @@ -496,4 +500,23 @@ Đang cài bản cập nhật… Không thể cài đặt phiên bản mới Ứng dụng sẽ được cập nhật khi thoát + Thư viện + Trình duyệt + Plugin đã tải + Mặc định + Tải lên (Mới đến Cũ) + Tải lên (Cũ đến Mới) + Thư viện của bạn đang trống :( +\nHãy đăng nhập vào thư viện hoặc thêm phim vào thư viện cục bộ + Mở với + Siêu dữ liệu không có sẵn, video sẽ không được tải nếu nó không tồn tại trên trang web. + PackageInstaller + Sắp xếp + Xếp hạng (Cao đến Thấp) + Xếp hạng (Thấp đến Cao) + Chữ cái (Z đến A) + Sắp xếp + Có vẻ như danh sách này trống, hãy thử chuyển sang danh sách khác + Chữ cái (A đến Z) + Chọn Thư viện \ 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 97a48597..ece917d9 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -537,4 +537,21 @@ 应用退出后将会更新 插件已下载 从已观看中移除 + 发现安全模式文件! +\n启动时不加载任何扩展,直到文件被删除。 + 浏览器 + + 排序方式 + 排序 + 评分(从高到低) + 评分(从低到高) + 更新(从新到旧) + 更新(从旧到新) + 字母排序(从 A 到 Z) + 字母排序(从 Z 到 A) + 选择库 + 打开方式 + 看来您的库是空的 :( +\n登录库账户或添加节目到您的本地库 + 看来此列表是空的,请尝试切换到另一个 \ No newline at end of file From b26a41bdaf8aeab10a7038c991327747bdd74cf5 Mon Sep 17 00:00:00 2001 From: hexated Date: Tue, 31 Jan 2023 14:26:34 +0700 Subject: [PATCH 308/888] fixed VidSrcExtractor --- .../lagradost/cloudstream3/extractors/VidSrcExtractor.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 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 b910f9dd..a27bf188 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt @@ -59,8 +59,8 @@ open class VidSrcExtractor : ExtractorApi() { if (datahash.isNotBlank()) { val links = try { app.get( - "$absoluteUrl/src/$datahash", - referer = "https://source.vidsrc.me/" + "$absoluteUrl/srcrcp/$datahash", + referer = "https://rcp.vidsrc.me/" ).url } catch (e: Exception) { "" @@ -71,7 +71,7 @@ open class VidSrcExtractor : ExtractorApi() { serverslist.amap { server -> val linkfixed = server.replace("https://vidsrc.xyz/", "https://embedsito.com/") - if (linkfixed.contains("/pro")) { + if (linkfixed.contains("/prorcp")) { val srcresponse = app.get(server, referer = absoluteUrl).text val m3u8Regex = Regex("((https:|http:)//.*\\.m3u8)") val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@amap From 490381451b28473fcfc41002856e5daa4c1ec131 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 31 Jan 2023 10:57:11 +0100 Subject: [PATCH 309/888] [skip ci] label issues if provider mentioned --- .github/workflows/issue_action.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/issue_action.yml b/.github/workflows/issue_action.yml index 28b737b3..2a54857c 100644 --- a/.github/workflows/issue_action.yml +++ b/.github/workflows/issue_action.yml @@ -53,6 +53,18 @@ jobs: Please do not report any provider bugs here. This repository does not contain any providers. Please find the appropriate repository and report your issue there or join the [discord](https://discord.gg/5Hus6fM). Found provider name: `${{ steps.provider_check.outputs.name }}` + - name: Label if mentions provider + if: steps.provider_check.outputs.name != 'none' + uses: actions/github-script@v6 + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ["possible provider issue"] + }) - name: Add eyes reaction to all issues uses: actions-cool/emoji-helper@v1.0.0 with: From b0921161a3c31c46079c4791f575e538c0b1e153 Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:43:29 +0100 Subject: [PATCH 310/888] Nicehttp version bump --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 93e386b6..3c855d28 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -190,7 +190,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.4.1") + implementation("com.github.Blatzar:NiceHttp:0.4.2") // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 From 99887534327c86bcc653dfbc84a24917d34b0fe5 Mon Sep 17 00:00:00 2001 From: no-commit <> Date: Thu, 2 Feb 2023 01:15:24 +0100 Subject: [PATCH 311/888] Library and Light mode improvements. --- .../lagradost/cloudstream3/ui/library/LibraryFragment.kt | 4 +++- .../com/lagradost/cloudstream3/ui/result/ResultFragment.kt | 1 + app/src/main/res/layout/fragment_library.xml | 6 +++--- app/src/main/res/layout/search_result_grid_expanded.xml | 2 +- app/src/main/res/values/styles.xml | 1 + 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index 1c6af447..d7c06c4e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -333,8 +333,10 @@ class LibraryFragment : Fragment() { handler.postDelayed(stopLoading, 300) savedInstanceState?.getInt(VIEWPAGER_ITEM_KEY)?.let { currentPos -> + if (currentPos < 0) return@let viewpager?.setCurrentItem(currentPos, false) - savedInstanceState.remove(VIEWPAGER_ITEM_KEY) + // Using remove() sets the key to 0 instead of removing it + savedInstanceState.putInt(VIEWPAGER_ITEM_KEY, -1) } // Since the animation to scroll multiple items is so much its better to just hide diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 2e2e46b7..68dd1c0e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -974,6 +974,7 @@ open class ResultFragment : ResultTrailerPlayer() { chip.isCheckable = false chip.isFocusable = false chip.isClickable = false + chip.setTextColor(context.colorFromAttribute(R.attr.textColor)) addView(chip) } } diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index f9012148..985d055d 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -166,12 +166,12 @@ app:layout_scrollFlags="noScroll" app:tabGravity="center" app:tabIndicator="@drawable/indicator_background" - app:tabIndicatorColor="@color/textColor" + app:tabIndicatorColor="?attr/white" app:tabIndicatorGravity="center" app:tabIndicatorHeight="30dp" app:tabMode="scrollable" - app:tabSelectedTextColor="@color/lightTextColor" + app:tabSelectedTextColor="?attr/primaryBlackBackground" app:tabTextAppearance="@style/TabNoCaps" - app:tabTextColor="@color/textColor" /> + app:tabTextColor="?attr/textColor" /> diff --git a/app/src/main/res/layout/search_result_grid_expanded.xml b/app/src/main/res/layout/search_result_grid_expanded.xml index 47fd7cd3..cf6ab3b2 100644 --- a/app/src/main/res/layout/search_result_grid_expanded.xml +++ b/app/src/main/res/layout/search_result_grid_expanded.xml @@ -23,7 +23,7 @@ android:elevation="10dp" app:cardBackgroundColor="?attr/primaryGrayBackground" app:cardCornerRadius="@dimen/rounded_image_radius" - app:layout_constraintDimensionRatio="1:1.414" + app:layout_constraintDimensionRatio="1:1.5" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2540bf34..78c62c69 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -100,6 +100,7 @@ + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 61ff0c2b..7dd4c989 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -82,4 +82,7 @@ #515151 #FFFFFF #622C00 + + #48E484 + #ea596e \ 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 778f34c9..cb9d5508 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ fast_forward_button_time benene_count subtitle_settings_key + test_providers_key subtitle_settings_chromecast_key quality_pref_key player_pref_key @@ -195,6 +196,7 @@ No Plot Found No Description Found Show Logcat 🐈 + Log Picture-in-picture Continues playback in a miniature player on top of other apps Player resize button @@ -282,6 +284,9 @@ Delete @string/sort_cancel Pause + Start + Failed + Passed Resume -30 +30 @@ -423,6 +428,7 @@ Enable NSFW on supported providers Subtitle encoding Providers + Provider test Layout Auto TV layout @@ -579,6 +585,8 @@ Audio tracks Video tracks Apply on Restart + Restart + Stop Safe mode on All extensions were turned off due to a crash to help you find the one causing trouble. View crash info @@ -636,4 +644,6 @@ 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. + + Hello blank fragment \ No newline at end of file diff --git a/app/src/main/res/xml/settings_providers.xml b/app/src/main/res/xml/settings_providers.xml index a177865b..1ee58faf 100644 --- a/app/src/main/res/xml/settings_providers.xml +++ b/app/src/main/res/xml/settings_providers.xml @@ -1,24 +1,30 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:icon="@drawable/ic_baseline_language_24" + android:key="@string/provider_lang_key" + android:title="@string/provider_lang_settings" /> + android:icon="@drawable/ic_baseline_play_arrow_24" + android:key="@string/prefer_media_type_key" + android:title="@string/preferred_media_settings" /> + android:icon="@drawable/ic_outline_voice_over_off_24" + android:key="@string/display_sub_key" + android:title="@string/display_subbed_dubbed_settings" /> + android:icon="@drawable/ic_baseline_extension_24" + android:key="@string/enable_nsfw_on_providers_key" + android:summary="@string/apply_on_restart" + android:title="@string/enable_nsfw_on_providers" + app:defaultValue="false" /> + + + \ No newline at end of file From 9d0cce47a67472260e553ba8acd2e4d08fd43cc9 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 20:40:50 +0000 Subject: [PATCH 334/888] update list of locales --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2e249948..354dc89c 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 @@ -68,12 +68,12 @@ val appLanguages = arrayListOf( Triple("", "español", "es"), Triple("", "فارسی", "fa"), Triple("", "français", "fr"), - Triple("\uD83C\uDDEE\uD83C\uDDF1", "עברית", "iw"), Triple("", "हिन्दी", "hi"), Triple("", "hrvatski", "hr"), Triple("", "magyar", "hu"), Triple("\uD83C\uDDEE\uD83C\uDDE9", "Bahasa Indonesia", "in"), Triple("", "italiano", "it"), + Triple("\uD83C\uDDEE\uD83C\uDDF1", "עברית", "iw"), Triple("", "ಕನ್ನಡ", "kn"), Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), From 789cd14ef6fcb9cfdd5646d79af25f16916cf3d3 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Wed, 15 Feb 2023 21:41:20 +0100 Subject: [PATCH 335/888] remove placeholder --- app/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb9d5508..47517378 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -644,6 +644,4 @@ 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. - - Hello blank fragment \ No newline at end of file From 3dd0fc6c8e90e70eb413aba256da5cc4e3ab6f2e Mon Sep 17 00:00:00 2001 From: Lag <> Date: Wed, 15 Feb 2023 22:09:08 +0100 Subject: [PATCH 336/888] add view_test --- app/src/main/res/layout/view_test.xml | 138 ++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 app/src/main/res/layout/view_test.xml diff --git a/app/src/main/res/layout/view_test.xml b/app/src/main/res/layout/view_test.xml new file mode 100644 index 00000000..99300ce4 --- /dev/null +++ b/app/src/main/res/layout/view_test.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From aacd57cb5d2ae860fad11640d0ada1fe3fd55d2d Mon Sep 17 00:00:00 2001 From: Lag <> Date: Thu, 16 Feb 2023 01:15:30 +0100 Subject: [PATCH 337/888] Fixed scrolling up on bottom dialogs and removing stuff from AniList --- .../syncproviders/providers/AniListApi.kt | 53 +++++++++++++----- .../ui/result/ResultFragmentPhone.kt | 2 - .../ui/result/ResultFragmentTv.kt | 5 +- .../layout/bottom_selection_dialog_direct.xml | 54 +++++++++---------- 4 files changed, 69 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 7d9de43a..0010ce25 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -759,6 +759,11 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { return data != "" } + /** Used to query a saved MediaItem on the list to get the id for removal */ + data class MediaListItemRoot(@JsonProperty("data") val data: MediaListItem? = null) + data class MediaListItem(@JsonProperty("MediaList") val MediaList: MediaListId? = null) + data class MediaListId(@JsonProperty("id") val id: Long? = null) + private suspend fun postDataAboutId( id: Int, type: AniListStatusType, @@ -766,19 +771,43 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { progress: Int? ): Boolean { val q = - """mutation (${'$'}id: Int = $id, ${'$'}status: MediaListStatus = ${ - aniListStatusString[maxOf( - 0, - type.value - )] - }, ${if (score != null) "${'$'}scoreRaw: Int = ${score * 10}" else ""} , ${if (progress != null) "${'$'}progress: Int = $progress" else ""}) { - SaveMediaListEntry (mediaId: ${'$'}id, status: ${'$'}status, scoreRaw: ${'$'}scoreRaw, progress: ${'$'}progress) { - id - status - progress - score - } + // Delete item if status type is None + if (type == AniListStatusType.None) { + val userID = getKey(accountId, ANILIST_USER_KEY)?.id ?: return false + // Get list ID for deletion + val idQuery = """ + query MediaList(${'$'}userId: Int = $userID, ${'$'}mediaId: Int = $id) { + MediaList(userId: ${'$'}userId, mediaId: ${'$'}mediaId) { + id + } + } + """ + val response = postApi(idQuery) + val listId = + tryParseJson(response)?.data?.MediaList?.id ?: return false + """ + mutation(${'$'}id: Int = $listId) { + DeleteMediaListEntry(id: ${'$'}id) { + deleted + } + } + """ + } else { + """mutation (${'$'}id: Int = $id, ${'$'}status: MediaListStatus = ${ + aniListStatusString[maxOf( + 0, + type.value + )] + }, ${if (score != null) "${'$'}scoreRaw: Int = ${score * 10}" else ""} , ${if (progress != null) "${'$'}progress: Int = $progress" else ""}) { + SaveMediaListEntry (mediaId: ${'$'}id, status: ${'$'}status, scoreRaw: ${'$'}scoreRaw, progress: ${'$'}progress) { + id + status + progress + score + } }""" + } + val data = postApi(q) return data != "" } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index b38e1765..2f232995 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -322,9 +322,7 @@ class ResultFragmentPhone : ResultFragment() { // it?.dismiss() //} builder.setCanceledOnTouchOutside(true) - builder.show() - builder } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 2bd8ff0f..71ecb0e9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -176,8 +176,7 @@ class ResultFragmentTv : ResultFragment() { loadingDialog = null } loadingDialog = loadingDialog ?: context?.let { ctx -> - val builder = - BottomSheetDialog(ctx) + val builder = BottomSheetDialog(ctx) builder.setContentView(R.layout.bottom_loading) builder.setOnDismissListener { loadingDialog = null @@ -187,9 +186,7 @@ class ResultFragmentTv : ResultFragment() { // it?.dismiss() //} builder.setCanceledOnTouchOutside(true) - builder.show() - builder } } diff --git a/app/src/main/res/layout/bottom_selection_dialog_direct.xml b/app/src/main/res/layout/bottom_selection_dialog_direct.xml index 0d179ebb..cf31ba1f 100644 --- a/app/src/main/res/layout/bottom_selection_dialog_direct.xml +++ b/app/src/main/res/layout/bottom_selection_dialog_direct.xml @@ -1,34 +1,34 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_rowWeight="1" + android:layout_marginTop="20dp" + android:layout_marginBottom="10dp" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:textColor="?attr/textColor" + android:textSize="20sp" + android:textStyle="bold" + tools:text="Test" /> + android:id="@+id/listview1" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_rowWeight="1" + android:layout_marginBottom="60dp" + android:nestedScrollingEnabled="true" + android:nextFocusLeft="@id/apply_btt" + android:nextFocusRight="@id/cancel_btt" + android:paddingTop="10dp" + android:requiresFadingEdge="vertical" + tools:listitem="@layout/sort_bottom_single_choice_no_checkmark" /> From b6ac155350cf6d4b070e79276efd6389b5858f05 Mon Sep 17 00:00:00 2001 From: MhmdIbrahim1 <107378571+MhmdIbrahim1@users.noreply.github.com> Date: Fri, 17 Feb 2023 23:42:20 +0200 Subject: [PATCH 338/888] update VideoDownloadService (#377) --- .../services/VideoDownloadService.kt | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadService.kt b/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadService.kt index be2fe75b..6151a0ed 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadService.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/services/VideoDownloadService.kt @@ -1,11 +1,22 @@ package com.lagradost.cloudstream3.services - -import android.app.IntentService +import android.app.Service import android.content.Intent +import android.os.IBinder import com.lagradost.cloudstream3.utils.VideoDownloadManager +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch -class VideoDownloadService : IntentService("VideoDownloadService") { - override fun onHandleIntent(intent: Intent?) { +class VideoDownloadService : Service() { + + private val downloadScope = CoroutineScope(Dispatchers.Default) + + override fun onBind(intent: Intent?): IBinder? { + return null + } + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { if (intent != null) { val id = intent.getIntExtra("id", -1) val type = intent.getStringExtra("type") @@ -14,10 +25,36 @@ class VideoDownloadService : IntentService("VideoDownloadService") { "resume" -> VideoDownloadManager.DownloadActionType.Resume "pause" -> VideoDownloadManager.DownloadActionType.Pause "stop" -> VideoDownloadManager.DownloadActionType.Stop - else -> return + else -> return START_NOT_STICKY + } + + downloadScope.launch { + VideoDownloadManager.downloadEvent.invoke(Pair(id, state)) } - VideoDownloadManager.downloadEvent.invoke(Pair(id, state)) } } + + return START_NOT_STICKY } -} \ No newline at end of file + + override fun onDestroy() { + downloadScope.coroutineContext.cancel() + super.onDestroy() + } +} +// override fun onHandleIntent(intent: Intent?) { +// if (intent != null) { +// val id = intent.getIntExtra("id", -1) +// val type = intent.getStringExtra("type") +// if (id != -1 && type != null) { +// val state = when (type) { +// "resume" -> VideoDownloadManager.DownloadActionType.Resume +// "pause" -> VideoDownloadManager.DownloadActionType.Pause +// "stop" -> VideoDownloadManager.DownloadActionType.Stop +// else -> return +// } +// VideoDownloadManager.downloadEvent.invoke(Pair(id, state)) +// } +// } +// } +//} From b4065b69beeb6ab12298aba3ea74583fe5f7372f Mon Sep 17 00:00:00 2001 From: no-commit <> Date: Fri, 17 Feb 2023 23:05:11 +0100 Subject: [PATCH 339/888] Added dropdown indicators Solves #375 --- app/src/main/res/layout/fragment_result.xml | 23 ++++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index afbf735d..a481ed6b 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -129,9 +129,9 @@ + android:paddingBottom="100dp"> @@ -516,8 +515,8 @@ android:visibility="gone" /> نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق - مُوصي به + مُوصى به تم تحميل %s إختيار ملف تحميل من الانترنت @@ -543,4 +543,16 @@ تلفزيون أندرويد مدة التقديم عنما يكون المشغل مرئيا مدة التقديم- المشغل المرئي + فشل + نجح + إختبار المزود + إعادة التشغيل + سجل + بَدأ + إيقاف + تحديث العروض التي تم الاشتراك فيها + إلغاء الاشتراك من %s + تم إصدار الحلقة %d! + مشترك + مشترك في %s \ 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..966cd7d9 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -535,4 +535,16 @@ 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 \ 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..f6583c20 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 @@ -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,16 @@ 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 \ 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..2040169b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -511,4 +511,16 @@ 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! \ 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..926c7f57 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -531,4 +531,21 @@ Č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 \ 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..46d61e44 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,21 @@ 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! \ 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..89f6b4ee 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -528,4 +528,16 @@ 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 \ 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..c36459b7 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..411f0b45 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,9 @@ 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 \ No newline at end of file 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..5330d3ec 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -507,4 +507,20 @@ Файл безпечного режиму знайдено! \nРозширеня не завантажуються під час запуску, доки файл не буде видалено. Android TV + Плеєр сховано - обсяг пошуку + Плеєр показано - обсяг пошуку + Обсяг пошуку, який використовується, коли плеєр видимий + Обсяг пошуку, який використовується, коли гравець прихований + Не вдалося + Пройдено + Перезапуск + Журнал + Старт + Стоп + Тест постачальника + Оновлення підписаних шоу + Підписано + Підписано на %s + Відписатися від %s + Епізод %d випущено! \ 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..9e2d6137 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -554,4 +554,21 @@ 看来您的库是空的 :( \n登录库账户或添加节目到您的本地库 看来此列表是空的,请尝试切换到另一个 + 播放器显示 - 快进快退秒数 + 播放器可见时使用的快进快退秒数 + 播放器隐藏 - 快进快退秒数 + 播放器隐藏时使用的快进快退秒数 + Android TV + 失败 + 片源测试 + 重启 + 停止 + 正在更新订阅节目 + 已订阅 + 已订阅 %s + 已取消订阅 %s + 开始 + 第 %d 集已发布! + 成功 + 日志 \ No newline at end of file From 51137701f2c6228660720fba94d9dfc53cefb582 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:43:35 +0100 Subject: [PATCH 343/888] add proxy to raw.githubusercontent.com (#368) --- .../lagradost/cloudstream3/MainActivity.kt | 34 ++++++++++++++++++ .../cloudstream3/plugins/RepositoryManager.kt | 30 ++++++++++++---- .../ui/settings/SettingsGeneral.kt | 13 ++++--- .../lagradost/cloudstream3/utils/AppUtils.kt | 8 ++++- app/src/main/res/values/strings.xml | 6 ++++ app/src/main/res/xml/settins_general.xml | 36 ++++++++++++------- 6 files changed, 102 insertions(+), 25 deletions(-) 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/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/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt index 354dc89c..c5a11cce 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 @@ -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() 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..205f0a6b 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 @@ -815,4 +821,4 @@ object AppUtils { } return currentAudioFocusRequest } -} \ 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..2d46a70d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ random_button_key provider_lang_key dns_key + jsdelivr_proxy_key download_path_key Cloudstream app_layout_key @@ -378,6 +379,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 +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. + ISP Bypasses Links App updates Backup @@ -644,6 +649,7 @@ 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 diff --git a/app/src/main/res/xml/settins_general.xml b/app/src/main/res/xml/settins_general.xml index 726f3fd0..c4900bca 100644 --- a/app/src/main/res/xml/settins_general.xml +++ b/app/src/main/res/xml/settins_general.xml @@ -6,18 +6,6 @@ android:title="@string/app_language" android:icon="@drawable/ic_baseline_language_24" /> - - - - + + + + + + + + + + From 1da6a925692de08cb8e8ec00d93d1e5d1f76b8c6 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:07:04 +0000 Subject: [PATCH 344/888] update list of locales --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 1 + 1 file changed, 1 insertion(+) 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 c5a11cce..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"), From aeab423d2929d1de6dd2681592e2e832f261a935 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 24 Feb 2023 18:47:54 +0100 Subject: [PATCH 345/888] Excluded the referer header when empty --- .../java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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..cd384c6f 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 @@ -40,6 +40,7 @@ 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 +536,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) From f722785a379547fb9f28893e0661eeff186b0a3d Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Sat, 25 Feb 2023 01:49:53 +0700 Subject: [PATCH 346/888] fixed Linkbox (#390) --- .../cloudstream3/extractors/Linkbox.kt | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) 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 From 2926dc6c8eea53a35006b4188f9a03a9a9bb5216 Mon Sep 17 00:00:00 2001 From: Allen Baby <64322605+allenbaby@users.noreply.github.com> Date: Sat, 25 Feb 2023 00:21:03 +0530 Subject: [PATCH 347/888] Issue #376: Added new feature for separate watch quality on mobile data. (#391) * Issue #376: Added new feature for separate watch quality on mobile data. --- .../cloudstream3/ui/player/CS3IPlayer.kt | 3 ++- .../ui/player/FullScreenPlayer.kt | 4 ++-- .../ui/settings/SettingsPlayer.kt | 24 +++++++++++++++++++ .../lagradost/cloudstream3/utils/AppUtils.kt | 7 +++++- app/src/main/res/values/strings.xml | 6 +++-- app/src/main/res/xml/settings_player.xml | 4 ++++ 6 files changed, 42 insertions(+), 6 deletions(-) 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 cd384c6f..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,6 +35,7 @@ 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 @@ -849,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/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 205f0a6b..a76b62fd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -776,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 -> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d46a70d..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 @@ -364,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 @@ -655,4 +657,4 @@ 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" /> + Date: Sat, 25 Feb 2023 21:18:48 +0000 Subject: [PATCH 348/888] Added some extractors mirrors and added Vido Extractor (#393) * Added some mirrors and fixed some extractors * Fixed Vido extractor (for MesFilms and Wiflix) --- .../cloudstream3/extractors/DoodExtractor.kt | 3 ++ .../cloudstream3/extractors/Evolaod.kt | 25 ++------------ .../cloudstream3/extractors/Filesim.kt | 5 +++ .../cloudstream3/extractors/StreamSB.kt | 4 +++ .../cloudstream3/extractors/Uqload.kt | 26 ++++---------- .../lagradost/cloudstream3/extractors/Vido.kt | 34 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 5 +++ 7 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt 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/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/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(), From e5834d485b1447a3687891d698f776e7922289d8 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 25 Feb 2023 20:37:54 +0100 Subject: [PATCH 349/888] Translated using Weblate (German) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Portuguese) Currently translated at 81.0% (493 of 608 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.5% (605 of 608 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Italian) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (608 of 608 strings) Translated using Weblate (Polish) Currently translated at 97.3% (592 of 608 strings) Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Translated using Weblate (Japanese) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (qt (generated) (qt)) Currently translated at 50.4% (304 of 602 strings) Translated using Weblate (Slovak) Currently translated at 31.7% (191 of 602 strings) Translated using Weblate (Portuguese) Currently translated at 76.9% (463 of 602 strings) Translated using Weblate (Somali) Currently translated at 94.3% (568 of 602 strings) Translated using Weblate (Somali) Currently translated at 94.3% (568 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Esperanto) Currently translated at 27.5% (166 of 602 strings) Translated using Weblate (Esperanto) Currently translated at 27.5% (166 of 602 strings) Translated using Weblate (Persian) Currently translated at 20.0% (121 of 602 strings) Translated using Weblate (Hungarian) Currently translated at 55.6% (335 of 602 strings) Translated using Weblate (German) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Russian) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Kannada) Currently translated at 35.2% (212 of 602 strings) Translated using Weblate (Urdu) Currently translated at 72.2% (435 of 602 strings) Translated using Weblate (Tamil) Currently translated at 18.2% (110 of 602 strings) Translated using Weblate (Tamil) Currently translated at 18.2% (110 of 602 strings) Translated using Weblate (Hebrew) Currently translated at 97.1% (585 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 94.1% (567 of 602 strings) Translated using Weblate (Vietnamese) Currently translated at 96.8% (583 of 602 strings) Translated using Weblate (Turkish) Currently translated at 97.1% (585 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Polish) Currently translated at 98.0% (590 of 602 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 88.3% (532 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Italian) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (French) Currently translated at 97.3% (586 of 602 strings) Translated using Weblate (Greek) Currently translated at 97.0% (584 of 602 strings) Translated using Weblate (Czech) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (Bulgarian) Currently translated at 94.5% (569 of 602 strings) Translated using Weblate (Bulgarian) Currently translated at 94.5% (569 of 602 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (602 of 602 strings) Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Translated using Weblate (Japanese) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (qt (generated) (qt)) Currently translated at 50.4% (304 of 602 strings) Translated using Weblate (Slovak) Currently translated at 31.7% (191 of 602 strings) Translated using Weblate (Portuguese) Currently translated at 76.9% (463 of 602 strings) Translated using Weblate (Somali) Currently translated at 94.3% (568 of 602 strings) Translated using Weblate (Somali) Currently translated at 94.3% (568 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 44.5% (268 of 602 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Esperanto) Currently translated at 27.5% (166 of 602 strings) Translated using Weblate (Esperanto) Currently translated at 27.5% (166 of 602 strings) Translated using Weblate (Persian) Currently translated at 20.0% (121 of 602 strings) Translated using Weblate (Hungarian) Currently translated at 55.6% (335 of 602 strings) Translated using Weblate (German) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Russian) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Kannada) Currently translated at 35.2% (212 of 602 strings) Translated using Weblate (Kannada) Currently translated at 35.2% (212 of 602 strings) Translated using Weblate (Urdu) Currently translated at 72.2% (435 of 602 strings) Translated using Weblate (Tamil) Currently translated at 18.2% (110 of 602 strings) Translated using Weblate (Tamil) Currently translated at 18.2% (110 of 602 strings) Translated using Weblate (Hebrew) Currently translated at 97.1% (585 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Bengali) Currently translated at 38.7% (233 of 602 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 94.1% (567 of 602 strings) Translated using Weblate (Vietnamese) Currently translated at 96.8% (583 of 602 strings) Translated using Weblate (Turkish) Currently translated at 97.1% (585 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Tagalog) Currently translated at 56.1% (338 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Swedish) Currently translated at 74.9% (451 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Romanian) Currently translated at 73.0% (440 of 602 strings) Translated using Weblate (Polish) Currently translated at 98.0% (590 of 602 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 88.3% (532 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Dutch) Currently translated at 75.0% (452 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (224 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Macedonian) Currently translated at 48.6% (293 of 602 strings) Translated using Weblate (Italian) Currently translated at 99.1% (597 of 602 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (Hindi) Currently translated at 37.7% (227 of 602 strings) Translated using Weblate (French) Currently translated at 97.3% (586 of 602 strings) Translated using Weblate (Greek) Currently translated at 97.0% (584 of 602 strings) Translated using Weblate (Czech) Currently translated at 100.0% (602 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (bp (generated) (bp)) Currently translated at 77.4% (466 of 602 strings) Translated using Weblate (Bulgarian) Currently translated at 94.5% (569 of 602 strings) Translated using Weblate (Bulgarian) Currently translated at 94.5% (569 of 602 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (602 of 602 strings) Co-authored-by: Aitor Salaberria Co-authored-by: Allan Nordhøy Co-authored-by: Anarchydr Co-authored-by: Anonymous Co-authored-by: Cliff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: Fjuro Co-authored-by: Geovani Amaral Co-authored-by: Hosted Weblate Co-authored-by: Julian Co-authored-by: MedRAM Co-authored-by: Prathap Rathod Co-authored-by: Rex_sa Co-authored-by: Sandyran Co-authored-by: Sdarfeesh Co-authored-by: Translator-3000 Co-authored-by: Walter H Co-authored-by: gallegonovato Co-authored-by: gnu-ewm Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/bg/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/bn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/bp/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/el/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/eo/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fa/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/he/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ja/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/kn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/mk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ml/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/qt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ro/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/sk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/so/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/sv/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ta/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ur/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hant/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 8 ++++++- app/src/main/res/values-cs/strings.xml | 8 ++++++- app/src/main/res/values-de/strings.xml | 13 ++++++++++- app/src/main/res/values-es/strings.xml | 8 ++++++- app/src/main/res/values-hr/strings.xml | 5 +++++ app/src/main/res/values-in/strings.xml | 5 +++++ app/src/main/res/values-it/strings.xml | 10 +++++++++ app/src/main/res/values-kn/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 17 ++++++++++++++ app/src/main/res/values-pt/strings.xml | 31 ++++++++++++++++++++++++-- app/src/main/res/values-qt/strings.xml | 23 ++++++++++--------- app/src/main/res/values-uk/strings.xml | 9 +++++++- app/src/main/res/values-zh/strings.xml | 5 +++++ 13 files changed, 125 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 1e9bcfcc..cfd761e3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -259,7 +259,7 @@ لا تظهر مرة أخرى تخطي هذا التحديث تحديث - جودة المشاهدة المفضلة + جودة المشاهدة المفضلة (WiFi) أقصى عدد لحروف عنوان مُشغل الفيديو أبعاد مُشغل الفيديو حجم ذاكرة التخزين المؤقت للفيديو @@ -555,4 +555,10 @@ تم إصدار الحلقة %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 966cd7d9..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 @@ -547,4 +547,10 @@ 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 f6583c20..c5e74a60 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -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 @@ -518,4 +518,15 @@ 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-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2040169b..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 @@ -523,4 +523,10 @@ 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-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 926c7f57..b623ec5d 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -548,4 +548,9 @@ 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 46d61e44..84179352 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -546,4 +546,9 @@ 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 89f6b4ee..d6bdc204 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -540,4 +540,14 @@ 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-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index c36459b7..242653be 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -85,7 +85,7 @@ ಶೇರ್ ಫೈಲ್ ಅಳಿಸಿ ಹೆಚ್ಚಿನ ಮಾಹಿತಿ - ಹೊಸ ಅಪ್ಡೇಟ್ ಬಂದಿದೆ + ಹೊಸ ಅಪ್ಡೇಟ್ ಬಂದಿದೆ \n%s-%s ಲೋಡಿಂಗ್… ಡೌನ್‌ಲೋಡ್ ಭಾಷೆಗಳನ್ನು ಮಾಡಿ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 411f0b45..bbaaec57 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -514,4 +514,21 @@ 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-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5330d3ec..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) Заголовок Перемикання елементів інтерфейсу на плакаті Оновлення не знайдено @@ -523,4 +523,11 @@ Підписано на %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/strings.xml b/app/src/main/res/values-zh/strings.xml index 9e2d6137..626cc0fe 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -571,4 +571,9 @@ 第 %d 集已发布! 成功 日志 + raw.githubusercontent.com 代理 + 连接 Github 失败,正在启用 jsdelivr 代理。 + 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 + ISP 绕过 + 还原 \ No newline at end of file From d6df24eff2d425fc79e52b94a1fe600f857ec19a Mon Sep 17 00:00:00 2001 From: Stormunblessed <86633626+Stormunblessed@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:05:42 -0600 Subject: [PATCH 350/888] Fixes on filesim and added filemoon, ztreamhub (#397) * fix fastream, tomatomatela, and added okrulink * forgot this * sendvid extractor * sendvid extractor * fixes * Filesim fix, added filemoon and ztreamhub --- .../cloudstream3/extractors/Filesim.kt | 45 +++++++++---------- .../cloudstream3/utils/ExtractorApi.kt | 1 + 2 files changed, 21 insertions(+), 25 deletions(-) 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 382ca756..84fd0552 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -1,13 +1,15 @@ package com.lagradost.cloudstream3.extractors -import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* -import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import java.net.URI +import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 + +class Ztreamhub : Filesim() { + override val mainUrl: String = "https://ztreamhub.com" //Here 'cause works + override val name = "Zstreamhub" +} class FileMoon : Filesim() { override val mainUrl = "https://filemoon.to" override val name = "FileMoon" @@ -29,34 +31,27 @@ open class Filesim : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - with(app.get(url).document) { - this.select("script").forEach { script -> - if (script.data().contains("eval(function(p,a,c,k,e,d)")) { - val data = getAndUnpack(script.data()) - val foundData = Regex("""sources:\[(.*?)]""").find(data)?.groupValues?.get(1) ?: return@forEach - val fixedData = foundData.replace("file:", """"file":""") - - parseJson>("[$fixedData]").forEach { - callback.invoke( - ExtractorLink( - name, - name, - it.file, - "$mainUrl/", - Qualities.Unknown.value, - URI(it.file).path.endsWith(".m3u8") - ) - ) - } + val response = app.get(url, referer = mainUrl).document + response.select("script[type=text/javascript]").map { script -> + if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) { + val unpackedscript = getAndUnpack(script.data()) + val m3u8Regex = Regex("file.\\\"(.*?m3u8.*?)\\\"") + val m3u8 = m3u8Regex.find(unpackedscript)?.destructured?.component1() ?: "" + if (m3u8.isNotEmpty()) { + generateM3u8( + name, + m3u8, + mainUrl + ).forEach(callback) } } } } - private data class ResponseSource( + /* private data class ResponseSource( @JsonProperty("file") val file: String, @JsonProperty("type") val type: String?, @JsonProperty("label") val label: String? - ) + ) */ } \ 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 6540b8c4..0bced6b2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -370,6 +370,7 @@ val extractorApis: MutableList = arrayListOf( Cda(), Dailymotion(), ByteShare(), + Ztreamhub() ) From ab324b93e89b2e955436d7ec2099b3256cb0d005 Mon Sep 17 00:00:00 2001 From: no-commit <> Date: Tue, 28 Feb 2023 01:19:59 +0100 Subject: [PATCH 351/888] Small fixes to Intents and Subscriptions --- .../lagradost/cloudstream3/MainActivity.kt | 6 ++++- .../services/SubscriptionWorkManager.kt | 22 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index e626dcd6..a7449255 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -319,7 +319,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } else if (safeURI(str)?.scheme == appStringSearch) { nextSearchQuery = URLDecoder.decode(str.substringAfter("$appStringSearch://"), "UTF-8") - nav_view.selectedItemId = R.id.navigation_search + + // Use both navigation views to support both layouts. + // It might be better to use the QuickSearch. + nav_view?.selectedItemId = R.id.navigation_search + nav_rail_view?.selectedItemId = R.id.navigation_search } else if (safeURI(str)?.scheme == appStringResumeWatching) { val id = str.substringAfter("$appStringResumeWatching://").toIntOrNull() diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt index d1b1b660..adf5abfa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt @@ -105,14 +105,12 @@ class SubscriptionWorkManager(val context: Context, workerParams: WorkerParamete SUBSCRIPTION_CHANNEL_DESCRIPTION ) - safeApiCall { - setForeground( - ForegroundInfo( - SUBSCRIPTION_NOTIFICATION_ID, - progressNotificationBuilder.build() - ) + setForeground( + ForegroundInfo( + SUBSCRIPTION_NOTIFICATION_ID, + progressNotificationBuilder.build() ) - } + ) val subscriptions = getAllSubscriptions() @@ -196,7 +194,15 @@ class SubscriptionWorkManager(val context: Context, workerParams: WorkerParamete PendingIntent.getActivity(context, 0, intent, 0) } - val poster = ioWork { savedData.posterUrl?.let { url -> context.getImageBitmapFromUrl(url, savedData.posterHeaders) } } + val poster = ioWork { + savedData.posterUrl?.let { url -> + context.getImageBitmapFromUrl( + url, + savedData.posterHeaders + ) + } + } + val updateNotification = updateNotificationBuilder.setContentTitle(updateHeader) .setContentText(updateDescription) From f0515c4dc9e38bcf80f9766e7dff9f9ffd802f72 Mon Sep 17 00:00:00 2001 From: Stormunblessed <86633626+Stormunblessed@users.noreply.github.com> Date: Fri, 3 Mar 2023 09:24:02 +0000 Subject: [PATCH 352/888] Support qualities for Dailymotion (#407) * Dailymotion qualities --- .../cloudstream3/extractors/Dailymotion.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt index 125e4bcf..4b7cb19f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt @@ -6,6 +6,7 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 import com.lagradost.cloudstream3.utils.Qualities import java.net.URL @@ -42,18 +43,9 @@ open class Dailymotion : ExtractorApi() { ) val metaData = app.get(metaDataUrl, referer = embedUrl, cookies = cookies) .parsedSafe() ?: return - metaData.qualities.forEach { (key, video) -> + metaData.qualities.forEach { (_, video) -> video.forEach { - callback.invoke( - ExtractorLink( - name, - "$name $key", - it.url, - "", - Qualities.Unknown.value, - true - ) - ) + getStream(it.url, this.name, callback) } } } @@ -75,6 +67,17 @@ open class Dailymotion : ExtractorApi() { return null } + private suspend fun getStream( + streamLink: String, + name: String, + callback: (ExtractorLink) -> Unit + ) { + return generateM3u8( + name, + streamLink, + "", + ).forEach(callback) + } data class Config( val context: Context, val dmInternalData: InternalData From 76545f55c3efeb66e14c6a4c62d2c980adf51830 Mon Sep 17 00:00:00 2001 From: no-commit <> Date: Fri, 3 Mar 2023 17:45:26 +0100 Subject: [PATCH 353/888] Standardized some home screen padding and made subtitle delay persistent. Fixes #405 --- .../ui/player/FullScreenPlayer.kt | 10 +++++++ .../cloudstream3/ui/player/GeneratorPlayer.kt | 29 +++++++++---------- .../main/res/layout/fragment_home_head.xml | 28 +++++++----------- app/src/main/res/layout/homepage_parent.xml | 2 -- 4 files changed, 34 insertions(+), 35 deletions(-) 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 d1b2814d..86e21fd6 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 @@ -84,6 +84,7 @@ const val HORIZONTAL_MULTIPLIER = 2.0f const val DOUBLE_TAB_MAXIMUM_HOLD_TIME = 200L const val DOUBLE_TAB_MINIMUM_TIME_BETWEEN = 200L // this also affects the UI show response time const val DOUBLE_TAB_PAUSE_PERCENTAGE = 0.15 // in both directions +private const val SUBTITLE_DELAY_BUNDLE_KEY = "subtitle_delay" // All the UI Logic for the player open class FullScreenPlayer : AbstractPlayerFragment() { @@ -1120,11 +1121,20 @@ open class FullScreenPlayer : AbstractPlayerFragment() { resetRewindText() } + override fun onSaveInstanceState(outState: Bundle) { + // As this is video specific it is better to not do any setKey/getKey + outState.putLong(SUBTITLE_DELAY_BUNDLE_KEY, subtitleDelay) + super.onSaveInstanceState(outState) + } + @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // init variables setPlayBackSpeed(getKey(PLAYBACK_SPEED_KEY) ?: 1.0f) + savedInstanceState?.getLong(SUBTITLE_DELAY_BUNDLE_KEY)?.let { + subtitleDelay = it + } // handle tv controls playerEventListener = { eventType -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 67f58195..46f2bca9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -13,7 +13,6 @@ import android.view.View import android.view.ViewGroup import android.widget.* import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AlertDialog import androidx.core.animation.addListener import androidx.core.content.ContextCompat import androidx.core.view.isGone @@ -734,19 +733,17 @@ class GeneratorPlayer : FullScreenPlayer() { } val currentAudioTracks = tracks.allAudioTracks - val trackBuilder = AlertDialog.Builder(ctx, R.style.AlertDialogCustomBlack) - .setView(R.layout.player_select_tracks) - - val tracksDialog = trackBuilder.create() + val trackDialog = Dialog(ctx, R.style.AlertDialogCustomBlack) + trackDialog.setContentView(R.layout.player_select_tracks) + trackDialog.show() // selectTracksDialog = tracksDialog - tracksDialog.show() - val videosList = tracksDialog.video_tracks_list - val audioList = tracksDialog.auto_tracks_list + val videosList = trackDialog.video_tracks_list + val audioList = trackDialog.auto_tracks_list - tracksDialog.video_tracks_holder.isVisible = currentVideoTracks.size > 1 - tracksDialog.audio_tracks_holder.isVisible = currentAudioTracks.size > 1 + trackDialog.video_tracks_holder.isVisible = currentVideoTracks.size > 1 + trackDialog.audio_tracks_holder.isVisible = currentAudioTracks.size > 1 fun dismiss() { if (isPlaying) { @@ -781,7 +778,7 @@ class GeneratorPlayer : FullScreenPlayer() { videosList.setItemChecked(which, true) } - tracksDialog.setOnDismissListener { + trackDialog.setOnDismissListener { dismiss() // selectTracksDialog = null } @@ -811,11 +808,11 @@ class GeneratorPlayer : FullScreenPlayer() { audioList.setItemChecked(which, true) } - tracksDialog.cancel_btt?.setOnClickListener { - tracksDialog.dismissSafe(activity) + trackDialog.cancel_btt?.setOnClickListener { + trackDialog.dismissSafe(activity) } - tracksDialog.apply_btt?.setOnClickListener { + trackDialog.apply_btt?.setOnClickListener { val currentTrack = currentAudioTracks.getOrNull(audioIndexStart) player.setPreferredAudioTrack( currentTrack?.language, currentTrack?.id @@ -828,7 +825,7 @@ class GeneratorPlayer : FullScreenPlayer() { player.setMaxVideoSize(width, height, currentVideo?.id) } - tracksDialog.dismissSafe(activity) + trackDialog.dismissSafe(activity) } } } catch (e: Exception) { @@ -1145,7 +1142,7 @@ class GeneratorPlayer : FullScreenPlayer() { val source = currentSelectedLink?.first?.name ?: currentSelectedLink?.second?.name ?: "NULL" - val title = when (titleRez) { + val title = when (titleRez) { 0 -> "" 1 -> extra 2 -> source diff --git a/app/src/main/res/layout/fragment_home_head.xml b/app/src/main/res/layout/fragment_home_head.xml index 0ee50042..603621f7 100644 --- a/app/src/main/res/layout/fragment_home_head.xml +++ b/app/src/main/res/layout/fragment_home_head.xml @@ -1,7 +1,6 @@ - @@ -148,17 +145,16 @@ + app:drawableTint="?attr/white" /> @@ -184,9 +180,9 @@ + android:layout_height="wrap_content" + android:background="?android:attr/selectableItemBackground"> + app:drawableTint="?attr/white" /> diff --git a/app/src/main/res/layout/homepage_parent.xml b/app/src/main/res/layout/homepage_parent.xml index b2f3e0a7..9c5dc84d 100644 --- a/app/src/main/res/layout/homepage_parent.xml +++ b/app/src/main/res/layout/homepage_parent.xml @@ -23,9 +23,7 @@ android:nextFocusUp="@id/home_child_more_info" android:paddingHorizontal="5dp" android:clipToPadding="false" - android:descendantFocusability="afterDescendants" - app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" android:id="@+id/home_child_recyclerview" android:orientation="horizontal" From 1eaa4620dc7ec00d34486d1e6ce6a7a1c38afe77 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 2 Mar 2023 05:38:39 +0100 Subject: [PATCH 354/888] Translated using Weblate (qt (generated) (qt)) Currently translated at 54.5% (333 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (French) Currently translated at 98.8% (603 of 610 strings) Translated using Weblate (Italian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (German) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Russian) Currently translated at 99.6% (608 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 85.0% (519 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Vietnamese) Currently translated at 96.8% (591 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 100.0% (610 of 610 strings) Co-authored-by: Anarchydr Co-authored-by: Cliff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Duc Nguyen Tien Co-authored-by: Felipe Nogueira Co-authored-by: Hosted Weblate Co-authored-by: Julian Co-authored-by: Massimo Pissarello Co-authored-by: Samuel Gadiel Co-authored-by: Sdarfeesh Co-authored-by: Walter H Co-authored-by: eightyy8 Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/qt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 8 +- app/src/main/res/values-fr/strings.xml | 17 +- app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 3 +- app/src/main/res/values-it/strings.xml | 3 +- app/src/main/res/values-pl/strings.xml | 3 +- app/src/main/res/values-pt/strings.xml | 217 +++++++++++++++++++------ app/src/main/res/values-qt/strings.xml | 29 ++++ app/src/main/res/values-ru/strings.xml | 13 +- app/src/main/res/values-vi/strings.xml | 23 ++- app/src/main/res/values-zh/strings.xml | 3 +- 12 files changed, 254 insertions(+), 68 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c5e74a60..7cf49de1 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -246,7 +246,7 @@ In Browser wiedergeben Link kopieren Auto-Download - Download-Mirror + Alternativer Download Links neu laden Untertitel herunterladen Qualitätsanzeige diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 18647ef8..0b195275 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -506,11 +506,11 @@ \nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local ¡Se encontró un archivo en modo seguro! \nNo cargar ninguna extensión al inicio hasta que se elimine el archivo. - Jugadora mostrada - buscar cantidad - Jugadora oculta - buscar cantidad + Reproductor visible - buscar cantidad + Reproductor oculto - buscar cantidad Android TV - La cantidad de búsqueda utilizada cuando la jugadora es visible - La cantidad de búsqueda utilizada cuando el jugador está oculto + Tiempo de búsqueda usado (en segundos) cuando el reproductor está visible + Tiempo de búsqueda usado (en segundos) cuando el reproductor está oculto Parar Falló Registro diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 18255b3b..f3d35c19 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -130,7 +130,7 @@ Nouvelle mise à jour trouvée ! \n%s -> %s Épisode spécial - Qualité de visionnage préférée + Qualité de visionnage préférée (WiFi) Taille de la mémoire cache Étendre Non-responsabilité @@ -508,4 +508,19 @@ 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é. + Arrêter + Revenir à + Enregistrer + Qualité de visionnage préférée (données mobiles) + Abonné à %s + Démarrer + Test des fournisseurs + Réussi + Désabonné de %s + Redémarrer + Abonné + raw.githubusercontent.com Proxy + Contournements de FAI + L\'épisode %d est sorti ! + Échouer \ 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 b623ec5d..159542cc 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -553,4 +553,5 @@ 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. + Preferirana kvaliteta gledanja (podatkovna mobilna mreža) \ 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 84179352..0e383562 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -243,7 +243,7 @@ Jangan tunjukkan lagi Skip Update ini Update - Kualitas tontonan yang lebih diinginkan + Kualitas tontonan yang lebih diinginkan (WIFI) Karakter maksimal judul pemutar video Resolusi pemutar video Ukuran buffer video @@ -551,4 +551,5 @@ Bypass pemblokiran Github menggunakan JSDeliVR, dapat menyebabkan pembaruan tertunda beberapa hari. Bypass ISP Pulihkan + Nonton dengan kualitas yang di inginkan (Data Seluler) \ 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 d6bdc204..b8e7eb20 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -265,7 +265,7 @@ Non mostrare di nuovo Salta questo aggiornamento Aggiorna - Risoluzione preferita + Qualità di visualizzazione preferita (WiFi) Limita i caratteri del titolo nel player Risoluzione video player Dimensione cache video @@ -550,4 +550,5 @@ Ripristina Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! + Qualità di visualizzazione preferita (Dati mobili) \ 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 bbaaec57..558a46ed 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -254,7 +254,7 @@ Nie pokazuj ponownie Pomiń tę aktualizację Aktualizacja - Domyślna jakość + Domyślna jakość (WiFi) Maksymalna ilość znaków w tytule odtwarzacza Rozdzielczość odtwarzacza wideo Rozmiar bufora wideo @@ -531,4 +531,5 @@ 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. + Domyślna jakość (dane mobilne) \ 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 3754de8b..0c846361 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -3,63 +3,63 @@ %s Ep %d %dh %dm %dm - Episódio %d será lançado em + O episódio %d será lançado em Poster - Capa do Episódio + Pôster do episódio Poster - Capa Principal + Pôster Principal Próximo Aleatório Voltar - Trocar Provedor - %d dia(s), %d hora(s) e %d mese(s) + Alterar Provedor + %dd %dh %dm Fonte Resolução Extras - Preview Background + Visualizar plano de fundo Velocidade (%.2fx) Classificado: %.1f Nova atualização encontrada! \n%s -> %s - Enchimento + Preenchimento CloudStream - Reproduzir com CloudStream + Assistir com o CloudStream Início - Pesquisa - Transferências - Opções + Pesquisar + Downloads + Configurações Procurar… - Procurar em %s… - Sem Dados - Mais Opções + Pesquisar %s… + Sem dados + Mais opções Próximo episódio - Géneros - Partilhar - Abrir no Navegador - Saltar Carga + Gêneros + Compartilhar + Abrir no navegador + Pular carregamento Carregando… Assistindo - Em Espera + Em espera Concluído - Abandonado - Planeio Assistir - Nenhuma - Assistindo de Novo - Reproduzir Filme - Reproduzir Livestream + Desistido + Pretendo assistir + Nenhum + Reassistindo + Reproduzir filme + Reproduzir transmissão ao vivo Transmitir Torrent Fontes Legendas - Voltar a tentar ligação… - Voltar Atrás - Reproduzir Episódio - Transferir - Transferido - A Transferir - Transferência em Pausa - Transferência Iniciada - Transferência Falhou - Transferência Cancelada - Transferência Completa + Tentar conexão novamente… + Voltar + Reproduzir episódio + Download + Baixado + Baixando + Download Pausado + Download Iniciado + Falha no Download + Download cancelado + Download concluído Stream Erro a Carregar Links Armazenamento Interno @@ -142,7 +142,7 @@ Arquivo de backup carregado Falha ao restaurar dados do ficheiro %s Dados guardados com sucesso - Permissões de armazenamento em falta, por favor tente de novo + Permissão de armazenamento não encontrada, por favor tente novamente. Erro no backup de %s Procurar Contas @@ -250,15 +250,15 @@ Não mostrar de novo Saltar esta Atualização Atualizar - Qualidade Preferida - Máximo de caracteres do título de vídeos + Qualidade Preferida (WiFi) + Máximo de caracteres do título no player de video Resolução do player de vídeo Tamanho do buffer do vídeo Comprimento do buffer do vídeo Cache do vídeo em disco Limpar cache de vídeo e imagem - Causará travamentos aleatórios se definido muito alto. Não mude se tiver pouca memória RAM, como um Android TV ou um telefone antigo - Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV + Causará travamentos em dispositivos com pouca memória se definido muito alto , como uma Android TV. + Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como uma Android TV. DNS sobre HTTPS Útil para contornar bloqueios do fornecedor de internet Clonar site @@ -363,7 +363,7 @@ Plugin Carregado Plugin Apagado Falha ao carregar %s - Iniciada a transferência %d %s + Download iniciado %d %s… Transferido %d %s com sucesso Tudo %s já transferido Transferência em batch @@ -375,18 +375,22 @@ Transferido: %d Desativado: %d Não transferido: %d - Adicionar um repositório para instalar extensões de sites + O CloudStream não possui sites instalados por padrão. Você precisa instalar os sites a partir de repositórios. +\n +\nDevido a uma restrição sem sentido de direitos autorais (DMCA) pela Sky UK Limited 🤮 não podemos vincular o site do repositório no aplicativo. +\n +\nJunte-se ao nosso Discord ou pesquise online. Ver repositórios da comunidade Lista pública Todas as legendas em maiúsculas Transferir todos os plugins deste repositório\? %s (Desativado) Instalador APK - %d minuto(s) - Reproduzir trailer + %d min + Assistir Trailer Marcar como visto/não visto Reproduzir - Instalar automaticamente todas as extensões dos repositórios cadastrados. + Instalar automaticamente todos os plugins ainda não instalados dos repositórios adicionados. Baixar extensões automaticamente Refazer o processo de configuração -30 @@ -394,9 +398,9 @@ +30 %s %d%s Elenco: %s - Atualização em andamento + Atualização iniciada Log - Alguns aparelhos não possuem suporte para o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar. + Alguns aparelhos não suportam o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar. %d-%d %d %s Iniciar @@ -408,4 +412,121 @@ Ova Anime Player visível - Procurar valor + Instalando atualização do app… + Você tem certeza que deseja sair\? + Versão + Encerramento + Limpar histórico + Abertura + Não + Ordenar por + Sim + Baixando atualização do app… + Episódio %d lançado! + Créditos + Descrição + Tamanho + Parar + Modo seguro ligado + Histórico + Ordenar + Player interno + Autores + Suportado + Idioma + Instalar a extensão primeiro + Playlist HLS + Player de vídeo preferido + Estado + Gestos + Faixas + WP + Cam + Abertura + Selecionar Biblioteca + Contorna o bloqueio do GitHub ao usar jsdelivr, pode atrasar atualizações em alguns dias. + VLC + Todas as linguagens + Atualizado (Novo para Antigo) + Inscrito + HDR + Reiniciar + Navegador Web + Atualizado (Antigo para Novo) + Web Video Cast + DVD + Instalador de pacotes + MPV + Remover dos assistidos + Não foi possível instalar a nova versão do aplicativo + Inscrição cancelada em %s + Final misto + Avaliações (Decrescente) + Aplicar ao reiniciar + Referente + Player oculto - Quantidade de Busca + raw.githubusercontent.com Proxy + Blu-ray + Aparência + 1000 ms + SDR + 18+ + Abrir com + Teste de provedor + UHD + Ver informações sobre falha + Aplicativo não encontrado + Reverter + Link para transmitir + Plugins baixados + %d plugins atualizados + Pular %s + Abertura mista + Alfabético (Z a A) + Parece que esta lista está vazia, tente trocar para outra + Inscrito em %s + 4K + Faixas de vídeo + O aplicativo será atualizado ao sair + Atualizando shows inscritos + Alfabético (A a Z) + Avaliações (Crescente) + Parece que a sua biblioteca está vazia :( +\nFaça login em uma conta de biblioteca ou adicione shows à sua biblioteca local + Arquivo de modo de segurança encontrado! +\nNenhuma extensão será carregada na inicialização do app até que o arquivo seja removido. + Contorno do provedor de serviço de internet (ISP) + Links + Recursos do Player + Recursos + Atualizações de aplicativos + Qualidade Preferida (Dados Móveis) + Quantidade de busca (em segundos) usada quando o player de video está visível + Quantidade de busca (em segundos) usada quando o player de video está oculto + Falha ao conectar com GitHub, ativando proxy jsdelivr. + Cache + Android TV + Legendas + %s %s + TS + Cam + Cam + HQ + HD + TC + Web + Nota: %s + Legado + Todas as extensões foram desativadas devido a uma falha para ajudá-lo a encontrar a que está causando o problema. + Recapitular + Mostrar pop-ups para pular abertura/encerramento + Muito texto. Não é possível salvar na área de transferência. + Marcar como assistido + Backup + Extensões + Ações + Layout + Configurações padrão + SD + Faixas de áudio \ 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 c1119bfc..76852ca4 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -219,4 +219,33 @@ uuuuhhhoouuooog ooaaahhhh uuu ugggg ooo guggg ooh + auuuooohaaaaagh + uuuuuuuh aaaoo o + ooooooouuuua aa aaagh agh + AAAAUUUOH + aoughoooaaaa + oooouuuh + ahaough aaouuuuh-h + auughooo + ooooooa aauoh + aaaaagh oouoo aaaaaaa + aaaaaagh uuohuoh + aaaaaauo agghhhhhhaoouu + uuuuuuuuh + ouaaahh + ooough aaoough aooou %s aaaa + ouooooouuuu oooooo + aaaaaaaaaaahhhgh-aooohoooo + aau aooooghaao + aagh aaaaaaaaaaaa oooh, aaough, ooga oguuu aaaaaaaaaaa ooooooohghh a-a-aaauo + %dmmmmmm.. +\naaaaooughugh + aooohuohaaaa ooooagh + oooooogh-aaaaaogh + guuuaaaahhhhhhhaaa + woooaaahh ahahaaaauu 🦍 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA + aoaaaaaoooghhh + oooooh uuaagh + \@string/home_play \ 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 2812667a..e613cee4 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -318,7 +318,7 @@ Титры Отметить как просмотренное Разрешение видеоплеера - Желаемое качество видео + Предпочтительное качество видео (WiFi) Максимум символов Длинна буфера Кеш видео на диске @@ -518,4 +518,15 @@ Неудачный Прекратить Перезапустить + Вернуться + Подписался на %s + Предпочтительное качество видео (Мобильный интернет) + raw.githubusercontent.com Прокси-сервер + Не удалось подключиться к GitHub. Будет выполнен прокси jsdelivr. + Эпизод %d выпущен! + Обходы провайдера + Обновление подписки на фильмы и сериалы + Обход ограничения доступа к GitHub с помощью jsdelivr может задержать обновления на несколько дней. + Подписные + Отказались от подписки на %s \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index db647b5d..59c65916 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -10,7 +10,7 @@ %dm Poster - \@string/result_poster_img_des + Ảnh bìa Episode Poster Main Poster Next Random @@ -260,18 +260,18 @@ Kiểm tra cập nhật Khóa Thu Phóng - Tuỳ chọn - Tua nhanh + Nguồn + Bỏ qua OP Không hiện lại - Bỏ qua + Bỏ qua bản cập nhật này Cập nhật - Tự động chọn chất lượng phim + Chất lượng xem ưu tiên (WiFi) Kí tự tối đa trên tiêu đề - Định dạng trình phát - Dung lượng video cache + Độ phân giải trình phát video + Kích thước bộ nhớ đệm video Thời lượng bộ nhớ đệm - Dung lượng video cache - Xoá hình ảnh và video + Lưu bộ nhớ đệm video trên ổ cứng + Xoá bộ nhớ đệm hình ảnh và video Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng ram thấp như Android TV. Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng lưu trữ thấp như Android TV. DNS over HTTPS @@ -519,4 +519,9 @@ Có vẻ như danh sách này trống, hãy thử chuyển sang danh sách khác Chữ cái (A đến Z) Chọn Thư viện + Nhật ký + Chất lượng xem ưu tiên (Dữ liệu di động) + Thất bại + Thành công + Bắt đầu \ 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 626cc0fe..72d62a04 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -286,7 +286,7 @@ 不再显示 跳过此更新 更新 - 首选播放画质 + 首选播放画质(WiFi) 视频播放器标题最多字符 视频播放器标题 视频缓冲大小 @@ -576,4 +576,5 @@ 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 ISP 绕过 还原 + 首选播放画质(移动数据) \ No newline at end of file From e85b31c35ddac86e03cfbd495e01a69cedfe56ff Mon Sep 17 00:00:00 2001 From: Lag <> Date: Tue, 7 Mar 2023 17:36:53 +0100 Subject: [PATCH 355/888] Fixing rouge pixels in settings --- app/src/main/res/values/styles.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 78c62c69..b9648162 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -40,7 +40,6 @@ ?attr/textColor ?attr/grayTextColor - ?attr/grayTextColor ?attr/grayTextColor ?attr/textColor From 37244ab0f74392af6861a4f894ebb1a3de77806a Mon Sep 17 00:00:00 2001 From: PokerFace <117321707+pokerface-bad@users.noreply.github.com> Date: Sat, 11 Mar 2023 02:45:11 +0700 Subject: [PATCH 356/888] Intertal Player: Added MPD support (#402) * added isDash in ExtractorLink --- .../cloudstream3/ui/player/CS3IPlayer.kt | 10 +++++----- .../cloudstream3/utils/ExtractorApi.kt | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 6 deletions(-) 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 782e3fa4..cb8efe92 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 @@ -1196,10 +1196,10 @@ class CS3IPlayer : IPlayer { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory) } - val mime = if (link.isM3u8) { - MimeTypes.APPLICATION_M3U8 - } else { - MimeTypes.VIDEO_MP4 + val mime = when { + link.isM3u8 -> MimeTypes.APPLICATION_M3U8 + link.isDash -> MimeTypes.APPLICATION_MPD + else -> MimeTypes.VIDEO_MP4 } val mediaItems = if (link is ExtractorLinkPlayList) { @@ -1249,4 +1249,4 @@ class CS3IPlayer : IPlayer { loadOfflinePlayer(context, it) } } -} \ 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 0bced6b2..b03c9fb7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -52,7 +52,7 @@ data class ExtractorLinkPlayList( ) -open class ExtractorLink( +open class ExtractorLink constructor( open val source: String, open val name: String, override val url: String, @@ -62,7 +62,24 @@ open class ExtractorLink( override val headers: Map = mapOf(), /** Used for getExtractorVerifierJob() */ open val extractorData: String? = null, + open val isDash: Boolean = false, ) : VideoDownloadManager.IDownloadableMinimum { + /** + * Old constructor without isDash, allows for backwards compatibility with extensions. + * Should be removed after all extensions have updated their cloudstream.jar + **/ + constructor( + source: String, + name: String, + url: String, + referer: String, + quality: Int, + isM3u8: Boolean = false, + headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + extractorData: String? = null + ) : this(source, name, url, referer, quality, isM3u8, headers, extractorData, false) + override fun toString(): String { return "ExtractorLink(name=$name, url=$url, referer=$referer, isM3u8=$isM3u8)" } From 8b2881f5f64fad7eb29c93af0a3f696798b93d39 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 10 Mar 2023 20:45:19 +0100 Subject: [PATCH 357/888] Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Dutch) Currently translated at 74.0% (452 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Added translation using Weblate (Malay) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 99.1% (605 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Co-authored-by: Cliff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: Felipe Nogueira Co-authored-by: Fjuro Co-authored-by: Frank Gerritsen Mulkes Co-authored-by: Hosted Weblate Co-authored-by: Rex_sa Co-authored-by: Samuel Gadiel Co-authored-by: Skrripy Co-authored-by: TZVS Co-authored-by: Tang Yin Co-authored-by: Walter H Co-authored-by: eightyy8 Co-authored-by: gallegonovato Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/en/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 18 +-- app/src/main/res/values-cs/strings.xml | 18 +-- app/src/main/res/values-es/strings.xml | 18 +-- app/src/main/res/values-in/strings.xml | 18 +-- app/src/main/res/values-ms/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 11 +- app/src/main/res/values-pt/strings.xml | 14 +- app/src/main/res/values-ru/strings.xml | 16 +-- app/src/main/res/values-tr/strings.xml | 173 ++++++++++++++----------- app/src/main/res/values-uk/strings.xml | 101 +++++++-------- app/src/main/res/values-zh/strings.xml | 14 +- app/src/main/res/values/strings.xml | 20 +-- 12 files changed, 225 insertions(+), 198 deletions(-) create mode 100644 app/src/main/res/values-ms/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index cfd761e3..ae45465b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -119,16 +119,16 @@ وضع إيغنغرافي يضيف خيار السرعة في المُشغل السحب لتقديم - إسحب إلى اليسار أو اليمين للتحكم في الوقت في مُشغل الفيديو + اسحب من جانب إلى آخر للتحكم في موضعك في مقطع فيديو السحب لتغيير الإعدادات - إسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت + مرر لأعلى أو لأسفل على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت تشغيل الحلقة التالية تلقائيًا تبدأ الحلقة التالية عندما تنتهي الحالية النقر مرتان للتقديم للأمام أو للخلف الضغط مرتان لإيقاف مؤقت - التحكم في مدى تقديم المُشغل + التحكم في مدى تقديم المُشغل(ثوان) إضغط مرتين على الجانب الأيمن أو الأيسر للتقديم للأمام أو للخلف - إضغط في الوسط لإيقاف مؤقت + اضغط مرتين في المنتصف للتوقف استخدم سطوع النظام استخدم سطوع النظام في مُشغل التطبيق بدلاً من التراكب الداكن تحديث تقدم المشاهدة @@ -155,7 +155,7 @@ تحديث الإضافات تلقائيًا تنزيل الإضافات تلقائيًا التحديث التلقائي - البحث تلقائيًا عن التحديثات الجديدة عند البداية + ابحث تلقائيا عن التحديثات الجديدة بعد بدء التطبيق. التحديث إلى الاصدارات التجريبية (بيتا) البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط غيت هاب @@ -218,8 +218,8 @@ فيلم مسلسل كرتون - أنمي - اوفا + أنيمي + أوفا تورنت وثائقي دراما آسيوية @@ -284,7 +284,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. عام زر العشوائي - إظهار زر العشوائي على الصفحة الرئيسية + يظهر الزر على الصفحة الرئيسية والذي يمكنه اختيار فيلم عشوائي أو مسلسل تلفزيوني من الصفحة الرئيسية لغات المزود واجهة التطبيق المحتوى المفضل @@ -558,7 +558,7 @@ تجاوز مزود خدمة الإنترنت استرجاع فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr. - تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. + باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. وكيل 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 e99e1010..67179b46 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -122,14 +122,14 @@ Rychlostní režim Přidá do přehrávače možnost rychlosti Přejet pro posun - Přejeďte prstem vlevo nebo vpravo pro ovládání času v přehrávači + Přejeďte prstem ze strany na stranu pro ovládání své pozice ve videu Přejet pro změnu nastavení - Přejeďte prstem na levé nebo pravé straně pro změnu jasu nebo hlasitosti + Přejeďte prstem nahoru nebo dolů na levé nebo pravé straně pro změnu jasu nebo hlasitosti Dvojité klepnutí pro posun Dvojité klepnutí pro pozastavení - Množství času k posunu + Množství času k posunu (sekundy) Klepněte dvakrát vpravo nebo vlevo pro posun vpřed nebo vzad - Klepněte doprostřed pro pozastavení + Klepněte dvakrát doprostřed pro pozastavení Použít systémový jas V přehrávači použít systémov překrytí Aktualizovat postup sledování @@ -151,7 +151,7 @@ Nebude odesílat žádná data Zobrazit výplňové epizody u anime Zobrazit aktualizace aplikace - Při spuštění automaticky zkontrolovat nové aktualizace + Při spuštění aplikace automaticky zkontrolovat nové aktualizace. Aktualizovat na předběžná vydání Kontrolovat aktualizace předběžných vydání, místo normálních plných vydání GitHub @@ -211,8 +211,8 @@ Film Seriál Animovaný - \@string/anime - \@string/ova + Anime + OVA Torrent Dokument Asijské drama @@ -266,7 +266,7 @@ Jakékoli právní otázky týkající se obsahu této aplikace je třeba řešit se samotnými hostiteli a poskytovateli souborů, protože s nimi nejsme nijak spojeni. V případě porušení autorských práv se obraťte přímo na odpovědné strany nebo na webové stránky, na kterých se streamování odehrává. Aplikace je určena výhradně pro vzdělávací a osobní účely. CloudStream 3 v aplikaci nehostuje žádný obsah a nemá žádnou kontrolu nad tím, jaká média jsou v aplikaci umístěna nebo odstraněna. CloudStream 3 funguje jako jakýkoli jiný vyhledávač, například Google. Služba CloudStream 3 nehostuje, nenahrává ani nespravuje žádná videa, filmy ani obsah. Pouze vyhledává, agreguje a zobrazuje odkazy v pohodlném, uživatelsky přívětivém rozhraní. Pouze shromažďuje webové stránky třetích stran, které jsou veřejně přístupné prostřednictvím jakéhokoli běžného webového prohlížeče. Je odpovědností uživatele, aby se vyvaroval jakýchkoli akcí, které by mohly porušovat zákony platné v jeho lokalitě. Použijte CloudStream 3 na vlastní nebezpečí. Obecné Náhodné tlačítko - Zobrazit na domovské stránce náhodné tlačítko + Zobrazit na domovské stránce tlačítko, kterým lze vybrat náhodný film nebo seriál z domovské stránky Jazyk poskytovatelů Rozložení aplikace Preferovaná média @@ -551,6 +551,6 @@ 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í. + Pomocí jsdelivr lze obejít blokování GitHubu. Může dojít ke 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-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0b195275..5c8ac532 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -51,10 +51,10 @@ Elevado Use esto si los subtítulos se muestran %d ms muy pronto Use esto si los subtítulos se muestran %d ms tarde - Desliza el dedo hacia la izquierda o hacia la derecha para controlar el tiempo en el reproductor de video + Desliza el dedo de lado a lado para controlar la posición en un video Filtrar por idioma de medios preferido Eliminar Closed Captions (CC) de los subtítulos - Cantidad de tiempo de búsqueda en el reproductor (en segundos) + Cantidad de búsquedas del reproductor (segundos) Use el brillo del sistema en el reproductor de la app en lugar de una superposición oscura Resolución del reproductor de video MPV @@ -205,16 +205,16 @@ Modo Eigengravy Deslice para avanzar/retroceder Deslice para cambiar la configuración - Deslice el dedo hacia la izquierda o hacia la derecha para cambiar el brillo o el volumen + Deslice hacia arriba o hacia abajo en el lado izquierdo o derecho para cambiar el brillo o el volumen Toca dos veces para buscar Tocar dos veces para pausar Toque dos veces en el lado derecho o izquierdo para buscar hacia adelante o hacia atrás - Toque en el medio para pausar + Toque dos veces en el medio para hacer una pausa Usar brillo del sistema Restaurar datos desde el backup Hacer copia de los datos (backup) Archivo de backup cargado - Buscar automáticamente nuevas actualizaciones al inicio + Busque automáticamente nuevas actualizaciones después de iniciar la aplicación. Rehacer el proceso de configuración inicial Mostrar episodio de relleno para Anime Reproducir Episodio @@ -306,7 +306,7 @@ Aspecto Características Botón de Al azar - Muestra un botón de reproducción \"al azar\" en la página de inicio + Muestra un botón de reproducción \"al azar\" en la página de inicio para poelículas y series cuenta Cerrar sesión Cambiar cuenta @@ -363,8 +363,8 @@ Película Serie Dibujo animado - \@string/anime - \@string/ova + Anime + OVA Torrent Documental Drama asiático @@ -525,7 +525,7 @@ ¡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. + Con jsdelivr, se puede omitir el bloqueo de GitHub. Puede retrasar las actualizaciones unos días. Revertir ISP Bypasses Calidad de visualización preferida (Datos móviles) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 0e383562..1913868a 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -120,14 +120,14 @@ Mode Eigengravy Menambahkan opsi kecepatan di pemutar Geser untuk mengubah waktu - Geser ke kiri atau kanan untuk mengontrol waktu di pemutar video + Geser dari sisi ke sisi untuk mengontrol posisi dalam video Geser untuk mengubah pengaturan - Geser ke sisi kiri atau kanan untuk mengubah pencerahan atau volume + Geser ke atas atau ke bawah di sisi kiri atau kanan untuk mengubah kecerahan atau volume Tekan dua kali untuk mengubah waktu Tekan dua kali untuk menjeda - Jumlah pengubah waktu pemutar + Jumlah pengubah waktu pemutar (Detik) Tekan dua kali di sisi kanan atau kiri untuk mengubah waktu ke depan atau ke belakang - Tekan di tengah untuk menjeda + Tekan dua kali di tengah untuk menjeda Gunakan pencerahan sistem Gunakan pencerahan sistem di pemutar aplikasi dari pada hamparan gelap Update progres tontonan @@ -149,7 +149,7 @@ Tidak mengirim data Tampilkan episode filler untuk anime Tampilkan update aplikasi - Secara otomatis mencari update terbaru saat aplikasi dibuka + Secara otomatis mencari update terbaru setelah aplikasi dibuka. Update ke prarilis Hanya mencari update prarilis daripada rilis penuh Github @@ -209,8 +209,8 @@ Movie Seri Kartun - \@string/anime - \@string/ova + Anime + OVA Torrent Film Dokumenter Drama Asia @@ -264,7 +264,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Umum Tombol Acak - Tampilkan tombol acak di Beranda + Tampilkan tombol di halaman utama yang dapat memilih seri film atau TV acak dari halaman utama Bahasa provider Tata Letak Aplikasi Media yang lebih diinginkan @@ -548,7 +548,7 @@ 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. + Mengunakan jsdelivers, bisa melewati pemblokiran GitHub. Mungkin dapat menyebabkan pembaruan tertunda dalam beberapa hari. Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-ms/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c2561914..dd89c34a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -9,7 +9,7 @@ %dm Poster - \@string/result_poster_img_des + Poster Aflevering Poster Hoofdposter Volgende willekeurig @@ -128,14 +128,14 @@ Eigengravy Modus Voegt een snelheidsoptie toe in de speler Swipe to seek - Veeg naar links of rechts om de tijd in de videoplayer te regelen + Veeg naar links of rechts om de tijd in de videospeler te regelen Veeg om instellingen te wijzigen Veeg naar links of rechts om de helderheid of het volume te wijzigen Dubbeltik om te zien Dubbeltik om te pauzeren - Speler zoeken bedrag + Videospeler aantal zoeken Tik twee keer aan de rechter- of linkerkant om vooruit of achteruit te zoeken - Tik in het midden om te pauzeren + Tik twee keer in het midden om te pauzeren Systeemhelderheid gebruiken Gebruik systeemhelderheid in de app-speler in plaats van een donkere overlay Kijkvoortgang bijwerken @@ -405,4 +405,7 @@ Start de volgende episode wanneer deze afgelopen is Volgende episode automatisch afspelen De update is gestart + Bibliotheek + Browser + Logboek \ 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 0c846361..64ccb903 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -123,16 +123,16 @@ Modo Eigengravy Acrescenta uma opção de velocidade no player Deslize para andar - Deslize para a esq. ou dir. para controlar o tempo no player + Deslize para os lados para controlar a posição em um vídeo Deslize para mudar as configurações - Deslize do lado esq. ou dir. para ajustar brilho ou volume + Deslize para cima ou para baixo, no lado esquerdo ou direito, para ajustar brilho ou volume Reproduzir automaticamente próximo episódio Começa o próximo episódio quando o atual termina Toque duplo para avançar Toque duplo para pôr em pausa - Segundos avançados no player + Tempo de busca no player (Segundos) Toque duplo no lado esq. ou dir. para andar para trás ou para a frente - Toque no meio para pôr em pausa + Toque duas vezes no meio para pausar Usar brilho da sistema Usar brilho do sistema no player em vez de uma sobreposição escura Atualizar progresso @@ -158,7 +158,7 @@ Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa Atualizações de plugin automáticas Mostrar atualizações da app - Procurar novas atualizações automaticamente ao iniciar + Procurar automaticamente por novas atualizações depois de iniciar o app. Atualizar para pré-lançamentos Procura atualizações de pré-lançamento em vez de só lançamentos oficiais Github @@ -273,7 +273,7 @@ Aviso Legal Geral Botão Aleatório - Mostra o botão Aleatório na página inicial + Mostra o botão Aleatório na página inicial, que pode escolher aleatoriamente um filme ou série Idioma dos fornecedores Layout da App Mídia preferida @@ -444,7 +444,7 @@ Cam Abertura Selecionar Biblioteca - Contorna o bloqueio do GitHub ao usar jsdelivr, pode atrasar atualizações em alguns dias. + Usando jsdelivr o bloqueio do GitHub pode ser contornado. Pode atrasar atualizações em alguns dias. VLC Todas as linguagens Atualizado (Novo para Antigo) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e613cee4..5295bd35 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -142,10 +142,10 @@ Добавляет опцию скорости в проигрывателе Проведите пальцем для поиска Проведите пальцем для изменения настроек - Проведите пальцем по левой или правой стороне для изменения яркости или громкости + Проведите вверх или вниз по левой или правой стороне, чтобы изменить яркость или громкость Автопроиграть следующего серия Поток торрент - Проведите пальцем влево или вправо, чтобы управлять временем в видеоплеере + Проведите пальцем из стороны в сторону, чтобы управлять свое место в видеоролике Начните следующий серию, когда закончится текущий Загружена резервная копия Не удалось восстановить данные из %s @@ -159,7 +159,7 @@ Автоматическое обновление плагинов Автоматическая загрузка плагинов Показать обновления приложения - Автоматически проверять обновления при старте + Автоматически проверять обновления при старте приложения. Обновится до пре-релиза APK установщик Github @@ -227,7 +227,7 @@ Использовано Двойное нажатие для паузы Коснитесь дважды правой или левой стороны для поиска вперед или назад - Нажмите в центре для паузы + Нажмите дважды в центре, чтобы сделать паузу Использовать системную яркость Автоматически синхронизировать текущий прогресс эпизода Ошибка резервного копирования %s @@ -408,8 +408,8 @@ Съешь ещё этих мягких французских булок, да выпей же чаю Рекомендуется Загружено %s - \@нить/аниме - \@нить/ova + Аниме + OVA Этикетка Dub Сайт Функции @@ -493,7 +493,7 @@ Фильтровать по предпочитаемому языку медиа Неверный ID Ссылка на стрим - Отображать рандомную кнопку на Главной странице + Показывает кнопку на главной странице, с помощью которой можно выбрать случайный фильм или сериал с главной страницы Рандомная кнопка Legacy (старый) Веб видеокаст @@ -501,7 +501,7 @@ Перезагрузить ссылки Предпочтительные медиа Опущенные - Объем перемотки плеера + Объем перемотки плеера (секундах) Объем перемотка, используемый, когда плеер виден Плеер показан - Перемотки объем Плеер спрятан - Перемотки объем diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 807716d8..f53bb69d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -117,47 +117,47 @@ Hiç muz verilmedi Otomatik seçilecek dil İndirilecek diller - Alt yazı dili - Varsayılana döndürmek için basılı tut + Altyazı dili + Sıfırlamak için basılı tut Fontları içe aktarmak için %s konumuna yerleştirin İzlemeye devam et Kaldır Daha fazla bilgi \@string/home_play Bu sağlayıcının düzgün çalışması için bir VPN gerekebilir - Bu sağlayıcı bir torrent. VPN önerilir + Bu sağlayıcı torrent kullanıyor, bir VPN önerilir Metadata site tarafından sağlanmamış, veri site\'de bulunmuyorsa video yüklenmesi başarısız olacak. Açıklama Konu bulunamadı Açıklama bulunamadı - Logcat\'i göster 🐈 - Resim-içinde-resim - Diğer uygulamaların üzerinde minyatür bir oynatıcıda oynatmaya devam eder + Logcat\'i görüntüle 🐈 + Görüntü içinde görüntü + İçerik diğer uygulamaların üzerinde küçük bir pencerede oynatılmaya devam eder Oynatıcı yeniden boyutlandırma butonu - Siyah sınırları kaldır - Alt yazı + Siyah sınır çizgilerini kaldır + Alt yazılar Oynatıcı alt yazı ayarları - Chromecast alt yazı + Chromecast alt yazıları Chromecast alt yazı ayarları - Eigengravy modu - Oynatıcıya bir hız seçeneği ekle - Gözlemek için kaydır - Zamanı ayarlamak için sağa veya sola kaydır + Eigengrau modu + Oynatıcıya hız seçeneği ekler + Atlamak için kaydır + Zamanı ayarlamak için yanlardan kaydır Ayarları değiştirmek için kaydır - Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla + Sol ve sağ taraftan yukarı kaydırarak ekran parlaklığı ve sesi ayarla Sonraki bölümü otomatik oynat Mevcut bölüm bittiğinde sonraki bölüme başla - Gözlemek için çift tıkla - Durdurmak için çift tıkla - Oynatıcı gözleme miktarı - İleri ve geri atlamak için sağa ve sola çift tıkla - Durdurmak için ortaya tıkla + Çift dokunarak atla + İki kez dokunarak duraklat + Atlanacak süre (Saniye) + İleri ve geri atlamak için sağa ve sola iki kez dokun + Durdurmak için ekranın ortasına çift dokun Sistem parlaklığını kullan - Oynatıcıda karanlık kaplama yerine sistem parlaklığını kullan + Oynatıcıyı karartmak yerine sistem parlaklığını kullan İzleme ilerlemesini güncelle Mevcut bölüm ilerlemesini otomatik güncelle - Yedekten geri yükle - Verileri yedekleyin + Verileri yedekten geri yükle + Verileri yedekle Yedek dosyası yüklendi Geri yükleme başarısız oldu: %s Başarıyla yedeklendi @@ -165,21 +165,21 @@ %s yedeklenirken hata Ara Hesaplar - Güncellemeler ve yedek + Güncellemeler ve yedekleme Bilgi Gelişmiş arama - Sağlayıcılara göre ayrılmış arama sonuçlarını ver + Arama sonuçlarını sağlayıcıya göre ayırır Yalnızca çökmelerle ilgili verileri gönderir - Hiç veri göndermez - Anime için filler bölümleri gösterir + Veri göndermez + Anime için filler bölümleri göster Fragmanları göster Kitsu\'dan posterleri göster - Seçilen video kalitelerini arama sonuçlarında gizle + Seçilen video kalitelerini arama sonuçlarında gösterme Otomatik eklenti güncellemeleri Uygulama güncellemelerini göster - Başlangıçta yeni güncellemeleri otomatik olarak ara - Ön sürümlere güncelle - Sadece tam sürümler yerine ön sürüm güncellemelerini de ara + Uygulama başlatıldıktan sonra güncellemeleri otomatik olarak kontrol et. + Deneysel sürümlere güncelle + Yalnızca tam sürümler yerine deneysel güncellemeleri de ara GitHub Aynı geliştiriciler tarafından LightNovel uygulaması Aynı geliştiriciler tarafından anime uygulaması @@ -191,8 +191,8 @@ Bağlantı bulunamadı Bağlantı panoya kopyalandı Bölümü oynat - Varsayılana sıfırla - Üzgünüz, uygulama çöktü. Geliştiricilere isimsiz bir hata raporu gönderilecek + Varsayılan değere sıfırla + Üzgünüz, uygulama çöktü. Geliştiricilere anonim bir hata raporu gönderilecek Sezon %s %d%s Sezon yok @@ -210,8 +210,8 @@ Sürdür -30 +30 - %s dosyası tamamen silinecek -\nEmins misiniz\? + %s tamamen silinecek +\nEmin misiniz\? %dm \nkaldı Devam ediyor @@ -236,9 +236,9 @@ Torrentler Belgeseller OVA - Asya dramaları + Asya dizileri Canlı yayınlar - NSFW + +18 Diğerleri Film @@ -248,9 +248,9 @@ \@string/ova Torrent Belgesel - Asya draması + Asya dizisi Canlı yayın - NSFW + +18 Video Kaynak hatası Sunucu hatası @@ -259,10 +259,10 @@ İndirme hatası, depolama izinlerini kontrol edin Bölümü Chromecast ile yayınla Bağlantıyı Chromecast ile yayınla - Uygulamada oynat - %s\'deda oynat + Burada oynat + %s üzerinden oynat Tarayıcıda oynat - Linki kopyala + Bağlantıyı kopyala Otomatik indir Şu kaynaktan indir Bağlantıları yenile @@ -281,22 +281,22 @@ Kilitle Yeniden boyutlandır Kaynak - OP\'yi geç + Jeneriği geç Bir daha gösterme Bu güncellemeyi atla Güncelle - Tercih edilen izleme kalitesi - Oynatıcıdaki maksimum başlık karakter sayısı - Oynatıcının üst tarafındaki öğeler + Tercih edilen görüntü kalitesi (WiFi) + Video oynatıcı başlığı karakter üst sınırı + Oynatıcının çözünürlüğü Video arabelleği boyutu Video arabelleği uzunluğu - Diskteki video önbelleği + Hafızadaki video önbelleği Video ve resim önbelleğini temizle - Android TV gibi düşük belleğe sahip cihazlarda çok yükseğe ayarlanırsa çökmelere neden olur. - Çok yükseğe ayarlanırsa, Android TV cihazları gibi düşük depolama alanına sahip sistemlerde sorunlara neden olabilir. - HTTPS üzerinden DNS - ISP bloklarını atlatmak için kullanışlıdır - Klon site + Çok yükseğe ayarlanırsa düşük belleğe sahip cihazlarda çökmelere neden olur (örn. Android TV). + Çok yükseğe ayarlanırsa düşük depolama alanına sahip sistemlerde sorunlara neden olur (örn. Android TV). + HTTPS üzerinden DNS (DoH) + İnternet Servis Sağlayıcısı (İSS) kısıtlamalarını aşmak için kullanışlıdır + Siteyi kopyala Siteyi kaldır Farklı bir URL ile mevcut bir sitenin klonunu ekleyin İndirme konumu @@ -305,16 +305,16 @@ Ekrana sığdır Uzat Yakınlaştır - Disclaimer + Yasal Uyarı legal_notice_key Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Genel - Rastgele butonu - Ana sayfada rastgele butonunu göster + Rastgele İçerik + Ana sayfada rastgele bir film veya dizi seçen bir tuş gösterir Sağlayıcı dilleri Uygulama düzeni Tercih edilen medya - Desteklenen sağlayıcılarda NSFW\'yi etkinleştir + Desteklenen sağlayıcılarda +18 içeriği etkinleştir Alt yazı kodlaması Sağlayıcılar Düzen @@ -336,7 +336,7 @@ hello@world.com 127.0.0.1 MyCoolSite - example.com + ornek.com Dil kodu (tr) Hiçbiri Normal @@ -376,7 +376,7 @@ Alt yazı senkronu 1000 ms Alt yazı gecikmesi - Alt yazılar %d ms erken gözüküyorsa bunu kullanın + Alt yazılar %d ms erken görüntüleniyorsa bunu kullanın Alt yazılar %d ms geç gözüküyorsa bunu kullanın Alt yazı gecikmesi yok Pijamalı hasta yağız şoföre çabucak güvendi Önerilen - %s yüklendi + %s eklendi Dosyadan yükle İnternetten yükle İndirilen dosya @@ -422,10 +422,10 @@ Geçersiz veri Geçersiz URL Hata - Alt yazılardan seçmeli alt yazıyı kaldır + Alt yazılardan seçmeli alt yazıyı (CC) kaldır Alt yazılardaki şişkinliği kaldır Tercih edilen medya diline göre filtrele - Ekstralar + Ek içerikler Fragman Yayına bağlan Yönlendiren @@ -433,7 +433,7 @@ Videoları bu dillerde izle Geri Kurulumu atla - Cihazınıza uygun görünümü seçin + Cihazınıza uygun uygulama görünümünü seçin Çökme raporları Ne izlemek istiyorsunuz Bitti @@ -445,7 +445,7 @@ Eklenti silindi %s yüklenemedi +18 - %d %s … indirilmeye başlandı + %d %s indirilmeye başlandı… %d %s indirildi %s\'nin tamamı zaten indirildi Toplu indir @@ -477,7 +477,7 @@ Çökme bilgisini göster Puan: %s Açıklama - Versiyon + Sürüm Durum Boyut Geliştiriciler @@ -499,14 +499,14 @@ Fragmanı oynat Eklenen depolardan henüz yüklenmemiş tüm eklentileri otomatik olarak yükleyin. Güncelleme başladı - Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemele yüklenmezse eski seçeneği deneyin. + Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemeler yüklenmezse eski seçeneği deneyin. Eklentileri otomatik olarak indir APK indirici - Linkler + Bağlantılar Uygulama güncellemeleri Yedek Oynatıcı özellikleri - Altyazılar + Alt yazılar Düzen Varsayılanlar Eklentiler @@ -531,22 +531,22 @@ İzlenenlerden kaldır Karışık son Karışık başlangıç - Kredi + Katkıda Bulunanlar Giriş Eklenti İndirildi - Aksiyonlar - Açma/bitiş için atlama açılır pencerelerini göster + Eylemler + Açılış/bitiş için atlama açılır pencerelerini göster Çok fazla metin. Panoya kaydedilemiyor. Kütüphane Tarayıcı Görünüşe göre kütüphaneniz boş :( -\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize gösteri ekleyin +\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize içerik ekleyin Güvenli mod dosyası bulundu! \nDosya kaldırılana kadar başlangıçta herhangi bir uzantı yüklenmiyor. Sırala Sırala - Güncel (Yeniden Eskiye) - Güncel (Eskiden Yeniye) + Güncellenme (Yeniden Eskiye) + Güncellenme (Eskiden Yeniye) Alfabetik (A\'dan Z’ye) Alfabetik (Z - A) Kütüphane Seçin @@ -554,4 +554,27 @@ Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin Derecelendirme (Yüksekten Düşüğe) Derecelendirme (Düşükten Yükseğe) + Yeniden başlat + Oynatıcı gizlenmişken atlanacak süre + İSS Kısıtlamaları + GitHub\'a ulaşılamadı, jsdelivr vekil sunucusu etkinleştiriliyor. + Başlat + Başarılı oldu + raw.githubusercontent.com vekil sunucusu (proxy) + Tercih edilen görüntü kalitesi (Mobil veri) + Oynatıcı görünürken atlanacak süre + Oynatıcı gizli durumdayken atlanacak süre miktarı + jsdelivr kullanarak GitHub kısıtlamasını aşar. Güncellemeler birkaç gün gecikebilir. + Android TV + Yeni bölüm %d yayınlandı! + Sağlayıcıyı kontrol et + Başarısız oldu + Durdur + Geri al + Abone olunan gösteriler güncelleniyor + Abone olunan + %s kanalına abone olundu + %s kanalı aboneliğinden çıkıldı + Günlük + Oynatıcı görünür durumdayken atlanacak süre miktarı \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a676b583..dc7a452e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,13 +1,13 @@ Постер - Постер епізоду + Постер до епізоду Завантаження скасовано - Змінити постачальника + Змінити провайдера Назад Рейтинг: %.1f Актори: %s - Епізод %d буде випущено через + Епізод %d вийде через Poster %s Еп. %d %dд %dгод %dхв @@ -15,14 +15,14 @@ %dхв Головний постер Наступний випадковий - Перегляд фону + Попередній перегляд фону Швидкість (%.2fx) - Нове оновлення знайдено! + Знайдено нове оновлення! \n%s -> %s Пошук Завантаження %d хв - Параметри + Налаштування Пошук… Пошук %s… Дані відсутні @@ -37,7 +37,7 @@ Покинуто Переглянути фільм Переглянути трейлер - Переглянути торрент + Трансляція через торрент Повторити підключення… Назад Переглянути епізод @@ -64,7 +64,7 @@ Тип контуру Шрифт Розмір шрифту - Пошук за допомогою постачальників + Пошук за допомогою провайдерів Пошук за типами Бананів немає Автовибір мови @@ -75,25 +75,25 @@ Продовжити перегляд Вилучити Детальніше - Цей постачальник є торрентом, рекомендується VPN + Цей провайдер є торрентом, рекомендується VPN Опис Сюжет не знайдено Опис не знайдено Показати Logcat 🐈 - Продовження відтворення в мініатюрному плеєрі поверх інших програм + Продовження відтворення в мініатюрному плеєрі поверх інших застосунків Прибирає чорні рамки Субтитри Субтитри Chromecast Налаштування субтитрів Chromecast Режим Eigengravy Проведіть пальцем, щоб змінити налаштування - Проведіть пальцем ліворуч або праворуч, щоб змінити яскравість або гучність + Проведіть пальцем вгору або вниз ліворуч або праворуч, щоб змінити яскравість або гучність Відтворення наступного епізоду після закінчення поточного Головна CloudStream Філер Програти в CloudStream - Потік + Трансляція Переглядаю Поділитися Відкладено @@ -121,11 +121,11 @@ Колір тексту Колір контуру Автовідтворення наступного епізоду - Проведіть пальцем ліворуч або праворуч, щоб керувати часом у відеоплеєрі + Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео %d Бананів для розробників Кнопка зміни розміру плеєра \@string/home_play - Для коректної роботи цього постачальника може знадобитися VPN + Для коректної роботи цього провайдера може знадобитися VPN Метадані не надаються сайтом, завантаження відео не відбудеться, якщо їх немає на сайті. Картинка в картинці Налаштування субтитрів плеєра @@ -133,8 +133,8 @@ Проведіть пальцем, щоб перемотати Двічі торкніться, щоб перемотати Двічі торкніться для паузи - Крок перемотки - Натисніть посередині, щоб поставити на паузу + Крок перемотки (Секунди) + Натисніть двічі посередині, щоб призупинити Використовувати яскравість системи Оновити прогрес перегляду Відновлення даних з резервної копії @@ -147,23 +147,23 @@ Оновлення та резервне копіювання Інформація Розширений пошук - Надає результати пошуку, розділені за постачальниками + Надає результати пошуку, розділені за провайдерами Надсилає дані лише про збої Не надсилає даних - Показати заповнюючий епізод для аніме + Показати філерний епізод для аніме Показати трейлери Приховати вибрану якість відео в результатах пошуку Автоматичне завантаження плагінів - Показати оновлення програми + Показати оновлення застосунку Повторний процес налаштування - Пошук лише попередніх оновлень, а не повних релізів + Пошук лише бета-оновлень, а не повних релізів Встановлювач APK Github Застосунок для легких новел від тих же розробників Застосунок для аніме від тих же розробників Дайте бананів розробникам - Мова програми - Цей постачальник не має підтримки Chromecast + Мова застосунку + Цей провайдер не має підтримки Chromecast Посилань не знайдено Переглянути епізод Скинути до значення за замовчуванням @@ -180,7 +180,7 @@ \nВи впевнені\? %dхв \nзалишилося - Триває + Виходить Завершено Рейтинг Тривалість @@ -189,7 +189,7 @@ За замовчуванням Вільно Зайнято - Програма + Застосунок Телесеріали Мультфільми Аніме @@ -208,7 +208,7 @@ Віддалена помилка Помилка рендеринга Дзеркало Chromecast - Переглянути в програмі + Переглянути в застосунку Переглянути в %s Автозавантаження Завантажити дзеркало @@ -230,7 +230,7 @@ Показати постери від Kitsu Автоматичне оновлення плагінів Автоматично встановлювати всі ще не встановлені плагіни з доданих репозиторіїв. - Автоматичний пошук нових оновлень при запуску + Автоматично шукати нові оновлення після запуску застосунку. Оновлення до бета-версій Посилання скопійовано в буфер обміну Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються. @@ -255,7 +255,7 @@ Документальні фільми NSFW Фільм - \@string/ova + OVA Торрент Мітка якості NSFW @@ -273,7 +273,7 @@ Заповнити Збільшити Доріжки - Оновлення програми + Оновлення застосунку Кеш Жести Особливості плеєра @@ -283,16 +283,16 @@ Особливості Загальне Випадкова кнопка - Показати випадкову кнопку на Головній сторінці - Мови постачальника - Макет програми + Показує кнопку на Головній сторінці, яка може вибрати випадковий фільм або серіал на Головній сторінці + Мови провайдера + Макет застосунку Бажані медіа Авто Макет телевізора Макет телефону Макет емулятора Основний колір - Тема програми + Тема застосунку Розташування назви постера Розмістіть назву під постером пароль123 @@ -363,7 +363,7 @@ Кодування субтитрів Включити NSFW на підтримуваних постачальників Макет - Постачальники + Провайдери example.com %s %s Депресивний @@ -429,7 +429,7 @@ Оновлено %d плагіни За замовчуванням в CloudStream не встановлені сайти. Вам потрібно встановити сайти з репозиторіїв. \n -\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунку. +\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунок. \n \nПриєднуйтесь до нашого Discord або шукайте в інтернеті. Переглянути репозиторії спільноти @@ -451,28 +451,28 @@ Вбудований плеєр VLC MPV - Відтворення веб-відео - Веб-браузер - Кінець + Відтворення вебвідео + Веббраузер + Ендінґ Коротке повторення Пропустити %s - Змішаний кінець + Змішаний ендінґ Подяки - Опенінг + Опенінґ Вступ Очистити історію Історія - Показувати спливаючі вікна для опенінгу/кінця + Показувати спливаючі вікна для опенінґу/ендінґу Забагато тексту. Не вдалося зберегти в буфер обміну. Позначити як переглянуте Ви впевнені що хочете вийти\? Так Ні - Установлення оновлення програми… - Не вдалося встановити нову версію програми + Встановлення оновлення застосунку… + Не вдалося встановити нову версію застосунку Старий - Інсталятор пакетів - Програму буде оновлено після виходу + Встановлювач пакетів + Застосунок буде оновлено після виходу Це також призведе до видалення всіх плагінів репозиторію Всі мови Назад @@ -484,10 +484,10 @@ Бажаний відеоплеєр Увімкнено безпечний режим Автори - Завантаження оновлення програми… + Завантаження оновлення застосунку… Усі розширення вимкнено через збій, щоб допомогти вам знайти те, що спричиняє проблеми. - Програму не знайдено - Змішаний опенінг + Застосунок не знайдено + Змішаний опенінґ Видалити з переглянутого За оновленням (від старого до нового) За оновленням (від нового до старого) @@ -517,17 +517,16 @@ Журнал Старт Стоп - Тест постачальника + Тест провайдер Оновлення підписаних шоу Підписано Підписано на %s Відписатися від %s Епізод %d випущено! Повернути - raw.githubusercontent.com -\nProxy + raw.githubusercontent.com Проксі Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. Обходи ISP - Обходити блокування GitHub з використанням jsdlitr, може викликати затримку оновлень на кілька днів. + За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) \ 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 72d62a04..a14b87cc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -142,14 +142,14 @@ 倍速模式 在播放器中添加播放速度选项 滑动控制进度 - 左右滑动控制播放进度 + 左右滑动以控制视频中的位置 滑动更改设置 上下滑动修改亮度或音量 自动播放下一集 播放完毕后播放下一集 双击控制进度 双击暂停 - 双击控制进度时间 + 双击控制进度时间 (秒) 在左右侧双击快进或快退 双击中间暂停 使用系统亮度 @@ -178,7 +178,7 @@ 自动更新插件 自动下载插件 显示应用更新 - 启动时自动搜索更新 + 启动应用后自动搜索更新。 更新至预览版 搜索预览版更新替代仅搜索完整版本 Github @@ -245,8 +245,8 @@ 电影 电视剧 卡通 - \@string/anime - \@string/ova + 动漫 + OVA 种子 纪录片 亚洲剧 @@ -311,7 +311,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. 通用 随机按钮 - 在主页中显示随机按钮 + 在主页上显示按钮,可以从主页上随机选择电影或电视剧 片源语言 应用布局 首选类型 @@ -573,7 +573,7 @@ 日志 raw.githubusercontent.com 代理 连接 Github 失败,正在启用 jsdelivr 代理。 - 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 + 使用jsdelivr,可以绕过GitHub的封锁。可能会延迟几天的更新。 ISP 绕过 还原 首选播放画质(移动数据) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49380b5e..911c0d07 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,17 +210,17 @@ Eigengravy Mode Adds a speed option in the player Swipe to seek - Swipe left or right to control time in the videoplayer + Swipe from side to side to control your position in a video Swipe to change settings - Swipe on the left or right side to change brightness or volume + Slide up or down on the left or right side to change brightness or volume Autoplay next episode Start the next episode when the current one ends Double tap to seek Double tap to pause - Player seek amount + Player seek amount (Seconds) Tap twice on the right or left side to seek forwards or backwards - Tap in the middle to pause + Tap twice in the middle to pause Use system brightness Use system brightness in the app player instead of a dark overlay @@ -251,7 +251,7 @@ Automatically download plugins Automatically install all not yet installed plugins from added repositories. Show app updates - Automatically search for new updates on start + Automatically search for new updates after starting the app. Redo setup process Update to prereleases Search for prerelease updates instead of full releases only @@ -324,8 +324,8 @@ Movie Series Cartoon - @string/anime - @string/ova + Anime + OVA Torrent Documentary Asian Drama @@ -383,7 +383,7 @@ 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. + Using jsdelivr, GitHub blocking can be bypassed. May delay updates by a few days. Clone site Remove site Add a clone of an existing site, with a different URL @@ -428,7 +428,7 @@ Features General Random Button - Show random button on Homepage + Shows button on Homepage which can choose a random movie or TV series from the Homepage Provider languages App Layout Preferred media @@ -657,4 +657,4 @@ Subscribed to %s Unsubscribed from %s Episode %d released! - + \ No newline at end of file From fab55d82c480c2de7a630b567c94e44fbc30ac41 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 9 Mar 2023 22:35:44 +0100 Subject: [PATCH 358/888] Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Dutch) Currently translated at 74.0% (452 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Added translation using Weblate (Malay) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 99.1% (605 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Co-authored-by: Cliff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: Felipe Nogueira Co-authored-by: Fjuro Co-authored-by: Frank Gerritsen Mulkes Co-authored-by: Hosted Weblate Co-authored-by: Rex_sa Co-authored-by: Samuel Gadiel Co-authored-by: Skrripy Co-authored-by: TZVS Co-authored-by: Tang Yin Co-authored-by: Walter H Co-authored-by: eightyy8 Co-authored-by: gallegonovato Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/en/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 18 +-- app/src/main/res/values-cs/strings.xml | 18 +-- app/src/main/res/values-es/strings.xml | 18 +-- app/src/main/res/values-in/strings.xml | 18 +-- app/src/main/res/values-ms/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 11 +- app/src/main/res/values-pt/strings.xml | 14 +- app/src/main/res/values-ru/strings.xml | 16 +-- app/src/main/res/values-tr/strings.xml | 173 ++++++++++++++----------- app/src/main/res/values-uk/strings.xml | 33 +++-- app/src/main/res/values-zh/strings.xml | 14 +- app/src/main/res/values/strings.xml | 20 +-- 12 files changed, 191 insertions(+), 164 deletions(-) create mode 100644 app/src/main/res/values-ms/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index cfd761e3..ae45465b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -119,16 +119,16 @@ وضع إيغنغرافي يضيف خيار السرعة في المُشغل السحب لتقديم - إسحب إلى اليسار أو اليمين للتحكم في الوقت في مُشغل الفيديو + اسحب من جانب إلى آخر للتحكم في موضعك في مقطع فيديو السحب لتغيير الإعدادات - إسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت + مرر لأعلى أو لأسفل على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت تشغيل الحلقة التالية تلقائيًا تبدأ الحلقة التالية عندما تنتهي الحالية النقر مرتان للتقديم للأمام أو للخلف الضغط مرتان لإيقاف مؤقت - التحكم في مدى تقديم المُشغل + التحكم في مدى تقديم المُشغل(ثوان) إضغط مرتين على الجانب الأيمن أو الأيسر للتقديم للأمام أو للخلف - إضغط في الوسط لإيقاف مؤقت + اضغط مرتين في المنتصف للتوقف استخدم سطوع النظام استخدم سطوع النظام في مُشغل التطبيق بدلاً من التراكب الداكن تحديث تقدم المشاهدة @@ -155,7 +155,7 @@ تحديث الإضافات تلقائيًا تنزيل الإضافات تلقائيًا التحديث التلقائي - البحث تلقائيًا عن التحديثات الجديدة عند البداية + ابحث تلقائيا عن التحديثات الجديدة بعد بدء التطبيق. التحديث إلى الاصدارات التجريبية (بيتا) البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط غيت هاب @@ -218,8 +218,8 @@ فيلم مسلسل كرتون - أنمي - اوفا + أنيمي + أوفا تورنت وثائقي دراما آسيوية @@ -284,7 +284,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. عام زر العشوائي - إظهار زر العشوائي على الصفحة الرئيسية + يظهر الزر على الصفحة الرئيسية والذي يمكنه اختيار فيلم عشوائي أو مسلسل تلفزيوني من الصفحة الرئيسية لغات المزود واجهة التطبيق المحتوى المفضل @@ -558,7 +558,7 @@ تجاوز مزود خدمة الإنترنت استرجاع فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr. - تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. + باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. وكيل 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 e99e1010..67179b46 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -122,14 +122,14 @@ Rychlostní režim Přidá do přehrávače možnost rychlosti Přejet pro posun - Přejeďte prstem vlevo nebo vpravo pro ovládání času v přehrávači + Přejeďte prstem ze strany na stranu pro ovládání své pozice ve videu Přejet pro změnu nastavení - Přejeďte prstem na levé nebo pravé straně pro změnu jasu nebo hlasitosti + Přejeďte prstem nahoru nebo dolů na levé nebo pravé straně pro změnu jasu nebo hlasitosti Dvojité klepnutí pro posun Dvojité klepnutí pro pozastavení - Množství času k posunu + Množství času k posunu (sekundy) Klepněte dvakrát vpravo nebo vlevo pro posun vpřed nebo vzad - Klepněte doprostřed pro pozastavení + Klepněte dvakrát doprostřed pro pozastavení Použít systémový jas V přehrávači použít systémov překrytí Aktualizovat postup sledování @@ -151,7 +151,7 @@ Nebude odesílat žádná data Zobrazit výplňové epizody u anime Zobrazit aktualizace aplikace - Při spuštění automaticky zkontrolovat nové aktualizace + Při spuštění aplikace automaticky zkontrolovat nové aktualizace. Aktualizovat na předběžná vydání Kontrolovat aktualizace předběžných vydání, místo normálních plných vydání GitHub @@ -211,8 +211,8 @@ Film Seriál Animovaný - \@string/anime - \@string/ova + Anime + OVA Torrent Dokument Asijské drama @@ -266,7 +266,7 @@ Jakékoli právní otázky týkající se obsahu této aplikace je třeba řešit se samotnými hostiteli a poskytovateli souborů, protože s nimi nejsme nijak spojeni. V případě porušení autorských práv se obraťte přímo na odpovědné strany nebo na webové stránky, na kterých se streamování odehrává. Aplikace je určena výhradně pro vzdělávací a osobní účely. CloudStream 3 v aplikaci nehostuje žádný obsah a nemá žádnou kontrolu nad tím, jaká média jsou v aplikaci umístěna nebo odstraněna. CloudStream 3 funguje jako jakýkoli jiný vyhledávač, například Google. Služba CloudStream 3 nehostuje, nenahrává ani nespravuje žádná videa, filmy ani obsah. Pouze vyhledává, agreguje a zobrazuje odkazy v pohodlném, uživatelsky přívětivém rozhraní. Pouze shromažďuje webové stránky třetích stran, které jsou veřejně přístupné prostřednictvím jakéhokoli běžného webového prohlížeče. Je odpovědností uživatele, aby se vyvaroval jakýchkoli akcí, které by mohly porušovat zákony platné v jeho lokalitě. Použijte CloudStream 3 na vlastní nebezpečí. Obecné Náhodné tlačítko - Zobrazit na domovské stránce náhodné tlačítko + Zobrazit na domovské stránce tlačítko, kterým lze vybrat náhodný film nebo seriál z domovské stránky Jazyk poskytovatelů Rozložení aplikace Preferovaná média @@ -551,6 +551,6 @@ 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í. + Pomocí jsdelivr lze obejít blokování GitHubu. Může dojít ke 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-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0b195275..5c8ac532 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -51,10 +51,10 @@ Elevado Use esto si los subtítulos se muestran %d ms muy pronto Use esto si los subtítulos se muestran %d ms tarde - Desliza el dedo hacia la izquierda o hacia la derecha para controlar el tiempo en el reproductor de video + Desliza el dedo de lado a lado para controlar la posición en un video Filtrar por idioma de medios preferido Eliminar Closed Captions (CC) de los subtítulos - Cantidad de tiempo de búsqueda en el reproductor (en segundos) + Cantidad de búsquedas del reproductor (segundos) Use el brillo del sistema en el reproductor de la app en lugar de una superposición oscura Resolución del reproductor de video MPV @@ -205,16 +205,16 @@ Modo Eigengravy Deslice para avanzar/retroceder Deslice para cambiar la configuración - Deslice el dedo hacia la izquierda o hacia la derecha para cambiar el brillo o el volumen + Deslice hacia arriba o hacia abajo en el lado izquierdo o derecho para cambiar el brillo o el volumen Toca dos veces para buscar Tocar dos veces para pausar Toque dos veces en el lado derecho o izquierdo para buscar hacia adelante o hacia atrás - Toque en el medio para pausar + Toque dos veces en el medio para hacer una pausa Usar brillo del sistema Restaurar datos desde el backup Hacer copia de los datos (backup) Archivo de backup cargado - Buscar automáticamente nuevas actualizaciones al inicio + Busque automáticamente nuevas actualizaciones después de iniciar la aplicación. Rehacer el proceso de configuración inicial Mostrar episodio de relleno para Anime Reproducir Episodio @@ -306,7 +306,7 @@ Aspecto Características Botón de Al azar - Muestra un botón de reproducción \"al azar\" en la página de inicio + Muestra un botón de reproducción \"al azar\" en la página de inicio para poelículas y series cuenta Cerrar sesión Cambiar cuenta @@ -363,8 +363,8 @@ Película Serie Dibujo animado - \@string/anime - \@string/ova + Anime + OVA Torrent Documental Drama asiático @@ -525,7 +525,7 @@ ¡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. + Con jsdelivr, se puede omitir el bloqueo de GitHub. Puede retrasar las actualizaciones unos días. Revertir ISP Bypasses Calidad de visualización preferida (Datos móviles) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 0e383562..1913868a 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -120,14 +120,14 @@ Mode Eigengravy Menambahkan opsi kecepatan di pemutar Geser untuk mengubah waktu - Geser ke kiri atau kanan untuk mengontrol waktu di pemutar video + Geser dari sisi ke sisi untuk mengontrol posisi dalam video Geser untuk mengubah pengaturan - Geser ke sisi kiri atau kanan untuk mengubah pencerahan atau volume + Geser ke atas atau ke bawah di sisi kiri atau kanan untuk mengubah kecerahan atau volume Tekan dua kali untuk mengubah waktu Tekan dua kali untuk menjeda - Jumlah pengubah waktu pemutar + Jumlah pengubah waktu pemutar (Detik) Tekan dua kali di sisi kanan atau kiri untuk mengubah waktu ke depan atau ke belakang - Tekan di tengah untuk menjeda + Tekan dua kali di tengah untuk menjeda Gunakan pencerahan sistem Gunakan pencerahan sistem di pemutar aplikasi dari pada hamparan gelap Update progres tontonan @@ -149,7 +149,7 @@ Tidak mengirim data Tampilkan episode filler untuk anime Tampilkan update aplikasi - Secara otomatis mencari update terbaru saat aplikasi dibuka + Secara otomatis mencari update terbaru setelah aplikasi dibuka. Update ke prarilis Hanya mencari update prarilis daripada rilis penuh Github @@ -209,8 +209,8 @@ Movie Seri Kartun - \@string/anime - \@string/ova + Anime + OVA Torrent Film Dokumenter Drama Asia @@ -264,7 +264,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Umum Tombol Acak - Tampilkan tombol acak di Beranda + Tampilkan tombol di halaman utama yang dapat memilih seri film atau TV acak dari halaman utama Bahasa provider Tata Letak Aplikasi Media yang lebih diinginkan @@ -548,7 +548,7 @@ 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. + Mengunakan jsdelivers, bisa melewati pemblokiran GitHub. Mungkin dapat menyebabkan pembaruan tertunda dalam beberapa hari. Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-ms/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c2561914..dd89c34a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -9,7 +9,7 @@ %dm Poster - \@string/result_poster_img_des + Poster Aflevering Poster Hoofdposter Volgende willekeurig @@ -128,14 +128,14 @@ Eigengravy Modus Voegt een snelheidsoptie toe in de speler Swipe to seek - Veeg naar links of rechts om de tijd in de videoplayer te regelen + Veeg naar links of rechts om de tijd in de videospeler te regelen Veeg om instellingen te wijzigen Veeg naar links of rechts om de helderheid of het volume te wijzigen Dubbeltik om te zien Dubbeltik om te pauzeren - Speler zoeken bedrag + Videospeler aantal zoeken Tik twee keer aan de rechter- of linkerkant om vooruit of achteruit te zoeken - Tik in het midden om te pauzeren + Tik twee keer in het midden om te pauzeren Systeemhelderheid gebruiken Gebruik systeemhelderheid in de app-speler in plaats van een donkere overlay Kijkvoortgang bijwerken @@ -405,4 +405,7 @@ Start de volgende episode wanneer deze afgelopen is Volgende episode automatisch afspelen De update is gestart + Bibliotheek + Browser + Logboek \ 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 0c846361..64ccb903 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -123,16 +123,16 @@ Modo Eigengravy Acrescenta uma opção de velocidade no player Deslize para andar - Deslize para a esq. ou dir. para controlar o tempo no player + Deslize para os lados para controlar a posição em um vídeo Deslize para mudar as configurações - Deslize do lado esq. ou dir. para ajustar brilho ou volume + Deslize para cima ou para baixo, no lado esquerdo ou direito, para ajustar brilho ou volume Reproduzir automaticamente próximo episódio Começa o próximo episódio quando o atual termina Toque duplo para avançar Toque duplo para pôr em pausa - Segundos avançados no player + Tempo de busca no player (Segundos) Toque duplo no lado esq. ou dir. para andar para trás ou para a frente - Toque no meio para pôr em pausa + Toque duas vezes no meio para pausar Usar brilho da sistema Usar brilho do sistema no player em vez de uma sobreposição escura Atualizar progresso @@ -158,7 +158,7 @@ Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa Atualizações de plugin automáticas Mostrar atualizações da app - Procurar novas atualizações automaticamente ao iniciar + Procurar automaticamente por novas atualizações depois de iniciar o app. Atualizar para pré-lançamentos Procura atualizações de pré-lançamento em vez de só lançamentos oficiais Github @@ -273,7 +273,7 @@ Aviso Legal Geral Botão Aleatório - Mostra o botão Aleatório na página inicial + Mostra o botão Aleatório na página inicial, que pode escolher aleatoriamente um filme ou série Idioma dos fornecedores Layout da App Mídia preferida @@ -444,7 +444,7 @@ Cam Abertura Selecionar Biblioteca - Contorna o bloqueio do GitHub ao usar jsdelivr, pode atrasar atualizações em alguns dias. + Usando jsdelivr o bloqueio do GitHub pode ser contornado. Pode atrasar atualizações em alguns dias. VLC Todas as linguagens Atualizado (Novo para Antigo) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e613cee4..5295bd35 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -142,10 +142,10 @@ Добавляет опцию скорости в проигрывателе Проведите пальцем для поиска Проведите пальцем для изменения настроек - Проведите пальцем по левой или правой стороне для изменения яркости или громкости + Проведите вверх или вниз по левой или правой стороне, чтобы изменить яркость или громкость Автопроиграть следующего серия Поток торрент - Проведите пальцем влево или вправо, чтобы управлять временем в видеоплеере + Проведите пальцем из стороны в сторону, чтобы управлять свое место в видеоролике Начните следующий серию, когда закончится текущий Загружена резервная копия Не удалось восстановить данные из %s @@ -159,7 +159,7 @@ Автоматическое обновление плагинов Автоматическая загрузка плагинов Показать обновления приложения - Автоматически проверять обновления при старте + Автоматически проверять обновления при старте приложения. Обновится до пре-релиза APK установщик Github @@ -227,7 +227,7 @@ Использовано Двойное нажатие для паузы Коснитесь дважды правой или левой стороны для поиска вперед или назад - Нажмите в центре для паузы + Нажмите дважды в центре, чтобы сделать паузу Использовать системную яркость Автоматически синхронизировать текущий прогресс эпизода Ошибка резервного копирования %s @@ -408,8 +408,8 @@ Съешь ещё этих мягких французских булок, да выпей же чаю Рекомендуется Загружено %s - \@нить/аниме - \@нить/ova + Аниме + OVA Этикетка Dub Сайт Функции @@ -493,7 +493,7 @@ Фильтровать по предпочитаемому языку медиа Неверный ID Ссылка на стрим - Отображать рандомную кнопку на Главной странице + Показывает кнопку на главной странице, с помощью которой можно выбрать случайный фильм или сериал с главной страницы Рандомная кнопка Legacy (старый) Веб видеокаст @@ -501,7 +501,7 @@ Перезагрузить ссылки Предпочтительные медиа Опущенные - Объем перемотки плеера + Объем перемотки плеера (секундах) Объем перемотка, используемый, когда плеер виден Плеер показан - Перемотки объем Плеер спрятан - Перемотки объем diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 807716d8..f53bb69d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -117,47 +117,47 @@ Hiç muz verilmedi Otomatik seçilecek dil İndirilecek diller - Alt yazı dili - Varsayılana döndürmek için basılı tut + Altyazı dili + Sıfırlamak için basılı tut Fontları içe aktarmak için %s konumuna yerleştirin İzlemeye devam et Kaldır Daha fazla bilgi \@string/home_play Bu sağlayıcının düzgün çalışması için bir VPN gerekebilir - Bu sağlayıcı bir torrent. VPN önerilir + Bu sağlayıcı torrent kullanıyor, bir VPN önerilir Metadata site tarafından sağlanmamış, veri site\'de bulunmuyorsa video yüklenmesi başarısız olacak. Açıklama Konu bulunamadı Açıklama bulunamadı - Logcat\'i göster 🐈 - Resim-içinde-resim - Diğer uygulamaların üzerinde minyatür bir oynatıcıda oynatmaya devam eder + Logcat\'i görüntüle 🐈 + Görüntü içinde görüntü + İçerik diğer uygulamaların üzerinde küçük bir pencerede oynatılmaya devam eder Oynatıcı yeniden boyutlandırma butonu - Siyah sınırları kaldır - Alt yazı + Siyah sınır çizgilerini kaldır + Alt yazılar Oynatıcı alt yazı ayarları - Chromecast alt yazı + Chromecast alt yazıları Chromecast alt yazı ayarları - Eigengravy modu - Oynatıcıya bir hız seçeneği ekle - Gözlemek için kaydır - Zamanı ayarlamak için sağa veya sola kaydır + Eigengrau modu + Oynatıcıya hız seçeneği ekler + Atlamak için kaydır + Zamanı ayarlamak için yanlardan kaydır Ayarları değiştirmek için kaydır - Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla + Sol ve sağ taraftan yukarı kaydırarak ekran parlaklığı ve sesi ayarla Sonraki bölümü otomatik oynat Mevcut bölüm bittiğinde sonraki bölüme başla - Gözlemek için çift tıkla - Durdurmak için çift tıkla - Oynatıcı gözleme miktarı - İleri ve geri atlamak için sağa ve sola çift tıkla - Durdurmak için ortaya tıkla + Çift dokunarak atla + İki kez dokunarak duraklat + Atlanacak süre (Saniye) + İleri ve geri atlamak için sağa ve sola iki kez dokun + Durdurmak için ekranın ortasına çift dokun Sistem parlaklığını kullan - Oynatıcıda karanlık kaplama yerine sistem parlaklığını kullan + Oynatıcıyı karartmak yerine sistem parlaklığını kullan İzleme ilerlemesini güncelle Mevcut bölüm ilerlemesini otomatik güncelle - Yedekten geri yükle - Verileri yedekleyin + Verileri yedekten geri yükle + Verileri yedekle Yedek dosyası yüklendi Geri yükleme başarısız oldu: %s Başarıyla yedeklendi @@ -165,21 +165,21 @@ %s yedeklenirken hata Ara Hesaplar - Güncellemeler ve yedek + Güncellemeler ve yedekleme Bilgi Gelişmiş arama - Sağlayıcılara göre ayrılmış arama sonuçlarını ver + Arama sonuçlarını sağlayıcıya göre ayırır Yalnızca çökmelerle ilgili verileri gönderir - Hiç veri göndermez - Anime için filler bölümleri gösterir + Veri göndermez + Anime için filler bölümleri göster Fragmanları göster Kitsu\'dan posterleri göster - Seçilen video kalitelerini arama sonuçlarında gizle + Seçilen video kalitelerini arama sonuçlarında gösterme Otomatik eklenti güncellemeleri Uygulama güncellemelerini göster - Başlangıçta yeni güncellemeleri otomatik olarak ara - Ön sürümlere güncelle - Sadece tam sürümler yerine ön sürüm güncellemelerini de ara + Uygulama başlatıldıktan sonra güncellemeleri otomatik olarak kontrol et. + Deneysel sürümlere güncelle + Yalnızca tam sürümler yerine deneysel güncellemeleri de ara GitHub Aynı geliştiriciler tarafından LightNovel uygulaması Aynı geliştiriciler tarafından anime uygulaması @@ -191,8 +191,8 @@ Bağlantı bulunamadı Bağlantı panoya kopyalandı Bölümü oynat - Varsayılana sıfırla - Üzgünüz, uygulama çöktü. Geliştiricilere isimsiz bir hata raporu gönderilecek + Varsayılan değere sıfırla + Üzgünüz, uygulama çöktü. Geliştiricilere anonim bir hata raporu gönderilecek Sezon %s %d%s Sezon yok @@ -210,8 +210,8 @@ Sürdür -30 +30 - %s dosyası tamamen silinecek -\nEmins misiniz\? + %s tamamen silinecek +\nEmin misiniz\? %dm \nkaldı Devam ediyor @@ -236,9 +236,9 @@ Torrentler Belgeseller OVA - Asya dramaları + Asya dizileri Canlı yayınlar - NSFW + +18 Diğerleri Film @@ -248,9 +248,9 @@ \@string/ova Torrent Belgesel - Asya draması + Asya dizisi Canlı yayın - NSFW + +18 Video Kaynak hatası Sunucu hatası @@ -259,10 +259,10 @@ İndirme hatası, depolama izinlerini kontrol edin Bölümü Chromecast ile yayınla Bağlantıyı Chromecast ile yayınla - Uygulamada oynat - %s\'deda oynat + Burada oynat + %s üzerinden oynat Tarayıcıda oynat - Linki kopyala + Bağlantıyı kopyala Otomatik indir Şu kaynaktan indir Bağlantıları yenile @@ -281,22 +281,22 @@ Kilitle Yeniden boyutlandır Kaynak - OP\'yi geç + Jeneriği geç Bir daha gösterme Bu güncellemeyi atla Güncelle - Tercih edilen izleme kalitesi - Oynatıcıdaki maksimum başlık karakter sayısı - Oynatıcının üst tarafındaki öğeler + Tercih edilen görüntü kalitesi (WiFi) + Video oynatıcı başlığı karakter üst sınırı + Oynatıcının çözünürlüğü Video arabelleği boyutu Video arabelleği uzunluğu - Diskteki video önbelleği + Hafızadaki video önbelleği Video ve resim önbelleğini temizle - Android TV gibi düşük belleğe sahip cihazlarda çok yükseğe ayarlanırsa çökmelere neden olur. - Çok yükseğe ayarlanırsa, Android TV cihazları gibi düşük depolama alanına sahip sistemlerde sorunlara neden olabilir. - HTTPS üzerinden DNS - ISP bloklarını atlatmak için kullanışlıdır - Klon site + Çok yükseğe ayarlanırsa düşük belleğe sahip cihazlarda çökmelere neden olur (örn. Android TV). + Çok yükseğe ayarlanırsa düşük depolama alanına sahip sistemlerde sorunlara neden olur (örn. Android TV). + HTTPS üzerinden DNS (DoH) + İnternet Servis Sağlayıcısı (İSS) kısıtlamalarını aşmak için kullanışlıdır + Siteyi kopyala Siteyi kaldır Farklı bir URL ile mevcut bir sitenin klonunu ekleyin İndirme konumu @@ -305,16 +305,16 @@ Ekrana sığdır Uzat Yakınlaştır - Disclaimer + Yasal Uyarı legal_notice_key Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Genel - Rastgele butonu - Ana sayfada rastgele butonunu göster + Rastgele İçerik + Ana sayfada rastgele bir film veya dizi seçen bir tuş gösterir Sağlayıcı dilleri Uygulama düzeni Tercih edilen medya - Desteklenen sağlayıcılarda NSFW\'yi etkinleştir + Desteklenen sağlayıcılarda +18 içeriği etkinleştir Alt yazı kodlaması Sağlayıcılar Düzen @@ -336,7 +336,7 @@ hello@world.com 127.0.0.1 MyCoolSite - example.com + ornek.com Dil kodu (tr) Hiçbiri Normal @@ -376,7 +376,7 @@ Alt yazı senkronu 1000 ms Alt yazı gecikmesi - Alt yazılar %d ms erken gözüküyorsa bunu kullanın + Alt yazılar %d ms erken görüntüleniyorsa bunu kullanın Alt yazılar %d ms geç gözüküyorsa bunu kullanın Alt yazı gecikmesi yok Pijamalı hasta yağız şoföre çabucak güvendi Önerilen - %s yüklendi + %s eklendi Dosyadan yükle İnternetten yükle İndirilen dosya @@ -422,10 +422,10 @@ Geçersiz veri Geçersiz URL Hata - Alt yazılardan seçmeli alt yazıyı kaldır + Alt yazılardan seçmeli alt yazıyı (CC) kaldır Alt yazılardaki şişkinliği kaldır Tercih edilen medya diline göre filtrele - Ekstralar + Ek içerikler Fragman Yayına bağlan Yönlendiren @@ -433,7 +433,7 @@ Videoları bu dillerde izle Geri Kurulumu atla - Cihazınıza uygun görünümü seçin + Cihazınıza uygun uygulama görünümünü seçin Çökme raporları Ne izlemek istiyorsunuz Bitti @@ -445,7 +445,7 @@ Eklenti silindi %s yüklenemedi +18 - %d %s … indirilmeye başlandı + %d %s indirilmeye başlandı… %d %s indirildi %s\'nin tamamı zaten indirildi Toplu indir @@ -477,7 +477,7 @@ Çökme bilgisini göster Puan: %s Açıklama - Versiyon + Sürüm Durum Boyut Geliştiriciler @@ -499,14 +499,14 @@ Fragmanı oynat Eklenen depolardan henüz yüklenmemiş tüm eklentileri otomatik olarak yükleyin. Güncelleme başladı - Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemele yüklenmezse eski seçeneği deneyin. + Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemeler yüklenmezse eski seçeneği deneyin. Eklentileri otomatik olarak indir APK indirici - Linkler + Bağlantılar Uygulama güncellemeleri Yedek Oynatıcı özellikleri - Altyazılar + Alt yazılar Düzen Varsayılanlar Eklentiler @@ -531,22 +531,22 @@ İzlenenlerden kaldır Karışık son Karışık başlangıç - Kredi + Katkıda Bulunanlar Giriş Eklenti İndirildi - Aksiyonlar - Açma/bitiş için atlama açılır pencerelerini göster + Eylemler + Açılış/bitiş için atlama açılır pencerelerini göster Çok fazla metin. Panoya kaydedilemiyor. Kütüphane Tarayıcı Görünüşe göre kütüphaneniz boş :( -\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize gösteri ekleyin +\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize içerik ekleyin Güvenli mod dosyası bulundu! \nDosya kaldırılana kadar başlangıçta herhangi bir uzantı yüklenmiyor. Sırala Sırala - Güncel (Yeniden Eskiye) - Güncel (Eskiden Yeniye) + Güncellenme (Yeniden Eskiye) + Güncellenme (Eskiden Yeniye) Alfabetik (A\'dan Z’ye) Alfabetik (Z - A) Kütüphane Seçin @@ -554,4 +554,27 @@ Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin Derecelendirme (Yüksekten Düşüğe) Derecelendirme (Düşükten Yükseğe) + Yeniden başlat + Oynatıcı gizlenmişken atlanacak süre + İSS Kısıtlamaları + GitHub\'a ulaşılamadı, jsdelivr vekil sunucusu etkinleştiriliyor. + Başlat + Başarılı oldu + raw.githubusercontent.com vekil sunucusu (proxy) + Tercih edilen görüntü kalitesi (Mobil veri) + Oynatıcı görünürken atlanacak süre + Oynatıcı gizli durumdayken atlanacak süre miktarı + jsdelivr kullanarak GitHub kısıtlamasını aşar. Güncellemeler birkaç gün gecikebilir. + Android TV + Yeni bölüm %d yayınlandı! + Sağlayıcıyı kontrol et + Başarısız oldu + Durdur + Geri al + Abone olunan gösteriler güncelleniyor + Abone olunan + %s kanalına abone olundu + %s kanalı aboneliğinden çıkıldı + Günlük + Oynatıcı görünür durumdayken atlanacak süre miktarı \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a676b583..6dca29b4 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,13 +1,13 @@ Постер - Постер епізоду + Постер до епізоду Завантаження скасовано Змінити постачальника Назад Рейтинг: %.1f Актори: %s - Епізод %d буде випущено через + Епізод %d вийде через Poster %s Еп. %d %dд %dгод %dхв @@ -15,16 +15,16 @@ %dхв Головний постер Наступний випадковий - Перегляд фону + Попередній перегляд фону Швидкість (%.2fx) - Нове оновлення знайдено! + Знайдено нове оновлення! \n%s -> %s Пошук Завантаження %d хв Параметри Пошук… - Пошук %s… + Пошук на %s… Дані відсутні Більше опцій Наступний епізод @@ -37,7 +37,7 @@ Покинуто Переглянути фільм Переглянути трейлер - Переглянути торрент + Трансляція через торрент Повторити підключення… Назад Переглянути епізод @@ -87,13 +87,13 @@ Налаштування субтитрів Chromecast Режим Eigengravy Проведіть пальцем, щоб змінити налаштування - Проведіть пальцем ліворуч або праворуч, щоб змінити яскравість або гучність + Проведіть пальцем вгору або вниз ліворуч або праворуч, щоб змінити яскравість або гучність Відтворення наступного епізоду після закінчення поточного Головна CloudStream Філер Програти в CloudStream - Потік + Трансляція Переглядаю Поділитися Відкладено @@ -121,7 +121,7 @@ Колір тексту Колір контуру Автовідтворення наступного епізоду - Проведіть пальцем ліворуч або праворуч, щоб керувати часом у відеоплеєрі + Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео %d Бананів для розробників Кнопка зміни розміру плеєра \@string/home_play @@ -133,8 +133,8 @@ Проведіть пальцем, щоб перемотати Двічі торкніться, щоб перемотати Двічі торкніться для паузи - Крок перемотки - Натисніть посередині, щоб поставити на паузу + Крок перемотки (Секунди) + Натисніть двічі посередині, щоб призупинити Використовувати яскравість системи Оновити прогрес перегляду Відновлення даних з резервної копії @@ -230,7 +230,7 @@ Показати постери від Kitsu Автоматичне оновлення плагінів Автоматично встановлювати всі ще не встановлені плагіни з доданих репозиторіїв. - Автоматичний пошук нових оновлень при запуску + Автоматично шукати нові оновлення після запуску застосунку. Оновлення до бета-версій Посилання скопійовано в буфер обміну Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються. @@ -255,7 +255,7 @@ Документальні фільми NSFW Фільм - \@string/ova + OVA Торрент Мітка якості NSFW @@ -283,7 +283,7 @@ Особливості Загальне Випадкова кнопка - Показати випадкову кнопку на Головній сторінці + Показує кнопку на Головній сторінці, яка може вибрати випадковий фільм або серіал на Головній сторінці Мови постачальника Макет програми Бажані медіа @@ -524,10 +524,9 @@ Відписатися від %s Епізод %d випущено! Повернути - raw.githubusercontent.com -\nProxy + raw.githubusercontent.com Proxy Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. Обходи ISP - Обходити блокування GitHub з використанням jsdlitr, може викликати затримку оновлень на кілька днів. + За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) \ 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 72d62a04..a14b87cc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -142,14 +142,14 @@ 倍速模式 在播放器中添加播放速度选项 滑动控制进度 - 左右滑动控制播放进度 + 左右滑动以控制视频中的位置 滑动更改设置 上下滑动修改亮度或音量 自动播放下一集 播放完毕后播放下一集 双击控制进度 双击暂停 - 双击控制进度时间 + 双击控制进度时间 (秒) 在左右侧双击快进或快退 双击中间暂停 使用系统亮度 @@ -178,7 +178,7 @@ 自动更新插件 自动下载插件 显示应用更新 - 启动时自动搜索更新 + 启动应用后自动搜索更新。 更新至预览版 搜索预览版更新替代仅搜索完整版本 Github @@ -245,8 +245,8 @@ 电影 电视剧 卡通 - \@string/anime - \@string/ova + 动漫 + OVA 种子 纪录片 亚洲剧 @@ -311,7 +311,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. 通用 随机按钮 - 在主页中显示随机按钮 + 在主页上显示按钮,可以从主页上随机选择电影或电视剧 片源语言 应用布局 首选类型 @@ -573,7 +573,7 @@ 日志 raw.githubusercontent.com 代理 连接 Github 失败,正在启用 jsdelivr 代理。 - 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 + 使用jsdelivr,可以绕过GitHub的封锁。可能会延迟几天的更新。 ISP 绕过 还原 首选播放画质(移动数据) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49380b5e..911c0d07 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,17 +210,17 @@ Eigengravy Mode Adds a speed option in the player Swipe to seek - Swipe left or right to control time in the videoplayer + Swipe from side to side to control your position in a video Swipe to change settings - Swipe on the left or right side to change brightness or volume + Slide up or down on the left or right side to change brightness or volume Autoplay next episode Start the next episode when the current one ends Double tap to seek Double tap to pause - Player seek amount + Player seek amount (Seconds) Tap twice on the right or left side to seek forwards or backwards - Tap in the middle to pause + Tap twice in the middle to pause Use system brightness Use system brightness in the app player instead of a dark overlay @@ -251,7 +251,7 @@ Automatically download plugins Automatically install all not yet installed plugins from added repositories. Show app updates - Automatically search for new updates on start + Automatically search for new updates after starting the app. Redo setup process Update to prereleases Search for prerelease updates instead of full releases only @@ -324,8 +324,8 @@ Movie Series Cartoon - @string/anime - @string/ova + Anime + OVA Torrent Documentary Asian Drama @@ -383,7 +383,7 @@ 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. + Using jsdelivr, GitHub blocking can be bypassed. May delay updates by a few days. Clone site Remove site Add a clone of an existing site, with a different URL @@ -428,7 +428,7 @@ Features General Random Button - Show random button on Homepage + Shows button on Homepage which can choose a random movie or TV series from the Homepage Provider languages App Layout Preferred media @@ -657,4 +657,4 @@ Subscribed to %s Unsubscribed from %s Episode %d released! - + \ No newline at end of file From 3a5d8725459a33e9f58a8923e172ef2cae85f0e9 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 20:01:20 +0000 Subject: [PATCH 359/888] update list of locales --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 1 + 1 file changed, 1 insertion(+) 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 078419e2..4aa859aa 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 @@ -78,6 +78,7 @@ val appLanguages = arrayListOf( Triple("", "ಕನ್ನಡ", "kn"), Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), + Triple("", "bahasa Melayu", "ms"), Triple("", "Nederlands", "nl"), Triple("", "norsk nynorsk", "nn"), Triple("", "norsk bokmål", "no"), From 13ee8e21d06c34a5f01e476ee133a4acc4b854ea Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 10 Mar 2023 21:33:13 +0100 Subject: [PATCH 360/888] Semi-unfucked VLC on A13+ --- .../lagradost/cloudstream3/MainActivity.kt | 31 ++++++++++++------- .../ui/result/ResultViewModel2.kt | 8 ++++- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a7449255..7818e357 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration +import android.os.Build import android.os.Bundle import android.util.AttributeSet import android.util.Log @@ -34,7 +35,6 @@ 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 @@ -170,7 +170,12 @@ open class ResultResume( val VLC = object : ResultResume( VLC_PACKAGE, - "org.videolan.vlc.player.result", + // Android 13 intent restrictions fucks up specifically launching the VLC player + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + "org.videolan.vlc.player.result" + } else { + Intent.ACTION_VIEW + }, "extra_position", "extra_duration", ) { @@ -733,15 +738,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } 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.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() } - snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground)) - snackbar.setTextColor(colorFromAttribute(R.attr.textColor)) - snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary)) - snackbar.show() - } } } @@ -1123,7 +1129,10 @@ 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" + 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/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 2983b41d..46a8c9f6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.result import android.app.Activity import android.content.* import android.net.Uri +import android.os.Build import android.os.Bundle import android.util.Log import android.widget.Toast @@ -1125,7 +1126,12 @@ class ResultViewModel2 : ViewModel() { 1L } - component = VLC_COMPONENT + // Component no longer safe to use in A13 for VLC + // https://code.videolan.org/videolan/vlc-android/-/issues/2776 + // This will likely need to be updated once VLC fixes their documentation. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + component = VLC_COMPONENT + } putExtra("from_start", !resume) putExtra("position", position) From 29174dbb30a2713844199206cc0b2e5723283f6c Mon Sep 17 00:00:00 2001 From: LikDev-256 <81100289+LikDev-256@users.noreply.github.com> Date: Mon, 13 Mar 2023 21:41:35 +0530 Subject: [PATCH 361/888] Feat: fix Streamsb (#417) * Fix Streamsb * feat(StreamSB) stream break: support audiotracks * Revert "feat(StreamSB) stream break: support audiotracks" This reverts commit 078caf9f88dc92bb7416f51458b1bbea73bfb9bf. * Feat: fix Streamsb They normally update source numbers like 50, 51 but instead of 52 they totally dumped everything and just flipped the number into 15 --- .../main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b7477242..cac31328 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -134,7 +134,7 @@ open class StreamSB : ExtractorApi() { it.value.replace(Regex("(embed-|/e/)"), "") }.first() // val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" - val master = "$mainUrl/sources51/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" + val master = "$mainUrl/sources15/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" val headers = mapOf( "watchsb" to "sbstream", ) From 3e2b0f2a17243abbdfddd929544058b7977bc32a Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 10 Mar 2023 20:45:19 +0100 Subject: [PATCH 362/888] Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Dutch) Currently translated at 74.0% (452 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Added translation using Weblate (Malay) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 99.1% (605 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Co-authored-by: Cliff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: Felipe Nogueira Co-authored-by: Fjuro Co-authored-by: Frank Gerritsen Mulkes Co-authored-by: Hosted Weblate Co-authored-by: Rex_sa Co-authored-by: Samuel Gadiel Co-authored-by: Skrripy Co-authored-by: TZVS Co-authored-by: Tang Yin Co-authored-by: Walter H Co-authored-by: eightyy8 Co-authored-by: gallegonovato Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/en/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-uk/strings.xml | 72 +++++++++++++------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6dca29b4..48856dbb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -3,7 +3,7 @@ Постер Постер до епізоду Завантаження скасовано - Змінити постачальника + Змінити провайдера Назад Рейтинг: %.1f Актори: %s @@ -22,7 +22,7 @@ Пошук Завантаження %d хв - Параметри + Налаштування Пошук… Пошук на %s… Дані відсутні @@ -64,7 +64,7 @@ Тип контуру Шрифт Розмір шрифту - Пошук за допомогою постачальників + Пошук за допомогою провайдерів Пошук за типами Бананів немає Автовибір мови @@ -75,12 +75,12 @@ Продовжити перегляд Вилучити Детальніше - Цей постачальник є торрентом, рекомендується VPN + Цей провайдер є торрентом, рекомендується VPN Опис Сюжет не знайдено Опис не знайдено Показати Logcat 🐈 - Продовження відтворення в мініатюрному плеєрі поверх інших програм + Продовження відтворення в мініатюрному плеєрі поверх інших застосунків Прибирає чорні рамки Субтитри Субтитри Chromecast @@ -125,7 +125,7 @@ %d Бананів для розробників Кнопка зміни розміру плеєра \@string/home_play - Для коректної роботи цього постачальника може знадобитися VPN + Для коректної роботи цього провайдера може знадобитися VPN Метадані не надаються сайтом, завантаження відео не відбудеться, якщо їх немає на сайті. Картинка в картинці Налаштування субтитрів плеєра @@ -147,23 +147,23 @@ Оновлення та резервне копіювання Інформація Розширений пошук - Надає результати пошуку, розділені за постачальниками + Надає результати пошуку, розділені за провайдерами Надсилає дані лише про збої Не надсилає даних - Показати заповнюючий епізод для аніме + Показати філерний епізод для аніме Показати трейлери Приховати вибрану якість відео в результатах пошуку Автоматичне завантаження плагінів - Показати оновлення програми + Показати оновлення застосунку Повторний процес налаштування - Пошук лише попередніх оновлень, а не повних релізів + Пошук лише бета-оновлень, а не повних релізів Встановлювач APK Github Застосунок для легких новел від тих же розробників Застосунок для аніме від тих же розробників Дайте бананів розробникам - Мова програми - Цей постачальник не має підтримки Chromecast + Мова застосунку + Цей провайдер не має підтримки Chromecast Посилань не знайдено Переглянути епізод Скинути до значення за замовчуванням @@ -180,7 +180,7 @@ \nВи впевнені\? %dхв \nзалишилося - Триває + Виходить Завершено Рейтинг Тривалість @@ -189,7 +189,7 @@ За замовчуванням Вільно Зайнято - Програма + Застосунок Телесеріали Мультфільми Аніме @@ -208,7 +208,7 @@ Віддалена помилка Помилка рендеринга Дзеркало Chromecast - Переглянути в програмі + Переглянути в застосунку Переглянути в %s Автозавантаження Завантажити дзеркало @@ -273,7 +273,7 @@ Заповнити Збільшити Доріжки - Оновлення програми + Оновлення застосунку Кеш Жести Особливості плеєра @@ -284,15 +284,15 @@ Загальне Випадкова кнопка Показує кнопку на Головній сторінці, яка може вибрати випадковий фільм або серіал на Головній сторінці - Мови постачальника - Макет програми + Мови провайдера + Макет застосунку Бажані медіа Авто Макет телевізора Макет телефону Макет емулятора Основний колір - Тема програми + Тема застосунку Розташування назви постера Розмістіть назву під постером пароль123 @@ -363,7 +363,7 @@ Кодування субтитрів Включити NSFW на підтримуваних постачальників Макет - Постачальники + Провайдери example.com %s %s Депресивний @@ -429,7 +429,7 @@ Оновлено %d плагіни За замовчуванням в CloudStream не встановлені сайти. Вам потрібно встановити сайти з репозиторіїв. \n -\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунку. +\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунок. \n \nПриєднуйтесь до нашого Discord або шукайте в інтернеті. Переглянути репозиторії спільноти @@ -451,28 +451,28 @@ Вбудований плеєр VLC MPV - Відтворення веб-відео - Веб-браузер - Кінець + Відтворення вебвідео + Веббраузер + Ендінґ Коротке повторення Пропустити %s - Змішаний кінець + Змішаний ендінґ Подяки - Опенінг + Опенінґ Вступ Очистити історію Історія - Показувати спливаючі вікна для опенінгу/кінця + Показувати спливаючі вікна для опенінґу/ендінґу Забагато тексту. Не вдалося зберегти в буфер обміну. Позначити як переглянуте Ви впевнені що хочете вийти\? Так Ні - Установлення оновлення програми… - Не вдалося встановити нову версію програми + Встановлення оновлення застосунку… + Не вдалося встановити нову версію застосунку Старий - Інсталятор пакетів - Програму буде оновлено після виходу + Встановлювач пакетів + Застосунок буде оновлено після виходу Це також призведе до видалення всіх плагінів репозиторію Всі мови Назад @@ -484,10 +484,10 @@ Бажаний відеоплеєр Увімкнено безпечний режим Автори - Завантаження оновлення програми… + Завантаження оновлення застосунку… Усі розширення вимкнено через збій, щоб допомогти вам знайти те, що спричиняє проблеми. - Програму не знайдено - Змішаний опенінг + Застосунок не знайдено + Змішаний опенінґ Видалити з переглянутого За оновленням (від старого до нового) За оновленням (від нового до старого) @@ -517,14 +517,14 @@ Журнал Старт Стоп - Тест постачальника + Тест провайдер Оновлення підписаних шоу Підписано Підписано на %s Відписатися від %s Епізод %d випущено! Повернути - raw.githubusercontent.com Proxy + raw.githubusercontent.com Проксі Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. Обходи ISP За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів. From 19dc1a2456b658e85bbd2123e85a5cafdcdc651f Mon Sep 17 00:00:00 2001 From: Lag <> Date: Tue, 14 Mar 2023 12:59:32 +0100 Subject: [PATCH 363/888] Un-bruh-momented some translations --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 6 +++--- app/src/main/res/values-bn/strings.xml | 4 ++-- app/src/main/res/values-bp/strings.xml | 8 ++++---- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 6 +++--- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 6 +++--- app/src/main/res/values-hr/strings.xml | 6 +++--- app/src/main/res/values-hu/strings.xml | 8 ++++---- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 6 +++--- app/src/main/res/values-nl/strings.xml | 6 +++--- app/src/main/res/values-no/strings.xml | 8 ++++---- app/src/main/res/values-pl/strings.xml | 6 +++--- app/src/main/res/values-qt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 10 +++++----- app/src/main/res/values-tl/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 16 ++++++++-------- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 4 ++-- app/src/main/res/values-zh-rTW/strings.xml | 16 ++++++++-------- app/src/main/res/values-zh/strings.xml | 12 ++++++------ 29 files changed, 77 insertions(+), 77 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index ae45465b..84934288 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -342,7 +342,7 @@ الكل الحد الاقصي الحد الأدنى - \@string/none + @string/none الخطوط المحيطة النمط المنخفض ظل diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index f1f512a1..496512f7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -105,7 +105,7 @@ Продължете да гледате Премахване Повече информация - \@string/home_play + @string/home_play Може да е необходим VPN, за да работи правилно този доставчик Този доставчик е торент, препоръчва се VPN Метаданните не се предоставят от сайта, зареждането на видео ще бъде неуспешно, ако не съществува на сайта. @@ -223,8 +223,8 @@ Филм Серия Анимационен филм - \@string/anime - \@string/ova + @string/anime + @string/ova Торент Документален филм Азиатска драма diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7e0448d6..7c37e291 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -143,8 +143,8 @@ হালনাগাদ ও ব্যাকআপ অ্যাপ এর হালনাগাদ দেখান খুঁজতে সোয়াইপ করুন - \@string/result_poster_img_des - \@string/home_play + @string/result_poster_img_des + @string/home_play আগাতে ডবল ট্যাপ করুন আইজেনগ্রাভি মোড আপডেট শুরু হয়েছে diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 2c2e1303..acdf0ae0 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -10,7 +10,7 @@ %dm Poster - \@string/result_poster_img_des + @string/result_poster_img_des Episode Poster Main Poster Next Random @@ -108,7 +108,7 @@ Continue Assistindo Remover Mais Info - \@string/home_play + @string/home_play Uma VPN pode ser necessária para esse fornecedor funcionar corretamente Esse fornecedor é um torrent, uma VPN é recomendada Metadados não são oferecidas pelo site, o carregamento do video pode falhar se ele não existir no site. @@ -222,8 +222,8 @@ Filme Série Desenho Animado - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Documentário Drama Asiático diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 67179b46..1a139511 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -103,7 +103,7 @@ Pokračovat ve sledování Odebrat Další informace - \@string/home_play + @string/home_play Aby tento poskytovatel fungoval správně, budete možná potřebovat VPN Tento poskytovatel je torrent, je doporučená VPN Web neposkytnul žádná metadata, načítání videa selže, pokud na webu neexistuje. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7cf49de1..e1093e05 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -115,7 +115,7 @@ Weiterschauen Entfernen Mehr Infos - \@string/home_play + @string/home_play Damit dieser Anbieter korrekt funktioniert, ist möglicherweise ein VPN erforderlich Dieser Anbieter bietet Torrents an, ein VPN wird dringend empfohlen Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie auf der Website nicht vorhanden sind. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 5e9dafd8..0d45b2c1 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -387,7 +387,7 @@ Κλείσιμο Εκκαθάριση Γλώσσα υποτίτλων - \@string/home_play + @string/home_play Δεν έχουν παρασχεθεί μεταδεδομένα από τον ιστότοπο, η φόρτωση του βίντεο θα αποτύχει αν δεν υπάρχει στον ιστότοπο. Διπλό πάτημα για παύση Μέγεθος αναζήτησης στο πρόγραμμα αναπαραγωγής @@ -452,7 +452,7 @@ Ανάμεικτοι τίτλοι τέλους -30 Κριτική - \@string/ova + @string/ova Ενημερώσεις εφαρμογής Αντίγραφο ασφαλείας Extensions @@ -464,7 +464,7 @@ Προεπιλεγμένα %s %s Μέγεθος γραμματοσειράς - \@string/anime + @string/anime Σύνδεσμοι Εμφάνιση Χαρακτηριστικά diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5c8ac532..f036653f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -194,7 +194,7 @@ Continuar Viendo Remover Más info - \@string/home_play + @string/home_play Una VPN puede ser necesaria para que este proveedor funcione correctamente Este proveedor es un torrent, se recomienda una VPN El sitio no proporciona los metadatos, la carga del video fallará si no existe en el sitio. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f3d35c19..9fee8c3c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -240,7 +240,7 @@ Continuer à regarder Retirer Plus d\'informations - \@string/home_play + @string/home_play Un VPN peut être nécessaire pour que ce fournisseur fonctionne correctement Ce fournisseur est un torrent, un VPN est recommandé Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n\'existent pas sur le site. @@ -385,8 +385,8 @@ 4K Web -30 - \@string/anime - \@string/ova + @string/anime + @string/ova NSFW %s %s Filtrez par langue préférée diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 159542cc..23fd9624 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -119,7 +119,7 @@ Nastavite s gledanjem Makni Više informacija - \@string/home_play + @string/home_play Za ispravan rad ovog pružatelja usluga može biti potreban VPN Ovaj pružatelj usluga je torrent, preporučuje se VPN Stranica ne daje metapodatke, učitavanje videozapisa neće uspjeti ako ne postoji na stranici. @@ -238,8 +238,8 @@ Film Serija Crtić - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Dokumentarac Azijska drama diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5b42fd6a..66526821 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Megnyitás böngészőben Betöltés kihagyása Poster - \@string/result_poster_img_des + @string/result_poster_img_des Nézés Befejezve Később megnézés @@ -111,7 +111,7 @@ Betűtípusok importálása %s Eltávolítás Több információ - \@string/home_play + @string/home_play VPN szükséges lehet ehhez a szolgáltató megfelelő működéséhez Ez a szolgáltató torrent, VPN ajánlott Leírás @@ -172,11 +172,11 @@ OVA Egyebek Sorozat - \@string/anime + @string/anime Forráshiba NSFW Rajzfilm - \@string/ova + @string/ova Élőadás NSFW Videó diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 1913868a..f5af3877 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -101,7 +101,7 @@ Lanjutkan Menonton Hapus Info lebih lanjut - \@string/home_play + @string/home_play Sebuah VPN mungkin diperlukan agar provider ini bisa bekerja dengan benar Provider ini adalah sebuah torrent, VPN direkomendasikan Metadata tidak disediakan oleh situs, loading video akan gagal jika tidak ada di situs. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b8e7eb20..4476b4a0 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -108,7 +108,7 @@ Continua a guardare Rimuovi Più info - \@string/home_play + @string/home_play Potrebbe essere necessaria una VPN per far funzionare correttamente questo provider Questo provider è un torrent, si raccomanda una VPN I metadati non sono forniti dal sito, il caricamento del video fallirà se non esiste sul sito. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 11cf77ce..4ed5ddc0 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -116,7 +116,7 @@ כתוביות כרומקאסט ממשיך ניגון בנגן מינימלי מעל ישומים אחרים כתוביות - \@string/home_play + @string/home_play היסטוריה מורשת לא @@ -164,8 +164,8 @@ משומש סדרת טלוויזיה סדרות/סרטים מצוירים - \@string/אנימה - \@string/אנימציית וידאו מקורית + @string/אנימה + @string/אנימציית וידאו מקורית דרמה אסייתית כרומקאסט את הפרק כרומקאסט את המראה diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index dd89c34a..3595a24a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -109,7 +109,7 @@ Doorgaan met kijken Verwijder Meer Info - \@string/home_play + @string/home_play Een VPN kan nodig zijn om deze provider correct te laten werken Deze provider is een torrent, een VPN wordt aanbevolen Metadata wordt niet geleverd door de site, het laden van video\'s zal mislukken als deze niet op de site bestaat. @@ -222,8 +222,8 @@ Film Serie Tekenfilm - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Documentaire Aziatisch drama diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 41bf704d..d9feb60c 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -2,7 +2,7 @@ Plakat - \@string/result_poster_img_des + @string/result_poster_img_des Episode Plakat Main Plakat Neste tilfeldig @@ -412,7 +412,7 @@ Slå av/på grensesnittselementer på plakat Hopp over denne oppdateringen Forårsaker tilfeldige krasj hvis satt for høyt. Ikke endre dette hvis du ikke har lite minne. - \@string/home_play + @string/home_play Sikkerhetskopier data Data lagret Kunne ikke logge inn på %s @@ -422,11 +422,11 @@ Sensurerbart Vev Lenke til strøm - \@string/anime + @string/anime Skjul valgt videokvalitet i søkeresultater Lastet inn sikkerhetkopifil Oppdateringer og sikkerhetskopi - \@string/ova + @string/ova Avslutt\? Sensurerbart Alle %s er allerede nedlastet diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 558a46ed..7fc0c887 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -455,7 +455,7 @@ Instalator APK Niektóre telefony nie obsługują nowego instalatora pakietów. Wypróbuj tryb legacy, jeśli aktualizacje nie zostaną zainstalowane. password123 - \@string/ova + @string/ova MojaFajnaWitryna MyCoolUsername 127.0.0.1 @@ -463,9 +463,9 @@ przyklad.pl /\?\? Instalator pakietów - \@string/home_play + @string/home_play hello@world.com - \@string/anime + @string/anime Opening Ending Mixed opening diff --git a/app/src/main/res/values-qt/strings.xml b/app/src/main/res/values-qt/strings.xml index 76852ca4..aee3de91 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -247,5 +247,5 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA aoaaaaaoooghhh oooooh uuaagh - \@string/home_play + @string/home_play \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 42d9b7c8..8cd24a3b 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -106,7 +106,7 @@ Continuați să urmăriți Eliminați Mai multe informații - \@string/home_play + @string/home_play Există probabilitatea necesitații unui VPN pentru ca acest furnizor să funcționeze corespunzător Acest furnizor este un torrent, se recomandă un VPN Metadatele nu sunt furnizate de către site, există posibilitatea ca încărcarea videoclipului să eșueze. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5295bd35..e9494040 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -363,7 +363,7 @@ Расширения URL репозитория Плагин загружен - \@string/home_play + @string/home_play Перемотка двойным нажатием /\?\? /%d diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 66d8ada9..96fbaff1 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -99,7 +99,7 @@ Tento poskytovateľ je torrent, odporúča sa VPN Importovať písma ich umiestnením do %s Viac informácií - \@string/home_play + @string/home_play Pokračovať v sledovaní Na správne fungovanie tohto poskytovateľa môže byť potrebná VPN Stránka neposkytla žiadne metadáta, načítanie videa zlyhá, ak na stránke neexistuje. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 32336b66..25066d7b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -33,7 +33,7 @@ Undertexter Försök ansluta igen… Gå tillbaka - \@string/result_poster_img_des + @string/result_poster_img_des Spela Avsnitt Ladda ner Intern lagring @@ -44,7 +44,7 @@ Inaktivera automatisk felrapportering Mer information Hide - \@string/result_poster_img_des + @string/result_poster_img_des Spela upp Info Nästa @@ -235,7 +235,7 @@ Episod %d kommer släppas om %d min Visa trailers - \@string/home_play + @string/home_play OVA %d-%d %d %s @@ -244,7 +244,7 @@ %dm \nåterstår NSFW - \@string/ova + @string/ova Torrent NSFW +30 @@ -273,7 +273,7 @@ Asiatiska draman Andra Tecknade serier - \@string/anime + @string/anime Dokumentär Asiatisk drama Video diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 9e5b29d4..721c421c 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -5,7 +5,7 @@ %s Ep %d Poster - \@string/result_poster_img_des + @string/result_poster_img_des Episode Poster Main Poster Next Random diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f53bb69d..975242b2 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -23,9 +23,9 @@ Bölüm Posteri Ana Poster Sonraki Rastgele - \@string/play_episode + @string/play_episode Geri git - \@string/home_change_provider_img_des + @string/home_change_provider_img_des Change Provider Preview Background @@ -46,7 +46,7 @@ Veri yok Daha fazla seçenek Sonraki bölüm - \@string/synopsis + @string/synopsis Türler Paylaş Tarayıcıda aç @@ -123,7 +123,7 @@ İzlemeye devam et Kaldır Daha fazla bilgi - \@string/home_play + @string/home_play Bu sağlayıcının düzgün çalışması için bir VPN gerekebilir Bu sağlayıcı torrent kullanıyor, bir VPN önerilir Metadata site tarafından sağlanmamış, veri site\'de bulunmuyorsa video yüklenmesi başarısız olacak. @@ -205,7 +205,7 @@ Bölüm bulunamadı Dosyayı sil Sil - \@string/sort_cancel + @string/sort_cancel Durdur Sürdür -30 @@ -244,8 +244,8 @@ Film Dizi Çizgi film - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Belgesel Asya dizisi @@ -368,7 +368,7 @@ Hepsi Maksimum Minimum - \@string/none + @string/none Dış hat Çökmüş Gölge diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6dca29b4..648de819 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -124,7 +124,7 @@ Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео %d Бананів для розробників Кнопка зміни розміру плеєра - \@string/home_play + @string/home_play Для коректної роботи цього постачальника може знадобитися VPN Метадані не надаються сайтом, завантаження відео не відбудеться, якщо їх немає на сайті. Картинка в картинці diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index f733addc..80081215 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -230,7 +230,7 @@ سلسلہ کارٹون انیمی - \@string/اووا + @string/اووا ٹورینٹ دستاویزی فلم ایشیائی ڈرامے diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 59c65916..74e748a3 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -110,7 +110,7 @@ Tiếp tục xem Loại bỏ Thông tin thêm - \@string/home_play + @string/home_play Bạn có thể sẽ cần sử dụng VPN để xem phim này Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem Thông tin phim @@ -229,7 +229,7 @@ Phim Bộ Hoạt Hình Anime - \@string/ova + @string/ova Torrent Phim Tài Liệu Truyền Hình Châu Á diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8a10208a..6aa41ff3 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -23,9 +23,9 @@ 劇集封面 主封面 隨機下一個 - \@string/play_episode + @string/play_episode 返回 - \@string/home_change_provider_img_des + @string/home_change_provider_img_des 更改片源 預覽背景 @@ -46,7 +46,7 @@ 無資料 更多選項 下一集 - \@string/synopsis + @string/synopsis 類型 分享 在瀏覽器中打開 @@ -123,7 +123,7 @@ 繼續觀看 移除 更多資訊 - \@string/home_play + @string/home_play 此片源可能需要 VPN 才能正常使用 此片源是種子,建議使用 VPN 站點不提供元數據,如果站點上不存在元數據,影片載入將失敗。 @@ -205,7 +205,7 @@ 未找到劇集 刪除文件 刪除 - \@string/sort_cancel + @string/sort_cancel 暫停 繼續 -30 @@ -244,8 +244,8 @@ 電影 電視劇 卡通 - \@string/anime - \@string/ova + @string/anime + @string/ova 種子 紀錄片 亞洲劇 @@ -368,7 +368,7 @@ 全部 最大 最小 - \@string/none + @string/none 輪廓 凹陷 陰影 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index a14b87cc..574624bc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -23,9 +23,9 @@ 剧集封面 主封面 随机下一个 - \@string/play_episode + @string/play_episode 返回 - \@string/home_change_provider_img_des + @string/home_change_provider_img_des 更改片源 预览背景 @@ -46,7 +46,7 @@ 无数据 更多选项 下一集 - \@string/synopsis + @string/synopsis 类型 分享 在浏览器中打开 @@ -123,7 +123,7 @@ 继续观看 移除 更多信息 - \@string/home_play + @string/home_play 此片源可能需要 VPN 才能正常使用 此片源为种子文件,建议使用 VPN 站点不提供元数据,如果站点上不存在元数据,视频加载将失败。 @@ -206,7 +206,7 @@ 未找到剧集 删除文件 删除 - \@string/sort_cancel + @string/sort_cancel 暂停 继续 -30 @@ -369,7 +369,7 @@ 全部 最大 最小 - \@string/none + @string/none 轮廓 凹陷 阴影 From 2d7126d71f3946d072652c4d6e63c938198bdafe Mon Sep 17 00:00:00 2001 From: Lag <> Date: Tue, 14 Mar 2023 13:12:34 +0100 Subject: [PATCH 364/888] Fix for fix for translations --- app/src/main/res/values-iw/strings.xml | 4 ++-- app/src/main/res/values-ur/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 4ed5ddc0..645724fd 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -164,8 +164,8 @@ משומש סדרת טלוויזיה סדרות/סרטים מצוירים - @string/אנימה - @string/אנימציית וידאו מקורית + @string/anime + @string/ova דרמה אסייתית כרומקאסט את הפרק כרומקאסט את המראה diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 80081215..4a8bbf11 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -230,7 +230,7 @@ سلسلہ کارٹون انیمی - @string/اووا + اووا ٹورینٹ دستاویزی فلم ایشیائی ڈرامے From 7bfcf25df4738741c8553cfce5e96fe711cddea6 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Tue, 14 Mar 2023 18:50:13 +0000 Subject: [PATCH 365/888] add a way to autofix weblate's issue with @string --- .github/locales.py | 15 ++++++++++++++- .github/workflows/update_locales.yml | 9 ++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/locales.py b/.github/locales.py index 1c79c093..04d9cd13 100644 --- a/.github/locales.py +++ b/.github/locales.py @@ -1,6 +1,7 @@ import re import glob import requests +import lxml.etree as ET # builtin library doesn't preserve comments SETTINGS_PATH = "app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt" @@ -45,4 +46,16 @@ open(SETTINGS_PATH, "w+",encoding='utf-8').write( "\n" + END_MARKER + after_src -) \ No newline at end of file +) + +# Go through each values.xml file and fix escaped \@string +for file in glob.glob(f"{XML_NAME}*/strings.xml"): + try: + tree = ET.parse(file) + for child in tree.getroot(): + if child.text.startswith("\\@string/"): + print(f"[{file}] fixing {child.attrib['name']}") + child.text = child.text.replace("\\@string/", "@string/") + tree.write(file, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=True) + except ET.ParseError as ex: + print(f"[{file}] {ex}") \ No newline at end of file diff --git a/.github/workflows/update_locales.yml b/.github/workflows/update_locales.yml index 93cdca44..628e9bc9 100644 --- a/.github/workflows/update_locales.yml +++ b/.github/workflows/update_locales.yml @@ -1,4 +1,4 @@ -name: Update locale lists +name: Fix locale issues on: workflow_dispatch: @@ -9,7 +9,7 @@ on: - master concurrency: - group: "locale-list" + group: "locale" cancel-in-progress: true jobs: @@ -26,6 +26,9 @@ jobs: - uses: actions/checkout@v2 with: token: ${{ steps.generate_token.outputs.token }} + - name: Install dependencies + run: | + pip3 install lxml - name: Edit files run: | python3 .github/locales.py @@ -35,5 +38,5 @@ jobs: git config --local user.name "recloudstream[bot]" git add . # "echo" returns true so the build succeeds, even if no changed files - git commit -m 'update list of locales' || echo + git commit -m 'chore(locales): fix locale issues' || echo git push From 8ebf5185a3fe95db8adabedf483e34ccda1fbdcb Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 17 Mar 2023 15:46:11 +0100 Subject: [PATCH 366/888] Add ffmpeg audio decoding --- app/build.gradle.kts | 2 + .../cloudstream3/ui/player/CS3IPlayer.kt | 44 +++++++++++-------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9cbccbe5..f70a575f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -159,6 +159,8 @@ dependencies { implementation("com.google.android.exoplayer:extension-cast:2.18.2") implementation("com.google.android.exoplayer:extension-mediasession:2.18.2") implementation("com.google.android.exoplayer:extension-okhttp:2.18.2") + // Use the Jellyfin ffmpeg extension for easy ffmpeg audio decoding in exoplayer. Thank you Jellyfin <3 + implementation("org.jellyfin.exoplayer:exoplayer-ffmpeg-extension:2.18.2+1") //implementation("com.google.android.exoplayer:extension-leanback:2.14.0") 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 cb8efe92..2aaa3619 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 @@ -9,8 +9,11 @@ import android.widget.FrameLayout import androidx.preference.PreferenceManager import com.google.android.exoplayer2.* import com.google.android.exoplayer2.C.* +import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON +import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER import com.google.android.exoplayer2.database.StandaloneDatabaseProvider import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource +import com.google.android.exoplayer2.mediacodec.MediaCodecSelector import com.google.android.exoplayer2.source.* import com.google.android.exoplayer2.text.TextRenderer import com.google.android.exoplayer2.trackselection.DefaultTrackSelector @@ -538,7 +541,8 @@ class CS3IPlayer : IPlayer { } // 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 refererMap = + if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer) val headers = mapOf( "accept" to "*/*", "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", @@ -669,23 +673,27 @@ class CS3IPlayer : IPlayer { val exoPlayerBuilder = ExoPlayer.Builder(context) .setRenderersFactory { eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput -> - DefaultRenderersFactory(context).createRenderers( - eventHandler, - videoRendererEventListener, - audioRendererEventListener, - textRendererOutput, - metadataRendererOutput - ).map { - if (it is TextRenderer) { - currentTextRenderer = CustomTextRenderer( - subtitleOffset, - textRendererOutput, - eventHandler.looper, - CustomSubtitleDecoderFactory() - ) - currentTextRenderer!! - } else it - }.toTypedArray() + DefaultRenderersFactory(context).apply { + setEnableDecoderFallback(true) + // Enable Ffmpeg extension + setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) + }.createRenderers( + eventHandler, + videoRendererEventListener, + audioRendererEventListener, + textRendererOutput, + metadataRendererOutput + ).map { + if (it is TextRenderer) { + currentTextRenderer = CustomTextRenderer( + subtitleOffset, + textRendererOutput, + eventHandler.looper, + CustomSubtitleDecoderFactory() + ) + currentTextRenderer!! + } else it + }.toTypedArray() } .setTrackSelector( trackSelector ?: getTrackSelector( From 288c5ffa39d60e0285cef573b20fe6ad4ecf7c29 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 16 Mar 2023 13:00:08 +0100 Subject: [PATCH 367/888] Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (German) Currently translated at 100.0% (610 of 610 strings) Co-authored-by: Anarchydr Co-authored-by: Hosted Weblate Co-authored-by: Julian Co-authored-by: Sdarfeesh Co-authored-by: Skrripy Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-de/strings.xml | 16 ++++++++-------- app/src/main/res/values-hr/strings.xml | 18 +++++++++--------- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e1093e05..911705d5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -41,7 +41,7 @@ Suche %s… Keine Daten vorhanden Mehr Optionen - Nächste Epsisode + Nächste Episode Genres Teilen In Browser öffnen @@ -136,14 +136,14 @@ Wischen zum vor- und zurückspulen Nach links oder rechts wischen, um die Zeit im Videoplayer zu steuern Wischen, um Einstellungen zu ändern - Links oder rechts wischen, um die Helligkeit oder Lautstärke zu ändern + Links oder rechts nach oben oder unten wischen, um die Helligkeit oder Lautstärke zu ändern Nächste Episode automatisch abspielen Nächste Episode wird gestartet, sobald die aktuelle Episode endet Doppeltippen zum vor- und zurückspulen Doppeltippen zum Pausieren - Zeit für vor- und zurückspulen im Player + Zeit für vor- und zurückspulen im Player (Sekunden) Zweimal auf die rechte oder linke Seite tippen, um vor- oder zurückzuspulen - In die Mitte tippen, um zu pausieren + Doppelt in die Mitte tippen, um zu pausieren Systemhelligkeit verwenden Systemhelligkeit anstelle eines dunklen Overlay im Player verwenden Episodenfortschritt aktualisieren @@ -166,7 +166,7 @@ Ausgewählte Videoqualität bei Suchergebnissen ausblenden Automatische Plugin-Updates App-Updates anzeigen - Automatisches Suchen nach neuen Updates beim Start + Automatisches Suchen nach neuen Updates nach dem Start Auf Vorabversionen updaten Suche nach Vorabversionen statt nur nach Vollversionen Github @@ -286,7 +286,7 @@ Haftungsausschluss Allgemein Zufalls-Button - Zufallsbutton auf der Startseite anzeigen + Zeigt einen Zufallsbutton auf der Startseite an, mit welchem eine Serie oder ein Film von der Website zufällig ausgewählt wird Anbieter-Sprachen App-Layout Bevorzugte Medien @@ -519,13 +519,13 @@ Start Neustarten Bevorzugte Videoqualität (mobile Daten) - Umgehung der GitHub Sperre mit jsdelivr, kann zu einigen Tagen Verzögerung bei Updates führen. + 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 + Abonnierte Serien werden aktualisiert Rückgängig Abonniert ISP-Umgehungen diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 23fd9624..5366fe34 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -138,16 +138,16 @@ Eigengravy način Dodaje opciju brzine u playeru Prijeđi prstom za traženje - Prijeđi prstom ulijevo ili udesno za kontrolu vremena u videoplayeru + Prijeđite prstom ulijevo ili udesno kako biste kontrolirali player Klizni za promjenu postavki - Prijeđi prstom ulijevo ili udesno za promjenu svjetline ili glasnoće + Kliznite prstom ulijevo ili udesno za promjenu svjetline ili glasnoće Automatski započni sljedeću epizodu Započne sljedeću epizodu kad trenutna završi Dodirni dvaput za traženje Dodirni dvaput za pauziranje - Iznos preskakanja u playeru + Iznos preskakanja u playeru (Sekunde) Dvaput dodirni desnu ili lijevu stranu ekrana za pomicanje naprijed ili natrag - Dodirni u sredinu zaslona za pauziranje + Dodirnite dvaput u sredinu zaslona za pauziranje Koristi svijetlinu u sustavu Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog preklopa Ažuriraj napredak gledanja @@ -173,7 +173,7 @@ Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja Automatsko ažuriranje dodataka Prikaži ažuriranja aplikacije - Automatski traži nova ažuriranja pri pokretanju aplikacije + Automatski traži nova ažuriranja nakon pokretanja aplikacije Ažuriranje na predizdanja Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja Github @@ -238,8 +238,8 @@ Film Serija Crtić - @string/anime - @string/ova + Anime + OVA Torrent Dokumentarac Azijska drama @@ -299,7 +299,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Općenito Random gumb - Prikaži random gumb na početnoj stranici + Prikazuje gumb na početnoj stranici koji može odabrati nasumični film ili TV seriju s početne stranice Jezici pružatelja usluga Izgled aplikacije Preferirani mediji @@ -552,6 +552,6 @@ 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. + Koristeći jsdelivr, GitHub blokiranje se može zaobići. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 648de819..d9ec76bb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -22,7 +22,7 @@ Пошук Завантаження %d хв - Параметри + Налаштування Пошук… Пошук на %s… Дані відсутні diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 574624bc..47807259 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -573,7 +573,7 @@ 日志 raw.githubusercontent.com 代理 连接 Github 失败,正在启用 jsdelivr 代理。 - 使用jsdelivr,可以绕过GitHub的封锁。可能会延迟几天的更新。 + 使用 jsdelivr,可以绕过 GitHub 的封锁。可能会延迟几天的更新。 ISP 绕过 还原 首选播放画质(移动数据) From 67318a62a37673f1acef39dc60684a0b9e005def Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 15:04:00 +0000 Subject: [PATCH 368/888] chore(locales): fix locale issues --- app/src/main/res/values-ar/strings.xml | 4 ++-- app/src/main/res/values-bg/strings.xml | 7 ++++--- app/src/main/res/values-bn/strings.xml | 4 ++-- app/src/main/res/values-bp/strings.xml | 7 ++++--- app/src/main/res/values-cs/strings.xml | 7 ++++--- app/src/main/res/values-de/strings.xml | 4 ++-- app/src/main/res/values-el/strings.xml | 7 ++++--- app/src/main/res/values-eo/strings.xml | 4 ++-- app/src/main/res/values-es/strings.xml | 4 ++-- app/src/main/res/values-fa/strings.xml | 4 ++-- app/src/main/res/values-fr/strings.xml | 7 ++++--- app/src/main/res/values-hi/strings.xml | 7 ++++--- app/src/main/res/values-hr/strings.xml | 7 ++++--- app/src/main/res/values-hu/strings.xml | 4 ++-- app/src/main/res/values-in/strings.xml | 7 ++++--- app/src/main/res/values-it/strings.xml | 7 ++++--- app/src/main/res/values-iw/strings.xml | 4 ++-- app/src/main/res/values-ja/strings.xml | 4 ++-- app/src/main/res/values-kn/strings.xml | 4 ++-- app/src/main/res/values-mk/strings.xml | 7 ++++--- app/src/main/res/values-ml/strings.xml | 7 ++++--- app/src/main/res/values-ms/strings.xml | 4 ++-- app/src/main/res/values-nl/strings.xml | 7 ++++--- app/src/main/res/values-nn/strings.xml | 4 ++-- app/src/main/res/values-no/strings.xml | 4 ++-- app/src/main/res/values-pl/strings.xml | 7 ++++--- app/src/main/res/values-pt/strings.xml | 4 ++-- app/src/main/res/values-qt/strings.xml | 4 ++-- app/src/main/res/values-ro/strings.xml | 7 ++++--- app/src/main/res/values-ru/strings.xml | 4 ++-- app/src/main/res/values-sk/strings.xml | 4 ++-- app/src/main/res/values-so/strings.xml | 4 ++-- app/src/main/res/values-sv/strings.xml | 7 ++++--- app/src/main/res/values-ta/strings.xml | 4 ++-- app/src/main/res/values-tl/strings.xml | 7 ++++--- app/src/main/res/values-tr/strings.xml | 7 ++++--- app/src/main/res/values-uk/strings.xml | 4 ++-- app/src/main/res/values-ur/strings.xml | 4 ++-- app/src/main/res/values-vi/strings.xml | 7 ++++--- app/src/main/res/values-zh-rTW/strings.xml | 7 ++++--- app/src/main/res/values-zh/strings.xml | 7 ++++--- 41 files changed, 122 insertions(+), 102 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 84934288..2a356812 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,4 +1,4 @@ - + ملصق @@ -561,4 +561,4 @@ باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - \ No newline at end of file + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 496512f7..301242cd 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,5 +1,6 @@ - - + + + %s еп. %d Актьори: %s @@ -497,4 +498,4 @@ Приложението ще се актуализира при изход от него Започна Актуализация Премахване от гледани - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7c37e291..71d5d6d0 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -1,4 +1,4 @@ - + পোস্টার ক্লাউডস্ট্রিম দিয়ে চালান @@ -148,4 +148,4 @@ আগাতে ডবল ট্যাপ করুন আইজেনগ্রাভি মোড আপডেট শুরু হয়েছে - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index acdf0ae0..13b34872 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d @@ -428,4 +429,4 @@ Começa o próximo episódio quando o atual termina Ativar NSFW em fornecedores compatíveis Fornecedores - \ 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 1a139511..1501a5d9 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d @@ -553,4 +554,4 @@ Vrátit zpět Pomocí jsdelivr lze obejít blokování GitHubu. Může dojít ke 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 911705d5..8fbcc2d0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,4 +1,4 @@ - + %s Ep %d Besetzung: %s @@ -529,4 +529,4 @@ 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 0d45b2c1..f07ce43c 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,5 +1,6 @@ - - + + + CloudStream Αρχική Αναζήτηση @@ -508,4 +509,4 @@ \nΣυνδέσου σε έναν λογαριασμό που έχει βιβλιοθήκη, ή πρόσθεσε σειρές στην τοπική βιβλιοθήκη σου Βρέθηκε αρχείο Ασφαλούς Λειτουργίας! \nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο. - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 09e6941d..5eac8686 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -1,4 +1,4 @@ - + Reen Hejmo @@ -78,4 +78,4 @@ Rapido (%.2fx) Serĉi… Elŝuti - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f036653f..06c20aa5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,4 +1,4 @@ - + Extensiones Descargue la lista de sitios que quiera utilizar @@ -529,4 +529,4 @@ 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-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 81853674..e4c23628 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,4 +1,4 @@ - + حذف مکث @@ -33,4 +33,4 @@ %dساعت %dدقیقه %dدقیقه پوستر اصلی - \ 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 9fee8c3c..b96ff0cd 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,5 +1,6 @@ - - + + + CloudStream Accueil Rechercher @@ -523,4 +524,4 @@ Contournements de FAI L\'épisode %d est sorti ! Échouer - \ No newline at end of file + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index f33a2336..833b76f4 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,5 +1,6 @@ - - + + + रफ्तार (%.2fx) नया अपडेट आया है! @@ -146,4 +147,4 @@ %dh %dm %dm विज्ञापन - \ 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 5366fe34..b4931377 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,6 @@ - - + + + %d %s | %s %s • %s @@ -554,4 +555,4 @@ Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. Koristeći jsdelivr, GitHub blokiranje se može zaobići. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 66526821..1389dff0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,4 +1,4 @@ - + Stáblista: %s %dn %dó%dp @@ -275,4 +275,4 @@ Minőségi jelzés Szinkroncímke Alcímke - \ 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 f5af3877..02234c49 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d Pemeran: %s @@ -552,4 +553,4 @@ Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - \ 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 4476b4a0..eca60da1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d Cast: %s @@ -551,4 +552,4 @@ Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 645724fd..b24f0c60 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -1,4 +1,4 @@ - + הרקע של ההצגה לפני צוות שחקנים: %s @@ -506,4 +506,4 @@ אלפביתי (ת\' עד א\') פתח עם נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת - \ 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 index a3d1d434..20641b20 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,4 +1,4 @@ - + %d分 ダウンロード @@ -182,4 +182,4 @@ アップデートを確認 作品名 アプリのアップデートをインストール中… - \ 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 242653be..4b7b6869 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -1,4 +1,4 @@ - + %sಎಪಿ%d ಕ್ಯಾಸ್ಟ್:%s @@ -125,4 +125,4 @@ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಮುಂದಿನ ರಾಂಡಮ್ - \ No newline at end of file + diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 7251d0d7..811a09c5 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,5 +1,6 @@ - - + + + Брзина (%.2fx) Оценето: %.1f @@ -213,4 +214,4 @@ Сенка Подигнат Историја - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index b6ad3a80..d430d7cc 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,5 +1,6 @@ - - + + + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -169,4 +170,4 @@ ഔചിത്യ വീഡിയോ ക്വാളിറ്റി ചരിത്രം കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക - \ No newline at end of file + diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index a6b3daec..c757504a 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -1,2 +1,2 @@ - - \ No newline at end of file + + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3595a24a..766bcdc7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d Cast: %s @@ -408,4 +409,4 @@ Bibliotheek Browser Logboek - \ No newline at end of file + diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index b5132028..43738665 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -1,4 +1,4 @@ - + Fleire val Heim @@ -183,4 +183,4 @@ Varigheit Direktesendingar Programoppdateringar - \ No newline at end of file + diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index d9feb60c..fddd4919 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -1,4 +1,4 @@ - + Plakat @@ -492,4 +492,4 @@ Oppdatering startet Programtillegg nedlastet Programmet vil oppgraderes når du avslutter det - \ 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 7fc0c887..a2a07dd7 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,5 +1,6 @@ - - + + + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -532,4 +533,4 @@ 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. Domyślna jakość (dane mobilne) - \ 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 64ccb903..dd722f62 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,4 +1,4 @@ - + %s Ep %d %dh %dm @@ -529,4 +529,4 @@ Configurações padrão SD Faixas de áudio - \ 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 aee3de91..eee28785 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -1,4 +1,4 @@ - + aauugghhaauuh @@ -248,4 +248,4 @@ aoaaaaaoooghhh oooooh uuaagh @string/home_play - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 8cd24a3b..aa443783 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d Distribuție: %s @@ -388,4 +389,4 @@ 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 e9494040..9d8f6895 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,4 +1,4 @@ - + История Нет @@ -529,4 +529,4 @@ Обход ограничения доступа к GitHub с помощью jsdelivr может задержать обновления на несколько дней. Подписные Отказались от подписки на %s - \ 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 96fbaff1..a1afd6d9 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1,4 +1,4 @@ - + Našla sa nová aktualizácia! \n%s -> %s @@ -104,4 +104,4 @@ Na správne fungovanie tohto poskytovateľa môže byť potrebná VPN Stránka neposkytla žiadne metadáta, načítanie videa zlyhá, ak na stránke neexistuje. Popis - \ No newline at end of file + diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index b944b6b3..ce7d557a 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -1,4 +1,4 @@ - + Metalaya: %s %dm %ds %dd @@ -487,4 +487,4 @@ Bilowga Bilow isku qasan Qoraalka dhamaadka - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 25066d7b..0b7ba89e 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,5 +1,6 @@ - - + + + Betygsatt: %.1f Hastighet (%.2fx) Ny uppdatering hittad! @@ -368,4 +369,4 @@ Titta på videor på dessa språk Föregående Spår - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index b2334c5f..4370e760 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -1,4 +1,4 @@ - + தேடுக தேடல் %s… @@ -107,4 +107,4 @@ இடைநிறுத்துவதற்கு இருமுறை தட்டவும் Chromecast வசன அமைப்புகள் இருண்ட மேலடுக்குக்குப் பதிலாக ஆப் பிளேயரில் சிஸ்டம் பிரகாசத்தைப் பயன்படுத்தவும் - \ No newline at end of file + diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 721c421c..cf3b1263 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Ep %d @@ -263,4 +264,4 @@ Magdagdag ng Account Kasaysayan I-tanda bilang napanood na - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 975242b2..74754008 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,5 +1,6 @@ - - + + + %d %s | %s %s • %s @@ -577,4 +578,4 @@ %s kanalı aboneliğinden çıkıldı Günlük Oynatıcı görünür durumdayken atlanacak süre miktarı - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index d9ec76bb..bd062394 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,4 +1,4 @@ - + Постер Постер до епізоду @@ -529,4 +529,4 @@ Обходи ISP За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 4a8bbf11..c19c6472 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -1,4 +1,4 @@ - + کاسٹ: %s قسط %d جاری کیا جائے گا @@ -356,4 +356,4 @@ %d / 10 اٹھایا اگر سب ٹائٹلز %d ms بہت جلد دکھائے جائیں تو اسے استعمال کریں - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 74e748a3..520cfaa4 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,5 +1,6 @@ - - + + + %s Tập %d @@ -524,4 +525,4 @@ Thất bại Thành công Bắt đầu - \ 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 6aa41ff3..3364ea86 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,5 +1,6 @@ - - + + + %d %s | %s %s • %s @@ -534,4 +535,4 @@ 外觀 功能 瀏覽器 - \ 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 47807259..44b93430 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,5 +1,6 @@ - - + + + %d %s | %s %s • %s @@ -577,4 +578,4 @@ ISP 绕过 还原 首选播放画质(移动数据) - \ No newline at end of file + From 8fff809b792dc8f9885f71509bdde11427d9e378 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 17 Mar 2023 16:07:28 +0100 Subject: [PATCH 369/888] Revert ffmpeg as it causes issues with subtitles :( --- app/build.gradle.kts | 2 +- .../java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f70a575f..0bd56fe7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -160,7 +160,7 @@ dependencies { implementation("com.google.android.exoplayer:extension-mediasession:2.18.2") implementation("com.google.android.exoplayer:extension-okhttp:2.18.2") // Use the Jellyfin ffmpeg extension for easy ffmpeg audio decoding in exoplayer. Thank you Jellyfin <3 - implementation("org.jellyfin.exoplayer:exoplayer-ffmpeg-extension:2.18.2+1") +// implementation("org.jellyfin.exoplayer:exoplayer-ffmpeg-extension:2.18.2+1") //implementation("com.google.android.exoplayer:extension-leanback:2.14.0") 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 2aaa3619..e0885671 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 @@ -674,9 +674,9 @@ class CS3IPlayer : IPlayer { ExoPlayer.Builder(context) .setRenderersFactory { eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput -> DefaultRenderersFactory(context).apply { - setEnableDecoderFallback(true) +// setEnableDecoderFallback(true) // Enable Ffmpeg extension - setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) +// setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) }.createRenderers( eventHandler, videoRendererEventListener, From 019399952f4516a1478875c0ca1c3918e55f0788 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 17 Mar 2023 16:23:03 +0100 Subject: [PATCH 370/888] Better subtitle decoding :) --- .../ui/player/CustomSubtitleDecoderFactory.kt | 68 +++++++++++-------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt index 690d3706..974a5d26 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt @@ -4,13 +4,16 @@ import android.content.Context import android.util.Log import androidx.preference.PreferenceManager import com.google.android.exoplayer2.Format -import com.google.android.exoplayer2.text.SubtitleDecoder -import com.google.android.exoplayer2.text.SubtitleDecoderFactory -import com.google.android.exoplayer2.text.SubtitleInputBuffer -import com.google.android.exoplayer2.text.SubtitleOutputBuffer +import com.google.android.exoplayer2.text.* +import com.google.android.exoplayer2.text.cea.Cea608Decoder +import com.google.android.exoplayer2.text.cea.Cea708Decoder +import com.google.android.exoplayer2.text.dvb.DvbDecoder +import com.google.android.exoplayer2.text.pgs.PgsDecoder import com.google.android.exoplayer2.text.ssa.SsaDecoder import com.google.android.exoplayer2.text.subrip.SubripDecoder import com.google.android.exoplayer2.text.ttml.TtmlDecoder +import com.google.android.exoplayer2.text.tx3g.Tx3gDecoder +import com.google.android.exoplayer2.text.webvtt.Mp4WebvttDecoder import com.google.android.exoplayer2.text.webvtt.WebvttDecoder import com.google.android.exoplayer2.util.MimeTypes import com.lagradost.cloudstream3.R @@ -19,7 +22,11 @@ import org.mozilla.universalchardet.UniversalDetector import java.nio.ByteBuffer import java.nio.charset.Charset -class CustomDecoder : SubtitleDecoder { +/** + * @param fallbackFormat used to create a decoder based on mimetype if the subtitle string is not + * enough to identify the subtitle format. + **/ +class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder { companion object { fun updateForcedEncoding(context: Context) { val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) @@ -139,7 +146,7 @@ class CustomDecoder : SubtitleDecoder { val inputString = getStr(inputBuffer) if (realDecoder == null && !inputString.isNullOrBlank()) { var str: String = inputString - // this way we read the subtitle file and decide what decoder to use instead of relying on mimetype + // this way we read the subtitle file and decide what decoder to use instead of relying fully on mimetype Log.i(TAG, "Got data from queueInputBuffer") //https://github.com/LagradOst/CloudStream-2/blob/ddd774ee66810137ff7bd65dae70bcf3ba2d2489/CloudStreamForms/CloudStreamForms/Script/MainChrome.cs#L388 realDecoder = when { @@ -148,8 +155,31 @@ class CustomDecoder : SubtitleDecoder { (str.startsWith( "[Script Info]", ignoreCase = true - ) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder() + ) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder(fallbackFormat?.initializationData) str.startsWith("1", ignoreCase = true) -> SubripDecoder() + fallbackFormat != null -> { + when (val mimeType = fallbackFormat.sampleMimeType) { + MimeTypes.TEXT_VTT -> WebvttDecoder() + MimeTypes.TEXT_SSA -> SsaDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder() + MimeTypes.APPLICATION_TTML -> TtmlDecoder() + MimeTypes.APPLICATION_SUBRIP -> SubripDecoder() + MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> Cea608Decoder( + mimeType, + fallbackFormat.accessibilityChannel, + Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS + ) + MimeTypes.APPLICATION_CEA708 -> Cea708Decoder( + fallbackFormat.accessibilityChannel, + fallbackFormat.initializationData + ) + MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_PGS -> PgsDecoder() + MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder() + else -> null + } + } else -> null } Log.i( @@ -246,28 +276,6 @@ class CustomSubtitleDecoderFactory : SubtitleDecoderFactory { } override fun createDecoder(format: Format): SubtitleDecoder { - return CustomDecoder() - //return when (val mimeType = format.sampleMimeType) { - // MimeTypes.TEXT_VTT -> WebvttDecoder() - // MimeTypes.TEXT_SSA -> SsaDecoder(format.initializationData) - // MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder() - // MimeTypes.APPLICATION_TTML -> TtmlDecoder() - // MimeTypes.APPLICATION_SUBRIP -> SubripDecoder() - // MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(format.initializationData) - // MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> return Cea608Decoder( - // mimeType, - // format.accessibilityChannel, - // Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS - // ) - // MimeTypes.APPLICATION_CEA708 -> Cea708Decoder( - // format.accessibilityChannel, - // format.initializationData - // ) - // MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(format.initializationData) - // MimeTypes.APPLICATION_PGS -> PgsDecoder() - // MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder() - // // Default WebVttDecoder - // else -> WebvttDecoder() - //} + return CustomDecoder(format) } } \ No newline at end of file From 9c40abc4d32f2003d84361828435683b031dc0e0 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Fri, 17 Mar 2023 22:15:25 +0100 Subject: [PATCH 371/888] Added player intent --- app/src/main/AndroidManifest.xml | 10 +++++++++ .../lagradost/cloudstream3/MainActivity.kt | 21 +++++++++++++++++++ .../syncproviders/AccountManager.kt | 1 + .../ui/download/DownloadFragment.kt | 4 ++-- .../ui/player/DownloadedPlayerActivity.kt | 2 +- .../cloudstream3/ui/player/LinkGenerator.kt | 17 ++++++++++----- 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 871c4f69..563c82f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,6 +98,16 @@ + + + + + + + + + + diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 7818e357..d054f504 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration +import android.net.Uri import android.os.Build import android.os.Bundle import android.util.AttributeSet @@ -57,6 +58,7 @@ import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringPlayer import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch @@ -65,6 +67,9 @@ import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO import com.lagradost.cloudstream3.ui.home.HomeViewModel +import com.lagradost.cloudstream3.ui.player.BasicLink +import com.lagradost.cloudstream3.ui.player.GeneratorPlayer +import com.lagradost.cloudstream3.ui.player.LinkGenerator import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST import com.lagradost.cloudstream3.ui.result.setImage @@ -274,6 +279,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { isWebview: Boolean ): Boolean = with(activity) { + // TODO MUCH BETTER HANDLING + // Invalid URIs can crash fun safeURI(uri: String) = normalSafeApiCall { URI(uri) } @@ -329,6 +336,20 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // It might be better to use the QuickSearch. nav_view?.selectedItemId = R.id.navigation_search nav_rail_view?.selectedItemId = R.id.navigation_search + } else if (safeURI(str)?.scheme == appStringPlayer) { + val uri = Uri.parse(str) + val name = uri.getQueryParameter("name") + val url = URLDecoder.decode(uri.authority, "UTF-8") + + navigate( + R.id.global_to_navigation_player, + GeneratorPlayer.newInstance( + LinkGenerator( + listOf(BasicLink(url, name)), + extract = true, + ) + ) + ) } else if (safeURI(str)?.scheme == appStringResumeWatching) { val id = str.substringAfter("$appStringResumeWatching://").toIntOrNull() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index f17086c1..8ce6bae2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -45,6 +45,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { const val appString = "cloudstreamapp" const val appStringRepo = "cloudstreamrepo" + const val appStringPlayer = "cloudstreamplayer" // Instantly start the search given a query const val appStringSearch = "cloudstreamsearch" diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index f0340845..e80a8fa5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -24,7 +24,6 @@ import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.player.LinkGenerator -import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE @@ -40,6 +39,7 @@ import kotlinx.android.synthetic.main.stream_input.* import android.text.format.Formatter.formatShortFileSize import androidx.core.widget.doOnTextChanged import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.ui.player.BasicLink import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import java.net.URI @@ -225,7 +225,7 @@ class DownloadFragment : Fragment() { R.id.global_to_navigation_player, GeneratorPlayer.newInstance( LinkGenerator( - listOf(url), + listOf(BasicLink(url)), extract = true, referer = referer, isM3u8 = dialog.hls_switch?.isChecked diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index dc1bbba3..6f40e145 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -42,7 +42,7 @@ class DownloadedPlayerActivity : AppCompatActivity() { R.id.global_to_navigation_player, GeneratorPlayer.newInstance( LinkGenerator( listOf( - url + BasicLink(url) ) ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 1f242481..0b560857 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -5,8 +5,15 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.* import java.net.URI +/** + * Used to open the player more easily with the LinkGenerator + **/ +data class BasicLink( + val url: String, + val name: String? = null, +) class LinkGenerator( - private val links: List, + private val links: List, private val extract: Boolean = true, private val referer: String? = null, private val isM3u8: Boolean? = null @@ -47,7 +54,7 @@ class LinkGenerator( offset: Int ): Boolean { links.amap { link -> - if (!extract || !loadExtractor(link, referer, { + if (!extract || !loadExtractor(link.url, referer, { subtitleCallback(PlayerSubtitleHelper.getSubtitleData(it)) }) { callback(it to null) @@ -57,11 +64,11 @@ class LinkGenerator( callback( ExtractorLink( "", - link, - unshortenLinkSafe(link), // unshorten because it might be a raw link + link.name ?: link.url, + unshortenLinkSafe(link.url), // unshorten because it might be a raw link referer ?: "", Qualities.Unknown.value, isM3u8 ?: normalSafeApiCall { - URI(link).path?.substringAfterLast(".")?.contains("m3u") + URI(link.url).path?.substringAfterLast(".")?.contains("m3u") } ?: false ) to null ) From 5245eff6e12a781bb2e072e75d7e610252c4135d Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sat, 18 Mar 2023 09:22:07 +0100 Subject: [PATCH 372/888] [skip ci] fix xml header being slightly wrong --- .github/locales.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/locales.py b/.github/locales.py index 04d9cd13..9ab272b9 100644 --- a/.github/locales.py +++ b/.github/locales.py @@ -56,6 +56,8 @@ for file in glob.glob(f"{XML_NAME}*/strings.xml"): if child.text.startswith("\\@string/"): print(f"[{file}] fixing {child.attrib['name']}") child.text = child.text.replace("\\@string/", "@string/") - tree.write(file, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=True) + with open(file, 'w') as fp: + fp.write('\n') + tree.write(fp, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=False) except ET.ParseError as ex: - print(f"[{file}] {ex}") \ No newline at end of file + print(f"[{file}] {ex}") From 4235c826a5f150c69af0f601e76855bbf12e9971 Mon Sep 17 00:00:00 2001 From: Lag <> Date: Sat, 18 Mar 2023 23:55:58 +0100 Subject: [PATCH 373/888] Better focus on Android TV (Thank you ocean for reporting) --- .../ui/home/HomeParentItemAdapter.kt | 2 +- .../ui/result/LinearListLayout.kt | 18 +++++++++---- .../cloudstream3/ui/result/ResultFragment.kt | 20 ++++++++++++++ .../ui/settings/SettingsAccount.kt | 22 +++++++++++++++ .../main/res/layout/fragment_result_tv.xml | 9 +++---- .../main/res/layout/homepage_parent_tv.xml | 27 +++++++++---------- 6 files changed, 71 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index e6999c9e..58c6dbe0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -185,7 +185,7 @@ open class ParentItemAdapter( ) : RecyclerView.ViewHolder(itemView) { val title: TextView = itemView.home_child_more_info - val recyclerView: RecyclerView = itemView.home_child_recyclerview + private val recyclerView: RecyclerView = itemView.home_child_recyclerview fun update(expand: HomeViewModel.ExpandableHomepageList) { val info = expand.list diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt index 59a46264..affbcbb4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt @@ -7,13 +7,13 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.mvvm.logError fun RecyclerView?.setLinearListLayout(isHorizontal: Boolean = true) { - if(this == null) return + if (this == null) return this.layoutManager = this.context?.let { LinearListLayout(it).apply { if (isHorizontal) setHorizontal() else setVertical() } } ?: this.layoutManager } -class LinearListLayout(context: Context?) : +open class LinearListLayout(context: Context?) : LinearLayoutManager(context) { fun setHorizontal() { @@ -24,7 +24,8 @@ class LinearListLayout(context: Context?) : orientation = VERTICAL } - private fun getCorrectParent(focused: View): View? { + private fun getCorrectParent(focused: View?): View? { + if (focused == null) return null var current: View? = focused val last: ArrayList = arrayListOf(focused) while (current != null && current !is RecyclerView) { @@ -54,10 +55,17 @@ class LinearListLayout(context: Context?) : linearSmoothScroller.targetPosition = position startSmoothScroll(linearSmoothScroller) }*/ - override fun onInterceptFocusSearch(focused: View, direction: Int): View? { val dir = if (orientation == HORIZONTAL) { - if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) return null + if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) { + // This scrolls the recyclerview before doing focus search, which + // allows the focus search to work better. + + // Without this the recyclerview focus location on the screen + // would change when scrolling between recyclerviews. + (focused.parent as? RecyclerView)?.focusSearch(direction) + return null + } if (direction == View.FOCUS_RIGHT) 1 else -1 } else { if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_LEFT) return null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index bdef14b5..5a3e28b4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -22,6 +22,7 @@ import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager +import androidx.recyclerview.widget.RecyclerView import com.discord.panels.OverlappingPanelsLayout import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipDrawable @@ -531,6 +532,25 @@ open class ResultFragment : ResultTrailerPlayer() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + result_cast_items?.layoutManager = object : LinearListLayout(view.context) { + override fun onRequestChildFocus( + parent: RecyclerView, + state: RecyclerView.State, + child: View, + focused: View? + ): Boolean { + // Make the cast always focus the first visible item when focused + // from somewhere else. Otherwise it jumps to the last item. + return if (parent.focusedChild == null) { + scrollToPosition(this.findFirstCompletelyVisibleItemPosition()) + true + } else { + super.onRequestChildFocus(parent, state, child, focused) + } + } + }.apply { + this.orientation = RecyclerView.HORIZONTAL + } result_cast_items?.adapter = ActorAdaptor() updateUIListener = ::updateUI diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index f9627e46..1ef3cb55 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -157,6 +157,28 @@ class SettingsAccount : PreferenceFragmentCompat() { ) dialog.dismissSafe() } + + val displayedItems = listOf( + dialog.login_username_input, + dialog.login_email_input, + dialog.login_server_input, + dialog.login_password_input + ).filter { it.isVisible } + + displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous -> + item?.id?.let { previous?.nextFocusDownId = it } + previous?.id?.let { item?.nextFocusUpId = it } + item + } + + displayedItems.firstOrNull()?.let { + dialog.create_account?.nextFocusDownId = it.id + it.nextFocusUpId = dialog.create_account.id + } + dialog.apply_btt?.id?.let { + displayedItems.lastOrNull()?.nextFocusDownId = it + } + dialog.text1?.text = api.name if (api.storesPasswordInPlainText) { diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index a29dc192..5eacdbe2 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -199,17 +199,13 @@ android:id="@+id/result_back" android:layout_width="30dp" android:layout_height="30dp" - android:layout_gravity="center_vertical" android:layout_marginEnd="10dp" - android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:contentDescription="@string/go_back" - android:focusable="true" android:gravity="center_vertical" - android:nextFocusDown="@id/result_description" android:src="@drawable/ic_baseline_arrow_back_24" app:tint="?attr/white" /> @@ -385,8 +381,8 @@ @@ -423,11 +419,11 @@ @@ -568,6 +564,7 @@ android:layout_weight="1" android:minWidth="250dp" android:nextFocusLeft="@id/result_movie_progress_downloaded_holder" + android:nextFocusRight="@id/result_bookmark_button" android:nextFocusDown="@id/result_resume_series_button_play" android:text="@string/type_none" android:visibility="visible" /> diff --git a/app/src/main/res/layout/homepage_parent_tv.xml b/app/src/main/res/layout/homepage_parent_tv.xml index d0c88c39..9dcf0bae 100644 --- a/app/src/main/res/layout/homepage_parent_tv.xml +++ b/app/src/main/res/layout/homepage_parent_tv.xml @@ -2,33 +2,30 @@ + android:layout_height="wrap_content" + android:orientation="vertical"> \ No newline at end of file From 0cbee7068326a8f215f53c45d9c85d3601eac468 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Sun, 19 Mar 2023 12:51:54 +0100 Subject: [PATCH 374/888] [skip ci] Update locales.py --- .github/locales.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/locales.py b/.github/locales.py index 9ab272b9..7d6d6b90 100644 --- a/.github/locales.py +++ b/.github/locales.py @@ -56,8 +56,8 @@ for file in glob.glob(f"{XML_NAME}*/strings.xml"): if child.text.startswith("\\@string/"): print(f"[{file}] fixing {child.attrib['name']}") child.text = child.text.replace("\\@string/", "@string/") - with open(file, 'w') as fp: - fp.write('\n') + with open(file, 'wb') as fp: + fp.write(b'\n') tree.write(fp, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=False) except ET.ParseError as ex: print(f"[{file}] {ex}") From 52d495f425fa3a305a2c4018c36b93e9542751b5 Mon Sep 17 00:00:00 2001 From: Osten <11805592+LagradOst@users.noreply.github.com> Date: Tue, 21 Mar 2023 20:50:13 +0000 Subject: [PATCH 375/888] Update README.md --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index 3430d626..e3d033ba 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,7 @@ + Download and stream movies, tv-shows and anime + Chromecast -### Screenshots: - - - - ### Supported languages: Translation status - \ No newline at end of file + From 67b0549fd2a3fe4b94d0a6f03f490bfa8956258e Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Tue, 21 Mar 2023 21:01:47 +0000 Subject: [PATCH 376/888] remove images --- .github/downloads.jpg | Bin 59461 -> 0 bytes .github/home.jpg | Bin 139384 -> 0 bytes .github/player.jpg | Bin 49418 -> 0 bytes .github/results.jpg | Bin 98562 -> 0 bytes .github/search.jpg | Bin 152135 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/downloads.jpg delete mode 100644 .github/home.jpg delete mode 100644 .github/player.jpg delete mode 100644 .github/results.jpg delete mode 100644 .github/search.jpg diff --git a/.github/downloads.jpg b/.github/downloads.jpg deleted file mode 100644 index ca14a664a2ce2b07cdc366343d54c690d9bacc01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59461 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ℜ5F2>W2mS%`!tt>Y2ggw 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

    g!fC#;0+fen{k3i*HT`@Uz5%PpHG z!Cm^L3(OC+m%K|#bEPy-lJhBM~Nhg5ex48|bhgu~Jm{m@;L+cIq0UAwAc;aHLIwomF`!k@2Q^ugeMy&f_ zSc31DsJVrLY4A)4TZaQ{h#6An-F;==kvWO^ZZmP+N=1%o*ha+CLfQ1=T^X2wx{H6w)U8^Z5N0pAp7j5l9wy3OOan2%J6d} zl&_->J=#&70snd4wW``5qWzLV#728($1=`Xv+UT{$+|DKhr?Bw^o ziyqac0<8MrlZ`W7sYB!4;4yUB12uQzun$b+$y99s7~VP+H&oro~fG@pt7`nHdZ7LZ*ie zJ$h!QC~YEqbX2!?ElvKqY7N2J3pevcj>0B_%{xQSr6HdCXfibHKaW94gS@PHm9>3h z!+mV{v)$Q3A8iM;1a!Va=1ZQu1Ma%Oc^hBxXDUja_cB~~JV?T{OEt-K&mM7Dx)Ua4 zlYeP$b=9XiKAkr8MR^8aQeS%ID^{i3p(nQ^_aoUIj}p^7mRa=~CkkN(5=j(%=!yyt zmAyR(oG0!+%TAG$MkdzM-X9MrZ@on@RbW#~obSkI-oBzL>xe5R35q7|4^d><3Mtx;=x0*<9KreEZ4I#e#E=E@tWQp| z!o-!AjKMrW@iLLlPuME-0$fqGRKI@vej@Jx*}(ovkhgKjzY_7@$*aNg;IeW1F~w9xi-ZXDsAa%y zusdGbGh&f#w(onos@&|`!at21S&oOgga`#djFxy-Cg|-d$>ZH`YF!EUCnT$TLod0$ zpT%8K9W12#^09$Cc`ifu-s7IoXga zUp`v%@Q#T}cG#J3rmZ`ZODfdT+Zba$ob#Bw%+m8&%Jdx@NTS0lN3^@m?(9#*7BKl@ zN>I&7o8g*~g>9!l3z1zKkX{<(FYM+cKfV_dzp!NL@TF56(c;ELiNILo4E16!&-fU=wyAYk^R}=pQoQXPN diff --git a/.github/player.jpg b/.github/player.jpg deleted file mode 100644 index f6959cf31d27e5debc98e7d69b54688c589803a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49418 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�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

    6R?OyVHq`Nv6g|; zs#O!(uJN|6l0_}3C=G$3Q6+PEABvDX)Y%`&aD*hJjNJ)cjlfNT;Z;*FvyJgEoBVoA z5lkp}ZGtAg`d|rKphsQ5{LG!qAw1Fsv3Y0lL_SstJ;IGt^k6E7Fhh5ou4UMCA;~J` z=e5Kr?&7cSgcA>gMrMFENSd>g8Tl!&i)twfMzG7ypOaJyT4w#5&_wXp%S}U+IVWoD zrna!Nv4d*oB|6AvDBh|^9NrDlM{SG~Qy+y>&d%XuyJNk-d~Bc|$Gm38Qo+T_>eJ>i zd)&N`mVPToRMldANB~P-LV8D@xDH-BCu!=8h zY9w+DD@%n~Qtn)4Pq0vP!icc6iMdNsr{t256%0$KpNg0DDV_zRFi$d|L&W&^El1m(Vr-4&c*xm6RnGMxyIW?B7Cf+@I^u`tGZl zWHp{RDT$py?z!+xloLbRbyLuR*rv_REfto*?6PGBlkypVMUx7Rz#lLNR2-KSp)oc#|RdlezF%LVD25a*5)@BS{cZ zp!QM;2dUv8(XsAtS}AfDVq+tC_6N%4KwveWvTJqExIBKt8QPVjzz86$>e`^_mxp` zHQk!sjXMNQBS8Yey-9Fr+_iDH;1GfY2{cZy;4Y23TX2^k!8N!$K?4ba;r(Q0*4(?^ zyXMEtkGuAd)BALH)l>VFoK?H_emqB8qxuOotM!(;9RwQS2NU&J)`dl08Z_1r{PV&4YC;}yj`8Vsb z4b?FgJw}VWx-lK3YkuY+a-LP&NqW+)mRIY=RkfHV{?i-ZJ9fxkjv_X$cB_8;!2Vi%@oQ@yOHwrGPo{q<6i%mI}JW6r{R3&`a0zB`yl_UoU}=yOH?TlfU%4c z>|)6K9?j#YGwaQ~-yXhB2IM7MGtpJWDf|29^KARXbDx}nxE+oLjk4_CuMl30A2b88 zzT-nFCNPgV@`z)4q1u)L{OW}`zNikbg0#AavrLfYe-niP>sUE#; zbTRO>qnBF2Wp*NTl?l0qGg$_=^XeU)dhq;Brd{($ls+N3A&9C{H=Pj-he5ekl4K z9kVmy#73fuwhjY5Ki6N0P(kQM)Tx~4?Cb%)P`Fpg0qJZ+CLeqNuOYQ?3C8`#2 zG>Z#Y^Lmzh^n^$sG{27PlS*TD5cn}V_{Ka205W9yxS$ln*#(4y z;OB%E*wxe<1o`G4Q+7abQZZxmD^wBZI#26FIy%+IWV^(3w!0+(e{w zRB8*4W51vrEQhi8$5bv@r2)%)We?jl(TD(opOOF!Tf;_Jxb?3KN?L3AqWG*L5P*y> zRy5Q>9NnH!a+y=!6L}g9gB|WOpju^Imue-e!C9Nys@Aag$g+&5t+D|&18w9^05fZA z5_h7S$>bn5YfN$ca|8mEx!;3-U_yaIefsj#1yeP#a36=)m+2r-Qcie_g?pZs5U2x7 zo|-@b=X?mim_14}GcLaF$wi&-k@OqX57*o_)%r2a{#pvhbqcg>Qbs*%p7#^%UVvXx z>5}S^N-XeiEL+c&;#Z9}1-pWS<0$eO*$nldYYXU=xj7eTs9dqk>LnpiN^EN9EG>!f!D#f~VPl5YYhF#*b2J47-mUGc&u+4mZDX~l?6#W#97_!1QZkpU>UVrQ4(bZCipF^wG#dJm|kAg6%5#iVdR_t4O(!K8I` zn?$%yRY;T`v*8%2tvENLCpf@d=0Dt25!<$m8A+!F50}_~DgzXHOpex>;y6H~yLX2L z*vg&Q2)+QEZOD2c2|yfMkZGvp!)%M>zVI_y*{#p{A80Io1cpj<^-|(V#z|rry%=-G zcSTm8ZPQ^sELE#uUKbn*m<=Ye*k}A}hkw5uKFpm{dJ;dpg(b{CE)2Kyb_EOFnGefT z8Ny=10m37G^BUc}2;t!DrT&k_u|c};!OEI~%RFTUIS5=wR4M82KyBwWYmIGrwrGUk05!Ai6{6Dh+gfubWt(yO2%R>8XM*$hoi=X#N{f8h7_(Y z#F+}EL^Z`is19xAVGgv4u{vu^QtEDe^Yj5Go{$y`ZPO#hm*k6HHMR*`j(-7Ql~3x7 z=x=Hf@kohlw#{1oATLcKieh+Ud!@Gx>k0h91%fE_YXE8&DxR^nSrq8&f+6A+n_B1) zZ9I7#_KFGph1L|kP_yH~#>BT-)FONYVSFHs-tU}oRyIs%DO;^=<{Tx3SEkY7LkUNycmJJI_=mV)E5NXI$3IUkjpOHH`l!0nM3u0ouPHZmA|1G z#5^huY+iWWjpb26&KL;P`#5WCUT|=U^=q#LE&gw_wpF{Yg8)COf74;B13XBcxV+gY z_Zsf_Zl~K63=k-FCQ{|Rw%oTo1d&r z#i^}LBBDqQMjy?|C)TXrzN?~WIM~w^kze=FU-?{4yEnq7SNg5)5Z@D`Yg2#cF?LV6 zH$(l4{bJhlXOO|IWr>H*oVqWZ39MtGIQ90I|L0S1))f(Gj%!Cp5a|)n#A~b$bP4r^ z?T}_7b8FiI7f{Y3<%vj|G4*Cc$>RwKmDp896#e920CFIF$(t1Stx%NK6heeR0s689 zxv*5HM4jFii5A@QwIsh;h9$X_!SQ7LFH|_-vTt#_zkiQ06#&9Huc#9I#kphVz5JH7 z1}p=UaT@fG(4&*eqY%W>qvzNxfym7mSJ0(3STk#t$yNa-mO(I^ZEw`quup}_j4v2? zGcYi)l$b-f`h@Xc1Klqm%9%S5UtWIX&$6utzlIHTlRRFJ@2tJPaL@XeD=4KRsP`2v zxozVdti3;>ehl|YXxYfAi9=0{@^EDx5loHRmnY}=t&*NVhI=eR%DneAi(@8+mM5cg z#hH!sqRlSAx(z&;=w;?@cao9i{+abA`-T5fmGJVvJV+urXy+bD>HW_Jv^X0e-eK7( zAH=Mml>m_SdB>A|*1A_YwW@U*8=Cg*u*I&S-H!OWU#KQT80w_y`43mT-%4FmlQMej z7^!(qNYJ|@DB(u8gK(?d;ELEcQdFbdz17C8VvwMP!W`prpK#+j8%ul6` ze;4!6IY;n*C#eGV*7#C$VSurX8Y_oZnv4<|8DF9TN+5oS$>ePLknRX_e}SAEr0@Lt zx78eiqzpm$bc9vF1UE_?OY$>ySM0aM-wk-EOv}>2P2}%lJhV5;D=cnX1(@f*;2J z*T-M!WHnMmYEsc=@{ydew5|d{C92e7K{Q0FCf&&#J>Ruzx$l6^&wfj27t=3lgK6tA zCpcnJ`@wZ^XBV03qYH8kBjx%j5XlgxlkW-gUW_32FDtAHEn*VD3(znr;Kxd!4JKiq)Z*64{}^cX zs|6nyRrHk&vxsR_7?!-sOR@{EbQzNo=5xPgF*h-hDcIrjQe6rWvnTpKK7~UpJEoi! zz}s;->sU=gme$;lvE|Sc)HdOOyr{xFwR#X&Dhn?iSxr@xG77S!w?i)E?0Z!ft%Bfvq+l%R`ds6o))CF>E3xbcr_$dfbmv~tCoIq~{v`??BL||Ld*4PfV zKwDSP%krv=u&T8yr3lhK+eF+z5FS8S90{?HT#Uc3YVvequ=iKoh;1!#tBJLRXZ5=a z6$1cGKmGRT$iBC0$TC1sQ`9;RH%1kDaui2ZZ);EfNYi$@z6eC4>U2AGsM}lNI%S_zq z3%?_cr2< z??wi-x^pjS$$dtI7-H$m)XhRzNjTZSCbQ8G&U7#2uw&H|$u}2xTJQ^MZv)X!FR!}7 zC{&FoMkwe7(iB{RCi>6yXt@AH{U48}w7#Ejkn6T^_$IHTh;?@;EB$>?m`Yy$#1z2hAo`Pm_6R^=di-8o?yB)iq+S5dn;Cll`M@n9AiFTP>RZiQRgv)2OGt74`EM zzzTpou3v%X=kRQbfOSPBO5a zF<35HXO6Oh!z=S!sNfNU$DH&?7tW90T)X&#efy>kP6|h^6+lDv_iAjMhkmZKaN`D+ z?nMloP5)H%)Z7;Wb6V-L`2cLhP&?JsK1l{It$i_S6S)3-B)7ce84m@enq+vUAh@?wpf zr13!BpPdK^ z0Z+_JtKFiv%0$gvzA>9iTn-z+j#m00Y^Crr5hHgc%`qf67Fs&*ubqTx4{1G}*o>b^ z71uWlzX^#-BjOCAn6i_0+b1h#847KA_WN#DI*L?Z@hm?xI*69L6!zIxVQI%560i2b zzoj3h^y~t?zZ|$|&~l}dN(co{6~2*t>4+^yyc@>bxIgXP&xq(}_xMKY7DaP+X)T!N zA*%!Fbt4ThgzDVnw^y>N6RYW9AL>t~gb5m~vpQ#Dp3dwl}gWi ztKV@##Uw13K-|b!Wvxv_Ub6p@gLpaGXlk?VxbRksRKlTJ?gnqQ^mBDD7Li(HF+RQc zL`!q zOJl+r-$+hyiC;}7rxW<9A^8}xnyZDXugbCD&NHbG&q3X^Fs1*beP-szgLR-@78qE= zg5QW1k4Y6nLNXP#i|Dv!>kp)>l{_zJe3Nshu+>z`N39vpBDhoY0-sqfao_JDEEGjg zkWlS#>7pMGN=3>-@{LgPxTliE%t-FOPf~NKQX4_`%i;}tUJX}*#xXrwj>siGW|?_b zLwzfwGB-zYvWErTBuX>ddY-73|jt6}QPH$mliejGQIB)XFm2sjf ze_^(k5(b`#h7I>3v-xlLgyt)KHqZ4e=4hA9O*q%nUkpFCtH(_7g)c;Z<-h}A=CI<( z@O0=CoP+XHb=QDnSU?Ioxh0e_q$lbJSu~MsT&&__C1EVsQ*9DCtZd;tV@jCyS0|NDRcv(3Z*XtPhgU#;6ok;MN2Nc#3>-`in{E{eu= zgYYi%V&QWb@yp?dn~h2P>abqlg6>f9!xk@G4Gsl~0l>9PsISd#^jh{5_KF^#gcNwl zhN3pFl&|CL)Ty$WEjNKs?S#|dJ(hgE$?(C0%TLbJEStR_Uni*dg-P;fQyHoz^Awmq z%Z0WGpPzkp_0C(NjP}7u@l9~zqn_9q59R#GxN0w+Gm@Gj@~>NANr$BBQQvXFET0#4 zFiisbt=R*cpn0?G15_q{RA|roW&jKCgJ4<}>H*1(LZV1z(%_%dy*BD5L*4QQBIElc zr8Se=K)Y{+un)7PKPFk+@KLuV#gtGInC^37|I*?e+} zbn81Ma1fEX$)#xJWlP?0&*>mKoM8qN|H<4w$b)84l?(96-3A>?koZV4l7U@{>d<88?H=hl{Iufl7RRlW<=w`dm3K7^WkKaK6I*^dJCx&|5uIs z!LiDyV(au|=aEr@}`QcS&T-+4_Ij zl*3rFYdB&j?0?sUX*(^!U z`j@D{4!+?vTd(ftg>k?Sxby`T?M!(-(?);T-tvR&*Lbz-)zV+TB#qrg2O`!mjjmPX zT5KjyTrua_?nVztOK{Szipm)g#j%nv1R-HUoJ)5fr}wzkxAz^2gc{gYF-f_ZhZl_+ zrvJ`vwt8IRCOdUrGTz_CB%VwE1IBhm8=drBVf!y-tb#HP6U}c+`{GsQ2%Nz`Im3c< zItLwS^EcWLGr0TzTaS2BBw8q^$Eo&L^+^#|*ycJvWuE4~ry1jNu)}j}jp}YCb8+QK zlW`jVDMXo=UK69knVf61<}}KcPHMfrh{sKUGqjF!?U0$6URy`n!+;0}FRPqV)H|+V zmK|%CYX>8N%N~#p$P6bnw7+o+$JxL0`piF=Rr}O4yeyYC9s$qOX|x$M7R|-F9eG=Z zx-}&^z^K<=)fmQ(fpfn_55dd&q;%7Go9x`D#wBOB@P&hiuyU+Q|XQ zj`Amhsc3FKwO%^(AE6Ph9Q%MX>H6tsj34vdr(Yqm*ml-@LPtmg8%7=Zg z-;JSYvI*ozi>S=eYEI6BKSxjrHsPbB?sB8 z{z&-zIm;s;u)*brH-R4L%U~_WNUDR!TPFK%JHf#Ljgb- za&pP(fq`p`z4Mw@UUPvY$Lhj0N!b)?jCFw65O>Uj5F~_RgS)@J__mBfxYG zL!c|LTjYbx`>yVnlxRKo=3|q)hks>XFWJa`ZN5rNUuJh7R$TyX@jIptLy`(?u8g_OZx{h!Ic2M?+*_p_|Hu(-6I*O`BooZp{%9X zbxIo&uh`{V&cKXXd`rQlHSdZfAuzKoYy>Ws(KPc)9 ziI)6rm!g*^%f7uehOTR zm=*j(bu5^(f_u03*)L$u=g%vh-pPQybn=g3>&ZR$EdAfT9$M7CIs#oL1tUHwHv!5z zs*7OmaK@HbZq6DZ>!=DR=(cqQOkPsUZ!ja(t#|RTf;nMUO2no`&-XTXq8i4FSlNmbvTYM~5%&vals4|PCP z9qO1GfC3BpxF}q{NjV3Gd`*YBN5Kl?l5jkfQCz}tW1BQpM^?$h*U@m|Sfh&cx!4kYjF}SED~Z_ zE0@xzv3ycF`7569A2i_q@$v|`(a`jj{QdH8C4UBK^be(&&!?YqH-95J96VRzdRQjE zyube4&;G-AvdMp9iIKe@0Vz%}aGfGE)`TaPuMGXo9IQ@+^GJt^wo|25qIsofN zwnLlpi+YXP8Osmc*7JP>wy#0a$*$dRn#TP|KhC=V|BP;Bge62YjI`ml7{hXd19$^> zq4xf$0Bise+PDbEkqHELjeEN!^^FumHWwaHelSO0bU(O#NK6F6W@p4 z1%+?GRzEFb+EOJV`PVFtAi**ocm*j!1GDiqI-CEf>}M}Oq~1B5^|8s%n?zwc#PWyS z;sQ`6zM`}ggZ)#w*$B{=kt>$kOi}FQd7A`}>;;E8Q{J}(0tX7~bP%7dW69fXlnUo_ z%1O);)fqkb&ht@HgXO}j7Y}N(4C#WilI=!aZGNGB)V|LY#{1L3a1YNhe6}UNC!M=Z z^^Giz9vK^K@Fv#XyJ*>KxxA{a)P!w1Q*iYZ$ahI{atHj!-XCai`$A{)%foYCWJWmA$f-uANk}w)Sz*W%_q$OpXJi znz-%U){`TbnuruS|F%Fx%{)oWphlUvmYHK%+;IsDlO>%w+e%Ot1!baPF=!D9JNylR zO}F5wz$rS}EDMFZqSSl`9SuDpd7s=tR(P{n28)HJaYDdKJqeLEpLXx!uBB(bewxhN z=5zC`{ILnOmn}8K-?cZjp3PQvVPe5POy0jW)jAAO_s5=&VxmfuCr`Q}|6>Ix9TOhN zvF9IfLv)O~5XdX!+cnR!4>hjyz9xJtOnyAb1VFTqw2Dx}Z5!~Bl#>YCUt~SJv4yH6WOS!9U~4k6nvyN>D@7 zVwj|Ab!39Go3_xus*GlWxJW3eOaqwV0MyfTc4%6z7x87j^y(khi`9c>gq|GX+(R@$ z(tUrq#>3SO=?sV7Pm;+!gKPGhc_-<(Mo8I6;JrBegB2Q}Rfs=ZcqcuFDpB@0-iGwrl{i?9Ax z=zbe)U{7XtN1=trgNt_~_imbpKgRu?u)#0;D9|^`@aA#WaAt~rN9&y)kKt2E(>wxP z|8_O{Pu40GUYDHAr6>&d54<>d7yA`-Lt{X%T_4cjiv!)aP8l024-w$s3B*Z(0M?-0 zx$jFzM*8qyEKC1k*+M4g+luV#|S%l$10++J)jD7Ad_r|kD{-0k&jTQX? zn>pTUgn9_|D9Jy6w6m~<1OWqzzCYX3bc%L_O~WU z^?3w{I|>5Ml6RI zF{d=9ord~0ULKXxky+kD2f6wVKG}FmgyG>4Sme%pwc3f@blbP&qHev_b@md-4X_wT z)X_Rhf1yvS%elQ%lS^l2BCLJ)2p}+xAaxJc4|qjECQzYJ$4&`9g`Ht_%~+$BxB1b- z!9^KcxV9P9n&+3nviTJLi%GGu6Yj`kVbk0Fr85&VK>=qQ5_YJG#Ms%#P2{=k4|2u+`Xiv~qcPsrwmDHN92*1S@VtW+y;7@eZ*JB7C-&`d9<*1XYYOJW zIHpaF+3Extms#3mT;~3r&~a{(yCrsq;tR!{f_IT26>V+f0UDMVMU+ItdTE>;#0vT$ zT0Sc{oxHQlp*w+<-nB|j=9H6ShvL+!HB!bOFavw)tUucS8Zgix3HTGtQP1l`wolad zoidDdb6-rADqeptfx2t+XVH+v0Z!p&#uBk}YRlYM4wSesFJeNUPf2CFNI7S&x)9;w zE^KQAL-f1g;F-_*cyo715(l>2WSudwysNM?%37ll?DmFa{o+X(=kaJWNnlIFWTX?b z*izc16l>y3YEj^x^it7+^0hp9%V`rDro*iwXYFy z@9QRjCCl{4AYd}_w6VkQPs=~XjL;Aq&FL6)K|{&Kf|M(m{VnXEL=^|N@F_&h6Jw!&@KSba=XF<|)=k-kjf$F6T?9U?E zEaS2kEVWb`TAqqIo|XpFO}?RPRah>jZxeJl(urMgi+n>9!WpY*hCQWIJK$IZLyv%{ ze>4o`!yZ3qW(LR}Qc3hulE^1a(_d5U!t&|vv;G-;+n%G|s;T1wFyd>cg2~W6xi0fE zYb6xioEMlQrIobmM2HecSR6I{nTyNi5g?%*HJ*j;ty}{kuJWkWlPsDc&{~w+p#aVf zVm@dFp;7zd640I(g6%EMyo0tLu7k1NZfdlwo%NLMFjLbsYO5!vjQd!?7B=-5@ zUH^h-tZNn(6JEjAw#v`ai$X-~c*}ThyyYsYRPrDe-LB+Zk;0?R`_naXXX3O{g{ipX znzg-dR`L03TMi*9x?l)EEoQ;S>Aeb8S5Be29`1;ZW&`W8BM2??mqf&K>EBKI5-rDr zs!>F=Sr%o(FAa8qdi}|cY~NCn7QU=Q?AQZtNp!mQ&|hsw#Cl$M-1dF@79|~44o8uQ7ZGrCsKa6R*mKNi1&r`jqGo5^hOXJDA^Fm`8H9JTbg6gk2|$3resn-@9G5()}R<3vaj)5lS{GqM~#g5hTK zBv_#ACClexs5j}{X8W0g&N||hlh123D967;=p^y(1Qli!7pO^Wrg?D019fh z6@9-R-lqq8f1dNpL1ixrZ`#&R$l5op+JQrUd{4VT(pCQfkrymfw4&0I?Iv>gaprf) zPmR<6j;fS4^AolFBj9NUe;r^K+}g#9R&>Br{E;C=zkY1}!4Zz7gVOwvT@4!bvkt>l z*=K0XT`92Esb*QYzx3oU z9fVVhq1PIy0Fn*(1Y`C=OUx?GkAUsF1s;>JfDlY#pjLpNWO@D564EgtNl^3jK1f0I z{jK^`CY(eqy4$m(XdUQl8+ji>7X;`A&x0+)u(?AN(xgkO$E;1allvS+waGkS97t%RGPA!GSza z?h#=9!gxwT)oYBa$tL0{6X~5t{lj+f&a9_-Le$7S8%hP3CyMG=zE{_psQm~}W%(tS zbeMN*d*m-G)(+$CxYhII#z(+x!gHU_uk^y}802mei;Ks5)1qIXU(F{-wcvI9Kgw%I zo}0!p>&qU=JbxfU3ks*w0PZ2b?Z3JQC)-|y-7AW*aZUX0P@6TdC1h^t{30kHtlmBB ziL{qrAqVF(-BYV#2f&E+jdJ!QDwnR2n{C2y0wdM$Z`Exy>nED=xP z;YVE#{p06!>uB5yduF;cj3eU4H#$gr7j#`VX*p_WGWOzfP#c?95$+`1Gw&0C0G)>nKj_RGCXIhK!%fQyEH9dzOH&5wNq zWbXZiVPn>_4DQfThB}cSh?jI}@7ea@#X3(Q)@Uh^m8Av^cturov7 zlVk6M;jb-ZSgV(Iy=sn}rBD;{yR1HQc>%89A9}57zsK~X79pMPUf)=$`sd9W)y14v zz33oZOoifpmindO*vstL_PH*7a>TK-X|YBN#6x0v;{$=g#69?slN$UuHbTfDiAOq^ zC#`c^FGLV&oz30zn8@p>?acOMO=o{Z32}X_B|`kKJC`$XCl!{n8J==rZm*sCr2iR@ T_iJ8Mtj&4^JWxLkp~e3JSo6U! diff --git a/.github/search.jpg b/.github/search.jpg deleted file mode 100644 index 784bec892550387282d3551e7ed8d830aa0a1cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152135 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 !Xcj4QAvn?KT(Ckvd+4 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ξOnteXMU{a?wV^#j2ou{p@O_e%jDw!OAob)O!FI-O%7H5E6 zcD;W`W7(PB{re+3k6HNF@m}nEDcI9L906Yr8zdVi=i8e&;)KnhBYzXe{K)p@Jz?g( z)++>G38`=V#9|}-jutk_s`f>S+-3**WskC)JuF7;*if}lH%9japRP}rpK15SM*b!* zd(wGpQL>7U*?v0+ee4e+i;I+ub05(^`j_+^>`&ROMa5w<&WG@NfQZNi1;X@bVuYG_ z+oY@I8$v8t%v~+)AEcJ-vteBg-+8($)}{Vu^94jC{(pN{KT4hR?gx7tPJhN8Y&?2` zHF?qQe#Q3I)K};*Xht$DqKU96RwS#`Dc;ma80#}ylH%{gD%ixt+xN`$h(FQjGP7Sg z9sYS#3pdgC^UVk$i$)K$Zv&Heqdt^Jq7ls1n6(EpGA3Wr?^uNO=2DKxeWot+?rQlA zk5sZqkk?+F{^>G*h7uM=?NQ|1^PX4mQjnK7CkG>0IU;Xe@ym*a}ok~9tmHDsW9B<95T#znNXke7Fp6p1O7aIOjeagiNfyuBrEM%K(acpxos1y%oB07Zs@z zT}r3f5X6YxQwV}_)#2Y8nT1ZlZ@TG`t!hcHO9UiD`PUkP7D@^`{b z4Rl4jHDB8G&MiB!K5-o9RYTtk#8?9g;?>;!U~$6bMg@mT71+Xk-yNQI+3NB=x!SBF z^iK9Aud_7au*cd!7yQ3}(-Fri)Tp@xp6bcaUqS&5pk}Qu{mX6@EgK}VbEgh)BQ6ju zka&@&$G6U{ZlL9a*|GWf{rTSIiJ_1>?+mzIWJ7SHYZyp+D@mcc=Yg-jyD3TNL#OS4 zg)F5Na_`dg#y|fk5_}zLeW0AP8F?6Ml%WTYe=zRJoRDD0gL<*B9_2T5Q9<@)hb=t_!G;JkK-?u zL=KzY#!MtnKHz+(rvJt?vokA@LqHeHuJ;xVOd9${r?e{^k3xkJGP z1Ov5JN%k0#d(UsM?=(aPgqf+CsRcT4N0yEiUsI6b!h*_ITvg>H>#|r$*?`z2*@}bi z&iJ#lGkYa9WH>w&1<9CeF_@obw=}+f=)g?}OWbVf9{$8Li0=dll)PM>!TQD!atL{7 zLjP|xV8zr+{b^!#VjS2`VZHpPfrZzc(2L9DoFMpG%NY0KBx7l4vf0e1gBjd$HUu*s z^@(i;j`X%zbLQ^wUuFw*>)VZCXJ|HM>Px@UE#0(R#CrXvcd3;FQD)HT$%^C2#zK)O za5EXsx6d=Cd{552K2Ubli^k4HD$r{QxI&ElD*#$d)R4tI z2!lDd|L*@w3mnM5?r~BY$t3rW7Yh&{6G!>Scmlk zq{OQetHW-*ka2;>&49~e`R~ER+Y0u*6T!vd#lxwB-{88X`pMOSk1{`)m9130%!8zF z+|fex1z!LkqT-*v`X0yj4zEw;?R|S%4~YX_G^P1|I_PW<0qcB}eNd-DqA=R-UdxBi z3TcQ=BW}o{i*Tg!i?&w2wBw}yS9uR*e0@b}?}1JU6GtWzBUf!~1RdIDQ9vs-!@Ju8 z@%be9Hxn-yZ{$f%E?IjwV{FeSSJSvPcS7VqptWY8tFflxnxHK=+W@@*2lv2e6ro<0n5FRl<2^;l$<2`-wc>%Vg$x8{3R?|%Fq zjVD+QAM=ZBt7I88qH8cO?JmBHBWOgm9_Q7UL8n-!^_SSZ4_`O;5*S58t>M}F55bz5 z=)Lpj+_cb+Cc=9%?N4}je2s&mqIg)P=nAA&osMdsF2yE++?TaifMZuv(z*HfH>u_w zkMv=!ZU+{Ld4l(f-qi*aS9K4PMK9`p)7H$e?1~?Ns_u`s25%vkLx}cP@TO?M)bTXD z00SN%!-$eVf)7VPm41&nGc_e7qF=SS?2;QqMk%>>Pxswnhe{cwibTTP%{Z*(!rrCG zLnOdDZpXy20Eo%nF!k1STyvf9`(+I|3g(~r|B1m2O6~fH_b61d#j_42HAcGT?IAds-IV43r>g-S{vvxSg+aVlEXebKsp>MEofxUrqh3=%mB*HlRVM zf8FN^V9=`*MHTLn{H6aPtbK0$4?+KBjQ>ES2DHYcjV85$ZZj$}E~HM<|WqszFMUt?|>L#fQclMG@K?%^@YLFF!pp zyfeyy98?xWHBgDVT%ug)e-e7OP+cTL_7gzQQ*s{%1HUVDR%r5P_AG2DY|J7#;ZJO4 z;CC&=Dc|h@Se<}3>KN=aX|(;iUs1epPQ)!j3m5{4*wL+{0J-|kO)za>IJ;p*lTERF zENWw%?J_|^u`|Sn@`1Z$^H*@{jh2;~!0Sf`ESmoiVsQlX`2}a~iP&Oe2HTdMm#sWN zZGcXmo0)s2GGTQ-Z(AuzS6~7lAuDnSlN#6fe)F7go^V12Goekk*aJXrPGwLTC!f1ar?OHo>4$4x z2ocO7q5n{0hL6lEt2gKUTg95IY~=&^hSZ zxQtU!)ld0nclnmhQ(?=8LS0LIjf5TWkV`8DUgyw6Y=<9VxIkg_C>=X~GlxEaDZn8R z?Ok-QM_Sxp$zC3!KfE6$WUA@Q0ndRPEE?SlL-F)t7*rxyET*nTH22;G%f7{^bg^+( z&sQ^5ud58r2?)(C$S_+6uo+0YR0Xr%H>(+Ahm`_;M`$b(4%6VUIIkn(rKog*o;rFr zGQs%`sST^(+&E)Wv_<$4&3d#PD(6XpTv5O?t-?U|?rf(_#O8cdwsaKrS9!~RVzCT< zbUMcG(xlq4C0_vwpYxhJ)rGIpN4-KgLvQFcek09QdxR@0co&erh{3?l{u*q3thvxy zN(NP{@2X%-2+PkD2P!9_l3rWrlSYID5-hrCN%GJsv9k5`+>}aFWp`~NK#|on3)_wZy2_spgRjWTI)s3a{^49M#D_DUspbJl1KoxC|Ow6|AC*5 zp_oL(Yml^+>{UZ|^`q|MJx<@q4z(a)WgY}4JbKSFY~zUe$spq`5^sb!ZQeMRh^)?iR9eB>r|n_faGS zPwj?co+Sc)S~&J@&Nb6$__aJ014S~dK_yoJBtJ-? zh=T}qAcRH*hhOz6wFfs8rd4H*=;S6@Z)keDs-4??yZV{UP2~VyCU@aH5(adDq=4GI z%r;8rkiLRgrb7Rf!WW(JXiYDEUjyM6YH_jhkfFn0sH{*}JPwT`AQ2(rN4-Y9_T$g9 z7?5y?OjZsz=8IO}F|l}~G`;Dm5p!&K_?-6BF6)Ch#YeC3KanX>-kb`x@1siT9q^=a zf;3?`$pN9P87j^BqGUPkn1QdLR2fWSK}#05x{E=$R-V}#v4ThH?=X#sX5`W zX|{+yA(qpPj2_x(1&d#orDaE;!6+y!L7<`qkgVEHA0$GHlkks7LW_@5Y`7>Wrvs=Z zP@gDMhS=x%`f_{i!Vk;L7d24BAOrX0ZANJHW6=@nc4Wo07nJ|`F%FOt2hyZ4Oq}st%kT> zSCD1W+gC|>?EQ?+K1QdIP5a%(z*itULP1PTxc@0>KpmZVW-faUQ2vihi{;bNSEBRa zkiIj+AHbGW(o|ai%tVhaiyw%yl5=ZIG^@gTyXtsEa!6CJC9EL1@i%hd&5DS@+wnv@KFrMt*>;`035cAG5TJG{Q zz6=tEbA#y&6$?(8IWu7*_HwpfLp{hvm|5prVeacPl^g0lTB9+cy$@TOB|u&!O^+U3 z2GB4pl=|uQ5a72 z@NkBBVZ_E!$wj%Tox-U0mHDv+lbY_`_$J!JtRUCECL^40&w6nSU(L#=tNXq4dpCef zL^6|<)|ojL24-1Z&QX5bG*nAwr;-W1v0#2dA({UR^f!J_DG~JOfg&pg$#QNt=p}Jd zG9FG?JTh=m)+oSO{Hb2o_X*>@#-$H)lc|!ZtW|$>zWQkH;8x+%2z!l+tbt5yb96vz z?hUs0xUOq=$NSk4-igs(ZmSlp)z7$D0gE^G|1iQ4-ZM;yT9AXbf9{eTD)`D<-o_wC zUuEt%embgTplqayLS8cU;bVR`?dPYwlyFq>BZ-n_F63E;BdVYgnznF#1#XOVcoKzK zH|}%vUZG}#DSlm@LzN-#4}*(MnQ>ICY?$$YaG7T@GZ7My+;vs^mNiqZ|4T!H>p{$m zct}WK1+@D1>@#kmR}Vs)P4E<;?nAW*S15FOkfc8l@sSq=e8U4l;aU=WD0~Cx0LOPV-gU|{w>&GL0!`7V z(`YC-U^)o9jk=8(1eK$Z>4ae`L;-60P9g8(cwO`(wMo-^0-d-qYR< zW%B@Pnd}&fPFM}O;1^;TXDHV;hUk*#h6h-4CT+I$J(1p0q3c*g?u%2vTG6f0R&H?SMn z^`vGu(*V2x2)-n?y!_YA`{8ML?{?vdz6J?_7N+xuk6(7M`ls`JPJxD9ZJQva#yM7t$p4z;~0uvsrji%At^A9`t;2%GRvv@L!C zVZ_P>eP)hz*Fe`Ue`am7b13j%2u=SrJD@c;Vtk})rEBj-fIOEuEuqI$*tS2& zz6GmEdxn=RN^GQnqq}u$`lH*w=B;Gv)d1QVD=#5_&aO$v58v1VlHu!vJsepMThX-d z_CUXJ6R(>}2m2~G$@ckCC_D4ndVOIdm zcs1YeMJoz!G3m_vu=X9|u|oxcM`Z4Wm#X%f6s+@i{6RC9xLwCCesD-x?rM zqq6>9elbo?{Gu3#bwl^F;<{+GbZ&LF&{MVJa1$~c$my9Ylz%mrbWB-+Z)YVPDCdUn z726Bguo%t+69MR1^(9rguEcekmxgjuTEB6r`z<|~>#KZ2Stb{Y@I{7q&X}uqk+U23 zo|3#!bU=6fkE4GtL2Ts$I{i$wa+a~RLQy!>fmfl+<3_0X-H`+ZZiyeD5P#&^$Kj-i zRyBy4NhDOqC_VV)t_G;dch;GY4p_#QA)qQWf7}bc8h}96d}p`qYGdLL5ZS-}B)!gY z=rFYzM$KGSy6&IF~Sj5I;5t251Ny>lDvOHYD-3Kb%^LM=O=Qsjg_ zki&1&c=VDgDnK`L`hB>e^KZjusBx?O&U!ho)^3mq;>?hAmFeK1P^-RhymznbU#B>N zV{yT6*(;5}dTtW%1Cg)dtu@F9DY*ljZ)Y5WlP^iivM$2;nuSyY)mYxN7_#RwgQ>-0 zd;y@;h6N+c+T)d3ANU4Vv`VTos|bwK(DeY^^#mY)up34zy)#D=PtOuwHK9N&zZb5> z41+slXb*97Sz7`W1?Zxi6s1~zCOulmbMuhCYyf^y&z-G$?yf=hT=trm8Kr%Jql@}C zY1ckLzhf;RVKB!_KN@aho1^l`WXY*Ish$vCJM1)7EF1b~D6x8>D)Rxj5ib!UXq=z& zAL=%gBLdkUPFj;V1n9vZzBj=eSL%g{f$uX!#kF=S`#7SCZ=Cu7a|N=7?IhNcI8JT# zpWjzrj8py^QxGh4cTjEN_BLRHjtQAeqKkslz6s{u{EyRq%_>0IC(}ppPOfV|d%?Q= z(jxy$@}EpW2cJZa^6{Q}t{OE(7V0v&So3YYwoHDOEWm#tHYNun&MF5$+n_KZ_1R*a za`Y`!mIdH3kV5|YzW{-CCl0U7L+wO+E16o_P4pQ7BzOdpPS943laj`?h$en?+bhIt z2T71L$iU<{&1mXl7|}%cF3e8Ly5CR@uBfrIHvCLz@-)i^&}OEV#>$;dsYIFZX-KxJ zF5&Lr;$XjxuP$Y*I?$wy8uszo{}~VP5}^!%8hu^+vN-F;zzoacs)PRV*rpSQUFU_- z7Qe5QXZb4*$}b&4CQ27YaDCY1HxQ!HnBwxeVn+0B zd!i3S7_p0higBMAD^_J&XCQ}9y?|wI&|xztx0k(*&87^pZ{woIw8X1E+AYL**%3(X z@5ji_h21L?Br4`*Bit5G@SEn+?NI*+&7maDjI0|ZM;s__VH};A=B7SDSyUh&WzHSY zEXWIT0R{F(rRZVey0e$I-EA5Rh&r@J(lQj=jObLq9qacA^}~ z%~K^bHY$h^ZxcPD#521QiBQ{9!s3?5`Q@@%Q)!@XT5G1G4+ZdxBG|>n=csHg~ zI4jf9>7HgrhsuY|&#|q7<%BLd<$wi$EenR0qldzvHki%bYUnUjVbDaJ#^^|#+ttws zHZGcq-Qbi!gxmOKrcML6U?(jVj7Z2eBh~)uN`eyshI|%8{Zz$}Ff%UK1At|LnKk_l zI{462l^Wj(9YdQ(U0D%L41-I8jkcm+^+ddLSq6pUDNL^eB@Uv_ z4zER+Re;thr-qlM0g!!|RXhOz*eVcv(-V_D5W*q^+M1}5zgPo=qWcr9q`gZNmCWZo zc-dv5GR_Jz%Q=A>5r)pPSWm+;OuetnmXxc@Rx^M;AMMxl{5HL%J)@*Krw!gSM zHJ+n?1M2jm>m421#{J`s*tF*GSX4jAnATGf6XQS#UJq`ydDY4DF9gtnEHU1>H!{@#HJ5UCxfJ?46Mlm zskhR2nlCLc#`iPdOoe@V*Z`agH>u#~X;ZwFV&vU4>4KO-6R6nemyh*>@i zJq;=yMn->VY4_A9<(_XMW|Vc4PZS2sk~H5%AmYpB)s`B_bWu)LY@vWu$|=NO;%T8D zuk&2y$o)<~<7WQJfqQ?mqefvMh|5?2V%kab1^xv_&&BgCZ+@kB9F^u^J@TA{0i1p6 zz1CcxeT()ikQZ^e4P-XWZQ|_J^=Fz$3+jniBxYpNu_(3N&T8`hN$_n~^=CnKcWEGv ziT)Npj2bhH?9C#uOk*a+pRDE~Y-Nl8C{qg+lV--yfMi`~85b`m`AoL=V4oO`3;g~1 zrqmkf0(6TuxbLK*Rj`tGwnWYPXWEaW7ZK zefOq;)Jn7JY}s!rkEh;|qF?EroVJI+Pnbu%4ADjDq;FL6Qcn}6FViV=I0nu5L_|^3 zT0hkpdptd`d}H7xC(xoN@&h7jCa-n7nE`At+b_}0@d<2vC&Qy}+C$l>*klf(SaHu^ zw`RUue=~mtWA3I0Lf{4}o79_k)_SJ<+j8X-P;D2K||RNZ$FL3*?>>Q z#>sa6S|-cEIH8u)MCNKmoth4jNBGUB{=(k=)#zUqcxX5b58vjXT;E} zB46;7solKKZ}j3j8LyA>5^RjJo-s~(Fk{`RVsl85D+0n4R5NpI-;d5mnhhVS_T~kl zjbS8$g-fS}i|+ZL9f`&$ar=fK+hKPVYh%?{>K#O;!LKJsP+iBz*GOyu!dUUiqEvu_ z(>nk{(L?SZbqgl%&qZ|N`?CJJ1bbNRoMnylhm3p3{D8x2S zxM6QVb{iH>lOE2M^gSLXPU8?bL0 zP+D=&=Tom$6#yJ(0LxS|>jQ~p@?ca9M{>KucQDoy0HTz*tmh#wm^eeWxSodG!CPk= z3J^KwILPRLK7u}qj6nsSNyvn56&XeoB3@{G@R&|KgnMxUvQ6?1#P+6DFtZh!%$*gK z4kX)vOe?8|7dcpeXPNwBCCg)^b>)O7L1N*t@STh1P?Njkh(`NB@V5vsv(Hc8z}4yn zU?2~iJpG{L5vU2nWZKaPF2RoQp6KWk(H`EGMXe8NS^8`U{XDq)`(B}6J1YGke~|KF zTS<~IDFr9SYbE(KYE-i0GT!gTqe6{BdzTY4Wh$XZ$h!YLzEYtN8ZFJ|??%b@l0|;s z=+EBE0!AvkNtBbyM`t-8 z?({^xJfs;S;(_i}zzUu{-s)kWC3FQ3yk$+@d0Dv@c|Dw?F_e>V??%en!f%JU8o2ge+ z>P{|)F*_=B#^>PfK$CcYaXRzkm~u8*dCGJL;tTPG>)5gv59MZX@v0=F18wrIxXGRr z0qz!xSFZQnKDsRk)+`Ru1V^bq({)YydekF@W4&SPjeF&kX$hhr>&q8 zSVO`Qk}mEGM;BPLJydIE!|bOq5qkVC(;M`cuF?mGhqJ{zWfev~AxIaB41dSD9bVEd z~nP@;Qf-{4b9Ff?qk?v@_g-)eyQhC;ohZf^W{FaI zw}c<&7N$VntXOY9rqsar+=@IXiTK}B}jhUs%1R~klF z0NyTMG6`C?gC2l#RBWM+LRk)}YQ##hcVzzGcJ;B#D1^6?AZ>PFY8B4F0i7SeDBxf& zz%S>LR8D7I0?8RyDv{O&+K(Th^>0AJCIeaZa{~zHChUecLHW>T=q73eUcK>2d2@*n zU7!tQT{Lo-5N6K9X}^Ka?20~sZIWCP$$sM&$w=~M>EFeUjq4P4FnPilNr_E}jc(tR z@}jo<@j=X~(uTe!FJ&6hvYw2423`Q$Wiv96H9F|uSqb<0A}Fv(%-Z<24vmI@;)L;} z+7MdV?>>LuR>v1*;wdAj%D@G_NQ3K4m?(&~fIe6sTl>PM#w<5B2~D&B(u*V;A!9l(Ve z)!UNwWf%SGeacJatnGjGprDMyqo1vENKq*hPaLS4!#h+%fm`Z#TC@|C>Lkj=cr@8p z6oo^WEC){7hv0@P@yHg4r*DWHNL8qJE`6d#!*l4zCga;XqzgkAK$AH^kg2eaR?n8M zkBlcvD}t>|=X#6Q!I>RFeaH$)k=6u(Hu=dZ+3I@4}-q; zcpi!uF*SlK;1s)&wNztqS3wV){5}5zi#CA=2(J`R8uSolZSy}!$K48+QSG<0aMt7> zz4%D4i8og=a4WJQuJW;0>wEUG|9=SEfSu;QZC_IACb3IOXNqSIu)^fJepdbSA41C4 zFUQ1}&$2z1l?On+dguSyVt}vA{QLU9P3Y=b_2Xxq4cfUz*exy3gWS|hDjv_=#pm6x z1GkueK7EaTVcY{uL7lu-8rOX!Q}zZvR0fuxlv(E#QB+yHZd;w>$RDB2|2GShYGPwMoFn_#teUZf)BYzLTTVMH==;yzKR4E4HLtxRR=t<`b_b0j5zNV<{~@H~UL7^- zJlLNT-br%fd=N#vZ>2RtLiWXpVBA7dTRl|K1 zj_QpzMu0`8)sjWrPX`~+z-@V3NxX^NvwTJYs6U9K;t)tZ=Ga_A?t3gYKMik6wC22v zCZ0C0GgzNr(EC-3!`cp-Da&zs#@t^>$#(IbVVh|`6jp;Omk6T}OD~1y%a93jsHYZb zW!)rGy%kuGlMQto%X9v!Z?84D&S=r583mK!F?wv zqh^iLCm@hRQ(!rbEzc@=NYA4kjkY^G@Pd81hh*B}Dbg!-ul zJFpWObp3qR#m3dJN_CGZDrdc=TT6btet3>yx36;YhRH{D%YZjU8IF3aD+Xh$4@t}x zG(W%hl#KK;a46c0o|mjwr&C?T|AQX+=B*NA$6Vr~c>#k$WZ!*VpbOTVso=vaxeY7N zBJ@N~1iYW-r+r8`J%fWnc_5~u);4|x71j^+%?mE?p(Ptny^pEpMcWU=S;kYvT##r7(IQOD* zW3rTlLx`iSZ*9uBQe`8j9H?eyN)~~sa8=I_I%|%G zpCT0QNFscd9F@_e&ogT0V|`}CMC+>c7leEYpcZvF-dYyXdyRO-zO;e#W|7Et6-jb8 zVk}P~tg9=XRvm-yIfXHXqL7>M>`SHlB>FiFilE1kglhH!dBPv61b23%;1ePZ*(6gvlS3|J5-uQCx$e*%ohh6 zkdDm|rE$AOC%^dP1QcY7t)jMCkI`K%qDme=+mK+-;UX7jdGZ*Q!f+7#6jWbhT|_pu zQE_;9BM?}s!RTyJ&)FYsUvTtZD(!BGDze_#<&54S_SZW8SR)HmK4n1A$8wLuYR02eCli9O}6pn@w{9 zSE!(9==?I#du%?|O@w9}01Ti|XT^P-CGgab>Nj(%C;7DV3;a>>xT;e z4+aW|emUh9^6_ij+B>`r1>fSW?A;6+kWXe8PjgsD4hx9ZznsKZr{|r0#s1adlkg*; z!c|)`<}5b%i?liW@M_|8xUZ>Hm3A<~;VZ<&40i|}2}EO{Vl2};kIT!uPPjc4+CeI# zZ9YxfL`rkWu!KK)NGVz!S-o8dPHnbUcfL!!v&{(6GRHFG<>bR~M{3TKV`Pxbvgq{Z zwoS>jAo3A?vZBmvEi8YGv10pZeWMjd;_qe%|hdK z>BXOSQ6mdd#_I@+tG~H6zW#@xZ81}K1oeYkVGfy3KVg=~MXR%%u@H2b>-S!Srgik` zH*v$t9|DXyx?WRApNhI6VqjKSt8zLFNONd#up{iVg7=MQ1+wJ~-CyfK#8vXBtNg<5 z4PFllPZxF!_5Jk3Y$Z)nD0Wn)7GeK|(j`pb=_B=mRBNoSnbL^^=jNc^q*%73DE(Ky zbsY{e8qY5ysWGS2SOmm5uAJDjoz@LQx*vn&z9AbU8Mwds2t;yUz8HT;)T^W3>%56x zuurKn#)U6FM6G;^946RR&9d{Ho&ySjf{*ng`a&pHsbg4UW>j`Al@D1Z&l*L)ubLYh zW?KG-AdGSOztTIU5g+4!M~A!BvZ z%i2H4y5{R9@>?U(*QlNpMUz#Um_H8GjG5s6IeLa~BGzjBP!UrNc*f%{5F2l!DIQrm z_^xJ$PL60(Q?$`LkQ5nfcdqdtLUhZ>@jTC7A|3Su zkKMNP2SB|e8p`eN)TCfNBuZ%9%{i+bg3_3cpuB`koOGt7s(OBwxT$Q+Yad z6M8y`q)Ol=)^c_KAyoef`vFwp8n~z3BBMR=U;P}Eo}d^&LuDU+!t4E{r<6! zP)l$VI?OhTZ2|{fc0AJtDE=HpZnu*7d84q-GBn?9yFrjwcNC89N4wI5-r$(x<%Y$P z_4j2~wp%~ul(Yn>5aegcOxk=VC21+f*;*DK8MB#9MIwy)yJs3+ zH>Ncswf1;LX{ma2CWVNb`CO7-NG_=_?yz(JNp~FkdzY)}**YMoIc^#M3FBP9e?HiF z#!&Qq+vy13H~mxQ*792OuGfT54XAs8nYRO-hn=2{`jnA zdsO0aTJTPnEBxvUY@ZyprT;_LliFKEpp54y%b28$=1PDW^AM|#nd0b6@C%Ni}QyNXSSk9A-rMWg&a&9y{M=gVbS&)4V8Fii3**;(FM&KVWql(yABHODbE zupqK^;Pcw&x}Wt{RvJeYpBHzH>OgP2Uy5)Tv9q7pMYZ##?n(ZZ*8YcZ8a$eUXG6M= z`g;8B6XCff^{+Rw2L95T*MH0(r7FrxA3O}SB-AOof)=^f6Vxe=n~hxz(^np2Nv_5P zU!O~#|IoFq-B}ItK%&wjlN|0L9CIfbq#n04y$_#f*lT&!*D983(?zPgR?{n+#N0w} zVY)v1y~l2^#nIzG1Y;#Msnw^akEh*kriV0~$PLw3U%ucKWY?YqBM*i6>VLAF8`8Xt zLtGS&eK+r>^f!STS7T!>!l??@fF`p7pRYEFiJ>=WZ~px}4^_aeo?CJ!q+3j6#CRKt z9h%p06d`)OgeYTheT`5R?3(g=n0`T(i*fqfmuKtppK@Q0SxJTs|3g^RX8Z~@pRbII zWs_x7?dbmeh?JN@eF03dgQrP8?-vVNJw)6+AGH3K=nXh~oN`+a`gHw&X0re9gFHnf zC;uTlw%oi6ECCyMQVVnwT2w4$=0|J(uC{Q6(450(&IR9$J{ezWD`rSgxw<`bcKk&e zdeycTGiKEyV5Vth`}@f}#h6J*wjA}g_j>~tQ`V6}|MJ~S*3+zl_2%np`k&bg(g`}Z z@r&!xA66bujZ%wh>y>;CgMO5g%8L~{ffqb#W!tqD?ZS^jRAlI8yp4?3WUpSgPr{`I z5ju;tLJ`U0FY0yD-5Wt%CB874ecye2}T=+ymt>rywb>mVdNunj|=%DR3icPTHEU zkMNqvH~qP^Y?4R8VR&zCk5x?FhlOfKQes-TIJM+?{crpma0NL@ z!*_fG2SUARx9U=bsnA z)L0*oN;3@n$=2G}h_3xpG>jd)Si;~d{F60D3S-^L*hkrJvrXI&0ah5e>}pl6Sjf9E zzl}NH3kCm&@Ri`&SXtvlUK>d~MjNC^`puXg#9)q6y)?dZd?E z5ttnJf)WtC5+0A59kfjoa@s@2JA_cEv(4h6$7;fE1{LGpAWk$)`MY&spcgk7xL}00O zwsBtt5O^xhS_v;3n154@RR>QUzQ<%;Fpo~~+UIQmYHigP><~2P$U8hm*)rloSK7A^ zbKlp;<>`}CD6MasheNxtjO_l}zNd#P$F$Rr&dpZ*Ujax2xBGgle9yc=M3#EggVNFQ zHl+Qmh_^JKWC^Cn+$;A7^DiT8sXJ2-*5PE=5{iA){3AniS}LVG?29scrIe72xLYP` zDZbD47_r6FxPU$=P4GNJZEHoYLm}{5!B7BOtDW~%`uZX%3=A$;U@kb~1IYAQ{_>L_s5xDh%%=ejH z-TtiyEkhwo(^UX{9|+~GYB$PYei})KDRBaPSR3Vg5~0)c4A(grtviQ6$@jLtkiiD7 zirC~!sHff_%~4mfG5D9nD7H?x&lgCQw5lSPd3xtOT>xJ54>S;Tzwo?@2vJqmy@iJS zU(c+~WfRtYS=iVXrjRJy|-|F};8AskXU|DbI2>aOq`NU$?98w=n zyT$IqS?<7et}Xe(_T#&eEWFl7U^zek00VwzvWg3$45xBmoLJPoED^7AZl))sZn2B7 z$3rat0RI3UR&X4JFJ|l89FZ_)?SNX*x3fp-1i=@24Zg|@1Ek{ zEYHCI0J|s~$$MwGr^yAC@6TcA@aOvov8*^%?%>Zpl@w7zbYUW*+DCfh{uB?XG@xh^!~fdcmDvxN*Vxk zO2Mb%be{(!@{hIbveoR@#BWE2oqSJY`w*LG3h+{XP%c&nqHpL}!2#895!+Hb zcekO7fv~~kJ(^!*ynB3#IBjhD(fxOr@BaXZ6uo;d<};(oOs_?%z`r-Mzh*5kM@dWr zuetC>C?muA>4y^Il);g;x;^^)?)FAcXpNs$PW;~ZK5&O*W%h~L^jx^@GGy;=uYR8U zIdlDflW%NjGZtm|^pO!(JT1flEwz5{_+f_ Date: Wed, 29 Mar 2023 10:12:10 +0700 Subject: [PATCH 377/888] fixed streamsb --- .../main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cac31328..993ef156 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -134,7 +134,7 @@ open class StreamSB : ExtractorApi() { it.value.replace(Regex("(embed-|/e/)"), "") }.first() // val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" - val master = "$mainUrl/sources15/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" + val master = "$mainUrl/sources16/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" val headers = mapOf( "watchsb" to "sbstream", ) From 7317278f57ead97ddc643dc8e95edf647c24d66f Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 29 Mar 2023 14:14:59 +0200 Subject: [PATCH 378/888] Translated using Weblate (Macedonian) Currently translated at 97.7% (596 of 610 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Romanian) Currently translated at 71.4% (436 of 610 strings) Translated using Weblate (Dutch) Currently translated at 90.1% (550 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Italian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Hungarian) Currently translated at 83.9% (512 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 99.6% (608 of 610 strings) Translated using Weblate (Italian) Currently translated at 99.6% (608 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Update translation files Updated by "Remove blank strings" hook in Weblate. Translated using Weblate (Hungarian) Currently translated at 60.9% (372 of 610 strings) Co-authored-by: Alexandru Co-authored-by: Alexthegib Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Clxff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: FastAct Co-authored-by: Fjuro Co-authored-by: Hosted Weblate Co-authored-by: Massimo Pissarello Co-authored-by: Milo Ivir Co-authored-by: Rex_sa Co-authored-by: ZsoltiHUB Co-authored-by: gallegonovato Co-authored-by: stojkovskistefan Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/en/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/mk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ro/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 6 +- app/src/main/res/values-cs/strings.xml | 11 +- app/src/main/res/values-es/strings.xml | 8 +- app/src/main/res/values-hr/strings.xml | 11 +- app/src/main/res/values-hu/strings.xml | 230 +++++++++++++++++- app/src/main/res/values-in/strings.xml | 11 +- app/src/main/res/values-it/strings.xml | 19 +- app/src/main/res/values-mk/strings.xml | 324 ++++++++++++++++++++++++- app/src/main/res/values-nl/strings.xml | 188 ++++++++++++-- app/src/main/res/values-pl/strings.xml | 21 +- app/src/main/res/values-pt/strings.xml | 8 +- app/src/main/res/values-ro/strings.xml | 9 +- app/src/main/res/values-uk/strings.xml | 8 +- app/src/main/res/values/strings.xml | 4 +- 14 files changed, 760 insertions(+), 98 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2a356812..d7fecfd1 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,4 +1,4 @@ - + ملصق @@ -284,7 +284,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. عام زر العشوائي - يظهر الزر على الصفحة الرئيسية والذي يمكنه اختيار فيلم عشوائي أو مسلسل تلفزيوني من الصفحة الرئيسية + إظهار زر العشوائي على الصفحة الرئيسية لغات المزود واجهة التطبيق المحتوى المفضل @@ -561,4 +561,4 @@ باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. وكيل 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 1501a5d9..1dc2ebce 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,6 +1,5 @@ - - - + + %s Ep %d @@ -267,7 +266,7 @@ Jakékoli právní otázky týkající se obsahu této aplikace je třeba řešit se samotnými hostiteli a poskytovateli souborů, protože s nimi nejsme nijak spojeni. V případě porušení autorských práv se obraťte přímo na odpovědné strany nebo na webové stránky, na kterých se streamování odehrává. Aplikace je určena výhradně pro vzdělávací a osobní účely. CloudStream 3 v aplikaci nehostuje žádný obsah a nemá žádnou kontrolu nad tím, jaká média jsou v aplikaci umístěna nebo odstraněna. CloudStream 3 funguje jako jakýkoli jiný vyhledávač, například Google. Služba CloudStream 3 nehostuje, nenahrává ani nespravuje žádná videa, filmy ani obsah. Pouze vyhledává, agreguje a zobrazuje odkazy v pohodlném, uživatelsky přívětivém rozhraní. Pouze shromažďuje webové stránky třetích stran, které jsou veřejně přístupné prostřednictvím jakéhokoli běžného webového prohlížeče. Je odpovědností uživatele, aby se vyvaroval jakýchkoli akcí, které by mohly porušovat zákony platné v jeho lokalitě. Použijte CloudStream 3 na vlastní nebezpečí. Obecné Náhodné tlačítko - Zobrazit na domovské stránce tlačítko, kterým lze vybrat náhodný film nebo seriál z domovské stránky + Zobrazit na domovské stránce náhodné tlačítko Jazyk poskytovatelů Rozložení aplikace Preferovaná média @@ -552,6 +551,6 @@ Nepodařilo se připojit ke GitHubu, povolování proxy jsdelivr. Upřednostněná kvalita sledování (mobilní data) Vrátit zpět - Pomocí jsdelivr lze obejít blokování GitHubu. Může dojít ke zpoždění aktualizací o několik dní. + 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-es/strings.xml b/app/src/main/res/values-es/strings.xml index 06c20aa5..289de2a1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,4 +1,4 @@ - + Extensiones Descargue la lista de sitios que quiera utilizar @@ -306,7 +306,7 @@ Aspecto Características Botón de Al azar - Muestra un botón de reproducción \"al azar\" en la página de inicio para poelículas y series + Mostrar el botón aleatorio en la página de inicio cuenta Cerrar sesión Cambiar cuenta @@ -525,8 +525,8 @@ ¡Episodio %d publicado! Proxy raw.githubusercontent.com No se ha podido acceder a GitHub, activando el proxy jsdelivr. - Con jsdelivr, se puede omitir el bloqueo de GitHub. Puede retrasar las actualizaciones unos días. + Omite el bloqueo de GitHub mediante jsdelivr, lo que puede provocar 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-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index b4931377..e38a6225 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,6 +1,5 @@ - - - + + %d %s | %s %s • %s @@ -300,7 +299,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Općenito Random gumb - Prikazuje gumb na početnoj stranici koji može odabrati nasumični film ili TV seriju s početne stranice + Prikaži gumb za slučajni odabir reprodukcija na početnoj stranici Jezici pružatelja usluga Izgled aplikacije Preferirani mediji @@ -553,6 +552,6 @@ ISP zaobilaznice raw.githubusercontent.com Proxy Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. - Koristeći jsdelivr, GitHub blokiranje se može zaobići. Može odgoditi ažuriranja za nekoliko dana. + Zaobilazi GitHub blokiranje koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) - + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 1389dff0..396c514b 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,4 +1,4 @@ - + Stáblista: %s %dn %dó%dp @@ -101,11 +101,11 @@ Körvonal szín Háttér szín Ablak szín - Edge típus + Él típusa Betűtípus Keresés típusok szerint Keresés szolgáltatók szerint - %d Banán a fejlesztőknek + %d Banán adva a fejlesztőknek Nyelvek letöltése Tartsa lenyomva az alapértelmezett érték visszaállításához Betűtípusok importálása %s @@ -269,10 +269,230 @@ Forrás Bevezető intro átugrása Ne mutasd újra - Az %d epizód ekkor jelenik meg: + A(z) %d epizód ekkor jelenik meg: Szüneteltetve Elvetve Minőségi jelzés Szinkroncímke Alcímke - + Műveletek + Random gomb + DNS HTTPS-en keresztül + Böngésző + Android TV + kézmozdulatok + frissítés kihagyása + Alkalmazásfrissítések + Szolgáltatók + Funkciók + Előnyben részesített videóminőség (mobilinternet) + Videolejátszó cím max karakterek + Nem sikerült elérni a GitHubot, a jsdelivr proxy engedélyezése. + Bővítmények + Általános + Felirat kódolása + Elsődleges szín + Alkalmazástéma + Szolgáltató teszt + Sikertelen + Problémákat okoz, ha túl magasra van állítva az alacsony tárhellyel rendelkező eszközökön, például az Android TV-n. + Korhatáros tartalmak engedélyezése a támogatott szolgáltatóknál + Elrendezés + raw.githubusercontent.com Proxy + A lejátszó funkciói + Előnyben részesített videóminőség (WiFi-n) + Hasznos az internetszolgáltató blokkjainak megkerüléséhez + Elrendezés + Sikerült + NGINX szerver URL-címe + Szinkronizált/feliratozott animék megjelenítése + Alapértelmezettek + Megjelenít egy gombot a Kezdőlapon, amely egy véletlenszerű filmet vagy TV sorozatot választ a Kezdőlapról + Letöltési útvonal + Gyorsítótár + Szolgáltatók nyelvei + Napló + Könyvtár + internetszolgáltató-kikerülések + Videó buffer méret + Videó buffer hossza + Videolejátszó felbontása + Videó gyorsítótár a lemezen + Biztonsági mentés + Feliratok + Előnyben részesített média + Hivatkozások + Videó és kép gyorsítótár törlése + A jsdelivr használatával a GitHub blokkolása megkerülhető. Néhány nappal késleltetheti a frissítéseket. + Összeomlást okoz, ha túl magasra van állítva a kevés memóriával rendelkező eszközökön, például az Android TV-n. + Betöltés az internetről + Videósávok + Alkalmazás újraindításkor + Az összes bővítményt kikapcsoltuk egy összeomlás miatt, hogy segítsünk megtalálni a problémát okozót. + Szerzők + Támogatott + Alkalmazásfrissítés letöltése… + Frissítve (újabbtól a régebbihez) + Úgy tűnik, a könyvtárad üres :( +\nJelentkezz be egy könyvtár fiókba, vagy adj hozzá műsorokat a helyi könyvtárodhoz + Úgy tűnik, ez a lista üres, próbálj meg egy másikra váltani + Max + 4K + SDR + Fiók létrehozása + pelda.com + Feliratok szinkronizálása + Alkalmazásfrissítés telepítése… + Túl sok szöveg. Nem lehet a vágólapra menteni. + bővítmény + Nincs felirat késleltetés + Leírás + Frissítés + /\?\? + Árnyék + Filmelőzetes + Mit szeretnél látni + Minden %s már letöltött + Először telepítse a bővítményt + Webböngésző + Kinézet + Alkalmazás elrendezés + Szinkronizálás + Nem sikerült bejelentkezni a következőként: %s + Min + 1000 ms + Ajánlott + + Érvénytelen adatok + Link a streamhez + Nem sikerült betölteni: %s + Elkezdődött a(z) %d %s letöltése… + Töltse le az összes bővítményt ebből a tárolóból\? + Biztonságos mód bekapcsolva + Méret + MPV + Alkalmazás nem található + PackageInstaller + Rendezés e szerint: + Feliratkozott a következőre: %s + MenőWeboldalam + DVD + %d plugin frissítve + Értékelés: %s + Előzmények törlése + Nem + Feliratkozva + Használd ezt, ha a feliratok %d ms-sel korábban jelennek meg. + Lejátszó + Felbontás és cím + Előnyben részesített videolejátszó + Értékelés (alacsonyabbtól a magasabbig) + Felirat késleltetése + Blu-ray + Érvénytelen azonosító + Videók megtekintése ezeken a nyelveken + Előző + %d%s letöltve + Batch letöltés + bővítmények + Legacy + Értékelés (magasabbtól az alacsonyig) + Feliratkozott műsorok frissítése + Megjelent a(z) %d epizód! + SD + Nyelvkód (hu) + /%d + Emelt + HD + HLS lejátszási lista + VLC + Nem sikerült telepíteni az alkalmazás új verzióját + %s hitelesítve + Körvonal + Betöltés fájlból + HDR + Az alkalmazás megjelenésének módosítása, hogy az megfeleljen az eszközödnek + Összeomlás jelentése + Nyilvános lista + Állapot + Összefoglaló + %d / 10 + Megnyitás a következővel + Minden felirat nagybetűs + Intro + Leiratkozott a következőről: %s + Bloat eltávolítása a feliratokról + Szűrés előnyben részesített médianyelv szerint + Biztos vagy benne, hogy ki akarsz lépni\? + Rendezés + Visszaállít + Érvénytelen URL + Zárt feliratok eltávolítása a feliratokból + 18+ + Ez az összes tároló bővítményt is törli + A CloudStream alapértelmezés szerint nem telepített webhelyeket. A webhelyeket a tárolókból kell telepítenie. +\n +\nA Sky UK Limited agyatlan DMCA letiltása miatt 🤮 nem tudjuk az alkalmazásban linkelni az adattár oldalát. +\n +\nCsatlakozz a Discordunkhoz vagy keress online. + Verzió + Megjelölés megtekintettként + Eltávolítás a megnézettek közül + Web + Következő + UHD + Felbontás + Újraindítás + Stop + Nincs letöltve: %d + Hiba + Webhely eltávolítása + hello@vilag.com + Töltse le a használni kívánt webhelyek listáját + Közösségi tárolók megtekintése + %s (Letiltva) + Hangsávok + Összeomlási információk megtekintése + Belső lejátszó + Minden nyelv + %s hozzáadva + Bővítmény törölve + Nyelv + Fiók + Extrák + Tároló törlése + %d letiltva + Igen + Az alkalmazás kilépéskor frissül + Betűrendben (A-tól a Z-ig) + Frissítve (régebbitől az újabbig) + jelszó123 + AzÉnMenőFelhasználónevem + 127.0.0.1 + Fiókváltás + Fiók hozzáadása + Árvíztűrő tükörfúrógép + Letöltött fájl + Támogató + Háttér + Forrás + Lepj meg + Hamarosan… + Kész + Bővítmények + Tároló hozzáadása + Tároló neve + Tárhely URL címe + Bővítmény betöltve + Bővítmény letöltve + Közreműködők + Betűrendben (Z-től az A-ig) + Könyvtár kiválasztása + Biztonságos módú fájl található! +\nNem tölt be semmilyen kiterjesztést indításkor, amíg a fájl el nem lesz távolítva. + Normál + %s betöltve + Beállítás kihagyása + HQ + %d letöltve + \ 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 02234c49..e6da6195 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,6 +1,5 @@ - - - + + %s Ep %d Pemeran: %s @@ -265,7 +264,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Umum Tombol Acak - Tampilkan tombol di halaman utama yang dapat memilih seri film atau TV acak dari halaman utama + Tampilkan tombol acak di Beranda Bahasa provider Tata Letak Aplikasi Media yang lebih diinginkan @@ -549,8 +548,8 @@ Episode %d telah rilis! raw.githubusercontent.com Proksi Gagal mencapai GitHub, mengaktifkan proksi jsdelivr. - Mengunakan jsdelivers, bisa melewati pemblokiran GitHub. Mungkin dapat menyebabkan pembaruan tertunda dalam beberapa hari. + Bisa melewati pemblokiran GitHub mengunakan jsdelivers. Mungkin dapat menyebabkan tertunda dalam beberapa hari. Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - + \ 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 eca60da1..52a354c7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,6 +1,5 @@ - - - + + %s Ep %d Cast: %s @@ -128,16 +127,16 @@ Modalità Eigengravy Aggiungi opzione velocità nel player Scorri per mandare avanti/indietro - Scorri a sinistra o a destra per controllare il tempo del video + Scorri da un lato all\'altro per controllare la tua posizione in un video Scorri per cambiare le impostazioni - Passa il dito sul lato sinistro o destro per cambiare la luminosità o il volume + Scorri verso l\'alto o verso il basso sul lato sinistro o destro per modificare la luminosità o il volume Riproduci automaticamente l\'episodio successivo Avvia l\'episodio successivo al termine di quello in corso Doppio tocco per andare avanti/indietro Doppio tocco per mettere in pausa Tocca due volte il lato destro o sinistro dello schermo per mandare avanti o indietro il video - Tocca due volte il centro dello schermo per mettere in pausa il video - Player seek + Tocca due volte al centro per mettere in pausa + Intervallo di ricerca lettore (secondi) Utilizzare la luminosità del sistema Utilizzare la luminosità del sistema al posto di una sovrapposizione scura @@ -163,7 +162,7 @@ Nascondi la qualità video selezionata dai risultati di ricerca Aggiorna automaticamente i plugin Mostra gli aggiornamenti dell\'app - Cerca automaticamente nuovi aggiornamenti all\'avvio + Cerca automaticamente nuovi aggiornamenti dopo aver avviato l\'app. Aggiorna alle prerelease Cerca per aggiornamenti alle prerelease invice di cercare solo le release complete GitHub @@ -546,10 +545,10 @@ 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. + Ignora il blocco di GitHub utilizzando jsdelivr, può causare il ritardo degli aggiornamenti di alcuni giorni. Baypass ISP Ripristina Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - + \ No newline at end of file diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 811a09c5..29fd4be8 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,6 +1,5 @@ - - - + + Брзина (%.2fx) Оценето: %.1f @@ -95,9 +94,9 @@ Режим на Eigengravy Додава можност за брзина на снимка во плеерот Повлечете за да барате - Повлечете лево или десно за да го контролирате времето во видеоплеерот + Повлечете од страна на страна за да ја контролирате вашата позиција во видеото Повлечете за да ги промените поставките - Повлечете на левата или десната страна за да ја промените осветленоста или јачината на звукот + Лизгајте нагоре или надолу на левата или десната страна за да ја промените осветленоста или јачината на звукот Допрете двапати за да барате Допрете двапати на десната или левата страна за да барате напред или назад Користете ја осветленоста на системот @@ -110,7 +109,7 @@ Не испраќа податоци Прикажи епизода за полнење за аниме Прикажи ажурирања на апликации - Автоматски пребарувајте нови ажурирања на вклучување на апликацијата + Автоматски пребарувајте нови ажурирања откако ќе ја стартувате апликацијата. Ажурирање на пред официјални верзии Пребарајте пред официјални верзии наместо ажурирања на само официјални верзии Github @@ -179,7 +178,7 @@ Прескокни ОП Не прикажувај повторно Ажурирај - Префериран квалитет на гледање + Префериран квалитет на гледање (WiFi) DNS преку HTTPS Корисно за заобиколување на блоковите на интернет провајдерите Патека на превземање @@ -199,8 +198,8 @@ Тема на апликацијата %s %s Корисничко име - Одјавување - Логирај Се + Одјави се + Најавете се Промени корисничка сметка Додади корисничка сметка @@ -214,4 +213,309 @@ Сенка Подигнат Историја - + Голема буква на сите преводи + Автоматски инсталирајте ги сите сè уште неинсталирани приклучоци од додадените складишта. + %d-%d + %d %s + Пренос во живо + NSFW + Други + Отстранете ја страницата + password123 + Јазичен код (мк) + Одложување на титловите + Вчитан %s + Извор + Случајно + Грешка + Прикажи складишта на заедницата + Прескокнете го ова ажурирање + Групно преземање + Позадина + Документарни филмови + Следно + URL на серверот NGINX + Стоп + Подознака + Изглед на емулатор + Видео + Исчисти + Положен + MyCoolSite + Неважечки податоци + Поддршка + Функции на плеерот + Серија + Сите %s веќе се преземени + Дејства + Јазик на преводот + Опис + Апликацијата ќе се ажурира по излегувањето + Отпишана е од %s + прокси raw.githubusercontent.com + TC + Претплатен на %s + Преводи + Да се преземат сите приклучоци од ова складиште\? + Недостасуваат дозволи за складирање. Обидете се повторно. + Зачувај + Вчитај од датотека + Ажурирања на апликацијата + Прелистувач + Вчитана резервна датотека + Гестови + Двоен допир за да паузирате + Прескокни %s + Најдена е датотека во безбеден режим! +\nНе се вчитуваат екстензии при стартување додека датотеката не се отстрани. + Врати + Подреди + Внатрешен плеер + Резолуција + Кредити + Пребарај %s… + Приклучокот е избришан + Статус + Автори + Започни + Изглед + Без доцнење на титловите + Ажурирање претплатени емисии + Синхронизирај + Вчитај од Интернет + %s (оневозможено) + SD + Затвори + Наскоро… + Верзија + Ознака за квалитет + приклучок + %d / 10 + Гледајте видеа на овие јазици + Прво инсталирајте ја наставката + Ажурирајте го напредокот на часовникот + Библиотека + Износот на барањето што се користи кога плеерот е скриен + Преземи преводи + Јавна листа + MPV + Инсталатор на пакети + ОВА + Ажурирања и резервни копии + Изгледа дека вашата библиотека е празна :( +\nНајавете се на сметка на библиотеката или додајте серии во вашата локална библиотека + Не се пронајдени епизоди + Брзата кафеава лисица го прескокнува мрзливото куче + Слика на постер + Должина на видео баферот + Избриши складиште + Клонирајте ја страницата + Ставете го насловот под постерот + Прикажи информации за падот на апликацијата + Јазик + Торент + Скриен плеер - Износ за пребарување + Автоматски синхронизирајте го напредокот на вашата тековна епизода + Бајпас на интернет провајдерот + Препорачано + Наслов + Префериран квалитет на гледање (мобилни податоци) + Тест на провајдер + Изберете библиотека + Видео песни + Азиски драми + Приклучокот е вчитан + Remove bloat from subtitles + Не е преземено: %d + Remove closed captions from subtitles + Аудио песни + Вклучете ги елементите на корисничкиот интерфејс на постерот + Оневозможено: %d + Легаси + Автоматска репродукција на следната епизода + Исчистете го кешот на видео и слики + Карактеристики + Азиска драма + Додатоци + Се прикажува копче на почетната страница што може да избере случаен филм или ТВ серија од почетната страница + Поддржано + Сметки + Вовед + Креирај сметка + Отстрани од гледаното + Допрете двапати во средината за да паузирате + Резервна копија + ОВА + Пренос во живо + Web + Ажурирани %d приклучоци + Мешано отворање + Екстензии + Овозможете NSFW на поддржани провајдери + Не успеа да стигне до GitHub, овозможувајќи jsdelivr прокси. + Филтрирајте по претпочитан медиумски јазик + \@string/home_play + Филм + Додаден %s + приклучоци + Подреди по + Изгледа дека оваа листа е празна, обидете се да се префрлите на друга + Аниме + Износот на барањето што се користи кога плеерот е видлив + Dub + Автоматско преземање приклучоци + Главна + Кеш меморија + Трејлер + Не можев да се најавам на %s + Премногу текст. Не може да се зачува во таблата со исечоци. + Неважечки ID + Преземено %d %s + Користете го ова ако преводите се прикажани %d ms премногу рано + Неважечка URL адреса + Безбедниот режим е вклучен + Blu-ray + Зачувани податоци + Предизвикува падови ако е превисоко поставено на уреди со слаба меморија, како што е Android TV. + Се инсталира ажурирање на апликацијата… + URL на складиштето + Не може да се инсталира новата верзија на апликацијата + Прикажи постери од Kitsu + Дали сте сигурни дека сакате да излезете\? + Предизвикува проблеми ако е превисоко поставено на уреди со мал простор за складирање, како што е Android TV. + Користејќи jsdelivr, блокирањето на GitHub може да се заобиколи. Може да ги одложи ажурирањата за неколку дена. + Да + Азбучно (Ш до А) + WP + Додајте клон на постоечка локација, со различна URL адреса + Преземена датотека + Износ на бараниот плеер (секунди) + Прикажи Logcat 🐈 + Преземено: %d + Резолуција и наслов + Ажурирањето започна + Преводи на Chromecast + Користете го ова ако преводите се прикажуваат %d ms премногу доцна + Случајно копче + Инсталатор на APK + Екстензии + UHD + Референт + Се отвора + 127.0.0.1 + Ова исто така ќе се избрише сите приклучоци за складиште + Направете резервна копија од податоците + Етикета за Dub + Прикажан плеер - Барај износ + Андроид ТВ + Не успеа да ги врати податоците од датотеката %s + Не успеа + Документарец + Стрим + %d мин + Играј со CloudStream + Пушти трејлер + Поставки за преводи на Chromecast + Наслов + Копирај + Плеер + Претплатени + 1000 ms + NSFW + /%d + /\?\? + hello@world.com + +30 + VLC + Рестартирај + Цртан филм + Почна да презема %d %s… + Автоматски ажурирања на приклучоци + -30 + %dm +\nпреостанува + Видео кеш на дискот + Поврзување до пренос + Готово + Додај складиште + 18+ + ХЛС плејлиста + Префериран видео плеер + Прикажи трејлери + Енкодирање на превод + Изглед + Додајте тракинг + Оценет + Камера + Камера + SDR + Веб-прелистувач + Апликацијата не е пронајдена + MyCoolUsername + Отвори со + %s %d%s + Повторете го процесот на поставување + Линкови + Повторување + Sub + Log + Започнете ја следната епизода кога ќе заврши тековната + Грешка при правење резервна копија на %s + Сокриј го избраниот квалитет на видеото во резултатите од пребарувањето + Некои телефони не го поддржуваат новиот инсталатор на пакети. Испробајте ја наследната опција ако ажурирањата не се инсталираат. + Резолуција на видео плеер + Големина на видео баферот + Распоред + Стандардно + Провајдери + Локација на насловот на постерот + HQ + HD + TS + 4K + Претходно + Прескокнете го поставувањето + Променете го изгледот на апликацијата за да одговара на вашиот уред + Известување за пад + Што сакате да видите + Име на складиштето + Приклучокот е преземен + Не може да се вчита %s + Преземете ја листата на сајтови што сакате да ги користите + CloudStream нема стандардно инсталирани локации. Треба да ги инсталирате сајтовите од складиштата. +\n +\nПоради отстранување на DMCA без мозок од страна на Sky UK Limited 🤮 не можеме да ја поврземе локацијата на складиштето во апликацијата. +\n +\nПридружете се на нашиот Discord или барајте онлајн. + Песни + Сите екстензии беа исклучени поради пад за да ви помогнат да ја пронајдете онаа што предизвикува проблеми. + Оцена: %s + Големина + Веб-видео Cast + Сите јазици + Исчисти историја + Обележи како гледано + Прикажи скокачки прозорци за отворање/завршување + Не + Се презема ажурирање на апликацијата… + Оцена (висока до ниска) + Оцена (ниска до висока) + Ажурирано (ново на старо) + Ажурирано (старо во ново) + Азбучно (А до Ш) + Епизодата %d е објавена! + Камера + DVD + Завршува + Измешан крај + HDR + example.com + Синхронизирај преводи + Примени при рестартирање + Наслов на видео плеер максимални знаци + Увезете фонтови ставајќи ги во %s + Врати ги податоците од резервна копија + Поставете статус на пратење + Пушти Livestream + %s е автентициран + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 766bcdc7..792f37e7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,6 +1,5 @@ - - - + + %s Ep %d Cast: %s @@ -131,7 +130,7 @@ Swipe to seek Veeg naar links of rechts om de tijd in de videospeler te regelen Veeg om instellingen te wijzigen - Veeg naar links of rechts om de helderheid of het volume te wijzigen + Veeg omhoog of omlaag aan de linker- of rechterkant om de helderheid of het volume te wijzigen Dubbeltik om te zien Dubbeltik om te pauzeren Videospeler aantal zoeken @@ -142,7 +141,7 @@ Kijkvoortgang bijwerken Automatisch synchroniseren van je huidige episode vooruitgang Gegevens herstellen vanaf back-up - Back-up gegevens + Back up gegevens Geladen back-up bestand Kan gegevens uit bestand niet herstellen %s De gegevens zijn opgeslagen @@ -160,7 +159,7 @@ Toon trailers Toon posters van Kitsu App-updates tonen - Automatisch zoeken naar nieuwe updates bij het opstarten + Automatisch zoeken naar nieuwe updates na het starten van de app. Update naar pre-releases Zoeken naar pre-release updates in plaats van alleen volledige releases Github @@ -223,8 +222,8 @@ Film Serie Tekenfilm - @string/anime - @string/ova + Anime + OVA Torrent Documentaire Aziatisch drama @@ -258,22 +257,22 @@ Niet meer weergeven Deze update overslaan Update - Gewenste kijkwaliteit + Voorkeurskwaliteit voor kijken (WiFi) Maximaal aantal tekens voor titel van videospeler Videospeler Resolutie Grootte videobuffer Lengte videobuffer Video cache op schijf Wis video en beeld cache - Zal willekeurige crashes veroorzaken als deze te hoog is ingesteld. Verander niet als je weinig RAM hebt, zoals een Android TV of een oude telefoon - Kan problemen veroorzaken op systemen met weinig opslagruimte, zoals Android TV-apparaten als u deze te hoog instelt + Veroorzaakt storingen indien te hoog ingesteld op toestellen met weinig geheugen, zoals Android TV. + Veroorzaakt problemen indien te hoog ingesteld op toestellen met weinig opslagruimte, zoals Android TV. DNS over HTTPS Handig om ISP-blokkades te omzeilen Kloon site Site verwijderen Voeg een kloon toe van een bestaande site, met een andere URL Downloadpad - Nginx server url + NGINX server URL Weergave Dubbed/Subbed Anime Pas aan het scherm Uitgerekt @@ -313,8 +312,8 @@ --> %s %s account - Logout - Login + Log uit + Log in Wissel account Account toevoegen Maak account @@ -325,8 +324,8 @@ %d / 10 /\?\? /%d - Geauthenticeerd %s - Mislukt om te verifiëren aan %s + %s geverifieerd + Kon niet inloggen op %s Geen normaal @@ -338,10 +337,10 @@ Schaduw Verhoogd Sync subs - 1000ms + 1000 ms Subtitle vertraging - Gebruik dit als de ondertitels %dms te vroeg worden getoond - Gebruik dit als ondertitels %dms te laat worden getoond + Gebruik dit als de ondertitels %d ms te vroeg worden getoond + Gebruik dit als de ondertitels %d ms te laat worden getoond Geen ondertitelvertragin - + + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -118,16 +117,16 @@ Tryb Eigengravy Ustawienia prędkości Przesuń aby przewinąć - Przesuń w lewo lub prawo aby kontrolować czas + Przesuwaj w lewo lub prawo, aby kontrolować czas filmu Przesuń aby zmienić ustawienia - Przesuń góra-dół z lewej lub prawej aby zmienić jasność i głośność + Przesuwaj góra-dół z lewej lub prawej strony ekranu aby zmienić jasność czy głośność Autoodtwarzanie następnego odcinka Rozpocznij następny odcinek po skończeniu bieżącego - Czas przewinięcia przy podwójnym kliknięciu + Czas przewinięcia przy podwójnym kliknięciu (w sekundach) Podwójne kliknięcie aby przewinąć Kliknij 2 razy z prawej lub lewej strony aby przewinąć Kliknij dwukrotnie aby wstrzymać - Kliknij na środku, aby zatrzymać wideo + Kliknij dwukrotnie na środku, aby zatrzymać wideo Użyj jasności systemowej Użyj jasności systemowej w odtwarzaczu aplikacji zamiast ciemnej nakładki Aktualizuj postęp oglądania @@ -154,7 +153,7 @@ Automatyczne aktualizacje rozszerzeń Automatyczne pobieranie rozszerzeń Pokazuj aktualizacje - Automatycznie wyszukuj aktualizacje przy starcie + Automatycznie wyszukuj aktualizacje przy starcie. Aktualizuj do wersji beta Wyszukuj wersji beta, zamiast oficjalnych wydań Github @@ -456,7 +455,7 @@ Instalator APK Niektóre telefony nie obsługują nowego instalatora pakietów. Wypróbuj tryb legacy, jeśli aktualizacje nie zostaną zainstalowane. password123 - @string/ova + \@string/ova MojaFajnaWitryna MyCoolUsername 127.0.0.1 @@ -466,7 +465,7 @@ Instalator pakietów @string/home_play hello@world.com - @string/anime + \@string/anime Opening Ending Mixed opening @@ -533,4 +532,4 @@ 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. Domyślna jakość (dane mobilne) - + \ 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 dd722f62..44615934 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,4 +1,4 @@ - + %s Ep %d %dh %dm @@ -273,7 +273,7 @@ Aviso Legal Geral Botão Aleatório - Mostra o botão Aleatório na página inicial, que pode escolher aleatoriamente um filme ou série + Mostrar botão aleatório na página inicial Idioma dos fornecedores Layout da App Mídia preferida @@ -444,7 +444,7 @@ Cam Abertura Selecionar Biblioteca - Usando jsdelivr o bloqueio do GitHub pode ser contornado. Pode atrasar atualizações em alguns dias. + Ignora o bloqueio do GitHub usando jsdelivr, pode fazer com que as atualizações sejam atrasadas em alguns dias. VLC Todas as linguagens Atualizado (Novo para Antigo) @@ -529,4 +529,4 @@ Configurações padrão SD Faixas de áudio - + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index aa443783..97896b92 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,6 +1,5 @@ - - - + + %s Ep %d Distribuție: %s @@ -389,4 +388,6 @@ Log Browser Joacă cu CloudStream - + Actualizare plugin automată + Descarcă plugin-uri automat + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index bd062394..2f5e0cb8 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,4 +1,4 @@ - + Постер Постер до епізоду @@ -283,7 +283,7 @@ Особливості Загальне Випадкова кнопка - Показує кнопку на Головній сторінці, яка може вибрати випадковий фільм або серіал на Головній сторінці + Показати випадкову кнопку на Головній сторінці Мови постачальника Макет програми Бажані медіа @@ -527,6 +527,6 @@ raw.githubusercontent.com Proxy Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. Обходи ISP - За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів. + Обхід блокування GitHub за допомогою jsdelivr, може призвести до затримки оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - + \ 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 911c0d07..ac76e243 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -383,7 +383,7 @@ Useful for bypassing ISP blocks raw.githubusercontent.com Proxy Failed to reach GitHub, enabling jsdelivr proxy. - Using jsdelivr, GitHub blocking can be bypassed. May delay updates by a few days. + 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 @@ -428,7 +428,7 @@ Features General Random Button - Shows button on Homepage which can choose a random movie or TV series from the Homepage + Show random button on Homepage Provider languages App Layout Preferred media From 4ed65f8e07533a2bd3209fcac5498e65f7383e00 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:27:53 +0000 Subject: [PATCH 379/888] chore(locales): fix locale issues --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 5 +++-- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-eo/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 5 +++-- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 5 +++-- app/src/main/res/values-it/strings.xml | 5 +++-- app/src/main/res/values-iw/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-kn/strings.xml | 2 +- app/src/main/res/values-mk/strings.xml | 7 ++++--- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-ms/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 5 +++-- app/src/main/res/values-nn/strings.xml | 2 +- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 9 +++++---- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-qt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 5 +++-- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-so/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-tl/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 41 files changed, 60 insertions(+), 52 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d7fecfd1..f70ca0c7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -561,4 +561,4 @@ باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - \ No newline at end of file + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 301242cd..d3bb648e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 71d5d6d0..12752938 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -1,4 +1,4 @@ - + পোস্টার ক্লাউডস্ট্রিম দিয়ে চালান diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 13b34872..16df53a6 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1dc2ebce..622c39ea 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d @@ -553,4 +554,4 @@ 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 8fbcc2d0..3e71b565 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,4 +1,4 @@ - + %s Ep %d Besetzung: %s diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index f07ce43c..67e81957 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,4 +1,4 @@ - + CloudStream diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 5eac8686..49f025d0 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -1,4 +1,4 @@ - + Reen Hejmo diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 289de2a1..8a32b77d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -529,4 +529,4 @@ 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-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index e4c23628..6a6b5243 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,4 +1,4 @@ - + حذف مکث diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b96ff0cd..7c26e6b7 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,4 +1,4 @@ - + CloudStream diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 833b76f4..e4b9fe46 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index e38a6225..4dce3c6f 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,6 @@ - + + %d %s | %s %s • %s @@ -554,4 +555,4 @@ Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. Zaobilazi GitHub blokiranje koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 396c514b..7c2bbc18 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -495,4 +495,4 @@ Beállítás kihagyása HQ %d letöltve - \ 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 e6da6195..0940c8e2 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Pemeran: %s @@ -552,4 +553,4 @@ Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - \ 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 52a354c7..6b63dd89 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Cast: %s @@ -551,4 +552,4 @@ Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index b24f0c60..50e96c7c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -1,4 +1,4 @@ - + הרקע של ההצגה לפני צוות שחקנים: %s diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 20641b20..2a36c8b4 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,4 +1,4 @@ - + %d分 ダウンロード diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 4b7b6869..1236dbba 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -1,4 +1,4 @@ - + %sಎಪಿ%d ಕ್ಯಾಸ್ಟ್:%s diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 29fd4be8..7964dce8 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,5 +1,6 @@ - + + Брзина (%.2fx) Оценето: %.1f @@ -354,7 +355,7 @@ Овозможете NSFW на поддржани провајдери Не успеа да стигне до GitHub, овозможувајќи jsdelivr прокси. Филтрирајте по претпочитан медиумски јазик - \@string/home_play + @string/home_play Филм Додаден %s приклучоци @@ -518,4 +519,4 @@ Поставете статус на пратење Пушти Livestream %s е автентициран - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index d430d7cc..a246cf9c 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index c757504a..42eba3cc 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -1,2 +1,2 @@ - + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 792f37e7..5cac7dfd 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Cast: %s @@ -551,4 +552,4 @@ \nWord lid van onze Discord of zoek online. Audiosporen Gesorteerd op - \ No newline at end of file + diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 43738665..b3dda84f 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -1,4 +1,4 @@ - + Fleire val Heim diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index fddd4919..4e7f6abd 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -1,4 +1,4 @@ - + Plakat diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 48b9ab40..863b2c2f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,5 +1,6 @@ - + + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -455,7 +456,7 @@ Instalator APK Niektóre telefony nie obsługują nowego instalatora pakietów. Wypróbuj tryb legacy, jeśli aktualizacje nie zostaną zainstalowane. password123 - \@string/ova + @string/ova MojaFajnaWitryna MyCoolUsername 127.0.0.1 @@ -465,7 +466,7 @@ Instalator pakietów @string/home_play hello@world.com - \@string/anime + @string/anime Opening Ending Mixed opening @@ -532,4 +533,4 @@ 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. Domyślna jakość (dane mobilne) - \ 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 44615934..f34dec8f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -529,4 +529,4 @@ Configurações padrão SD Faixas de áudio - \ 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 eee28785..f763d795 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -1,4 +1,4 @@ - + aauugghhaauuh diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 97896b92..99e112ce 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Distribuție: %s @@ -390,4 +391,4 @@ Joacă cu CloudStream Actualizare plugin automată Descarcă plugin-uri automat - \ 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 9d8f6895..b5601da3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,4 +1,4 @@ - + История Нет diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index a1afd6d9..12e580a2 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1,4 +1,4 @@ - + Našla sa nová aktualizácia! \n%s -> %s diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index ce7d557a..db82d9fa 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -1,4 +1,4 @@ - + Metalaya: %s %dm %ds %dd diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 0b7ba89e..736f27ce 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,4 +1,4 @@ - + Betygsatt: %.1f diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 4370e760..affb04bf 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -1,4 +1,4 @@ - + தேடுக தேடல் %s… diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index cf3b1263..a1faf3e1 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 74754008..5b543915 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2f5e0cb8..2e7f4789 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -529,4 +529,4 @@ Обходи ISP Обхід блокування GitHub за допомогою jsdelivr, може призвести до затримки оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index c19c6472..df2e9a8b 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -1,4 +1,4 @@ - + کاسٹ: %s قسط %d جاری کیا جائے گا diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 520cfaa4..8cad60ad 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3364ea86..01b3b682 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 44b93430..71d97abc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,4 +1,4 @@ - + From 4f9016713fe3aaaffaff9a6a37f0b3d7f70d96a1 Mon Sep 17 00:00:00 2001 From: Shif-Jess <117321707+Shif-Jess@users.noreply.github.com> Date: Sun, 9 Apr 2023 14:37:27 +0700 Subject: [PATCH 380/888] CS3Player: fixed ERROR_CODE_BEHIND_LIVE_WINDOW (#447) --- .../cloudstream3/ui/player/CS3IPlayer.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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 e0885671..9accf15e 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 @@ -985,12 +985,19 @@ class CS3IPlayer : IPlayer { // If the Network fails then ignore the exception if the duration is set. // This is to switch mirrors automatically if the stream has not been fetched, but // allow playing the buffer without internet as then the duration is fetched. - if (error.errorCode == PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED - && exoPlayer?.duration != TIME_UNSET - ) { - exoPlayer?.prepare() - } else { - playerError?.invoke(error) + when { + error.errorCode == PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED + && exoPlayer?.duration != TIME_UNSET -> { + exoPlayer?.prepare() + } + error.errorCode == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW -> { + // Re-initialize player at the current live window default position. + exoPlayer?.seekToDefaultPosition() + exoPlayer?.prepare() + } + else -> { + playerError?.invoke(error) + } } super.onPlayerError(error) From 94e7eb8e9d3e4603ab6d1956a8003b36a9d25095 Mon Sep 17 00:00:00 2001 From: Sarlay <60151189+Sarlay@users.noreply.github.com> Date: Sun, 9 Apr 2023 14:21:41 +0000 Subject: [PATCH 381/888] added a mirror to streamsb (#439) --- .../java/com/lagradost/cloudstream3/extractors/StreamSB.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 993ef156..1c6c7b94 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -81,6 +81,10 @@ class StreamSB11 : StreamSB() { override var mainUrl = "https://sbbrisk.com" } +class Sblongvu : StreamSB() { + override var mainUrl = "https://sblongvu.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() { From b356ad9e613f7d46bae0d9c7e8eca02fbf6e23cf Mon Sep 17 00:00:00 2001 From: Shif-Jess <117321707+Shif-Jess@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:46:39 +0700 Subject: [PATCH 382/888] CS3IPlayer: fix buffer lost when seeked to backward (#448) * CS3IPlayer: fix buffer lost when seeked to backward * changed BUFFER_MS --- .../java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 9accf15e..9ec18b9c 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 @@ -712,6 +712,10 @@ class CS3IPlayer : IPlayer { if (cacheSize > Int.MAX_VALUE) Int.MAX_VALUE else cacheSize.toInt() } ) + .setBackBuffer( + 30000, + true + ) .setBufferDurationsMs( DefaultLoadControl.DEFAULT_MIN_BUFFER_MS, if (videoBufferMs <= 0) { From 444934759307e8b9cfe6da8f29a806be41cc88f9 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Wed, 15 Mar 2023 22:22:19 +0100 Subject: [PATCH 383/888] bump --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0bd56fe7..fa1b277a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,8 +47,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 57 - versionName = "4.0.0" + versionCode = 59 + versionName = "4.0.1" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") From bdb45b69d354226d8dfcac2fbe77986f820f3100 Mon Sep 17 00:00:00 2001 From: reduplicated <110570621+reduplicated@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:04:24 +0200 Subject: [PATCH 384/888] pip fixes --- .../ui/player/AbstractPlayerFragment.kt | 4 +- .../main/res/layout/player_custom_layout.xml | 1267 +++++++++-------- .../res/layout/player_custom_layout_tv.xml | 649 ++++----- 3 files changed, 968 insertions(+), 952 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 21047db3..52f0b760 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -184,7 +184,7 @@ abstract class AbstractPlayerFragment( isInPIPMode = isInPictureInPictureMode if (isInPictureInPictureMode) { // Hide the full-screen UI (controls, etc.) while in picture-in-picture mode. - player_holder?.alpha = 0f + piphide?.isVisible = false pipReceiver = object : BroadcastReceiver() { override fun onReceive( context: Context, @@ -212,7 +212,7 @@ abstract class AbstractPlayerFragment( updateIsPlaying(Pair(isPlayingValue, isPlayingValue)) } else { // Restore the full-screen UI. - player_holder?.alpha = 1f + piphide?.isVisible = true exitedPipMode() pipReceiver?.let { activity?.unregisterReceiver(it) diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 683a1077..54f92d1f 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -8,17 +8,6 @@ android:screenOrientation="landscape" tools:orientation="vertical"> - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:background="@color/black_overlay" /> - + - - - - - - - - - - - - - - - - - - - - - - - - - - + android:gravity="center" + android:shadowColor="@android:color/black" + android:shadowRadius="10.0" + android:textColor="@android:color/white" + android:textSize="30sp" + tools:text="+100" /> + - - android:nextFocusRight="@id/exo_ffwd" - - android:nextFocusUp="@id/player_go_back" - android:nextFocusDown="@id/player_lock" - - android:src="@drawable/netflix_pause" - app:tint="@color/white" - tools:ignore="ContentDescription" /> - + + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --> + + + + + + diff --git a/app/src/main/res/layout/player_custom_layout_tv.xml b/app/src/main/res/layout/player_custom_layout_tv.xml index 405b606f..62b359b6 100644 --- a/app/src/main/res/layout/player_custom_layout_tv.xml +++ b/app/src/main/res/layout/player_custom_layout_tv.xml @@ -9,8 +9,9 @@ android:tag="television" tools:orientation="vertical"> + @@ -19,359 +20,365 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/player_gradient_tv" /> - - + + + + - - - + + + + + + + + + + + - ---> - - - - - - - - - - - - - + + android:layout_gravity="center" - + android:clickable="false" + android:focusable="false" + android:focusableInTouchMode="false" - - - - - - - - - - - - - - - - - - - - - - - - - + android:indeterminate="true" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + android:layout_gravity="bottom" + android:layout_marginBottom="20dp" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="4dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> - - - - + + + + + + + - - - + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + - + android:layout_marginStart="64dp" + android:layout_marginEnd="64dp" + android:layout_marginBottom="10dp" + android:gravity="center_vertical" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> - + + android:src="@drawable/netflix_pause" + app:tint="@color/player_button_tv" + tools:ignore="ContentDescription" /> - + + - android:visibility="gone" - app:icon="@drawable/ic_outline_subtitles_24" - tools:visibility="visible" /> + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + From a12d234ef41cf0b1927c2c261d663f33fbeb050a Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Fri, 21 Apr 2023 13:54:58 +0200 Subject: [PATCH 385/888] fix shortcodes --- .../cloudstream3/plugins/RepositoryManager.kt | 14 +++++--------- .../ui/settings/extensions/ExtensionsFragment.kt | 1 - 2 files changed, 5 insertions(+), 10 deletions(-) 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 742bf308..b80a590e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -95,15 +95,11 @@ object RepositoryManager { } } else if (fixedUrl.matches("^[a-zA-Z0-9!_-]+$".toRegex())) { suspendSafeApiCall { - 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 - } + app.get("https://cutt.ly/${fixedUrl}", allowRedirects = false).let { it2 -> + it2.headers["Location"]?.let { url -> + if (url.startsWith("https://cutt.ly/404")) return@suspendSafeApiCall null + if (url.removeSuffix("/") == "https://cutt.ly") return@suspendSafeApiCall null + return@suspendSafeApiCall url } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 7e60910d..045ed92d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.settings.extensions -import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.DialogInterface From 633aef878355c3d1519a65a44f502ed3558849b5 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 20 Apr 2023 23:26:39 +0200 Subject: [PATCH 386/888] Translated using Weblate (Macedonian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Korean) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Korean) Currently translated at 93.6% (571 of 610 strings) Translated using Weblate (Korean) Currently translated at 87.5% (534 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Korean) Currently translated at 31.4% (192 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Added translation using Weblate (Korean) Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (German) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (French) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Italian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (German) Currently translated at 99.6% (608 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 99.6% (608 of 610 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 90.8% (554 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Romanian) Currently translated at 95.4% (582 of 610 strings) Translated using Weblate (Romanian) Currently translated at 75.0% (458 of 610 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Polish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 90.4% (552 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (English) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Malayalam) Currently translated at 37.8% (231 of 610 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (610 of 610 strings) Added translation using Weblate (Arabic (Najdi)) Translated using Weblate (Latvian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Japanese) Currently translated at 46.2% (282 of 610 strings) Translated using Weblate (Macedonian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Latvian) Currently translated at 30.4% (186 of 610 strings) Added translation using Weblate (Latvian) Translated using Weblate (German) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (German) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Russian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Macedonian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Turkish) Currently translated at 99.8% (609 of 610 strings) Translated using Weblate (Malayalam) Currently translated at 37.2% (227 of 610 strings) Co-authored-by: AHOHNMYC Co-authored-by: Aitor Salaberria Co-authored-by: Alexandru Co-authored-by: Alexthegib Co-authored-by: Allan Nordhøy Co-authored-by: Anurag Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Clxff Heraldo <123844876+clxf12@users.noreply.github.com> Co-authored-by: Eryk Michalak Co-authored-by: FastAct Co-authored-by: Felipe Nogueira Co-authored-by: Fjuro Co-authored-by: Hosted Weblate Co-authored-by: Julian Co-authored-by: Massimo Pissarello Co-authored-by: Milo Ivir Co-authored-by: Rex_sa Co-authored-by: Sdarfeesh Co-authored-by: Skrripy Co-authored-by: Synertry Co-authored-by: Tang Yin Co-authored-by: The Unbreakable Spirit Co-authored-by: Turgay Doğru Co-authored-by: Vrwi Co-authored-by: Zaki Bouta Co-authored-by: edgolron Co-authored-by: eightyy8 Co-authored-by: gallegonovato Co-authored-by: jinu147 Co-authored-by: stojkovskistefan Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/en/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ja/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ko/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/lv/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/mk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ml/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ro/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 14 +- app/src/main/res/values-ars/strings.xml | 2 + app/src/main/res/values-cs/strings.xml | 15 +- app/src/main/res/values-de/strings.xml | 14 +- app/src/main/res/values-es/strings.xml | 12 +- app/src/main/res/values-fr/strings.xml | 28 +- app/src/main/res/values-hr/strings.xml | 19 +- app/src/main/res/values-in/strings.xml | 13 +- app/src/main/res/values-it/strings.xml | 17 +- app/src/main/res/values-ja/strings.xml | 18 +- app/src/main/res/values-ko/strings.xml | 532 ++++++++++++++++++++++++ app/src/main/res/values-lv/strings.xml | 528 +++++++++++++++++++++++ app/src/main/res/values-mk/strings.xml | 31 +- app/src/main/res/values-ml/strings.xml | 14 +- app/src/main/res/values-nl/strings.xml | 17 +- app/src/main/res/values-no/strings.xml | 43 +- app/src/main/res/values-pl/strings.xml | 15 +- app/src/main/res/values-pt/strings.xml | 12 +- app/src/main/res/values-ro/strings.xml | 191 ++++++++- app/src/main/res/values-ru/strings.xml | 14 +- app/src/main/res/values-tr/strings.xml | 9 +- app/src/main/res/values-uk/strings.xml | 18 +- app/src/main/res/values-zh/strings.xml | 17 +- app/src/main/res/values/strings.xml | 9 +- 24 files changed, 1449 insertions(+), 153 deletions(-) create mode 100644 app/src/main/res/values-ars/strings.xml create mode 100644 app/src/main/res/values-ko/strings.xml create mode 100644 app/src/main/res/values-lv/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f70ca0c7..637e8c15 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -366,7 +366,7 @@ تحميل من الانترنت الملف الذي تم تنزيله رئيسي - مساعد + ممثل مساعد الخلفية مصدر عشوائي @@ -525,12 +525,12 @@ اختر المكتبة المتصفح محدث (من الأحدث إلى الأقدم) - يبدو أن هذه القائمة فارغة ، حاول التبديل إلى قائمة أخرى + هذه القائمة فارغة ، حاول التبديل إلى قائمة أخرى. التقييم (من الأعلى إلى الأدنى) التقييم (من الأدنى إلى الأعلى) الترتيب الأبجدي (من ي إلى أ) - يبدو أن مكتبتك فارغة :( -\nتسجيل الدخول إلى حساب مكتبة أو إضافة عروض إلى مكتبتك المحلية + مكتبتك فارغة :( +\nقم بتسجيل الدخول على حساب مكتبة أو أضف عروضا إلى مكتبتك المحلية. محدث (من القديم إلى الجديد) فرز حسب افرز @@ -557,8 +557,8 @@ مشترك في %s تجاوز مزود خدمة الإنترنت استرجاع - فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr. - باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام. + تعذر الوصول إلى جيثب. تشغيل وكيل jsDelivr … + تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - + \ No newline at end of file diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-ars/strings.xml @@ -0,0 +1,2 @@ + + \ 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 622c39ea..43ded674 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d @@ -473,15 +472,15 @@ Nepodařilo se nainstalovat novou verzi aplikace Původní Aplikace bude po ukončení aktualizována - Vypadá to, že vaše knihovna je prázdná :( -\nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny + Vaše knihovna je prázdná :( +\nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny. Vybrat knihovnu Hodnocení (od nejvyššího) Hodnocení (od nejnižšího) Abecedně (od Z do A) Seřadit podle Řazení - Vypadá to, že tento seznam je prázdný, zkuste přepnout na jiný + Tento seznam je prázdný. Zkuste přepnout na jiný. Nalezen soubor bezpečného režimu! \nDo odebrání souboru nebudeme načítat žádná rozšíření. Aktualizováno (od nejnovějšího) @@ -549,9 +548,9 @@ Byla vydána epizoda %d! Odebíráno Proxy raw.githubusercontent.com - Nepodařilo se připojit ke GitHubu, povolování proxy jsdelivr. + Nelze se připojit k serveru GitHub. Zapíná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á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 3e71b565..071f30c0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -166,7 +166,7 @@ Ausgewählte Videoqualität bei Suchergebnissen ausblenden Automatische Plugin-Updates App-Updates anzeigen - Automatisches Suchen nach neuen Updates nach dem Start + Automatisches Suchen nach neuen Updates nach dem Start. Auf Vorabversionen updaten Suche nach Vorabversionen statt nur nach Vollversionen Github @@ -286,7 +286,7 @@ Haftungsausschluss Allgemein Zufalls-Button - Zeigt einen Zufallsbutton auf der Startseite an, mit welchem eine Serie oder ein Film von der Website zufällig ausgewählt wird + Zeige Zufallsgenerator Schaltfläche auf der Startseite Anbieter-Sprachen App-Layout Bevorzugte Medien @@ -501,9 +501,9 @@ Alphabetisch (Z bis A) Bibliothek auswählen Öffnen mit - Sieht aus, als wäre deine Bibliothek leer :( -\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu - Diese Liste scheint leer zu sein. Versuche, zu einer anderen Liste zu wechseln. + Deine Bibliothek ist leer :( +\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu. + Diese Liste ist leer. 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 @@ -524,9 +524,9 @@ %s deabonniert Episode %d erschienen! raw.githubusercontent.com Proxy - GitHub kann nicht erreicht werden, der jsdelivr-Proxy wird aktiviert. + GitHub konnte nicht erreicht werden. Der jsDelivr-Proxy wird aktiviert … Abonnierte Serien werden aktualisiert Rückgängig Abonniert ISP-Umgehungen - + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8a32b77d..b863479e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -498,12 +498,12 @@ Alfabéticamente (A a Z) Navegador Biblioteca - Parece que esta lista está vacía, intenta cambiar a otra + Esta lista está vacía. Intenta cambiar a otra. Alfabéticamente (Z a A) Seleccionar biblioteca Abrir con - Parece que tu biblioteca está vacía :( -\nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local + Tu biblioteca está vacía :( +\nRegístrate con una cuenta en la biblioteca o agrega los títulos a tu biblioteca local. ¡Se encontró un archivo en modo seguro! \nNo cargar ninguna extensión al inicio hasta que se elimine el archivo. Reproductor visible - buscar cantidad @@ -524,9 +524,9 @@ Actualizando los programas suscritos ¡Episodio %d publicado! Proxy raw.githubusercontent.com - No se ha podido acceder a GitHub, activando el proxy jsdelivr. - Omite el bloqueo de GitHub mediante jsdelivr, lo que puede provocar que las actualizaciones se retrasen unos días. + No se ha podido acceder a GitHub. Activando el proxy jsDelivr… + Omite el bloqueo de GitHub mediante jsDelivr. Lo que puede provocar 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 7c26e6b7..b7c9900b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,6 +1,5 @@ - - + CloudStream Accueil Rechercher @@ -260,16 +259,16 @@ Mode Eigengravy Ajout d\'une option de vitesse dans le lecteur Balayez pour chercher - Balayez vers la gauche ou la droite pour contrôler le temps dans le lecteur vidéo + Swipez d\'un côté à l\'autre pour contrôler votre position dans une vidéo Balayez pour modifier les paramètres Glissez sur le côté gauche ou droit pour modifier la luminosité ou le volume Lecture automatique du prochain épisode Démarrer l\'épisode suivant lorsque l\'épisode en cours se termine Double tape pour chercher Double tape pour mettre en pause - Player seek amount + Montant recherché par le joueur (Seconde) Tapez deux fois sur le côté droit ou gauche pour aller en avant ou en arrière - Tapez au milieu pour mettre en pause + Tapez deux fois au milieu pour mettre en pause Utiliser la luminosité du système Utiliser la luminosité du système dans le lecteur d\'applications au lieu du sombre Mise à jour de la progression de la veille @@ -386,8 +385,8 @@ 4K Web -30 - @string/anime - @string/ova + \@string/anime + OAV NSFW %s %s Filtrez par langue préférée @@ -497,9 +496,9 @@ 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 + Votre bibliothèque est vide :( +\nConnectez-vous sur un compte de bibliothèque ou ajoutez des spectacles à votre bibliothèque locale. + Cette liste est vide. Essayez d\'en changer. Android TV Trié par Alphabétique (Z à A) @@ -524,4 +523,11 @@ Contournements de FAI L\'épisode %d est sorti ! Échouer - + Le montant de la recherche utilisé lorsque le joueur est caché + Updating subscribed shows + Contourne le blocage de GitHub en utilisant jsDelivr. Les mises à jour peuvent être retardées de quelques jours. + La quantité de recherche utilisée lorsque le joueur est visible + Joueur représenté - Montant de la recherche + Joueur caché - Montant de la recherche + Impossible d\'accéder à GitHub. Activation du proxy jsDelivr… + \ 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 4dce3c6f..2491c3ce 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,6 +1,5 @@ - - + %d %s | %s %s • %s @@ -174,7 +173,7 @@ Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja Automatsko ažuriranje dodataka Prikaži ažuriranja aplikacije - Automatski traži nova ažuriranja nakon pokretanja aplikacije + Automatski traži nova ažuriranja nakon pokretanja aplikacije. Ažuriranje na predizdanja Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja Github @@ -527,9 +526,9 @@ Abecedno (Ž do A) Odaberite biblioteku Otvori sa - Čini se da vam je biblioteka prazna :( -\nPrijavite se na račun biblioteke ili dodajte serije u svoju lokalnu biblioteku - Čini se da je ova lista prazna, pokušajte se prebaciti na drugu + Vaša je biblioteka prazna :( +\nPrijavite se na račun biblioteke ili dodajte emisije u svoju lokalnu biblioteku. + Ova je lista prazna. Pokušajte se prebaciti na jednu drugu listu. Pronađena datoteka sigurnog načina rada! \nNe učitavaju se ekstenzije pri pokretanju dok se datoteka ne ukloni. Prikazan player- iznos preskakanja @@ -544,7 +543,7 @@ Neuspješno Stop Test pružatelja usluga - Ažuriram pretplaćene serije + Ažuriranje pretplaćenih emisija Epizoda %d izbačena! Pretplaćeno Pretplaćen na %s @@ -552,7 +551,7 @@ Vraćanje ISP zaobilaznice raw.githubusercontent.com Proxy - Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. - Zaobilazi GitHub blokiranje koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. + Neuspješno dohvaćanje GitHuba. Uključuje se jsdelivr proxy … + Zaobilazi blokiranje GitHuba koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) - + \ 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 0940c8e2..af02b9d0 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d Pemeran: %s @@ -516,7 +515,7 @@ Browser Pilih pustaka Yahh daftar pustaka kamu kosong :( -\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu +\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu. Pustaka Urutkan berdasar Urutkan @@ -527,7 +526,7 @@ Abjad (A ke Z) Abjad (Z ke A) Buka dengan - Yahh daftar ini kosong, coba ganti ke yang lain + Yahh daftar ini kosong. Coba ganti ke yang lain. Mode aman file ditemukan! \nTidak memuat ekstensi pada startup sampai berkas dihapus. Sembunyikan Pemutaran - Geser @@ -548,9 +547,9 @@ Berhenti berlangganan di %s Episode %d telah rilis! raw.githubusercontent.com Proksi - Gagal mencapai GitHub, mengaktifkan proksi jsdelivr. - Bisa melewati pemblokiran GitHub mengunakan jsdelivers. Mungkin dapat menyebabkan tertunda dalam beberapa hari. + Tidak dapat menjangkau GitHub. Mengaktifkan proksi jsDelivr… + Melewati pemblokiran GitHub menggunakan jsDelivr. Dapat menyebabkan pembaruan tertunda beberapa hari. Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - + \ 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 6b63dd89..248cb230 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d Cast: %s @@ -130,7 +129,7 @@ Scorri per mandare avanti/indietro Scorri da un lato all\'altro per controllare la tua posizione in un video Scorri per cambiare le impostazioni - Scorri verso l\'alto o verso il basso sul lato sinistro o destro per modificare la luminosità o il volume + Scorri il dito sul lato sinistro o destro per cambiare la luminosità o il volume Riproduci automaticamente l\'episodio successivo Avvia l\'episodio successivo al termine di quello in corso Doppio tocco per andare avanti/indietro @@ -520,13 +519,13 @@ Aggiornato (Da vecchio a nuovo) Alfabetico (A - Z) Alfabetico (Z - A) - Sembra che la tua libreria sia vuota :( -\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale + La tua libreria è vuota :( +\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale. Seleziona libreria Apri con Libreria Ordina - Sembra che questa lista sia vuota, prova a passare a un\'altra + Questo elenco è vuoto. Prova a passare a un altro. 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 @@ -545,11 +544,11 @@ Disiscritto da %s Iscritto Iscritto a %s - Impossibile contattare GitHub, abilitazione proxy jsdelivr avviata. - Ignora il blocco di GitHub utilizzando jsdelivr, può causare il ritardo degli aggiornamenti di alcuni giorni. + Impossibile raggiungere GitHub. Attivazione proxy jsDelivr… + Aggira il blocco di GitHub usando jsDelivr. Potrebbe causare un ritardo degli aggiornamenti di alcuni giorni. Baypass ISP Ripristina Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - + \ 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 index 2a36c8b4..127f60b7 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -182,4 +182,20 @@ アップデートを確認 作品名 アプリのアップデートをインストール中… - + リポジトリURL + 字幕ディレイ + 登録済み + ストリームへのリンク + 字幕遅延なし + リポジトリ削除 + このリポジトリからすべてのプラグインをダウンロードしますか? + 視聴状態を設定 + 字幕を同期 + リポジトリを追加 + リポジトリ名 + CloudStreamはデフォルトでサイトがインストールされていません。リポジトリからサイトをインストールする必要があります。 +\n +\nSky UK Limitedによる無脳なDMCAテイクダウンのため🤮、アプリ内でリポジトリサイトをリンクすることができません。 +\n +\n私たちのDiscordに参加するか、オンラインで検索してください。 + \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000..fdadb4ae --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,532 @@ + + + 출연: %s + 에피소드 %d이(가) 공개됩니다 + 포스터 + 에피소드 포스터 + 메인 포스터 + 다음 랜덤 + 뒤로가기 + 소스 변경 + 미리보기 배경 + 속도 (%.2fx) + 평점: %.1f + 새로운 업데이트! +\n%s -> %s + %d분 + CloudStream + CloudStream에서 재생 + + 다운로드 + 설정 + 검색… + 검색 %s… + 데이터 없음 + 기타 옵션 + 다음 에피소드 + 장르 + 공유 + 브라우저에서 열기 + 브라우저 + 로딩 건너뛰기 + 로딩중… + 시청 + 보류 + 시청 완료 + 포기 + 시청 예정 + 없음 + 다시보기 + 영화 재생 + 예고편 재생 + 토렌트 재생 + 소스 + 자막 + 연결 재시도… + 뒤로가기 + 에피소드 재생 + 다운로드 + 파일 재생 + 계속 다운로드 + 다운로드 일시정지 + 자동 오류 보고 비활성화 + 상세 정보 + 닫기 + 재생 + 정보 + 시청 상태 설정 + 저장 + 재생 속도 + 글자 색깔 + 외곽선 색깔 + 배경 색깔 + 창 색깔 + 가장자리 타입 + 자막 높이 + 폰트 + 폰트 크기 + 다운로드됨 + 다운로드중 + 다운로드 일시정지 + 다운로드 시작 + 다운로드 실패 + 다운로드 취소 + 다운로드 완료 + 업데이트 시작 + 링크 로딩 오류 + 내부 저장공간 + 자동 선택 언어 + 다운로드 언어 + 자막 언어 + 길게 눌러 기본값으로 재설정 + 다음에서 폰트 가져오기 %s + 계속 시청 + 제거 + -30 + %s 에피소드 %d + 포스터 + %d일 %d시간 %d분 + %d시간 %d분 + %d분 + 검색 + 파일 삭제 + 제거 + 업데이트 및 백업 + 백업 + 더빙 + 자막 + 취소 + 북마크 필터 + 북마크 + 제거 + 적용 + 복사 + 닫기 + 자막 설정 + 소스로 검색 + 로그 + 이 소스가 제대로 작동하려면 VPN이 필요할 수 있습니다 + 이 소스는 토렌트이므로 VPN을 사용하는 것이 좋습니다 + 메타데이터는 사이트별로 제공하지 않으며, 메타데이터가 사이트에 없으면 동영상 로딩이 실패합니다. + 설명 + 플레이어 자막 설정 + Chromecast 자막 + Chromecast 자막 설정 + 배속 모드 + 플레이어에 속도 옵션을 추가합니다 + 스와이프하여 탐색 + 좌우로 스와이프하여 동영상 위치 제어하기 + 스와이프하여 설정 변경 + 왼쪽 또는 오른쪽으로 밀어서 밝기 또는 볼륨을 변경합니다 + 다음 에피소드 자동 재생 + 현재 에피소드가 끝나면 다음 에피소드를 시작합니다 + 두 번 탭하여 탐색 + 두 번 탭하여 일시정지 + 플레이어 탐색 시간 (초) + 가운데를 두 번 탭하여 일시중지 + 시스템 밝기 사용 + 어두운 오버레이 대신 앱 플레이어의 시스템 밝기를 사용합니다 + 시청 진행 상황 업데이트 + 현재 에피소드 진행 상황을 자동으로 동기화합니다 + 백업에서 데이터 복원 + 데이터 백업 + 파일에서 데이터를 복원하지 못했습니다 %s + 저장된 데이터 + 저장소 권한이 없습니다. 다시 시도해 주세요. + 백업 중 오류 %s + 검색 + 라이브러리 + 계정 + 소스별로 구분된 검색 결과를 제공합니다 + 예고편 보기 + Kitsu에서 포스터 보기 + 검색 결과에서 선택한 동영상 품질 숨기기 + 플러그인 자동 다운로드 + 플러그인 자동 업데이트 + 추가된 저장소에서 아직 설치되지 않은 모든 플러그인을 자동으로 설치합니다. + 앱 업데이트 표시 + 앱을 시작한 후 새 업데이트를 자동으로 검색합니다. + 미리보기로 업데이트 + 정식 릴리즈 대신 미리보기 업데이트만 검색합니다 + 일부 휴대폰은 새 패키지 설치 프로그램을 지원하지 않습니다. 업데이트가 설치되지 않으면 레거시 옵션을 사용해 보세요. + 같은 개발자가 만든 라이트 노벨 앱 + 같은 개발자가 만든 애니메이션 앱 + Discord에 참여하기 + 개발자에게 바나나 주기 + 바나나 줌 + 앱 언어 + 링크를 찾을 수 없음 + 클립보드에 링크 복사됨 + 에피소드 재생 + 기본값으로 재설정 + 죄송합니다, 애플리케이션이 충돌했습니다. 버그 보고서가 익명으로 개발자에게 전송됩니다 + 에피소드 + %d-%d + 진행중 + 시청 완료 + 상태 + + 평점 + +30 + %s가 영구 삭제됩니다 +\n정말 삭제하시겠습니까\? + %d분 +\n남음 + 사이트 + 시간 + 개요 + 대기중 + 자막 없음 + 기본 + 남음 + 사용됨 + + 영화 + TV 시리즈 + 카툰 + 애니 + 토렌트 + Chromecast 미러링 + 앱에서 재생 + %s에서 재생 + 브라우저에서 재생 + 링크 복사 + 자동 다운로드 + 다운로드 미러 + 링크 새로고침 + 자막 다운로드 + 화질 탭 + 더빙 탭 + 자막 탭 + 제목 + 업데이트 확인 + 잠금 + 크기 조정 + 소스 + 오프닝 건너뛰기 + 이 업데이트 건너뛰기 + 선호하는 화질 (WiFi) + 선호하는 화질 (모바일 데이터) + 동영상 플레이어 해상도 + 동영상 버퍼 크기 + 동영상 및 이미지 캐시 지우기 + DNS over HTTPS + GitHub에 연결할 수 없습니다. jsDelivr 프록시를 켜는 중… + jsDelivr을 사용하여 GitHub 차단을 우회합니다. 업데이트가 며칠 지연될 수 있습니다. + 복제 사이트 + 사이트 삭제 + 다른 URL을 사용하여 기존 사이트의 복제본을 추가합니다 + 다운로드 경로 + 캐시 + Android TV + 제스처 + 자막 + 레이아웃 + 기본 + 일반 + 플레이어 기능 + 기능 + 소스 언어 + 앱 레이아웃 + 선호하는 미디어 + 지원되는 공급업체에서 19금 사용 설정 + 자막 인코딩 + 소스 + 소스 테스트 + 레이아웃 + 자동 + TV 레이아웃 + 휴대폰 레이아웃 + 에뮬레이터 레이아웃 + 기본 색상 + 앱 테마 + 포스터 제목 위치 + 이메일 + IP + 로그인 + 계정 전환 + 계정 추가 + 계정 생성 + 트래커 추가 + 추가 %s + 동기화 + %d / 10 + /\?\? + /%d + %s 인증됨 + 다음에 로그인할 수 없음 %s + 없음 + 보통 + 전부 + 최대 + 최소 + 윤곽선 + 그림자 + 자막 동기화 + 1000 ms + 자막 딜레이 + 자막이 %d ms 너무 일찍 표시되는 경우, 이 옵션을 사용하세요 + 주연 + 조연 + 출연 + 소스 + 랜덤 + 포스터 이미지 + 제목 + Cam + Cam + Blu-ray + WP + DVD + 4K + SD + 해상도 및 제목 + 해상도 + 잘못된 ID + 잘못된 데이터 + 잘못된 URL + 오류 + 자막에서 선택 캡션 제거 + 선호하는 미디어 언어로 필터링 + 예고편 + 다음 + 이전 + 설정 건너뛰기 + 기기에 맞게 앱 모양 변경하기 + 확장 기능 + 버전 + 18+ + 다운로드 시작 %d %s… + 다운로드 %d %s + 모든 %s가 이미 다운로드되었습니다 + 일괄 다운로드 + 플러그인 + 플러그인 + 이렇게 하면 모든 저장소의 플러그인도 삭제됩니다 + 저장소 삭제 + 사용하려는 사이트 목록 다운로드 + 다운로드됨: %d + CloudStream에는 기본적으로 설치된 사이트가 없습니다. 저장소에서 사이트를 설치해야 합니다. +\n +\nSky UK Limited의 무분별한 DMCA 조치로 인해 🤮 앱에서 저장소 사이트를 연결할 수 없습니다. +\n +\nDiscord에 가입하거나 온라인에서 검색하세요. + 커뮤니티 저장소 보기 + 공개 목록 + 모든 자막 대문자화 + 이 저장소에서 모든 플러그인을 다운로드하시겠습니까\? + %s (사용불가) + 저장소 추가 + 저장소 이름 + 저장소 URL + 플러그인이 로드됨 + 플러그인 다운로드 + 플러그인 삭제됨 + 로드할 수 없음 %s + 오디오 트랙 + 동영상 트랙 + 재시작 시 적용 + 안전 모드 켜기 + 충돌로 인해 문제를 일으키는 확장 프로그램을 찾는 데 도움이 되도록 모든 확장 프로그램이 사용 중지되었습니다. + 충돌 정보 보기 + 언어 + 에피소드 %d 공개! + Picture-in-picture + 플레이어 크기 조정 버튼 + 다른 앱 위에 있는 미니어처 플레이어에서 재생을 계속합니다 + 충돌에 관한 데이터만 전송 + 검은색 테두리 제거 + 오른쪽 또는 왼쪽을 두 번 탭하여 앞뒤로 탐색하기 + 자막 + 로드된 백업 파일 + 정보 + 고급 검색 + 데이터를 보내지 않음 + 설정 프로세스 다시 실행 + APK 인스톨러 + Github + 소스 오류 + 이 소스는 크롬캐스트를 지원하지 않습니다 + 시즌 없음 + 시즌 + 아시아 드라마 + 시즌 + 삭제 + %s %d%s + 파일 삭제 + 일시정지 + 에피소드 + 에피소드 + %d %s + 에피소드를 찾을 수 없음 + 시작 + 실패 + 평점 + 평점: %s + 평점 (높음에서 낮음으로) + 평점 (낮음에서 높음으로) + 19금 + 다큐멘터리 + 라이브 방송 + 19금 + 기타 + OVA + 아시아 드라마 + 라이브 방송 + 동영상 + 포스터의 UI 요소 전환 + 영화 + 카툰 + 토렌트 + 다큐멘터리 + 렌더러 오류 + 시리즈 + 애니 + OVA + 원격 오류 + 다운로드 오류, 저장 권한 확인 + Chromecast 에피소드 + 예기치 않은 플레이어 오류 + 다시 표시하지 않음 + 업데이트를 찾을 수 없음 + 업데이트 + raw.githubusercontent.com 프록시 + 동영상 버퍼 길이 + 저장소에 동영상 캐시 + Android TV와 같이 메모리가 부족한 디바이스에서 너무 높게 설정하면 충돌이 발생할 수 있습니다. + 화면 크기에 맞춤 + Android TV와 같이 저장 공간이 부족한 기기에서 너무 높게 설정하면 문제가 발생할 수 있습니다. + NGINX 서버 URL + 확대 + 링크 + ISP 차단을 우회하는 데 유용합니다 + 화면 맞춤 + 더빙/자막 애니메이션 표시 + 거부 + ISP 우회 + 앱 업데이트 + 확장 기능 + 로그아웃 + 사이트 URL + 비밀번호 + 계정 + 사용자 이름 + 언어 코드 (ko) + 사이트 이름 + %s %s + 자막이 %d ms 너무 늦게 표시되는 경우, 사용하세요 + 자막 지연 없음 + 다운로드한 파일 + 파일에서 불러오기 + 추천 + 인터넷에서 불러오기 + 로드됨 %s + 공개 예정… + Cam + HD + TS + 플레이어 + HDR + TC + 충돌 보고 + 완료 + 다운로드되지 않음: %d + HQ + UHD + 이 언어로 된 동영상 보기 + SDR + Web + 비활성화됨: %d + 사이즈 + 제작자 + 무엇을 보고 싶으신가요 + 상태 + %d 플러그인 업데이트 + 재시작 + 정지 + 소개 + 유형 + 먼저 확장 프로그램을 설치하세요 + 웹 브라우저 + 앱을 찾을 수 없음 + 모든 언어 + 건너뛰기 %s + 오프닝 + 엔딩 + 혼합 엔딩 + 혼합 오프닝 + 크레딧 + 소개 + 기록 삭제 + 기록 + 오프닝/엔딩 시 건너뛰기 팝업 표시 + 텍스트가 너무 많습니다. 클립보드에 저장할 수 없습니다. + 시청에서 삭제 + 정말 종료하시겠습니까\? + + 아니요 + 앱 업데이트 다운로드 중… + 앱 업데이트 설치 중… + 새 버전의 앱을 설치할 수 없습니다 + 레거시 + 패키지 인스톨러 + 앱 종료시 업데이트됩니다 + 정렬 기준 + 정렬 + 업데이트됨 (새로움에서 오래된 순) + 업데이트 (오래됨에서 새로운 순) + 알파벳순 (A에서 Z) + 알파벳순 (Z에서 A) + 다음으로 열기 + 라이브러리가 비어 있습니다 :( +\n라이브러리 계정으로 로그인하거나 로컬 라이브러리에 프로그램을 추가하세요. + 안전 모드 파일을 찾았습니다! +\n파일이 제거될 때까지 시작 시 확장 프로그램을 로드하지 않습니다. + HLS 재생목록 + 내부 플레이어 + MPV + 선호하는 동영상 플레이어 + VLC + 라이브러리 선택 + 웹 동영상 캐스트 + 이 목록이 비어 있습니다. 다른 목록으로 전환해 보세요. + 필러 + 라이브 스트리밍 재생 + 스트림 + 유형을 사용하여 검색 + 개발자에게 %d 바나나 줌 + 바나나를 주지 않음 + 상세 정보 + \@string/home_play + 플롯을 찾을 수 없음 + 설명을 찾을 수 없음 + Logcat 🐈 표시 + 애니메이션용 필러 에피소드 표시 + 통과 + 계속 + 동영상 플레이어 제목 최대 글자 수 + 표시된 플레이어 - 빨리 감기 및 되감기 초 + 플레이어가 보일 때 사용되는 탐색량 + 플레이어 숨김 - 빨리 감기 및 되감기 초 + 플레이어가 숨겨져 있을 때 사용되는 탐색량 + 동작 + 외형 + 랜덤 버튼 + 홈페이지에 랜덤 버튼 표시 + 포스터 아래에 제목을 이동 + 내려감 + 올라감 + 다람쥐 헌 쳇바퀴에 타고파 + 자막에서 부풀림 제거 + 엑스트라 + 스트림 링크 + 트랙 + 레퍼러 + 요약 + 시청함으로 표시 + 되돌리기 + 구독한 프로그램 업데이트 + 구독중 + 구독 %s + 구독 취소 %s + \ No newline at end of file diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml new file mode 100644 index 00000000..8659a139 --- /dev/null +++ b/app/src/main/res/values-lv/strings.xml @@ -0,0 +1,528 @@ + + + Plakāts + %s Ep %d + Cast: %s + Plakāts + Epizodes plakāts + Galvenais plakāts + Nākamais random + Iet atpakaļ + Nomainīt dvēju + Apskatīt background + Ātrums (%.2fx) + Lidzīgi: %.1f + Jauns atjauninājums atrasts! +\n%s -> %s + %d galvenais + Claudstream + Atskaņo ar cloudstream + Mājas + Meklēt + Meklēt %s… + Nav datu + Vairāk opcijas + Nākamā epizode + Internets + Izlaist ladešanos + Lādējas… + Skaties + Aizturēts + Pabeigts + Atmests + Plāno skatīties + Neviena + Atkārtoti skatities + Palaist Filmu + Palaist Trelleri + Palaist Livestreamu + Skatities Torrentu + Devēji + Subtitri + Atkārtot connection + Iet atpakaļ + Palaist epizodi + Ieladēt + Lādēšana pauzēta + Lādēšana sakās + Ielādēt neizdevās + Ielādēšana atcelta + Pabeidza ieladēt + Atjauninājums sakās + Skaties + Kļūda padejot linkus + Iekšējā atmiņa + Dub + Dzēst failu + Palaist failu + Atsākt ielādi + "Pauzēt ielādi" + Atslēgt automātisko kļūdu ziņošanu + Vairāk informācijas + Slēpt + Atskaņot + Informācija + Filtra bookmarks + Bookmarks + Noņemt + Ieliec skatīšanās statusu + Izmantot + Atcelt + Kopēt + Saglabāt + Atskaņošanas ātrums + Subtitru iestādijumi + Apkārt krāsa + Backgrounds krāsa + Līga krāsa + Stūra tips + Fonts + Fonta lielums + Meklēt izmantojot devējus + Meklēt izmantojot tipus + %d Banāni iedoti veidotājiem + Episode %d būs izlaista + Filtrs + Ieladētas + Meklēt… + Settingi + Žanrs + Dalities + Atvērt internetā + Ieladēts + Lādējas + Aizvērt + Sub + Nav banāni iedoti + Subtitru augstums + Iztīrīt + Teksta krāsa + Automātiski-iestādīt valodu + %dd %dh %dm + %dm + %dd %dh %dm + Ielādēt valodas + Subtitru valoda + Tūri lai restartētu uz sākumu + Importēt fontus ieliekot iekšā %s + Turpini skatīties + Noņemt + Vairāk informācijas + \@string/home_play + VPNs varētu būt vajadzīgs lai šis devējs strādātu pareizi + Šis devējs ir Torrents vpn ir rekomendēts + Dati nav doti no saites, video lādēšanas neizdosies ja neiksestē saitē. + Apraksts + Nav apraksts atrasts + Apraksts nav atrasts + Radīt Logcat 🐈 + Log + Bilde bildē + Turpina spēlēt mazā lodziņā virs aplikācijām + Players izmēra poga + Noņemt melnās malas + Subtitri + Players subtitru iestādijumi + Chromecast subtitri + Chromecast subtitru iestāfijumi + Eigengravy Mode + Pievieno atskaņošanas ātrumu playerim + Novelc lai paradītu + Novelc no māla lidz malai lai pozicionētu video + Novēlu lai mainītu iestādījums + Novēlu uz augšu vai apakšu pa labi un pa kreisi lai lai nomainītu gaišumu un skaņu + Automātiski nākamo epizodi + Sākt nākamo epizodi kad šis bridzas + Divreiz uzpied lai paslēptu + Divreiz uzpied lai pauzētu + Players meklēšanas daudzums (sekundes) + Uzpied divreiz pa labi vai kreisi lai palaistu atpakaļ vai uz priekšu + Uzpied divreiz vidū lai pauzētu + Lietot sistēmas gaišums + Lietot sistēmas gaišumu aplikācijas playerī nevis tumšunu + Atjaunināt skatīšanos progresu + Automātiski sync savu pašreizējo epizodes progresu + Atgūt datus no backupa + Saglabāt datus + Ieladētie atgūtie faili + Neizdevās restaurēt datus no faila %s + Dati saglabāti + Krātuves atļaujas nav. Lūdzu mēģiniet vēlreiz. + Kļūda meiģinot saglabāt %s + Meklēt + Library + Konts + Atjaunināt un saglabāt + Informācija + Advancēta meklēšana + Dod tev meklēšanas rezultātus citus no devēja. + Tikai sūtīt datus no kļudām + Nesutīt datus + Radīt fillera epizodi priekš animē + Radīt feel + Radīt plakātu no kitsu + Slēpt izvēlētos video kvalitāti meklēšanas rezultātus + Automātiski papildinājumu atjauninājumi + Automātiski ielādēt papildinājumus + Automātiski instalēt visus neinstalētos papildinājumus no glabātavas + Radīt aplikācijas atjauninājumus + Automātiski meklēt jaunus atjauninājumus kad palaiž aplikāciju + Atsākt uzstādīšanas procesu + Atjaunināt uz priekšizlaišanu + Dažu telefoni nepieņem jauno aplikāciju instaletāju. Meiģiniet veco opciju ja nevar stjaunināt. + Noveles aplikācija no šiem izstrādātājiem + Anime aplikāciju no tiem pašiem izstradatājiem + Ienāc discordā + Iedot banānu izstrādātājiem + Iedotie banāni + Aplikācijas valoda + Šim devējam nav Chromecast pieņemšana + Nav linku strastu + Links kopēts cliobordā + Restartēt uz parasto value + Sezona + %s %d%s + Nav sezonas + Epizode + Epizodes + %d-%d + %d %s + S + E + Epizodes netika atrastas + Dzēsti faili + Dzēst + Pauzēt + Sākt + Neizdevās + Nokārtojāt + Atsākt + -30 + +30 + Šis pilnibā dzesīs %s +\nEsat parliecināts\? + %dm +\natlikušas + Pabeigts + Statuss + gads + Reitings + Ilgums + Saite + Synopsis + Gaida + Lietotie + Aplikācija + Filmas + Seriāli + Animācija + Anime + Torrenti + Dokumentārija + OVA + Āzijas Drāma + Livestreami + NSFW + Citi + Filmas + Sērijas + Animācija + Anime + OVA + Torrenti + Documentarijas + Āzijas drāma + Livestreami + NSFW + Video + Devēja kļūda + Remote kļūda + Negaidīta atskaņotāja kļūda + Ielādēšanas kļūda, pārbaudi atmiņas atļauju + Chromecast epizode + Chromecast morror + Palaist aplikācijā + Atskaņot uekšā %s + Atskaņot internetā + Kopēt linku + Automātiski ielādēt + Ielādēt spoguli + Pārlādēt saites + Ielādēt subtitrus + Kvalitāte + Dub lable + Subtirti + Nosaukums + Render kļūda + Pārbaudīt atjauninājumus + Slēgt + Mainīt lielumu + Devējs + Izlaist OP + Nerādīt atkal + Izlaist šo atjauninājumu + Atjauninājums + Izvēlētā skatīšanās kvalitāte (WiFi) + Video players nosaukuma maksimālie burti + Video atskaņotāja kvalitāte + Video buffer izmērs + Video buffering garums + Video atkritne diskā + Atskaņotājs rāda - seek smount + Meklēšanas summa, kas tiek izmantota, kad spēlētājs ir redzams + Atskaņotājs paslēpts — meklēšanas summa + Izraisa avārijas, ja ierīcēs ar mazu atmiņu ir iestatīta pārāk augsta vērtība, piemēram, Android TV. + Izdevīgs lai izlaistu ISO aizturi + raw.githubusercontent.com Proxy + Apiet GitHub bloķēšanu, izmantojot jsdelivr, tādēļ atjauninājumi var aizkavēties par dažām dienām. + Klonēt saiti + Noņemt saiti + Pievienojiet esošas vietnes klonu ar citu URL + Ielādēšanas ceļš + NGINX servera URL + Radīt Dubbed/Subbed Anime + Ietilpt ekranā + Atruna + ISP Izlaists + Links + Aplikācijas atjauninājumus + Dublējums + Papildinājumi + Akcijas + Atkritne + Android TV + Žesti + Atskaņošanas funkcijas + Subtitri + Iskats + Parasts + Izskats + Funkcijas + Ģenerāls + Randomā poga + Rādīt izlases pogu mājaslapā + Devēja valodas + Aplikācijas izskats + Izvēlētā media + Iespējojiet NSFW atbalstītajiem pakalpojumu sniedzējiem + Subtitru kodējums + Devēji + Devēju tests + Izskats + Automātiski + Televizora izskats + Telefona izskats + Emulators izskats + Plakāta virsraksta lokācija + Parole123 + MansStilīgaisNosaukums + Sveiki@pasaule.com + 127.0.0.1 + ManaForšāSaite + Piemērs.com + Valodas kods (lv) + Konts + Iziet + Ieiet + Mainīt kontu + Pievienot kontu + Veidot kontu + Pievienot izsekošanu + Pievienot %s + Sync + Lidzīgi + %d / 10 + /\?\? + /%d + %s autentificēts + Nevarēja ieiet %s + Nekas + Normāls + Viss + Maksimālais + Minimālais + Apkartlinija + Depresija + Ēna + Paugstināts + Sync subs + 1000 ms + Subtitru pslēninājums + Izmantojiet šo, ja subtitri tiek rādīti %d ms pārāk agri + Nav subtitru kavēšanās + Ātrā brūnā lapsa lec pāri slinkajam sunim + Ielādeja %s + Lādēt no faila + Aplikācijas theme + Ielādēt no interneta + Ieladētie faili + Galvenais + Atbalsta + Aizmugure + Devējs + Randoms + Camera + Kamera + HQ + HD + TS + TC + Blu-ray + WP + DVD + 4K + SD + UHD + HDR + Plakāta bilde + Atskaņotājs + Rezolūcija un tituls + Nederīgs ID + Nederīgi dati + Nederīgs URL + Kļūda + Noņemiet slēgtos parakstus no subtitriem + Noņemiet uzpūšanos no subtitriem + Filtrējiet pēc vēlamās multivides valodas + Ekstras + Treileris + Links uz tstresmu + Referents + Nākamais + Skatieties videoklipus šajās valodās + Iepriekšējais + Izlaist uzstādīšanu + Mainiet lietotnes izskatu, lai tā atbilstu savai ierīcei + Avārijas ziņošana + Ko tu vēlies redzēt + Pabeigts + Papildinājumi + Pievienot repozitoriju + Repository URL + Plugin ieladēti + Plugins dzēsts + Nevarēja ielādēt %s + 18+ + Sākta %d %s lejupielāde… + Lejuplādēts %d %s + Pakešu lejupielāde + Plugins + Plugins + Tādējādi tiks izdzēsti arī visi repozitorija pluginus + Dzēst repozitoriju + Lejupielādēt: %d + Atspējots: %d + Nav lejupielādēts: %d + Atjaunināti %d spraudņi + Skatīt kopienas krātuves + Publisks saraksts + Visi subtitri ar lielajiem burtiem + Vai lejupielādēt visus spraudņus no šīs krātuves\? + %s (atspējots) + Tracks + Audio dziesmas + Video tracks + Likt uz restartēšanu + Restartēt + Pārtraukt + Drošais režīms ieslēgts + Visi paplašinājumi tika izslēgti avārijas dēļ, lai palīdzētu jums atrast to, kas rada problēmas. + Skatīt avārijas informāciju + Rating: %s + Apraksts + Versija + Status + Izmērs + Autors + Atbalstīts + Valodas + HLS atskaņošanas saraksts + Vēlamais video atskaņotājs + Iekšējais atskaņotājs + MPV + Web video apraide + Aplikācijs nav atrasta + Visas valodas + Beigas + Kopsavilkums + Jauktas beigas + Jauktais sākums + Kredīts + Notīrīt vēsturi + Vēsture + Rādīt izlaižamos uznirstošos logus atvēršanai/beigšanai + "Pārāk daudz teksta. Nevar saglabāt starpliktuvē." + + + Notiek lietotnes atjauninājuma lejupielāde… + Notiek lietotnes atjauninājuma instalēšana… + Nevarēja instalēt jauno lietotnes versiju + Mantojums + Insteletājs + Lietotne tiks atjaunināta pēc iziešanas + Kārtot pēc + Kārtot + Vērtējums (no augsta līdz zemam) + Atjaunināts (no jauna uz veco) + Atjaunināts (no vecā uz jauno) + Alfabētiskā secībā (A līdz Z) + Alfabētiskā secībā (Z līdz A) + Atlasiet Bibliotēka + Atvērt ar + Šķiet, ka jūsu bibliotēka ir tukša :( +\n Piesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai + Atgriest + Anulēts %s abonements + %d sērija izlaista! + Meklēt pirmsizlaišanas atjauninājumus nevis tikai pilnos atjauninājumus + Apk insteletājs + Github + Nav subtitru + Atskaņot epizodi + Piedodiet, bet aplikācijā bija kļūda, anonīms kļūdas ziņojums tika aizsūtīts izstrādātājiem. + Iet + Bezmaksas + Ieslēgt elementus uz plakātiem + Parastais + Nav atjauninājumi atrasti + Izdzēst video un bildes atkritne + Izvēlētā skatīšanās kvalitāte (Mobilie Dati) + Rada problēmas, ja ierīcēs ar maz vietas krātuvē ir iestatīts pārāk augsts, piemēram, Android TV. + Meklēšanas summa, kas tiek izmantota, kad spēlētājs ir paslēpts + DNS virs HTTPS + Tuvināt + Neizdevās sasniegt GitHub, iespējot jsdelivr starpniekserveri. + Iztiept + Galvenā krāsa + %s %s + Likt nosaukumu zem plakāta + Izmantojiet šo, ja subtitri tiek rādīti %d ms pārāk vēlu + Rekomendācijas + Drīzumā… + Kamera + Virsraksts + Web + SDR + Rezulūcija + CloudStream pēc noklusējuma nav instalēta neviena vietne. Vietnes jāinstalē no krātuvēm. Sky UK Limited bezsmadzeņu DMCA noņemšanas dēļ mēs nevaram saistīt ar repozitorija vietni lietotnē. Pievienojieties mūsu Discord vai meklējiet tiešsaistē. + Viss %s jau ir lejupielādēts + Repozitorija nosaukums + Plugin ielādēti + Lejupielādējiet to vietņu sarakstu, kuras vēlaties izmantot + Vispirms instalējiet paplašinājumu + Atvēršana + VLC + Interneta mekletājs + Sākums + Izlaist %s + Noņemt no skatītajiem + Atzīmēt kā skatītu + Vai tiešām vēlaties iziet\? + Šķiet, ka šis saraksts ir tukšs, mēģiniet pārslēgties uz citu + Atrasts drošā režīma fails! +\n Paplašinājumi netiek ielādēti startēšanas laikā, kamēr fails nav noņemts. + Vērtējums (no zema līdz augstam) + Abonēto šovu atjaunināšana + Abonēts + Abonēts %s + \ No newline at end of file diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 7964dce8..0e4a7aea 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,6 +1,5 @@ - - + Брзина (%.2fx) Оценето: %.1f @@ -188,7 +187,7 @@ Истегни Зумирај Disclaimer - Генерално + Општи поставки Јазици на провајдерите Распоред на апликацијата Претпочитани медиуми @@ -303,8 +302,8 @@ Инсталатор на пакети ОВА Ажурирања и резервни копии - Изгледа дека вашата библиотека е празна :( -\nНајавете се на сметка на библиотеката или додајте серии во вашата локална библиотека + Вашата библиотека е празна :( +\nНајавете се на корисничка сметка или додадете серии. Не се пронајдени епизоди Брзата кафеава лисица го прескокнува мрзливото куче Слика на постер @@ -353,14 +352,14 @@ Мешано отворање Екстензии Овозможете NSFW на поддржани провајдери - Не успеа да стигне до GitHub, овозможувајќи jsdelivr прокси. + Не успеа да стигне до GitHub. Вклучувам jsDelivr прокси… Филтрирајте по претпочитан медиумски јазик @string/home_play Филм Додаден %s приклучоци Подреди по - Изгледа дека оваа листа е празна, обидете се да се префрлите на друга + Оваа листа е празна, обидете се да се префрлите на друга. Аниме Износот на барањето што се користи кога плеерот е видлив Dub @@ -384,7 +383,7 @@ Прикажи постери од Kitsu Дали сте сигурни дека сакате да излезете\? Предизвикува проблеми ако е превисоко поставено на уреди со мал простор за складирање, како што е Android TV. - Користејќи jsdelivr, блокирањето на GitHub може да се заобиколи. Може да ги одложи ажурирањата за неколку дена. + Користејќи jsDelivr, блокирањето на GitHub може да се заобиколи. Може да ги одложи ажурирањата за неколку дена. Да Азбучно (Ш до А) WP @@ -519,4 +518,18 @@ Поставете статус на пратење Пушти Livestream %s е автентициран - + %s Епизода %d + %dч %dм + %dм + Следен рандом + Постер + Постер + %dд %dч %dм + Главен постер + Епизодата %d ќе биде објавена на + Постер за епизода + Прегледај позадина + Смени провајдер + Оди назад + Актери: %s + \ No newline at end of file diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index a246cf9c..1f653286 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,6 +1,5 @@ - - + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -170,4 +169,13 @@ ഔചിത്യ വീഡിയോ ക്വാളിറ്റി ചരിത്രം കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക - + %dd% + yg5t4r%dujyhtg + qeWERT + %fghj%gf + rtf:% + അക്കൗണ്ട് ഉണ്ടാക്കുക + പുറത്ത്പോകുന്നതോടുകൂടി ആപ് അപ്ഡേറ്റ് ആവുന്നതാണ് + ലൈബ്രറി തിരഞ്ഞെടുക്കുക + ഇത് ഉപയോഗിച്ച് തുറക്കുക + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5cac7dfd..d7e3ede6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d Cast: %s @@ -142,7 +141,7 @@ Kijkvoortgang bijwerken Automatisch synchroniseren van je huidige episode vooruitgang Gegevens herstellen vanaf back-up - Back up gegevens + Back-up gegevens Geladen back-up bestand Kan gegevens uit bestand niet herstellen %s De gegevens zijn opgeslagen @@ -441,7 +440,7 @@ Installeer eerst de uitbreiding Alle Talen Installeert automatisch alle nog niet geïnstalleerde plugins uit toegevoegde repositories. - Kan GitHub niet bereiken, schakel jsdelivr proxy in. + Kan GitHub niet bereiken, schakel jsDelivr proxy in… APK Installatie Automatisch plugins downloaden Uitbreidingen @@ -453,7 +452,7 @@ Repository naam Plugin Gedownload Mislukt - Omzeilt de blokkering van GitHub met behulp van jsdelivr, waardoor updates enkele dagen vertraging kunnen oplopen. + Omzeilt de blokkering van GitHub met behulp van jsDelivr, waardoor updates enkele dagen vertraging kunnen oplopen. Repository URL Download %d %s voltooid HLS Afspeellijst @@ -494,7 +493,7 @@ Beoordeling: %s Alle extensies zijn uitgeschakeld door een crash om u te helpen degene te vinden die problemen veroorzaakt. Bekijk de crash info - Deze lijst is blijkbaar leeg, probeer een andere lijst te kiezen + Deze lijst is leeg. Probeer een andere. Alfabetisch (A tot Z) Weet je zeker dat je wilt afsluiten\? Bijgewerkt (Oud naar Nieuw) @@ -509,8 +508,8 @@ Verwijderen uit bekeken App wordt bijgewerkt bij afsluiten Gesorteerd - Het lijkt erop dat je bibliotheek leeg is :( -\nLog in op een bibliotheekaccount of voeg voorstellingen toe aan uw lokale bibliotheek + Je bibliotheek is leeg :( +\nLog in op een bibliotheekaccount of voeg voorstellingen toe aan uw lokale bibliotheek. Uitgeschakeld: %d Stop Niet gedownload: %d @@ -552,4 +551,4 @@ \nWord lid van onze Discord of zoek online. Audiosporen Gesorteerd op - + \ No newline at end of file diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 4e7f6abd..6c9e3a67 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -492,4 +492,45 @@ Oppdatering startet Programtillegg nedlastet Programmet vil oppgraderes når du avslutter det - + Blafringsmengde med synlig avspiller + Start på ny + raw.githubusercontent.com-mellomtjener + Sorter etter + Åpne med … + Vurdering (høy til lav) + Start + Alfabetisk (A-Å) + Kunne ikke nå GitHub. Skrur på jsDelivr-mellomtjener … + Tilbyder-test + Bibliotek + Nettleser + Logg + Oppdatert (ny til gammel) + Skjult avspiller — blafringsmengde + Abonnert + Vist avspiller — blafringsmengde + Oppdatert (gammel til ny) + Vellykket + Episode %d sluppet. + Foretrukket visningskvalitet (mobildata) + Stopp + Fjern fra sette + Abonnement på %s opphevet + Android TV + Angre + Oppdatert abonnementer + Mislykket + Alfabetisk (Å-A) + Vurdering (lav til høy) + Abonnerer på %s + Blafringsmengde med skjult avspiller + Velg bibliotek + Omgår blokkering av GitHub ved bruk av jsDelivr. Kan utsette oppdateringer et par dager. + ISP-omgåelser + Denne listen er tom. Prøv å bytte til en annen. + Sorter + Fant fil for trygt modus. +\nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet. + Biblioteket ditt er tomt :( +\nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek. + \ 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 863b2c2f..9801a557 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,6 +1,5 @@ - - + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -505,9 +504,9 @@ Alfabetycznie (od Z do A) Wybierz bibliotekę Biblioteka - Wygląda na to, że twoja biblioteka jest pusta :( -\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki - Wygląda na to, że ta lista jest pusta, spróbuj przełączyć się na inną + Twoja biblioteka jest pusta :( +\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki. + 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 @@ -530,7 +529,7 @@ 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. + 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… Domyślna jakość (dane mobilne) - + \ 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 f34dec8f..261051ed 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -444,7 +444,7 @@ Cam Abertura Selecionar Biblioteca - Ignora o bloqueio do GitHub usando jsdelivr, pode fazer com que as atualizações sejam atrasadas em alguns dias. + Ignora o bloqueio do GitHub usando jsDelivr. Pode fazer com que as actualizações sejam atrasadas por alguns dias. VLC Todas as linguagens Atualizado (Novo para Antigo) @@ -483,7 +483,7 @@ Pular %s Abertura mista Alfabético (Z a A) - Parece que esta lista está vazia, tente trocar para outra + Esta lista está vazia. Tente trocar para outra. Inscrito em %s 4K Faixas de vídeo @@ -491,8 +491,8 @@ Atualizando shows inscritos Alfabético (A a Z) Avaliações (Crescente) - Parece que a sua biblioteca está vazia :( -\nFaça login em uma conta de biblioteca ou adicione shows à sua biblioteca local + A sua biblioteca está vazia :( +\nEntre numa conta da biblioteca ou adicione espectáculos à sua biblioteca local. Arquivo de modo de segurança encontrado! \nNenhuma extensão será carregada na inicialização do app até que o arquivo seja removido. Contorno do provedor de serviço de internet (ISP) @@ -503,7 +503,7 @@ Qualidade Preferida (Dados Móveis) Quantidade de busca (em segundos) usada quando o player de video está visível Quantidade de busca (em segundos) usada quando o player de video está oculto - Falha ao conectar com GitHub, ativando proxy jsdelivr. + Não foi possível chegar ao GitHub. Ativando o proxy jsDelivr… Cache Android TV Legendas @@ -529,4 +529,4 @@ Configurações padrão SD Faixas de áudio - + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 99e112ce..ba8c1af7 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d Distribuție: %s @@ -126,14 +125,14 @@ Modul Eigengravy Adăugați opțiunea de viteză în player Derulați spre înainte/înapoi - Derulați spre stânga sau spre dreapta pentru a controla timpul de difuzare a videoclipului + Glisați dintr-o parte în alta pentru a vă controla poziția într-un videoclip Derulați pentru a modifica setările Glisați spre stânga sau spre dreapta pentru a schimba luminozitatea sau volumul Atingeți de două ori pentru a merge înainte/înapoi Atingeți de două ori pentru a pune pauză Atingeți de două ori partea stângă sau dreaptă a ecranului pentru a derula rapid înainte sau înapoi videoclipul - Atingeți de două ori centrul ecranului pentru a întrerupe înregistrarea video - Atingeți dublu pentru a căuta + Atingeți de două ori în mijloc pentru a pune pauză + Cantitatea de căutare al player-ului (secunde) Utilizați luminozitatea sistemului Utilizați luminozitatea sistemului în playerul aplicației în loc de o suprapunere întunecată @@ -157,7 +156,7 @@ Arată trailerul Arată afișele de la Kitsu Afișați actualizările aplicației - Căutați automat noi actualizări la pornire + Căutați automat noi actualizări după pornirea aplicației. Actualizați la prerelease Căutați actualizări ale versiunilor preliminare în loc să căutați doar versiunile complete GitHub @@ -251,22 +250,22 @@ Nu se mai arată din nou Treci peste această actualizare Actualizare - Rezoluția preferată + Calitatea preferată (WiFi) Limitarea caracterelor de titlu în player Rezoluția playerului video Dimensiunea cache-ului video Lungimea buffer-ului video Dimensiunea cache-ului video pe disc Ștergeți memoria cache de imagine și video - Dacă este setat la un nivel prea ridicat, poate cauza probleme pe sistemele cu prea puțină memorie RAM. Cum ar fi dispozitivele Android TV sau telefoanele mai vechi - Dacă este setat la un nivel prea ridicat, poate cauza probleme pe sistemele cu spațiu de stocare intern redus. Ca și dispozitivele Android TV + Provoacă blocaje dacă este setată la un nivel prea ridicat pe dispozitive cu memorie redusă, cum ar fi Android TV. + Cauzează probleme dacă este setat la un nivel prea ridicat pe dispozitive cu spațiu de stocare redus, cum ar fi Android TV. DNS peste HTTPS Folositor pentru evitarea blocajelor ISP Adaugați site-ul Eliminați site-ul Adăugați o copie a unui site existent, cu o adresă URL diferită Locul descărcării - Adresa URL a serverului Nginx + Adresa URL a serverului NGNIX Afișarea anime-urilor dublate/subtitrate Adaptare la ecran Întindere @@ -286,7 +285,7 @@ Dispunere telefonică Dispunerea emulatorului Culoare primară - Tema + Tema aplicației Locația titlului posterului Locația titlului de pe poster @@ -312,7 +311,7 @@ /\?\? /%d %s autentificat - Imposibil de autentificat la %s + Nu s-a putut autentifica la %s Nu există Normal @@ -324,10 +323,10 @@ Umbră Relief Sincronizare subtitrări - 1000ms + 1000 ms Delay subtitrare - Se utilizează dacă subtitrările sunt afișate %dms prea devremeo - Se utilizează dacă subtitrările sunt afișate %dms prea târziu + Utilizează acesta dacă subtitrările sunt afișate %d ms prea devreme + Utilizează acesta dacă subtitrările sunt afișate %d ms prea târziu Fără întârziere la subtitrare Trailer Istoric - Marcare ca vizionat + Marcați ca vizionat Redă automat următorul episod CloudStream Vizionează trailerul @@ -391,4 +390,162 @@ Joacă cu CloudStream Actualizare plugin automată Descarcă plugin-uri automat - + Altele + Trecut + Start + %d %s + NSFW + %d-%d + Player Afișat - Căutați Suma + Player Ascuns - Căutați Suma + Livestream-uri + NSFW + Eșuat + Cantitatea de căutare utilizată atunci când playerul este vizibil + Livestream + Cantitatea de căutare utilizată atunci când playerul este ascuns + Calitatea preferată (Date Mobile) + Video + Instalator APK + Instalează automat toate plugin-urile neinstalate din depozite adăugate. + %s %d%s + Unele telefoane nu acceptă noul program de instalare a pachetului. Încercați opțiunea veche dacă nu se instalează actualizările. + Refaceți procesul de configurare + Treci peste partea de configurare + Descărcare pe loturi + 18+ + Evaluare: %s + Treci peste %s + Aplicația nu a fost găsită + Încheiere mixat + Ștergeți istoricul + Introducere + Da + Ce vrei să vezi + Recapitulare + Alfabetic (A la Z) + Încheiere + Dezabonat de la %s + Nu s-a descărcat: %d + Vezi depozite din comunitate + PackageInstaller (Instalare a pachetelor) + Stare + Nu se poate încărca %s + Piste audio + Referent + Deschidere + Extensii + Layout + Prea mult text. Nu s-a putut salva în clipboard. + Linkuri + Funcții + Autori + Raportarea accidentelor + Adaugă depozit + Se pare că biblioteca ta este goală :( +\nConectează-te la un cont de bibliotecă sau adaugă emisiuni în biblioteca ta locală + Eliminați subtitrările închise din subtitrări + Descărcați lista de site-uri pe care doriți să le utilizați + Evaluare (Ridicat la Scăzut) + Extensii + Ștergeți depozitul + Dimensiune + Cache + Funcțiile player-ului + Plugin încărcat + Vezi informații despre accident + Deschideți cu + Eliminați bloat din subtitrări + Actualizat %d plugin-uri + Evaluare (Scăzut la Ridicat) + Terminat + Versiune + Backup + Suplimente + Actualizat (Nou la Vechi) + Schimbați aspectul aplicației pentru a se potrivi dispozitivului dvs + Nume de depozit + %s (Dezactivat) + Nu + Abonat la %s + Aplicația va fi actualizată la ieșire + Web Video Cast + Ocoliri ISP + Anterior + Sortează + Selectați Biblioteca + Filtrați în funcție de limba media preferată + Episodul %d lansat! + Android TV + VLC + Urmăriți videoclipuri în aceste limbi + Reveniți + Acțiuni + Alfabetic (Z la A) + URL invalid + Toate extensiile au fost dezactivate din cauza unei defecțiuni pentru a vă ajuta să o găsiți pe cea care cauzează probleme. + Se descarcă actualizarea aplicației… + Browser web + CloudStream nu are niciun site instalat în mod implicit. Trebuie să instalați site-urile din depozite. +\n +\nDin cauza unui DMCA takedown fără creier de către Sky UK Limited 🤮 nu putem lega site-ul de depozit în aplicație. +\n +\nAlăturați-vă Discordului nostru sau căutați online. + A început să descarce %d %s… + Mod sigur pornit + Fișier Mod Sigur găsit! +\nNu încarcă nicio extensie la pornire până când fișierul nu este eliminat. + Scoateți de la urmărit + Actualizat (Vechi la Nou) + Aplică la repornire + Descriere + Plugin Descărcat + Sunteți sigur că vreți să ieșiți\? + Se pare că această listă este goală, încercați să treceți la o alta + Sortați după + Player intern + Prestabile + URL-ul depozitului + Oprește + Aspecturi + Plugin Șters + Gesturi + Nu s-a putut instala noua versiune a aplicației + Piste + Repornește + Activează NSFW la furnizori suportate + Nu s-a putut ajunge la GitHub. Se activează proxy-ul jsDelivr… + Proxy raw.githubusercontent.com + Depășește blocarea GitHub folosind jsdelivr, poate cauza întârzieri de câteva zile la actualizări. + Următorul + Toate %s deja descărcate + S-a descărcat: %d + Dezactivat: %d + Toate subtitrările cu majuscule + Descărcați toate plugin-urile din acest depozit\? + Se actualizează emisiunile abonate + Abonat + Lista publică + MPV + Moştenit + Test de furnizor + Furnizori + Link către stream + Acest lucru va șterge, de asemenea, toate plugin-urile din depozit + Se instalează actualizarea aplicației… + S-a descărcat %d %s + Suportat + Playlist HLS + Piste video + Arată Afișați pop-up-uri de săritură pentru deschidere/încheiere + Toate limbile + Deschidere mixat + Credite + Limbă + plugin + plugin-uri + Instalați mai întâi extensia + Player video preferat + Actualizări al aplicației + Subtitrări + \ 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 b5601da3..465773b6 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -439,8 +439,8 @@ Алфавитный (Я до А) Выбрать библиотеку Открыть с - Похоже, ваша библиотека пуста :( -\nВойдите в аккаунт с библиотекой или добавьте сериалы в локальную библиотеку + Ваша библиотека пуста :( +\nВойдите в аккаунт с библиотекой или добавьте сериалы в локальную библиотеку. Сортировка Открытый список Рейтинг (высокий - низкий) @@ -487,13 +487,13 @@ Файл безопасного режима найден! \nНе загружаются никакие расширения при запуске, пока файл не будет удален. Приложение будет обновлено после выхода - Похоже, этот список пуст, попробуйте переключиться на другой + Этот список пуст, попробуйте переключиться на другой. Все субтитры заглавными Показывать всплывающие окна для пропуска вступления/заключения Фильтровать по предпочитаемому языку медиа Неверный ID Ссылка на стрим - Показывает кнопку на главной странице, с помощью которой можно выбрать случайный фильм или сериал с главной страницы + Отображать рандомную кнопку на Главной странице Рандомная кнопка Legacy (старый) Веб видеокаст @@ -522,11 +522,11 @@ Подписался на %s Предпочтительное качество видео (Мобильный интернет) raw.githubusercontent.com Прокси-сервер - Не удалось подключиться к GitHub. Будет выполнен прокси jsdelivr. + Не удалось подключиться к GitHub. Включаем проксирование через jsdelivr… Эпизод %d выпущен! Обходы провайдера Обновление подписки на фильмы и сериалы - Обход ограничения доступа к GitHub с помощью jsdelivr может задержать обновления на несколько дней. + Обход ограничения доступа к GitHub с помощью jsDelivr может задержать обновления на несколько дней. Подписные Отказались от подписки на %s - + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5b543915..c84de758 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,6 +1,5 @@ - - + %d %s | %s %s • %s @@ -311,7 +310,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Genel Rastgele İçerik - Ana sayfada rastgele bir film veya dizi seçen bir tuş gösterir + Ana sayfada rastgele bir film veya dizi seçen bir tuş göster Sağlayıcı dilleri Uygulama düzeni Tercih edilen medya @@ -565,7 +564,7 @@ Tercih edilen görüntü kalitesi (Mobil veri) Oynatıcı görünürken atlanacak süre Oynatıcı gizli durumdayken atlanacak süre miktarı - jsdelivr kullanarak GitHub kısıtlamasını aşar. Güncellemeler birkaç gün gecikebilir. + jsdelivr kullanarak GitHub kısıtlamasını kaldırır, güncellemelerin birkaç gün gecikmesine neden olabilir. Android TV Yeni bölüm %d yayınlandı! Sağlayıcıyı kontrol et @@ -578,4 +577,4 @@ %s kanalı aboneliğinden çıkıldı Günlük Oynatıcı görünür durumdayken atlanacak süre miktarı - + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2e7f4789..084d1ad3 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -427,9 +427,9 @@ Вимкнено: %d Не завантажено: %d Оновлено %d плагіни - За замовчуванням в CloudStream не встановлені сайти. Вам потрібно встановити сайти з репозиторіїв. + CloudStream не має жодного сайту, встановленого за замовчуванням. Вам потрібно встановити сайти з репозиторіїв. \n -\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунку. +\nЧерез безглузду заявку DMCA від Sky UK Limited 🤮 ми не можемо надати посилання на репозиторій в застосунку. \n \nПриєднуйтесь до нашого Discord або шукайте в інтернеті. Переглянути репозиторії спільноти @@ -485,7 +485,7 @@ Увімкнено безпечний режим Автори Завантаження оновлення програми… - Усі розширення вимкнено через збій, щоб допомогти вам знайти те, що спричиняє проблеми. + Усі розширення були вимкнені через збій, щоб допомогти вам знайти те, що стало причиною проблеми. Програму не знайдено Змішаний опенінг Видалити з переглянутого @@ -497,13 +497,13 @@ Сортувати за За алфавітом (від А до Я) За рейтингом (від низького до високого) - Схоже, ваша бібліотека порожня :( -\nУвійдіть в обліковий запис бібліотеки або додайте серіали до вашої локальної бібліотеки + Ваша бібліотека порожня :( +\nУвійдіть в обліковий запис бібліотеки або додайте фільми до вашої локальної бібліотеки. За алфавітом (від Я до А) Виберіть бібліотеку Відкрити з Браузер - Схоже, цей список порожній, спробуйте перейти до іншого + Цей список порожній. Спробуйте перейти до іншого. Файл безпечного режиму знайдено! \nРозширеня не завантажуються під час запуску, доки файл не буде видалено. Android TV @@ -525,8 +525,8 @@ Епізод %d випущено! Повернути raw.githubusercontent.com Proxy - Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. + Не вдалося отримати доступ до GitHub. Увімкнення проксі-сервера jsDelivr… Обходи ISP - Обхід блокування GitHub за допомогою jsdelivr, може призвести до затримки оновлень на кілька днів. + Обхід блокування GitHub за допомогою jsDelivr. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - + \ 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 71d97abc..1d3fedae 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,6 +1,5 @@ - - + %d %s | %s %s • %s @@ -312,7 +311,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. 通用 随机按钮 - 在主页上显示按钮,可以从主页上随机选择电影或电视剧 + 在主页中显示随机按钮 片源语言 应用布局 首选类型 @@ -552,9 +551,9 @@ 字母排序(从 Z 到 A) 选择库 打开方式 - 看来您的库是空的 :( -\n登录库账户或添加节目到您的本地库 - 看来此列表是空的,请尝试切换到另一个 + 您的库是空的 :( +\n登录库账户或添加节目到您的本地库。 + 此列表是空的,请尝试切换到另一个。 播放器显示 - 快进快退秒数 播放器可见时使用的快进快退秒数 播放器隐藏 - 快进快退秒数 @@ -573,9 +572,9 @@ 成功 日志 raw.githubusercontent.com 代理 - 连接 Github 失败,正在启用 jsdelivr 代理。 - 使用 jsdelivr,可以绕过 GitHub 的封锁。可能会延迟几天的更新。 + 无法访问 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 ac76e243..8f67739d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -382,8 +382,8 @@ 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. + Could not reach GitHub. Turning on 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 @@ -648,8 +648,9 @@ Alphabetical (Z to A) Select Library Open with - 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 + Your library is empty :( +\nLog in on a library account or add shows to your local library. + 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 From 56a680fa9cbfd83110e836cae96a20ed4c797f25 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:56:05 +0000 Subject: [PATCH 387/888] chore(locales): fix locale issues --- .../lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 3 +++ app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-ars/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 5 +++-- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 7 ++++--- app/src/main/res/values-hr/strings.xml | 5 +++-- app/src/main/res/values-in/strings.xml | 5 +++-- app/src/main/res/values-it/strings.xml | 5 +++-- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 4 ++-- app/src/main/res/values-lv/strings.xml | 4 ++-- app/src/main/res/values-mk/strings.xml | 5 +++-- app/src/main/res/values-ml/strings.xml | 5 +++-- app/src/main/res/values-nl/strings.xml | 5 +++-- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 5 +++-- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 5 +++-- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 5 +++-- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 5 +++-- 24 files changed, 53 insertions(+), 38 deletions(-) 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 4aa859aa..5a000eb4 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 @@ -57,6 +57,7 @@ fun getCurrentLocale(context: Context): String { val appLanguages = arrayListOf( /* begin language list */ Triple("", "العربية", "ar"), + Triple("", "ars", "ars"), Triple("", "български", "bg"), Triple("", "বাংলা", "bn"), Triple("\uD83C\uDDE7\uD83C\uDDF7", "português brasileiro", "bp"), @@ -76,6 +77,8 @@ val appLanguages = arrayListOf( Triple("\uD83C\uDDEE\uD83C\uDDF1", "עברית", "iw"), Triple("", "日本語 (にほんご)", "ja"), Triple("", "ಕನ್ನಡ", "kn"), + Triple("", "한국어", "ko"), + Triple("", "latviešu valoda", "lv"), Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), Triple("", "bahasa Melayu", "ms"), diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 637e8c15..c1f07d6c 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -561,4 +561,4 @@ تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - \ No newline at end of file + diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index a6b3daec..42eba3cc 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -1,2 +1,2 @@ - \ 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 43ded674..4424529a 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d @@ -553,4 +554,4 @@ 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 071f30c0..e0a9594c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -529,4 +529,4 @@ Rückgängig Abonniert ISP-Umgehungen - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b863479e..d248044d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -529,4 +529,4 @@ 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 b7c9900b..62e41fdb 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,5 +1,6 @@ - + + CloudStream Accueil Rechercher @@ -385,7 +386,7 @@ 4K Web -30 - \@string/anime + @string/anime OAV NSFW %s %s @@ -530,4 +531,4 @@ Joueur représenté - Montant de la recherche Joueur caché - Montant de la recherche Impossible d\'accéder à GitHub. Activation du proxy jsDelivr… - \ 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 2491c3ce..41b95aad 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,6 @@ - + + %d %s | %s %s • %s @@ -554,4 +555,4 @@ Neuspješno dohvaćanje GitHuba. Uključuje se jsdelivr proxy … Zaobilazi blokiranje GitHuba koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. Preferirana kvaliteta gledanja (podatkovna mobilna mreža) - \ 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 af02b9d0..15c09228 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Pemeran: %s @@ -552,4 +553,4 @@ Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - \ 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 248cb230..25b8ca5a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Cast: %s @@ -551,4 +552,4 @@ Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - \ 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 index 127f60b7..347712d8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -198,4 +198,4 @@ \nSky UK Limitedによる無脳なDMCAテイクダウンのため🤮、アプリ内でリポジトリサイトをリンクすることができません。 \n \n私たちのDiscordに参加するか、オンラインで検索してください。 - \ No newline at end of file + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index fdadb4ae..74c05d07 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -497,7 +497,7 @@ 개발자에게 %d 바나나 줌 바나나를 주지 않음 상세 정보 - \@string/home_play + @string/home_play 플롯을 찾을 수 없음 설명을 찾을 수 없음 Logcat 🐈 표시 @@ -529,4 +529,4 @@ 구독중 구독 %s 구독 취소 %s - \ No newline at end of file + diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 8659a139..56724a28 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -108,7 +108,7 @@ Turpini skatīties Noņemt Vairāk informācijas - \@string/home_play + @string/home_play VPNs varētu būt vajadzīgs lai šis devējs strādātu pareizi Šis devējs ir Torrents vpn ir rekomendēts Dati nav doti no saites, video lādēšanas neizdosies ja neiksestē saitē. @@ -525,4 +525,4 @@ Abonēto šovu atjaunināšana Abonēts Abonēts %s - \ No newline at end of file + diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 0e4a7aea..d217f97f 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,5 +1,6 @@ - + + Брзина (%.2fx) Оценето: %.1f @@ -532,4 +533,4 @@ Смени провајдер Оди назад Актери: %s - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 1f653286..feff0673 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,5 +1,6 @@ - + + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -178,4 +179,4 @@ പുറത്ത്പോകുന്നതോടുകൂടി ആപ് അപ്ഡേറ്റ് ആവുന്നതാണ് ലൈബ്രറി തിരഞ്ഞെടുക്കുക ഇത് ഉപയോഗിച്ച് തുറക്കുക - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d7e3ede6..e640a28a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Cast: %s @@ -551,4 +552,4 @@ \nWord lid van onze Discord of zoek online. Audiosporen Gesorteerd op - \ No newline at end of file + diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 6c9e3a67..92882faf 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -533,4 +533,4 @@ \nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet. Biblioteket ditt er tomt :( \nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek. - \ 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 9801a557..1071a9b3 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,5 +1,6 @@ - + + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -532,4 +533,4 @@ 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… Domyślna jakość (dane mobilne) - \ 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 261051ed..705285eb 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -529,4 +529,4 @@ Configurações padrão SD Faixas de áudio - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ba8c1af7..bd22fb33 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d Distribuție: %s @@ -548,4 +549,4 @@ Player video preferat Actualizări al aplicației Subtitrări - \ 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 465773b6..bcd3fc0f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -529,4 +529,4 @@ Обход ограничения доступа к GitHub с помощью jsDelivr может задержать обновления на несколько дней. Подписные Отказались от подписки на %s - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c84de758..2ee7b65f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,5 +1,6 @@ - + + %d %s | %s %s • %s @@ -577,4 +578,4 @@ %s kanalı aboneliğinden çıkıldı Günlük Oynatıcı görünür durumdayken atlanacak süre miktarı - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 084d1ad3..c58dd334 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -529,4 +529,4 @@ Обходи ISP Обхід блокування GitHub за допомогою jsDelivr. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - \ 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 1d3fedae..f63e1d75 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,5 +1,6 @@ - + + %d %s | %s %s • %s @@ -577,4 +578,4 @@ ISP 绕过 还原 首选播放画质(移动数据) - \ No newline at end of file + From fb3576ea52e12f5c1a71f0bbcc1ad72f70dabea5 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Fri, 21 Apr 2023 19:56:17 +0800 Subject: [PATCH 388/888] fix video download (#453) --- .../com/lagradost/cloudstream3/utils/VideoDownloadManager.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 2902b76b..c18ff48f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1388,7 +1388,7 @@ object VideoDownloadManager { } } - if (link.isM3u8 || URI(link.url).path.endsWith(".m3u8")) { + if (link.isM3u8 || URL(link.url).path.endsWith(".m3u8")) { val startIndex = if (tryResume) { context.getKey( KEY_DOWNLOAD_INFO, @@ -1474,6 +1474,8 @@ object VideoDownloadManager { if (connectionResult != null && connectionResult > 0) { // SUCCESS removeKey(KEY_RESUME_PACKAGES, id.toString()) break + } else if (index == item.links.lastIndex) { + downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) } } } catch (e: Exception) { From 42bf8ed08e934e3b5c68fe2966ebf07b43e30532 Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 3 May 2023 22:16:35 +0200 Subject: [PATCH 389/888] Update newpipe (#462) --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fa1b277a..7110c43d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -216,8 +216,8 @@ dependencies { // slow af yt //implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT") - // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L190 - implementation("com.github.TeamNewPipe:NewPipeExtractor:9ffdd0948b2ecd82655f5ff2a3e127b2b7695d5b") + // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204 + implementation("com.github.TeamNewPipe:NewPipeExtractor:v0.22.6") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance From 8a5ddcd1267244d27c99eba361e78a7083b59023 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 3 May 2023 21:45:40 +0200 Subject: [PATCH 390/888] Added translation using Weblate (Odia) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated using Weblate (Vietnamese) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Latvian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Vietnamese) Currently translated at 99.3% (606 of 610 strings) Translated using Weblate (Malayalam) Currently translated at 41.4% (253 of 610 strings) Translated using Weblate (Vietnamese) Currently translated at 96.3% (588 of 610 strings) Translated using Weblate (Hungarian) Currently translated at 83.6% (510 of 610 strings) Translated using Weblate (Slovak) Currently translated at 72.4% (442 of 610 strings) Translated using Weblate (Slovak) Currently translated at 44.9% (274 of 610 strings) Translated using Weblate (Czech) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Slovak) Currently translated at 34.2% (209 of 610 strings) Co-authored-by: Bojtár Zsömle Co-authored-by: Dinh Nguyen Co-authored-by: Hosted Weblate Co-authored-by: Juraj Liso Co-authored-by: Khoi Co-authored-by: Kiên Tài Co-authored-by: Subham Jena Co-authored-by: akku vijay Co-authored-by: liva Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/lv/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ml/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/sk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translation: Cloudstream/App --- app/src/main/res/values-cs/strings.xml | 7 +- app/src/main/res/values-hu/strings.xml | 5 +- app/src/main/res/values-lv/strings.xml | 34 ++-- app/src/main/res/values-ml/strings.xml | 27 ++- app/src/main/res/values-or/strings.xml | 2 + app/src/main/res/values-sk/strings.xml | 254 ++++++++++++++++++++++++- app/src/main/res/values-vi/strings.xml | 41 ++-- 7 files changed, 334 insertions(+), 36 deletions(-) create mode 100644 app/src/main/res/values-or/strings.xml diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4424529a..36f5d3c7 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,6 +1,5 @@ - - + %s Ep %d @@ -132,7 +131,7 @@ Klepněte dvakrát vpravo nebo vlevo pro posun vpřed nebo vzad Klepněte dvakrát doprostřed pro pozastavení Použít systémový jas - V přehrávači použít systémov překrytí + V přehrávači použít systémový jas namísto tmavého překrytí Aktualizovat postup sledování Automaticky synchronizovat postup sledování současné epizody Obnovit data ze zálohy @@ -554,4 +553,4 @@ 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-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7c2bbc18..8ed09726 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Megnyitás böngészőben Betöltés kihagyása Poster - @string/result_poster_img_des + \@string/result_poster_img_desPoszter Nézés Befejezve Később megnézés @@ -495,4 +495,5 @@ Beállítás kihagyása HQ %d letöltve - + Start + \ No newline at end of file diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 56724a28..1ddd4cd2 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -39,7 +39,7 @@ Skatities Torrentu Devēji Subtitri - Atkārtot connection + Atkārtot pieslēgumu… Iet atpakaļ Palaist epizodi Ieladēt @@ -56,7 +56,7 @@ Dzēst failu Palaist failu Atsākt ielādi - "Pauzēt ielādi" + Pauzēt ielādi Atslēgt automātisko kļūdu ziņošanu Vairāk informācijas Slēpt @@ -98,7 +98,7 @@ Iztīrīt Teksta krāsa Automātiski-iestādīt valodu - %dd %dh %dm + %dh %dm %dm %dd %dh %dm Ielādēt valodas @@ -130,7 +130,7 @@ Novelc lai paradītu Novelc no māla lidz malai lai pozicionētu video Novēlu lai mainītu iestādījums - Novēlu uz augšu vai apakšu pa labi un pa kreisi lai lai nomainītu gaišumu un skaņu + Novēlu uz augšu vai apakšu pa labi un pa kreisi lai nomainītu gaišumu un skaņu Automātiski nākamo epizodi Sākt nākamo epizodi kad šis bridzas Divreiz uzpied lai paslēptu @@ -155,7 +155,7 @@ Atjaunināt un saglabāt Informācija Advancēta meklēšana - Dod tev meklēšanas rezultātus citus no devēja. + Dod tev meklēšanas rezultātus citus no devēja Tikai sūtīt datus no kļudām Nesutīt datus Radīt fillera epizodi priekš animē @@ -164,9 +164,9 @@ Slēpt izvēlētos video kvalitāti meklēšanas rezultātus Automātiski papildinājumu atjauninājumi Automātiski ielādēt papildinājumus - Automātiski instalēt visus neinstalētos papildinājumus no glabātavas + Automātiski instalēt visus neinstalētos papildinājumus no glabātavas. Radīt aplikācijas atjauninājumus - Automātiski meklēt jaunus atjauninājumus kad palaiž aplikāciju + Automātiski meklēt jaunus atjauninājumus kad palaiž aplikāciju. Atsākt uzstādīšanas procesu Atjaunināt uz priekšizlaišanu Dažu telefoni nepieņem jauno aplikāciju instaletāju. Meiģiniet veco opciju ja nevar stjaunināt. @@ -274,7 +274,7 @@ Izraisa avārijas, ja ierīcēs ar mazu atmiņu ir iestatīta pārāk augsta vērtība, piemēram, Android TV. Izdevīgs lai izlaistu ISO aizturi raw.githubusercontent.com Proxy - Apiet GitHub bloķēšanu, izmantojot jsdelivr, tādēļ atjauninājumi var aizkavēties par dažām dienām. + Apiet GitHub bloķēšanu, izmantojot jsdelivr. Tādēļ atjauninājumi var aizkavēties par dažām dienām. Klonēt saiti Noņemt saiti Pievienojiet esošas vietnes klonu ar citu URL @@ -451,7 +451,7 @@ Notīrīt vēsturi Vēsture Rādīt izlaižamos uznirstošos logus atvēršanai/beigšanai - "Pārāk daudz teksta. Nevar saglabāt starpliktuvē." + Pārāk daudz teksta. Nevar saglabāt starpliktuvē. Notiek lietotnes atjauninājuma lejupielāde… @@ -470,7 +470,7 @@ Atlasiet Bibliotēka Atvērt ar Šķiet, ka jūsu bibliotēka ir tukša :( -\n Piesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai +\nPiesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai. Atgriest Anulēts %s abonements %d sērija izlaista! @@ -479,7 +479,7 @@ Github Nav subtitru Atskaņot epizodi - Piedodiet, bet aplikācijā bija kļūda, anonīms kļūdas ziņojums tika aizsūtīts izstrādātājiem. + Piedodiet, bet aplikācijā bija kļūda. Anonīms kļūdas ziņojums tika aizsūtīts izstrādātājiem Iet Bezmaksas Ieslēgt elementus uz plakātiem @@ -491,7 +491,7 @@ Meklēšanas summa, kas tiek izmantota, kad spēlētājs ir paslēpts DNS virs HTTPS Tuvināt - Neizdevās sasniegt GitHub, iespējot jsdelivr starpniekserveri. + Neizdevās sasniegt GitHub. Pieslēdzas starpniekserverim caur jsDelivr… Iztiept Galvenā krāsa %s %s @@ -504,7 +504,11 @@ Web SDR Rezulūcija - CloudStream pēc noklusējuma nav instalēta neviena vietne. Vietnes jāinstalē no krātuvēm. Sky UK Limited bezsmadzeņu DMCA noņemšanas dēļ mēs nevaram saistīt ar repozitorija vietni lietotnē. Pievienojieties mūsu Discord vai meklējiet tiešsaistē. + CloudStream pēc noklusējuma nav instalēta neviena vietne. Vietnes jāinstalē no krātuvēm. +\n +\nSky UK Limited bezsmadzeņu DMCA noņemšanas dēļ mēs nevaram saistīt ar repozitorija vietni lietotnē. +\n +\nPievienojieties mūsu Discord vai meklējiet tiešsaistē. Viss %s jau ir lejupielādēts Repozitorija nosaukums Plugin ielādēti @@ -518,11 +522,11 @@ Noņemt no skatītajiem Atzīmēt kā skatītu Vai tiešām vēlaties iziet\? - Šķiet, ka šis saraksts ir tukšs, mēģiniet pārslēgties uz citu + Šķiet, ka šis saraksts ir tukšs, mēģiniet pārslēgties uz citu. Atrasts drošā režīma fails! \n Paplašinājumi netiek ielādēti startēšanas laikā, kamēr fails nav noņemts. Vērtējums (no zema līdz augstam) Abonēto šovu atjaunināšana Abonēts Abonēts %s - + \ No newline at end of file diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index feff0673..a9d4b894 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,6 +1,5 @@ - - + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -179,4 +178,26 @@ പുറത്ത്പോകുന്നതോടുകൂടി ആപ് അപ്ഡേറ്റ് ആവുന്നതാണ് ലൈബ്രറി തിരഞ്ഞെടുക്കുക ഇത് ഉപയോഗിച്ച് തുറക്കുക - + ട്രെയിലർ പ്ലേ ചെയ്യുക + ലൈവ് സ്ട്രീം പ്ലേ ചെയ്യുക + ഫില്ലർ + %d min + ക്ലൗഡ് സ്ട്രീം ഉപയോഗിച്ച് കളിക്കുക + അടുത്ത ക്രമരഹിതമായ + എപ്പിസോഡ് പോസ്റ്റർ + അപ്ഡേറ്റ് ആരംഭിച്ചു + പ്രധാന പോസ്റ്റർ + പോസ്റ്റർ + ലോഡിംഗ് ഒഴിവാക്കുക + തിരയുക %s… + %dm + മടങ്ങിപ്പോവുക + പശ്ചാത്തല പ്രിവ്യൂ + പോസ്റ്റർ + ദാതാവിനെ മാറ്റുക + ലോഡിംഗ്… + ബ്രൗസർ + ഒന്നുമില്ല + വീണ്ടും കാണുക + സ്ട്രീം + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-or/strings.xml @@ -0,0 +1,2 @@ + + \ 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 12e580a2..1653e83f 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -104,4 +104,256 @@ Na správne fungovanie tohto poskytovateľa môže byť potrebná VPN Stránka neposkytla žiadne metadáta, načítanie videa zlyhá, ak na stránke neexistuje. Popis - + Pokračuje v prehrávaní v miniatúrnom prehrávači nad ostatnými aplikáciami + Zopakujte pripojenie… + Upustené + Obraz v obraze + Streamovať torrent + Náhľad pozadia + Tlačidlo na zmenu veľkosti prehrávača + Sledujem + Popis sa nenašiel + Ďalší náhodný + Stream + Podržané + Zobraziť Logcat 🐈 + Protokol + Prehliadač + Zhrnutie sa nenašlo + Dvojitým ťuknutím pozastaviť + Aktualizácie a zálohovanie + Informácie + Rozšírené vyhľadávanie + Zobraziť plagáty z Kitsu + Automatická aktualizácia doplnkov + Skryť vybranú kvalitu videa vo výsledkoch vyhľadávania + Zobraziť výplňovú epizódu pre anime + APK inštalátor + Niektoré telefóny nepodporujú nový inštalátor balíčkov. Ak sa aktualizácie nenainštalujú, skúste použiť staršiu možnosť. + Nenáročná aplikácia pre romány od rovnakých vývojárov + Jazyk aplikácie + Nenašli sa žiadne odkazy + Darujte benén vývojárom + Benén darovaný + Tento poskytovateľ nepodporuje Chromecast + Súbor zálohy načítaný + Automaticky synchronizovať priebeh sledovania súčasnej epizódy + Ťuknite dvakrát vpravo alebo vľavo pre pretočenie vpred alebo vzad + Potiahnutím zmeniť nastavenia + Posunutím nahor alebo nadol na ľavej alebo pravej strane zmeníte jas alebo hlasitosť + Dĺžka pretočenia (sekundy) + Zopakovať proces nastavenia + Titulky + Dáta uložené + Anime aplikácia od rovnakých vývojárov + Zálohovať dáta + Odkaz skopírovaný do schránky + Použiť systémový jas + Obnoviť dáta zo zálohy + Dvojitým ťuknutím pretočiť + Pridá možnosť rýchlosti do prehrávača + Automaticky sťahovať doplnky + Pripojte sa na Discord + Neodosiela žiadne dáta + Odstrániť čierne okraje + Automaticky vyhľadať nové aktualizácie po spustení aplikácie. + Prehrať epizódu + Chýbajú povolenia k úložisku. Skúste to prosím znova. + Nastavenia titulkov prehrávača + Spustiť ďalšiu epizódu po skončení aktuálnej + Chromecast titulky + Eigengravy režim + Potiahnutím pretočiť + Automaticky prehrať ďalšiu epizódu + Aktualizovať priebeh sledovania + Ťuknite dvakrát do stredu pre pozastavenie + V prehrávači použiť systémový jas namiesto tmavého prekrytia + Zobraziť upútavky + Automaticky nainštalovať všetky ešte nenainštalované doplnky z pridaných repozitárov. + Odosiela dáta len pri pádoch + Knižnica + GitHub + Hľadať + Účty + Nastavenia Chromecast titulkov + Potiahnutím zo strany na stranu môžete ovládať svoju pozíciu vo videu + Nepodarilo sa obnoviť dáta zo súboru %s + Chyba pri zálohovaní %s + Poskytne vám výsledky vyhľadávania rozdelené podľa poskytovateľa + Zobraziť aktualizácie aplikácie + Aktualizácia na predbežné vydania + Vyhľadať aktualizácie predbežných vydaní namiesto plných vydaní + Ospravedlňujeme sa, aplikácia spadla. Vývojárom bude odoslané anonymné hlásenie o páde + Obnoviť predvolenú hodnotu + Sezóna + Synopsa + vo fronte + Žiadne titulky + Anime + Kreslené + Skopírovať odkaz + Automaticky stiahnuť + Zrkadlo sťahovania + Zamknúť + Nenašla sa žiadna aktualizácia + Skontrolovať aktualizáciu + Zmeniť veľkosť + DNS cez HTTPS + Odstrániť stránku + Pridá klon existujúcej stránky s inou URL adresou + Cesta sťahovania + Android TV + Gestá + Funkcie prehrávača + Všeobecné + Náhodné tlačidlo + Prihlásiť sa + Prepnúť účet + Pridať účet + Rozloženie aplikácie + ahoj@svet.sk + Úspešné + MojeSuperMeno + Seriály + Seriál + E + Roztiahnuť + Záloha + Zdroj + Voľné + Veľkosť vyrovnávacej pamäte videa + Aktualizácie aplikácie + Umiestnenie názvu plagátu + Živý prenos + heslo123 + S + Pokračovať + NSFW + Akcie + Pozastaviť + Zobraziť anime dabované/s titulkami + Titulky + Synchronizovať + Prehrať v aplikácii + %d-%d + Spôsobuje zlyhania, ak je nastavená príliš vysoko na zariadeniach s nízkou pamäťou, ako je Android TV. + raw.githubusercontent.com Proxy + Trvanie + Aplikácia + /%d + Pridané %s + Dokument + Chromecast zrkadlo + Predvolené + Ostatné + Chyba pri sťahovaní, skontrolujte povolenia k úložisku + Primárna farba + Vytvoriť účet + %d / 10 + Priblížiť + Torrenty + Rozlíšenie prehrávača + Umiestniť názov pod plagát + Preferovaná kvalita sledovania (WiFi) + Rozšírenia + Hodnotené + -30 + Chyba vykresľovania + Neočakávaná chyba prehrávača + Téma aplikácie + Dokumenty + Preferované médiá + URL servera NGINX + %d %s + Predvolené + Pridať sledovanie + Žiadna sezóna + Epizóda + Znova načítať odkazy + Jazyky poskytovateľa + Spustiť + Živé prenosy + Stiahnuť titulky + Povoliť NSFW u podporovaných poskytovateľov + Obchádzanie ISP + Prepnúť UI prvky na plagáte + Rozloženie + Neúspešné + Stav + Preskočiť OP + Vyrovnávacia pamäť videa na disku + Hodnotenie + Torrent + OVA + Preskočiť túto aktualizáciu + /\?\? + Film + 127.0.0.1 + účet + Rok + Prispôsobiť obrazovke + Zmazať + Využité + Štítok kvality + Prehrávač skrytý - dĺžka pretočenia + Vzhľad + %s %d%s + Obchádza blokovanie GitHubu pomocou jsDelivr. Môže spôsobiť oneskorenie aktualizácií o niekoľko dní. + Zobraziť náhodné tlačidlo na domovskej stránke + Odhlásiť sa + Aktualizovať + Stránka + Dĺžka vyrovnávacej pamäte videa + Zmazať súbor + Prehrať v %s + Funkcie + Nezobrazovať znova + Vzdialená chyba + Užitočné na obchádzanie blokácií ISP + Odkazy + Klonovať stránku + OVA + Filmy + príklad.sk + Vyrovnávacia pamäť + Nepodarilo sa pripojiť na GitHub. Zapína sa proxy jsDelivr… + Nenašli sa žiadne epizódy + +30 + Ázijské drámy + Anime + Chyba zdroja + Prehrať v prehliadači + Štítok dabingu + Štítok titulkov + Názov + Vymazať vyrovnávaciu pamäť videí a obrázkov + Prehrávač zobrazený - dĺžka pretáčania + Dĺžka pretočenia, keď je prehrávač viditeľný + Dĺžka pretočenia, keď je prehrávač skrytý + Kódovanie titulkov + Test poskytovateľa + Rozloženie + Automaticky + Mobilné rozloženie + Poskytovatelia + TV rozloženie + Kód jazyka (sk) + MôjSuperWeb + %s %s + Vylúčenie zodpovednosti + NSFW + Týmto sa natrvalo vymaže %s +\nSte si istý\? + %dm +\nzostáva + Prebieha + Dokončené + Rozloženie emulátora + Epizódy + Video + Ázijská dráma + Chromecastovať epizódu + Preferovaná kvalita sledovania (mobilné dáta) + Maximálny počet znakov v názve prehrávača + Spôsobuje problémy, ak je nastavená príliš vysoko v zariadeniach s malým ukladacím priestorom, ako je napríklad Android TV. + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8cad60ad..926460d3 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,6 +1,5 @@ - - + %s Tập %d @@ -129,16 +128,16 @@ Chỉnh tốc độ phim Có thể điều chỉnh tốc độ phát phim Vuốt để tua nhanh - Bạn có thể vuốt trái hoặc phải để tua nhanh khi xem phim + Vuốt sang trái hoặc phải để tua video Vuốt để chỉnh độ sáng và âm lượng - Vuốt từ dưới lên trên ở bên trái hoặc phải đều điều chỉnh độ sáng và âm lượng + Vuốt lên hoặc vuốt xuống ở hai bên để điều chỉnh độ sáng và âm lượng Tự động phát tập tiếp theo Phát tập tiếp theo sau khi hết tập hiện tại Nhấn 2 lần để tua Nhấn 2 lần để tạm dừng - Thời lượng tua + Thời lượng tua (Giây) Nhấn 2 lần vào bên trái hoặc bên phải màn hình để tua trước hoặc sau - Nhấn vào giữa để tạm dừng + Nhấn vào giữa hai lần để tạm dừng Sử dụng độ sáng hệ thống Sử dụng độ sáng hệ thống trong trình phát ứng dụng Cập nhật tiến trình xem @@ -164,7 +163,7 @@ Ẩn chất lượng video khi tìm kiếm Tự động cập nhật plugin Hiển thị thông báo cập nhật App - Tự động tìm kiếm và thông báo khi có bản cập nhật mới + Tự động tìm kiếm bản cập nhật mới sau khi khởi động app. Cập nhật phiên bản Beta Tìm kiếm các phiên bản Beta thay vì đợi bản cập nhật chính thức Github @@ -230,7 +229,7 @@ Phim Bộ Hoạt Hình Anime - @string/ova + OVA Torrent Phim Tài Liệu Truyền Hình Châu Á @@ -508,7 +507,7 @@ Tải lên (Mới đến Cũ) Tải lên (Cũ đến Mới) Thư viện của bạn đang trống :( -\nHãy đăng nhập vào thư viện hoặc thêm phim vào thư viện cục bộ +\nĐăng nhập vào tài khoản thư viện hoặc thêm phim vào thư viện cục bộ Mở với Siêu dữ liệu không có sẵn, video sẽ không được tải nếu nó không tồn tại trên trang web. PackageInstaller @@ -517,7 +516,7 @@ Xếp hạng (Thấp đến Cao) Chữ cái (Z đến A) Sắp xếp - Có vẻ như danh sách này trống, hãy thử chuyển sang danh sách khác + Danh sách này trống, hãy thử chuyển sang danh sách khác. Chữ cái (A đến Z) Chọn Thư viện Nhật ký @@ -525,4 +524,24 @@ Thất bại Thành công Bắt đầu - + Kiểm tra nguồn phim + raw.githubusercontent.com Proxy + Không thể kết nối được tới GitHub. Đang bật jsDelivr proxy… + Android TV + Khởi động lại + Đã đăng kí %s + Tập %d đã ra mắt! + Đã đăng kí + Dừng + Bỏ qua ISP + Đã bỏ đăng ký %s + Tìm thấy tệp Safe mode! +\nKhông tải bất cứ tiện ích nào khi khởi dộng cho đến khi tệp bị xoá + Trở lại + Đang cập nhật các phim đã đăng kí + Bỏ qua chặn GitHub bằng cách dùng jsDelivr. Có thể gây ra việc cập nhật bị chậm vài ngày + Lượng tua thêm được sử dụng khi trình phát ẩn + Lượng tua thêm + Lượng tua thêm được sử dụng khi trình phát hiện lên + Lượng tua thêm + \ No newline at end of file From 3121b5b123894287de25bc45c0023ef072d1b41f Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 20:17:55 +0000 Subject: [PATCH 391/888] chore(locales): fix locale issues --- .../lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 1 + app/src/main/res/values-cs/strings.xml | 5 +++-- app/src/main/res/values-hu/strings.xml | 4 ++-- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-ml/strings.xml | 5 +++-- app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 5 +++-- 8 files changed, 15 insertions(+), 11 deletions(-) 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 5a000eb4..b733ae9f 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 @@ -85,6 +85,7 @@ val appLanguages = arrayListOf( Triple("", "Nederlands", "nl"), Triple("", "norsk nynorsk", "nn"), Triple("", "norsk bokmål", "no"), + Triple("", "ଓଡ଼ିଆ", "or"), Triple("", "polski", "pl"), Triple("\uD83C\uDDF5\uD83C\uDDF9", "português", "pt"), Triple("\uD83E\uDD8D", "mmmm... monke", "qt"), diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 36f5d3c7..7ad80259 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,6 @@ - + + %s Ep %d @@ -553,4 +554,4 @@ 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-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8ed09726..e4be49e5 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Megnyitás böngészőben Betöltés kihagyása Poster - \@string/result_poster_img_desPoszter + @string/result_poster_img_desPoszter Nézés Befejezve Később megnézés @@ -496,4 +496,4 @@ HQ %d letöltve Start - \ No newline at end of file + diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 1ddd4cd2..ddd39942 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -529,4 +529,4 @@ Abonēto šovu atjaunināšana Abonēts Abonēts %s - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index a9d4b894..1f117af6 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,5 +1,6 @@ - + + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -200,4 +201,4 @@ ഒന്നുമില്ല വീണ്ടും കാണുക സ്ട്രീം - \ No newline at end of file + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index a6b3daec..42eba3cc 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -1,2 +1,2 @@ - \ 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 1653e83f..e0cc27d0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -356,4 +356,4 @@ Preferovaná kvalita sledovania (mobilné dáta) Maximálny počet znakov v názve prehrávača Spôsobuje problémy, ak je nastavená príliš vysoko v zariadeniach s malým ukladacím priestorom, ako je napríklad Android TV. - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 926460d3..d7795713 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,5 +1,6 @@ - + + %s Tập %d @@ -544,4 +545,4 @@ Lượng tua thêm Lượng tua thêm được sử dụng khi trình phát hiện lên Lượng tua thêm - \ No newline at end of file + From 27155e0f7e8c6342a2f75da18ac9698965e2c4b8 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 3 May 2023 22:29:28 +0200 Subject: [PATCH 392/888] Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Update translation files Updated by "Remove blank strings" hook in Weblate. Translated using Weblate (Hungarian) Currently translated at 83.6% (510 of 610 strings) Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translation: Cloudstream/App --- app/src/main/res/values-hu/strings.xml | 4 ++-- app/src/main/res/values-qt/strings.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index e4be49e5..8e9c3dfc 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Megnyitás böngészőben Betöltés kihagyása Poster - @string/result_poster_img_desPoszter + Poszter Nézés Befejezve Később megnézés @@ -496,4 +496,4 @@ HQ %d letöltve Start - + \ 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 f763d795..76852ca4 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -247,5 +247,5 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA aoaaaaaoooghhh oooooh uuaagh - @string/home_play - + \@string/home_play + \ No newline at end of file From 386ce75df165a06c161f7058b03d052e2fca7db0 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 20:30:03 +0000 Subject: [PATCH 393/888] chore(locales): fix locale issues --- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-qt/strings.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8e9c3dfc..46407f76 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -496,4 +496,4 @@ HQ %d letöltve Start - \ 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 76852ca4..f763d795 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -247,5 +247,5 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA aoaaaaaoooghhh oooooh uuaagh - \@string/home_play - \ No newline at end of file + @string/home_play + From 3b21ec3794b2f37a297a5f04ff8194a8c7d74b2e Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 10 May 2023 09:13:48 +0200 Subject: [PATCH 394/888] NewPipeExtractor:v0.22.6 -> NewPipeExtractor:master-SNAPSHOT (#468) --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7110c43d..ebde6187 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -217,7 +217,7 @@ dependencies { //implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT") // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204 - implementation("com.github.TeamNewPipe:NewPipeExtractor:v0.22.6") + implementation("com.github.TeamNewPipe:NewPipeExtractor:master-SNAPSHOT") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance From 77d4ecd7c6d8f783eca4921505c9267cf3d02447 Mon Sep 17 00:00:00 2001 From: jhih_yu Date: Wed, 10 May 2023 15:14:01 +0800 Subject: [PATCH 395/888] Fix Traditional Chinese (zh-rTW) display name (#467) --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b733ae9f..ee262eec 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 @@ -101,7 +101,7 @@ val appLanguages = arrayListOf( Triple("", "اردو", "ur"), Triple("", "Tiếng Việt", "vi"), Triple("", "中文", "zh"), - Triple("\uD83C\uDDF9\uD83C\uDDFC", "文言", "zh-rTW"), + Triple("\uD83C\uDDF9\uD83C\uDDFC", "正體中文(臺灣)", "zh-rTW"), /* end language list */ ).sortedBy { it.second.lowercase() } //ye, we go alphabetical, so ppl don't put their lang on top From b37aa5534308e7c6b702c493823639fa2598648f Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 10 May 2023 09:16:24 +0200 Subject: [PATCH 396/888] remove strings.xml comment --- app/src/main/res/values-bg/strings.xml | 1 - app/src/main/res/values-bp/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-hi/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-ml/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-tl/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values-zh/strings.xml | 1 - 20 files changed, 20 deletions(-) diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index d3bb648e..0543a94e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,5 +1,4 @@ - %s еп. %d diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 16df53a6..38424e56 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -1,5 +1,4 @@ - diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7ad80259..16ceff2d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,4 @@ - diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 67e81957..5e02924f 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,5 +1,4 @@ - CloudStream Αρχική diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 62e41fdb..36c1cf1f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,5 +1,4 @@ - CloudStream Accueil diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index e4b9fe46..e0179646 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,5 +1,4 @@ - रफ्तार (%.2fx) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 41b95aad..754b7a3a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,4 @@ - %d %s | %s diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 15c09228..a8c6a197 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,5 +1,4 @@ - %s Ep %d diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 25b8ca5a..6dca2e3a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,5 +1,4 @@ - %s Ep %d diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index d217f97f..66a6b9ba 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,5 +1,4 @@ - Брзина (%.2fx) diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 1f117af6..3d6240f9 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,5 +1,4 @@ - വേഗം (%.2fx) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e640a28a..f56b0bfb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,5 +1,4 @@ - %s Ep %d diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1071a9b3..2961cb47 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,5 +1,4 @@ - Prędkość (%.2fx) Ocena: %.1f diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index bd22fb33..294abcfd 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,5 +1,4 @@ - %s Ep %d diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 736f27ce..168e23fa 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,5 +1,4 @@ - Betygsatt: %.1f Hastighet (%.2fx) diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index a1faf3e1..95d38478 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -1,5 +1,4 @@ - diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 2ee7b65f..170c3679 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,5 +1,4 @@ - %d %s | %s diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index d7795713..f896e5c1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,5 +1,4 @@ - diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 01b3b682..3488d8e0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,5 +1,4 @@ - %d %s | %s diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f63e1d75..dbd96827 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,5 +1,4 @@ - %d %s | %s From ae1aaa3d7dc8d8ddbf8510e6ab22ead6ecb4b1ea Mon Sep 17 00:00:00 2001 From: Cloudburst <18114966+C10udburst@users.noreply.github.com> Date: Wed, 10 May 2023 07:26:34 +0000 Subject: [PATCH 397/888] Translated using Weblate (Ukrainian) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Hindi) Currently translated at 38.3% (234 of 610 strings) Translated using Weblate (Japanese) Currently translated at 46.5% (284 of 610 strings) Translated using Weblate (Odia) Currently translated at 21.4% (131 of 610 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Persian) Currently translated at 22.1% (135 of 610 strings) Translated using Weblate (Odia) Currently translated at 21.3% (130 of 610 strings) Translated using Weblate (Odia) Currently translated at 18.1% (111 of 610 strings) Co-authored-by: 1 Co-authored-by: Adarsh0-s Co-authored-by: Hosted Weblate Co-authored-by: KING APPS Co-authored-by: Skrripy Co-authored-by: Subham Jena Co-authored-by: jhihyu lin Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fa/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ja/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/or/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hant/ Translation: Cloudstream/App --- app/src/main/res/values-fa/strings.xml | 12 +++++ app/src/main/res/values-hi/strings.xml | 9 ++++ app/src/main/res/values-ja/strings.xml | 3 ++ app/src/main/res/values-or/strings.xml | 46 +++++++++++++++++- app/src/main/res/values-uk/strings.xml | 12 ++--- app/src/main/res/values-zh-rTW/strings.xml | 55 +++++++++++++++++++--- 6 files changed, 124 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 6a6b5243..2e4b89b3 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -33,4 +33,16 @@ %dساعت %dدقیقه %dدقیقه پوستر اصلی + تورنت + آزاد + مستند ها + انیمیشن ویدیویی اصلی + حداکثر + فیلم‌ها + سریال های تلویزیونی + درام های آسیایی + انیمه + کارتونها + استفاده شده + برنامه diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index e0179646..1401b3d8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -146,4 +146,13 @@ %dh %dm %dm विज्ञापन + अगला रैंडम + वापस जाओ + पोस्टर + पृष्ठभूमि का पूर्वावलोकन करें + प्रदाता बदलें + Cast: %s + मुख्य पोस्टर + एपिसोड का पोस्टर + %s Ep %d diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 347712d8..5fcc14da 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -198,4 +198,7 @@ \nSky UK Limitedによる無脳なDMCAテイクダウンのため🤮、アプリ内でリポジトリサイトをリンクすることができません。 \n \n私たちのDiscordに参加するか、オンラインで検索してください。 + バックグラウンドをプレビュー + ライブストリームの再生 + プロバイダーの変更 diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 42eba3cc..91481fd2 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -1,2 +1,46 @@ - + + ଅଧିକ ଵିକଳ୍ପ + ଦେଖୁଛନ୍ତି + %dଦି %dଘ %dମି + %dଘ %dମି + %dମି + ପୁନଃଦେଖୁଛନ୍ତି + ଲୁଚାଅ + ଚଲାଅ + ସୂଚନା + ଗୃହ + ସନ୍ଧାନ + ଧରଣ + ସ୍ଥଗିତ + ସାରିଛନ୍ତି + ସେଟିଂ + %d ମିନିଟ୍ + ଵେଗ (%.2fଗୁଣ) + ତ୍ୟାଗିଛନ୍ତି + ଦେଖିବା ପାଇଁ ଇଚ୍ଛୁକ + କିଛି ନାହିଁ + ଅଧିକ ସୂଚନା + ପାତ୍ର: %s + ପୋଷ୍ଟର୍ + ପୋଷ୍ଟର୍ + ଅଧ୍ୟାୟ ଚଲାଅ + କୌଣସି ଅଧ୍ୟାୟ ମିଳିଲା ନାହିଁ + ଅଧ୍ୟାୟ + ଅଧ୍ୟାୟ + %s‌ରେ ଚଲାଅ + ବ୍ରାଉଜର୍‌ରେ ଚଲାଅ + ଉପଶୀର୍ଷକ ଡାଉନଲୋଡ୍ କରିବା + /%d + /\?\? + ଅଧ୍ୟାୟ %d ମୁକ୍ତିଲାଭ କଲା! + ସ୍ୱତଃ ଡାଉନଲୋଡ୍ + ଲିଙ୍କ୍‌ଗୁଡ଼ିକୁ ପୁନଃଲୋଡ୍ କରିବା + ଲିଙ୍କ୍ କପି କରିନେବା + ଆପ୍‌ରେ ଚଲାଅ + Chromecast ଅଧ୍ୟାୟ + + ଅଧ୍ୟାୟର ପୋଷ୍ଟର୍ + ମୁଖ୍ୟ ପୋଷ୍ଟର୍ + ଡିଫଲ୍ଟ + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index c58dd334..82527c95 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -453,22 +453,22 @@ MPV Відтворення веб-відео Веб-браузер - Кінець + Ендінґ Коротке повторення Пропустити %s - Змішаний кінець + Змішаний ендінґ Подяки - Опенінг + Опенінґ Вступ Очистити історію Історія - Показувати спливаючі вікна для опенінгу/кінця + Показувати спливаючі вікна для опенінґу/кінця Забагато тексту. Не вдалося зберегти в буфер обміну. Позначити як переглянуте Ви впевнені що хочете вийти\? Так Ні - Установлення оновлення програми… + Встановлення оновлення програми… Не вдалося встановити нову версію програми Старий Інсталятор пакетів @@ -487,7 +487,7 @@ Завантаження оновлення програми… Усі розширення були вимкнені через збій, щоб допомогти вам знайти те, що стало причиною проблеми. Програму не знайдено - Змішаний опенінг + Змішаний опенінґ Видалити з переглянутого За оновленням (від старого до нового) За оновленням (від нового до старого) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3488d8e0..1fd01d8a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -142,14 +142,14 @@ 播放速度 在播放器中添加播放速度選項 活動控制進度 - 左右滑動控制播放進度 + 從一側滑動到另一側以控制影片中的位置 滑動更改設定 上下滑動更改亮度或音量 自動播放下一集 播放完畢後播放下一集 輕按兩下以控制進度 輕按兩下以暫停 - 輕按兩下以控制進度時間 + 輕按兩下以控制進度時間(秒) 在右側或左側輕按兩次以向前或向後快轉 輕按兩下中間以暫停 使用系統亮度 @@ -177,7 +177,7 @@ 在搜尋結果中隱藏選中的影片畫質 自動更新外掛程式 顯示應用更新 - 啟動時自動搜尋更新 + 啟動應用程式後自動搜尋更新。 更新至預覽版 搜尋預覽版更新而不是僅搜尋正式版 Github @@ -244,8 +244,8 @@ 電影 電視劇 卡通 - @string/anime - @string/ova + 動畫 + OVA 種子 紀錄片 亞洲劇 @@ -285,7 +285,7 @@ 不再顯示 跳過此更新 更新 - 偏好播放畫質 + 偏好播放畫質 (WiFi) 影片播放器標題最大字數 影片播放器標題 影片緩衝大小 @@ -534,4 +534,47 @@ 外觀 功能 瀏覽器 + 第 %d 集已發行! + 媒體庫 + 開始 + 播放器顯示 - 快轉快退秒數 + 開啟方式 + 應用程式將在關閉時更新 + 評分(從低到高) + 更新開始 + 外掛程式已下載 + 從觀看中刪除 + 排序方式 + 排序 + 評分(從高到低) + 播放器可見時使用的快轉快退秒數 + 播放器隱藏 - 快轉快退秒數 + 更新(從新到舊) + 更新(從舊到新) + 按字母順序(A 到 Z) + 按字母順序(Z 到 A) + 選擇媒體庫 + 找到安全模式檔案! +\n在刪除檔案之前不在啟動時載入任何擴充功能。 + 日誌 + 失敗 + 通過 + 播放器隱藏時使用的快轉快退秒數 + Android TV + 片源測試 + 重新啟動 + 停止 + 訂閱 + 已訂閱 %s + 已取消訂閱 %s + 偏好播放畫質 (行動數據) + raw.githubusercontent.com Proxy + 繞過 ISP + 還原 + 無法訪問 GitHub。 正在開啟 jsDelivr proxy… + 使用 jsDelivr 繞過 GitHub 的阻擋。 可能導致更新延遲幾天。 + 您的媒體庫是空的:( +\n登入媒體庫帳戶或將節目添加到您本機的媒體庫。 + 此列表是空的。 嘗試切換到另一個。 + 正在更新訂閱節目 From 0f00b1baf05d94778a384f276c0b8906025a993b Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 07:27:01 +0000 Subject: [PATCH 398/888] chore(locales): fix locale issues --- app/src/main/res/values-or/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 91481fd2..f500d5a6 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -43,4 +43,4 @@ ଅଧ୍ୟାୟର ପୋଷ୍ଟର୍ ମୁଖ୍ୟ ପୋଷ୍ଟର୍ ଡିଫଲ୍ଟ - \ No newline at end of file + From 8c9d52bc0e35b548339b7021a73f7f140cd5e0f2 Mon Sep 17 00:00:00 2001 From: Shif-Jess <117321707+Shif-Jess@users.noreply.github.com> Date: Sun, 14 May 2023 23:19:04 +0700 Subject: [PATCH 399/888] Added new Extractors (#461) --- .../cloudstream3/extractors/Chillx.kt | 135 +++++++++++++++ .../cloudstream3/extractors/Filesim.kt | 21 ++- .../cloudstream3/extractors/Gofile.kt | 59 +++++++ .../cloudstream3/extractors/Krakenfiles.kt | 37 ++++ .../cloudstream3/extractors/StreamSB.kt | 15 ++ .../cloudstream3/extractors/Uservideo.kt | 51 ++++++ .../cloudstream3/extractors/Vicloud.kt | 51 ++++++ .../cloudstream3/extractors/XStreamCdn.kt | 10 ++ .../extractors/helper/GogoHelper.kt | 158 ++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 18 ++ 10 files changed, 554 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt new file mode 100644 index 00000000..1c548e74 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -0,0 +1,135 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import javax.crypto.Cipher +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.PBEKeySpec +import javax.crypto.spec.SecretKeySpec + +class Bestx : Chillx() { + override val name = "Bestx" + override val mainUrl = "https://bestx.stream" +} + +class Watchx : Chillx() { + override val name = "Watchx" + override val mainUrl = "https://watchx.top" +} +open class Chillx : ExtractorApi() { + override val name = "Chillx" + override val mainUrl = "https://chillx.top" + override val requiresReferer = true + + companion object { + private const val KEY = "4VqE3#N7zt&HEP^a" + } + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val master = Regex("MasterJS\\s*=\\s*'([^']+)").find( + app.get( + url, + referer = referer + ).text + )?.groupValues?.get(1) + val encData = AppUtils.tryParseJson(base64Decode(master ?: return)) + val decrypt = cryptoAESHandler(encData ?: return, KEY, false) + + val source = Regex("""sources:\s*\[\{"file":"([^"]+)""").find(decrypt)?.groupValues?.get(1) + val tracks = Regex("""tracks:\s*\[(.+)]""").find(decrypt)?.groupValues?.get(1) + + // required + val headers = mapOf( + "Accept" to "*/*", + "Connection" to "keep-alive", + "Sec-Fetch-Dest" to "empty", + "Sec-Fetch-Mode" to "cors", + "Sec-Fetch-Site" to "cross-site", + "Origin" to mainUrl, + ) + + callback.invoke( + ExtractorLink( + name, + name, + source ?: return, + "$mainUrl/", + Qualities.P1080.value, + headers = headers, + isM3u8 = true + ) + ) + + AppUtils.tryParseJson>("[$tracks]") + ?.filter { it.kind == "captions" }?.map { track -> + subtitleCallback.invoke( + SubtitleFile( + track.label ?: "", + track.file ?: return@map null + ) + ) + } + } + + private fun cryptoAESHandler( + data: AESData, + pass: String, + encrypt: Boolean = true + ): String { + val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512") + val spec = PBEKeySpec( + pass.toCharArray(), + data.salt?.hexToByteArray(), + data.iterations?.toIntOrNull() ?: 1, + 256 + ) + val key = factory.generateSecret(spec) + val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + return if (!encrypt) { + cipher.init( + Cipher.DECRYPT_MODE, + SecretKeySpec(key.encoded, "AES"), + IvParameterSpec(data.iv?.hexToByteArray()) + ) + String(cipher.doFinal(base64DecodeArray(data.ciphertext.toString()))) + } else { + cipher.init( + Cipher.ENCRYPT_MODE, + SecretKeySpec(key.encoded, "AES"), + IvParameterSpec(data.iv?.hexToByteArray()) + ) + base64Encode(cipher.doFinal(data.ciphertext?.toByteArray())) + } + } + + private fun String.hexToByteArray(): ByteArray { + check(length % 2 == 0) { "Must have an even length" } + return chunked(2) + .map { it.toInt(16).toByte() } + + .toByteArray() + } + + data class AESData( + @JsonProperty("ciphertext") val ciphertext: String? = null, + @JsonProperty("iv") val iv: String? = null, + @JsonProperty("salt") val salt: String? = null, + @JsonProperty("iterations") val iterations: String? = null, + ) + + data class Tracks( + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + @JsonProperty("kind") val kind: String? = null, + ) +} 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 84fd0552..4c1791a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -5,6 +5,25 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 +class Moviesm4u : Filesim() { + override val mainUrl = "https://moviesm4u.com" + override val name = "Moviesm4u" +} + +class FileMoonIn : Filesim() { + override val mainUrl = "https://filemoon.in" + override val name = "FileMoon" +} + +class StreamhideCom : Filesim() { + override var name: String = "Streamhide" + override var mainUrl: String = "https://streamhide.com" +} + +class Movhide : Filesim() { + override var name: String = "Movhide" + override var mainUrl: String = "https://movhide.pro" +} class Ztreamhub : Filesim() { override val mainUrl: String = "https://ztreamhub.com" //Here 'cause works @@ -35,7 +54,7 @@ open class Filesim : ExtractorApi() { response.select("script[type=text/javascript]").map { script -> if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) { val unpackedscript = getAndUnpack(script.data()) - val m3u8Regex = Regex("file.\\\"(.*?m3u8.*?)\\\"") + val m3u8Regex = Regex("file.\"(.*?m3u8.*?)\"") val m3u8 = m3u8Regex.find(unpackedscript)?.destructured?.component1() ?: "" if (m3u8.isNotEmpty()) { generateM3u8( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt new file mode 100644 index 00000000..2ec185e0 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt @@ -0,0 +1,59 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +open class Gofile : ExtractorApi() { + override val name = "Gofile" + override val mainUrl = "https://gofile.io" + override val requiresReferer = false + private val mainApi = "https://api.gofile.io" + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("/(?:\\?c=|d/)([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) + val token = app.get("$mainApi/createAccount").parsedSafe()?.data?.get("token") + app.get("$mainApi/getContent?contentId=$id&token=$token&websiteToken=12345") + .parsedSafe()?.data?.contents?.forEach { + callback.invoke( + ExtractorLink( + this.name, + this.name, + it.value["link"] ?: return, + "", + getQuality(it.value["name"]), + headers = mapOf( + "Cookie" to "accountToken=$token" + ) + ) + ) + } + + } + + private fun getQuality(str: String?): Int { + return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull() + ?: Qualities.Unknown.value + } + + data class Account( + @JsonProperty("data") val data: HashMap? = null, + ) + + data class Data( + @JsonProperty("contents") val contents: HashMap>? = null, + ) + + data class Source( + @JsonProperty("data") val data: Data? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt new file mode 100644 index 00000000..b6887259 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt @@ -0,0 +1,37 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +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.httpsify + +open class Krakenfiles : ExtractorApi() { + override val name = "Krakenfiles" + override val mainUrl = "https://krakenfiles.com" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("/(?:view|embed-video)/([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) + val doc = app.get("$mainUrl/embed-video/$id").document + val link = doc.selectFirst("source")?.attr("src") + + callback.invoke( + ExtractorLink( + this.name, + this.name, + httpsify(link ?: return), + "", + Qualities.Unknown.value + ) + ) + + } + +} \ 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 1c6c7b94..a9fa20ba 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -7,6 +7,21 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Sbasian : StreamSB() { + override var mainUrl = "https://sbasian.pro" + override var name = "Sbasian" +} + +class Sbnet : StreamSB() { + override var name = "Sbnet" + override var mainUrl = "https://sbnet.one" +} + +class Keephealth : StreamSB() { + override var name = "Keephealth" + override var mainUrl = "https://keephealth.info" +} + class Sbspeed : StreamSB() { override var name = "Sbspeed" override var mainUrl = "https://sbspeed.com" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt new file mode 100644 index 00000000..37a7edb5 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt @@ -0,0 +1,51 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +open class Uservideo : ExtractorApi() { + override val name: String = "Uservideo" + override val mainUrl: String = "https://uservideo.xyz" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val script = app.get(url).document.selectFirst("script:containsData(hosts =)")?.data() + val host = script?.substringAfter("hosts = [\"")?.substringBefore("\"];") + val servers = script?.substringAfter("servers = \"")?.substringBefore("\";") + + val sources = app.get("$host/s/$servers").text.substringAfter("\"sources\":[").substringBefore("],").let { + AppUtils.tryParseJson>("[$it]") + } + val quality = Regex("(\\d{3,4})[Pp]").find(url)?.groupValues?.getOrNull(1)?.toIntOrNull() + + sources?.map { source -> + callback.invoke( + ExtractorLink( + name, + name, + source.src ?: return@map null, + url, + quality ?: Qualities.Unknown.value, + ) + ) + } + + } + + data class Sources( + @JsonProperty("src") val src: String? = null, + @JsonProperty("type") val type: String? = null, + @JsonProperty("label") val label: String? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt new file mode 100644 index 00000000..c8b2ae07 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt @@ -0,0 +1,51 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.getQualityFromName + +open class Vicloud : ExtractorApi() { + override val name: String = "Vicloud" + override val mainUrl: String = "https://vicloud.sbs" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("\"apiQuery\":\"(.*?)\"").find(app.get(url).text)?.groupValues?.getOrNull(1) + app.get( + "$mainUrl/api/?$id=&_=${System.currentTimeMillis()}", + headers = mapOf( + "X-Requested-With" to "XMLHttpRequest" + ), + referer = url + ).parsedSafe()?.sources?.map { source -> + callback.invoke( + ExtractorLink( + name, + name, + source.file ?: return@map null, + url, + getQualityFromName(source.label), + ) + ) + } + + } + + private data class Sources( + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + ) + + private data class Responses( + @JsonProperty("sources") val sources: List? = arrayListOf(), + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 15ff0436..ccb2fde7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -8,6 +8,16 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName +class StreamM4u : XStreamCdn() { + override val name: String = "StreamM4u" + override val mainUrl: String = "https://streamm4u.club" +} + +class Fembed9hd : XStreamCdn() { + override var mainUrl = "https://fembed9hd.com" + override var name = "Fembed9hd" +} + class Cdnplayer: XStreamCdn() { override val name: String = "Cdnplayer" override val mainUrl: String = "https://cdnplayer.online" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt new file mode 100644 index 00000000..1766af6c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt @@ -0,0 +1,158 @@ +package com.lagradost.cloudstream3.extractors.helper + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Decode +import com.lagradost.cloudstream3.base64DecodeArray +import com.lagradost.cloudstream3.base64Encode +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.mvvm.safeApiCall +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper +import com.lagradost.cloudstream3.utils.getQualityFromName +import org.jsoup.nodes.Document +import java.net.URI +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +object GogoHelper { + + /** + * @param id base64Decode(show_id) + IV + * @return the encryption key + * */ + private fun getKey(id: String): String? { + return normalSafeApiCall { + id.map { + it.code.toString(16) + }.joinToString("").substring(0, 32) + } + } + + // https://github.com/saikou-app/saikou/blob/45d0a99b8a72665a29a1eadfb38c506b842a29d7/app/src/main/java/ani/saikou/parsers/anime/extractors/GogoCDN.kt#L97 + // No Licence on the function + private fun cryptoHandler( + string: String, + iv: String, + secretKeyString: String, + encrypt: Boolean = true + ): String { + //println("IV: $iv, Key: $secretKeyString, encrypt: $encrypt, Message: $string") + val ivParameterSpec = IvParameterSpec(iv.toByteArray()) + val secretKey = SecretKeySpec(secretKeyString.toByteArray(), "AES") + val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + return if (!encrypt) { + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec) + String(cipher.doFinal(base64DecodeArray(string))) + } else { + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec) + base64Encode(cipher.doFinal(string.toByteArray())) + } + } + + /** + * @param iframeUrl something like https://gogoplay4.com/streaming.php?id=XXXXXX + * @param mainApiName used for ExtractorLink names and source + * @param iv secret iv from site, required non-null if isUsingAdaptiveKeys is off + * @param secretKey secret key for decryption from site, required non-null if isUsingAdaptiveKeys is off + * @param secretDecryptKey secret key to decrypt the response json, required non-null if isUsingAdaptiveKeys is off + * @param isUsingAdaptiveKeys generates keys from IV and ID, see getKey() + * @param isUsingAdaptiveData generate encrypt-ajax data based on $("script[data-name='episode']")[0].dataset.value + * */ + suspend fun extractVidstream( + iframeUrl: String, + mainApiName: String, + callback: (ExtractorLink) -> Unit, + iv: String?, + secretKey: String?, + secretDecryptKey: String?, + // This could be removed, but i prefer it verbose + isUsingAdaptiveKeys: Boolean, + isUsingAdaptiveData: Boolean, + // If you don't want to re-fetch the document + iframeDocument: Document? = null + ) = safeApiCall { + if ((iv == null || secretKey == null || secretDecryptKey == null) && !isUsingAdaptiveKeys) + return@safeApiCall + + val id = Regex("id=([^&]+)").find(iframeUrl)!!.value.removePrefix("id=") + + var document: Document? = iframeDocument + val foundIv = + iv ?: (document ?: app.get(iframeUrl).document.also { document = it }) + .select("""div.wrapper[class*=container]""") + .attr("class").split("-").lastOrNull() ?: return@safeApiCall + val foundKey = secretKey ?: getKey(base64Decode(id) + foundIv) ?: return@safeApiCall + val foundDecryptKey = secretDecryptKey ?: foundKey + + val uri = URI(iframeUrl) + val mainUrl = "https://" + uri.host + + val encryptedId = cryptoHandler(id, foundIv, foundKey) + val encryptRequestData = if (isUsingAdaptiveData) { + // Only fetch the document if necessary + val realDocument = document ?: app.get(iframeUrl).document + val dataEncrypted = + realDocument.select("script[data-name='episode']").attr("data-value") + val headers = cryptoHandler(dataEncrypted, foundIv, foundKey, false) + "id=$encryptedId&alias=$id&" + headers.substringAfter("&") + } else { + "id=$encryptedId&alias=$id" + } + + val jsonResponse = + app.get( + "$mainUrl/encrypt-ajax.php?$encryptRequestData", + headers = mapOf("X-Requested-With" to "XMLHttpRequest") + ) + val dataencrypted = + jsonResponse.text.substringAfter("{\"data\":\"").substringBefore("\"}") + val datadecrypted = cryptoHandler(dataencrypted, foundIv, foundDecryptKey, false) + val sources = AppUtils.parseJson(datadecrypted) + + suspend fun invokeGogoSource( + source: GogoSource, + sourceCallback: (ExtractorLink) -> Unit + ) { + if (source.file.contains(".m3u8")) { + M3u8Helper.generateM3u8( + mainApiName, + source.file, + mainUrl, + headers = mapOf("Origin" to "https://plyr.link") + ).forEach(sourceCallback) + } else { + sourceCallback.invoke( + ExtractorLink( + mainApiName, + mainApiName, + source.file, + mainUrl, + getQualityFromName(source.label), + ) + ) + } + } + + sources.source?.forEach { + invokeGogoSource(it, callback) + } + sources.sourceBk?.forEach { + invokeGogoSource(it, callback) + } + } + + data class GogoSources( + @JsonProperty("source") val source: List?, + @JsonProperty("sourceBk") val sourceBk: List?, + ) + + data class GogoSource( + @JsonProperty("file") val file: String, + @JsonProperty("label") val label: String?, + @JsonProperty("type") val type: String?, + @JsonProperty("default") val default: String? = null + ) +} \ 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 b03c9fb7..4fde7181 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -342,6 +342,24 @@ val extractorApis: MutableList = arrayListOf( DesuOdvip(), DesuDrive(), + Chillx(), + Watchx(), + Bestx(), + Keephealth(), + Sbnet(), + Sbasian(), + Sblongvu(), + Fembed9hd(), + StreamM4u(), + Krakenfiles(), + Gofile(), + Vicloud(), + Uservideo(), + + Movhide(), + StreamhideCom(), + FileMoonIn(), + Moviesm4u(), Filesim(), FileMoon(), FileMoonSx(), From c0a8461b87e866e8709e26262704c0f609d5f205 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 13 May 2023 09:41:46 +0200 Subject: [PATCH 400/888] Translated using Weblate (Kannada) Currently translated at 36.2% (221 of 610 strings) Translated using Weblate (Odia) Currently translated at 38.5% (235 of 610 strings) Translated using Weblate (Odia) Currently translated at 26.3% (161 of 610 strings) Translated using Weblate (Odia) Currently translated at 22.6% (138 of 610 strings) Co-authored-by: Hosted Weblate Co-authored-by: Subham Jena Co-authored-by: deepu2 Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/kn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/or/ Translation: Cloudstream/App --- app/src/main/res/values-kn/strings.xml | 9 +- app/src/main/res/values-or/strings.xml | 109 ++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 1236dbba..9716a8a6 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -125,4 +125,11 @@ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಮುಂದಿನ ರಾಂಡಮ್ - + ಮುಂದಕ್ಕೆ ಹೋಗಲು ಸ್ವೈಪ್ ಮಾಡಿ + ವೀಡಿಯೊದಲ್ಲಿ ನಿಮ್ಮ ಸ್ಥಾನವನ್ನು ನಿಯಂತ್ರಿಸಲು ಅಕ್ಕಪಕ್ಕಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ + ಮುಂದಿನ ಸಂಚಿಕೆಯನ್ನು ಆಟೋ ಪ್ಲೇ ಮಾಡಿ + ಮುಂದೂಡಲು ಅಥವಾ ಇಂದೂಡಲು ಎರಡು ಬಾರಿ ಟ್ಯಾಪ್ ಮಾಡಿ + Brightness ಅಥವಾ volume ಬದಲಾಯಿಸಲು ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ + ಈಗಿನ ಎಪಿಸೋಡ್ ಮುಗಿದಾಗ ಮುಂದಿನ ಎಪಿಸೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ + ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index f500d5a6..e7b897c8 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -26,8 +26,8 @@ ପୋଷ୍ଟର୍ ଅଧ୍ୟାୟ ଚଲାଅ କୌଣସି ଅଧ୍ୟାୟ ମିଳିଲା ନାହିଁ - ଅଧ୍ୟାୟ - ଅଧ୍ୟାୟ + ଟି ଅଧ୍ୟାୟ + ଟିଏ ଅଧ୍ୟାୟ %s‌ରେ ଚଲାଅ ବ୍ରାଉଜର୍‌ରେ ଚଲାଅ ଉପଶୀର୍ଷକ ଡାଉନଲୋଡ୍ କରିବା @@ -43,4 +43,107 @@ ଅଧ୍ୟାୟର ପୋଷ୍ଟର୍ ମୁଖ୍ୟ ପୋଷ୍ଟର୍ ଡିଫଲ୍ଟ - + ଭାଷା + ନାହିଁ + ଵର୍ଣ୍ଣନା + ହଁ + ଲାଇବ୍ରେରୀ + ଇତିଵୃତ୍ତି + ଲେଖକ + %s ବାଦ୍ ଦିଅ + ଉପଶୀର୍ଷକ ଭାଷା + %s (ଅକ୍ଷମ) + ସ୍ଥିତି + ଆକାର + ସମର୍ଥିତ + HLS ଚାଳନାତାଲିକା + ଅନ୍ତଃ-ଚାଳକ + ଆଦ୍ୟ + ପ୍ରାନ୍ତ + ଆପ୍ ମିଳିଲା ନାହିଁ + ସବୁ ଭାଷା + VLC + MPV + ମିଶ୍ରିତ ପ୍ରାନ୍ତ + ମିଶ୍ରିତ ଆଦ୍ୟ + ଶ୍ରେୟ + ଉପକ୍ରମ + ଏହି ଭାଷାଗୁଡ଼ିକରେ ଵିଡ଼ିଓ ଦେଖନ୍ତୁ + ସଂସ୍କରଣ + ଆପ୍ ଭାଷା + ଅଧ୍ୟାୟ ଚଲାଅ + + ଚଳିତ + ଲିଙ୍କ୍ କ୍ଲିପ୍‌ବୋର୍ଡରେ କପି କରିନିଆଗଲା + ଚଳଚ୍ଚିତ୍ର + ସିଧାପ୍ରସାରଣ + ଉତ୍ସ + କୌଣସି ଅଦ୍ୟତନ ମିଳିଲା ନାହିଁ + ସାଧାରଣ + ପୁନଃ ଦେଖାଅନି + ସ୍ୱତଃ + ତ୍ରୁଟି + ବ୍ୟାକଅପ୍‌ରୁ ତଥ୍ୟ ପୁନରୁଦ୍ଧାର କରିବା + ଷ୍ଟୋରେଜ୍ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ। ଦୟାକରି ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ। + ଅଦ୍ୟତନ ଏଵଂ ବ୍ୟାକଅପ୍ + ବ୍ୟାକଅପ୍ + ଆଣ୍ଡ୍ରଏଡ୍ ଟିଵି + ଅଙ୍ଗଭଙ୍ଗୀ + ନୂଆ ଅଦ୍ୟତନ ମିଳିଲା! +\n%s -> %s + ଅଵଧି + ଆପ୍ + ବ୍ୟାକଅପ୍ ଫାଇଲ୍ ଧାରଣ ହେଲା + ତଥ୍ୟ ଗଚ୍ଛିତ ହୋଇଛି + %s ବ୍ୟାକଅପ୍ ନେବାରେ ତ୍ରୁଟି ଘଟିଲା + ଋତୁ + କୌଣସି ଋତୁ ନାହିଁ + ଫାଇଲ୍ ଵିଲୋପ କରିବେ + ପାରିତ ହେଲା + -୩୦ + ସ୍ଥିତି + ଵ୍ୟଵହୃତ + ଟିଵି ଧାରାଵାହିକ + ଏସୀୟ ନାଟକ + ଅନ୍ୟାନ୍ୟ + ଵିଡ଼ିଓ + ଉତ୍ସ ତ୍ରୁଟି + ଅପ୍ରତ୍ୟାଶିତ ଚାଳକ ତ୍ରୁଟି + ଆଖ୍ୟା + ଅଦ୍ୟତନ ପାଇଁ ଯାଞ୍ଚ କରିବା + ତାଲା + ଆକାର ଠିକ୍ କରିବା + ଏହି ଅଦ୍ୟତନଟିକୁ ବାଦ୍ ଦିଅ + କୃତ୍ୟ + ଉପଶୀର୍ଷକ + ଵୈଶିଷ୍ଟ୍ୟସବୁ + ଵେଶ + ଡିଫଲ୍ଟଗୁଡ଼ା + ପ୍ରାଥମିକ ରଙ୍ଗ + %s ଯୋଡ଼ାଗଲା + ଆଖ୍ୟା + ହେଲା + ଆପ୍ ଅଦ୍ୟତନ ଡାଉନଲୋଡ୍ ଚାଲିଛି… + ଆପ୍ ଅଦ୍ୟତନ ଅଧିସ୍ଥାପନ ଚାଲିଛି… + ଆପ୍‌ର ନୂଆ ସଂସ୍କରଣ ଅଧିସ୍ଥାପନ କରିହେଲା ନାହିଁ + ଵିଫଳ ହେଲା + ଚାଳକ + ତଥ୍ୟର ବ୍ୟାକଅପ୍ ନେବା + ଵିଲୋପ କର + ଵୃତ୍ତଚିତ୍ର + ଅନିମେ + ଧାରାଵାହିକ + ଚଳଚ୍ଚିତ୍ର + ଵୃତ୍ତଚିତ୍ର + ଏସୀୟ ନାଟକ + ସିଧାପ୍ରସାରଣ + ଗୁଣଵତ୍ତା ଲେବଲ୍ + ଅଦ୍ୟତନ କରିବା + ଚାଳକ ଵୈଶିଷ୍ଟ୍ୟସବୁ + ଆପ୍ ଥିମ୍ + ଭାଷା ସ୍ୱତଃ-ଚୟନ + ଅନିମେ + ଉପଶୀର୍ଷକ + +୩୦ + ଵର୍ଷ + \ No newline at end of file From b115817357e8e6cdc229e390256a1c4889c7e1da Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Sun, 14 May 2023 16:20:11 +0000 Subject: [PATCH 401/888] chore(locales): fix locale issues --- app/src/main/res/values-kn/strings.xml | 2 +- app/src/main/res/values-or/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 9716a8a6..399aafb1 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -132,4 +132,4 @@ Brightness ಅಥವಾ volume ಬದಲಾಯಿಸಲು ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ ಈಗಿನ ಎಪಿಸೋಡ್ ಮುಗಿದಾಗ ಮುಂದಿನ ಎಪಿಸೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ - \ No newline at end of file + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index e7b897c8..eaa76652 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -146,4 +146,4 @@ ଉପଶୀର୍ଷକ +୩୦ ଵର୍ଷ - \ No newline at end of file + From 0d431fd508cb893add78d95e8ebbbddc122f05db Mon Sep 17 00:00:00 2001 From: Hexated <37908684+hexated@users.noreply.github.com> Date: Sun, 21 May 2023 06:37:17 +0700 Subject: [PATCH 402/888] fixed Stramsb & Voe (#470) --- .../cloudstream3/extractors/StreamSB.kt | 103 +++++++++--------- .../lagradost/cloudstream3/extractors/Voe.kt | 8 +- .../cloudstream3/extractors/VoeExtractor.kt | 54 --------- .../cloudstream3/utils/ExtractorApi.kt | 3 +- 4 files changed, 62 insertions(+), 106 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt 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 a9fa20ba..3d2a81b7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -6,6 +6,11 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +import kotlin.random.Random + +class Vidgomunimesb : StreamSB() { + override var mainUrl = "https://vidgomunimesb.xyz" +} class Sbasian : StreamSB() { override var mainUrl = "https://sbasian.pro" @@ -100,24 +105,62 @@ class Sblongvu : StreamSB() { override var mainUrl = "https://sblongvu.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() { override var name = "StreamSB" override var mainUrl = "https://watchsb.com" override val requiresReferer = false + private val alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" - private val hexArray = "0123456789ABCDEF".toCharArray() + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val regexID = + Regex("(embed-[a-zA-Z\\d]{0,8}[a-zA-Z\\d_-]+|/e/[a-zA-Z\\d]{0,8}[a-zA-Z\\d_-]+)") + val id = regexID.findAll(url).map { + it.value.replace(Regex("(embed-|/e/)"), "") + }.first() + val master = "$mainUrl/375664356a494546326c4b797c7c6e756577776778623171737/${encodeId(id)}" + val headers = mapOf( + "watchsb" to "sbstream", + ) + val mapped = app.get( + master.lowercase(), + headers = headers, + referer = url, + ).parsedSafe

    () + M3u8Helper.generateM3u8( + name, + mapped?.streamData?.file ?: return, + url, + headers = headers + ).forEach(callback) - private fun bytesToHex(bytes: ByteArray): String { - val hexChars = CharArray(bytes.size * 2) - for (j in bytes.indices) { - val v = bytes[j].toInt() and 0xFF - - hexChars[j * 2] = hexArray[v ushr 4] - hexChars[j * 2 + 1] = hexArray[v and 0x0F] + mapped.streamData.subs?.map {sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.label.toString(), + sub.file ?: return@map null, + ) + ) + } + } + + private fun encodeId(id: String): String { + val code = "${createHashTable()}||$id||${createHashTable()}||streamsb" + return code.toCharArray().joinToString("") { char -> + char.code.toString(16) + } + } + + private fun createHashTable(): String { + return buildString { + repeat(12) { + append(alphabet[Random.nextInt(alphabet.length)]) + } } - return String(hexChars) } data class Subs ( @@ -141,42 +184,4 @@ open class StreamSB : ExtractorApi() { @JsonProperty("status_code") val statusCode: Int, ) - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val regexID = - Regex("(embed-[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+|/e/[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") - val id = regexID.findAll(url).map { - it.value.replace(Regex("(embed-|/e/)"), "") - }.first() -// val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" - val master = "$mainUrl/sources16/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" - val headers = mapOf( - "watchsb" to "sbstream", - ) - val mapped = app.get( - master.lowercase(), - headers = headers, - referer = url, - ).parsedSafe
    () - // val urlmain = mapped.streamData.file.substringBefore("/hls/") - M3u8Helper.generateM3u8( - name, - mapped?.streamData?.file ?: return, - url, - headers = headers - ).forEach(callback) - - mapped.streamData.subs?.map {sub -> - subtitleCallback.invoke( - SubtitleFile( - sub.label.toString(), - sub.file ?: return@map null, - ) - ) - } - } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt index 12a76a9b..2c6998de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt @@ -6,6 +6,10 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Tubeless : Voe() { + override var mainUrl = "https://tubelessceliolymph.com" +} + open class Voe : ExtractorApi() { override val name = "Voe" override val mainUrl = "https://voe.sx" @@ -18,8 +22,8 @@ open class Voe : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val res = app.get(url, referer = referer).document - val link = res.select("script").find { it.data().contains("const sources") }?.data() - ?.substringAfter("\"hls\": \"")?.substringBefore("\",") + val script = res.select("script").find { it.data().contains("sources =") }?.data() + val link = Regex("[\"']hls[\"']:\\s*[\"'](.*)[\"']").find(script ?: return)?.groupValues?.get(1) M3u8Helper.generateM3u8( name, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt deleted file mode 100644 index ad3f0150..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName - -open class VoeExtractor : ExtractorApi() { - override val name: String = "Voe" - override val mainUrl: String = "https://voe.sx" - override val requiresReferer = false - - private data class ResponseLinks( - @JsonProperty("hls") val hls: String?, - @JsonProperty("mp4") val mp4: String?, - @JsonProperty("video_height") val label: Int? - //val type: String // Mp4 - ) - - override suspend fun getUrl(url: String, referer: String?): List { - val html = app.get(url).text - if (html.isNotBlank()) { - val src = html.substringAfter("const sources =").substringBefore(";") - // Remove last comma, it is not proper json otherwise - .replace("0,", "0") - // Make json use the proper quotes - .replace("'", "\"") - - //Log.i(this.name, "Result => (src) ${src}") - parseJson(src)?.let { voeLink -> - //Log.i(this.name, "Result => (voeLink) ${voeLink}") - - // Always defaults to the hls link, but returns the mp4 if null - val linkUrl = voeLink.hls ?: voeLink.mp4 - val linkLabel = voeLink.label?.toString() ?: "" - if (!linkUrl.isNullOrEmpty()) { - return listOf( - ExtractorLink( - name = this.name, - source = this.name, - url = linkUrl, - quality = getQualityFromName(linkLabel), - referer = url, - isM3u8 = voeLink.hls != null - ) - ) - } - } - } - return emptyList() - } -} \ 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 4fde7181..5062ebd9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -236,6 +236,7 @@ val extractorApis: MutableList = arrayListOf( XStreamCdn(), StreamSB(), + Vidgomunimesb(), StreamSB1(), StreamSB2(), StreamSB3(), @@ -275,7 +276,6 @@ val extractorApis: MutableList = arrayListOf( Uqload2(), Evoload(), Evoload1(), - VoeExtractor(), UpstreamExtractor(), Tomatomatela(), @@ -375,6 +375,7 @@ val extractorApis: MutableList = arrayListOf( Vidmoly(), Vidmolyme(), Voe(), + Tubeless(), Moviehab(), MoviehabNet(), Jeniusplay(), From b5566af401113d3882b38d2a7e041e4264e32eba Mon Sep 17 00:00:00 2001 From: LagradOst <46196380+Blatzar@users.noreply.github.com> Date: Wed, 14 Jun 2023 17:30:39 +0000 Subject: [PATCH 403/888] Added quality profiles (#414) * Added quality profiles * Better quality selection * Added profile bg and fixed some sources (#483) Co-authored-by: Blatzar <> --------- Co-authored-by: Lag <> Co-authored-by: Osten <11805592+LagradOst@users.noreply.github.com> --- .../cloudstream3/extractors/DoodExtractor.kt | 2 +- .../cloudstream3/extractors/GuardareStream.kt | 2 +- .../cloudstream3/extractors/Tantifilm.kt | 2 +- .../ui/player/FullScreenPlayer.kt | 40 +++- .../cloudstream3/ui/player/GeneratorPlayer.kt | 121 ++++++++---- .../player/source_priority/PriorityAdapter.kt | 60 ++++++ .../player/source_priority/ProfilesAdapter.kt | 116 ++++++++++++ .../source_priority/QualityDataHelper.kt | 159 ++++++++++++++++ .../source_priority/QualityProfileDialog.kt | 106 +++++++++++ .../source_priority/SourcePriorityDialog.kt | 105 ++++++++++ .../cloudstream3/ui/result/UiText.kt | 4 +- .../cloudstream3/utils/DataStoreHelper.kt | 2 +- .../cloudstream3/utils/ExtractorApi.kt | 28 ++- .../utils/SingleSelectionHelper.kt | 11 -- .../lagradost/cloudstream3/utils/UIHelper.kt | 34 +++- .../res/drawable/baseline_help_outline_24.xml | 5 + .../main/res/drawable/baseline_remove_24.xml | 2 +- app/src/main/res/drawable/profile_bg_blue.jpg | Bin 0 -> 21107 bytes .../res/drawable/profile_bg_dark_blue.jpg | Bin 0 -> 42704 bytes .../main/res/drawable/profile_bg_orange.jpg | Bin 0 -> 70427 bytes app/src/main/res/drawable/profile_bg_pink.jpg | Bin 0 -> 117989 bytes .../main/res/drawable/profile_bg_purple.jpg | Bin 0 -> 8564 bytes app/src/main/res/drawable/profile_bg_red.jpg | Bin 0 -> 47464 bytes app/src/main/res/drawable/profile_bg_teal.jpg | Bin 0 -> 128982 bytes .../res/layout/player_prioritize_item.xml | 48 +++++ .../layout/player_quality_profile_dialog.xml | 105 ++++++++++ .../layout/player_quality_profile_item.xml | 66 +++++++ .../layout/player_select_source_and_subs.xml | 44 ++++- .../layout/player_select_source_priority.xml | 179 ++++++++++++++++++ app/src/main/res/values/strings.xml | 21 +- app/src/main/res/xml/settings_player.xml | 16 +- 31 files changed, 1188 insertions(+), 90 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt create mode 100644 app/src/main/res/drawable/baseline_help_outline_24.xml create mode 100644 app/src/main/res/drawable/profile_bg_blue.jpg create mode 100644 app/src/main/res/drawable/profile_bg_dark_blue.jpg create mode 100644 app/src/main/res/drawable/profile_bg_orange.jpg create mode 100644 app/src/main/res/drawable/profile_bg_pink.jpg create mode 100644 app/src/main/res/drawable/profile_bg_purple.jpg create mode 100644 app/src/main/res/drawable/profile_bg_red.jpg create mode 100644 app/src/main/res/drawable/profile_bg_teal.jpg create mode 100644 app/src/main/res/layout/player_prioritize_item.xml create mode 100644 app/src/main/res/layout/player_quality_profile_dialog.xml create mode 100644 app/src/main/res/layout/player_quality_profile_item.xml create mode 100644 app/src/main/res/layout/player_select_source_priority.xml 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 0d94eb08..24495a40 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -58,7 +58,7 @@ open class DoodLaExtractor : ExtractorApi() { val quality = Regex("\\d{3,4}p").find(response0.substringAfter("").substringBefore(""))?.groupValues?.get(0) return listOf( ExtractorLink( - trueUrl, + this.name, this.name, trueUrl, mainUrl, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt index 2adc00d5..3d046267 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt @@ -58,7 +58,7 @@ open class GuardareStream : ExtractorApi() { jsonVideoData.data.forEach { callback.invoke( ExtractorLink( - it.file + ".${it.type}", + this.name, this.name, it.file + ".${it.type}", mainUrl, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt index d721dea8..13aa48c6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt @@ -30,7 +30,7 @@ open class Tantifilm : ExtractorApi() { val jsonvideodata = parseJson(response) return jsonvideodata.data.map { ExtractorLink( - it.file+".${it.type}", + this.name, this.name, it.file+".${it.type}", mainUrl, 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 86e21fd6..9ff1c52d 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 @@ -39,6 +39,7 @@ import com.lagradost.cloudstream3.CommonActivity.playerEventListener import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.GeneratorPlayer.Companion.subsProvidersIsActive +import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -108,8 +109,15 @@ open class FullScreenPlayer : AbstractPlayerFragment() { // get() = episodes.isNotEmpty() // options for player - protected var currentPrefQuality = - Qualities.P2160.value // preferred maximum quality, used for ppl w bad internet or on cell + + /** + * Default profile 1 + * Decides how links should be sorted based on a priority system. + * This will be set in runtime based on settings. + **/ + protected var currentQualityProfile = 1 +// protected var currentPrefQuality = +// Qualities.P2160.value // preferred maximum quality, used for ppl w bad internet or on cell protected var fastForwardTime = 10000L protected var androidTVInterfaceOffSeekTime = 10000L; protected var androidTVInterfaceOnSeekTime = 30000L; @@ -1221,10 +1229,16 @@ open class FullScreenPlayer : AbstractPlayerFragment() { .toLong() * 1000L androidTVInterfaceOffSeekTime = - settingsManager.getInt(ctx.getString(R.string.android_tv_interface_off_seek_key), 10) + settingsManager.getInt( + ctx.getString(R.string.android_tv_interface_off_seek_key), + 10 + ) .toLong() * 1000L androidTVInterfaceOnSeekTime = - settingsManager.getInt(ctx.getString(R.string.android_tv_interface_on_seek_key), 10) + settingsManager.getInt( + ctx.getString(R.string.android_tv_interface_on_seek_key), + 10 + ) .toLong() * 1000L navigationBarHeight = ctx.getNavigationBarHeight() @@ -1257,10 +1271,20 @@ open class FullScreenPlayer : AbstractPlayerFragment() { ctx.getString(R.string.double_tap_pause_enabled_key), false ) - currentPrefQuality = settingsManager.getInt( - ctx.getString(if (ctx.isUsingMobileData()) R.string.quality_pref_mobile_data_key else R.string.quality_pref_key), - currentPrefQuality - ) + + val profiles = QualityDataHelper.getProfiles() + val type = if (ctx.isUsingMobileData()) + QualityDataHelper.QualityProfileType.Data + else QualityDataHelper.QualityProfileType.WiFi + + currentQualityProfile = + profiles.firstOrNull { it.type == type }?.id ?: profiles.firstOrNull()?.id + ?: currentQualityProfile + +// currentPrefQuality = settingsManager.getInt( +// ctx.getString(if (ctx.isUsingMobileData()) R.string.quality_pref_mobile_data_key else R.string.quality_pref_key), +// currentPrefQuality +// ) // useSystemBrightness = // settingsManager.getBoolean(ctx.getString(R.string.use_system_brightness_key), false) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 46f2bca9..e20a07fa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -31,6 +31,10 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.subtitl import com.lagradost.cloudstream3.ui.player.CS3IPlayer.Companion.preferredAudioTrackLanguage import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.updateForcedEncoding import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSubtitleMimeType +import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper +import com.lagradost.cloudstream3.ui.player.source_priority.QualityProfileDialog +import com.lagradost.cloudstream3.ui.player.source_priority.SourcePriority +import com.lagradost.cloudstream3.ui.player.source_priority.SourcePriorityDialog import com.lagradost.cloudstream3.ui.result.* import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.getAutoSelectLanguageISO639_1 @@ -57,6 +61,7 @@ import kotlinx.coroutines.Job import java.util.* import kotlin.collections.ArrayList import kotlin.collections.HashMap +import kotlin.math.abs class GeneratorPlayer : FullScreenPlayer() { companion object { @@ -188,17 +193,31 @@ class GeneratorPlayer : FullScreenPlayer() { player.addTimeStamps(listOf()) // clear stamps } - private fun sortLinks(useQualitySettings: Boolean = true): List> { - return currentLinks.sortedBy { - val (linkData, _) = it - var quality = linkData?.quality ?: Qualities.Unknown.value + private fun closestQuality(target: Int?): Qualities { + if (target == null) return Qualities.Unknown + return Qualities.values().minBy { abs(it.value - target) } + } - // we set all qualities above current max as reverse - if (useQualitySettings && quality > currentPrefQuality) { - quality = currentPrefQuality - quality - 1 - } - // negative because we want to sort highest quality first - -(quality) + private fun getLinkPriority( + qualityProfile: Int, + link: Pair + ): Int { + val (linkData, _) = link + + val qualityPriority = QualityDataHelper.getQualityPriority( + qualityProfile, + closestQuality(linkData?.quality) + ) + val sourcePriority = + QualityDataHelper.getSourcePriority(qualityProfile, linkData?.name) + + // negative because we want to sort highest quality first + return qualityPriority + sourcePriority + } + + private fun sortLinks(qualityProfile: Int): List> { + return currentLinks.sortedBy { + -getLinkPriority(qualityProfile, it) } } @@ -584,33 +603,39 @@ class GeneratorPlayer : FullScreenPlayer() { var sourceIndex = 0 var startSource = 0 + var sortedUrls = emptyList>() - val sortedUrls = sortLinks(useQualitySettings = false) - if (sortedUrls.isEmpty()) { - sourceDialog.findViewById(R.id.sort_sources_holder)?.isGone = true - } else { - startSource = sortedUrls.indexOf(currentSelectedLink) - sourceIndex = startSource + fun refreshLinks(qualityProfile: Int) { + sortedUrls = sortLinks(qualityProfile) + if (sortedUrls.isEmpty()) { + sourceDialog.findViewById(R.id.sort_sources_holder)?.isGone = + true + } else { + startSource = sortedUrls.indexOf(currentSelectedLink) + sourceIndex = startSource - val sourcesArrayAdapter = - ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) + val sourcesArrayAdapter = + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) - sourcesArrayAdapter.addAll(sortedUrls.map { (link, uri) -> - val name = link?.name ?: uri?.name ?: "NULL" - "$name ${Qualities.getStringByInt(link?.quality)}" - }) + sourcesArrayAdapter.addAll(sortedUrls.map { (link, uri) -> + val name = link?.name ?: uri?.name ?: "NULL" + "$name ${Qualities.getStringByInt(link?.quality)}" + }) - providerList.choiceMode = AbsListView.CHOICE_MODE_SINGLE - providerList.adapter = sourcesArrayAdapter - providerList.setSelection(sourceIndex) - providerList.setItemChecked(sourceIndex, true) + providerList.choiceMode = AbsListView.CHOICE_MODE_SINGLE + providerList.adapter = sourcesArrayAdapter + providerList.setSelection(sourceIndex) + providerList.setItemChecked(sourceIndex, true) - providerList.setOnItemClickListener { _, _, which, _ -> - sourceIndex = which - providerList.setItemChecked(which, true) + providerList.setOnItemClickListener { _, _, which, _ -> + sourceIndex = which + providerList.setItemChecked(which, true) + } } } + refreshLinks(currentQualityProfile) + sourceDialog.setOnDismissListener { if (shouldDismiss) dismiss() selectSourceDialog = null @@ -650,6 +675,29 @@ class GeneratorPlayer : FullScreenPlayer() { sourceDialog.dismissSafe(activity) } + fun setProfileName(profile: Int) { + sourceDialog.source_settings_btt.setText( + QualityDataHelper.getProfileName( + profile + ) + ) + } + setProfileName(currentQualityProfile) + + sourceDialog.profiles_click_settings.setOnClickListener { + val activity = activity ?: return@setOnClickListener + QualityProfileDialog( + activity, + R.style.AlertDialogCustomBlack, + currentLinks.mapNotNull { it.first }, + currentQualityProfile + ) { profile -> + currentQualityProfile = profile.id + setProfileName(profile.id) + refreshLinks(profile.id) + }.show() + } + sourceDialog.subtitles_encoding_format?.apply { val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) @@ -847,7 +895,7 @@ class GeneratorPlayer : FullScreenPlayer() { private fun startPlayer() { if (isActive) return // we don't want double load when you skip loading - val links = sortLinks() + val links = sortLinks(currentQualityProfile) if (links.isEmpty()) { noLinksFound() return @@ -868,12 +916,12 @@ class GeneratorPlayer : FullScreenPlayer() { } override fun hasNextMirror(): Boolean { - val links = sortLinks() + val links = sortLinks(currentQualityProfile) return links.isNotEmpty() && links.indexOf(currentSelectedLink) + 1 < links.size } override fun nextMirror() { - val links = sortLinks() + val links = sortLinks(currentQualityProfile) if (links.isEmpty()) { noLinksFound() return @@ -1314,6 +1362,15 @@ class GeneratorPlayer : FullScreenPlayer() { val turnVisible = it.isNotEmpty() val wasGone = overlay_loading_skip_button?.isGone == true overlay_loading_skip_button?.isVisible = turnVisible + + normalSafeApiCall { + currentLinks.lastOrNull()?.let { last -> + if (getLinkPriority(currentQualityProfile, last) >= QualityDataHelper.AUTO_SKIP_PRIORITY) { + startPlayer() + } + } + } + if (turnVisible && wasGone) { overlay_loading_skip_button?.requestFocus() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt new file mode 100644 index 00000000..8e0ce67c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt @@ -0,0 +1,60 @@ +package com.lagradost.cloudstream3.ui.player.source_priority + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.utils.AppUtils +import kotlinx.android.synthetic.main.player_prioritize_item.view.* + +data class SourcePriority( + val data: T, + val name: String, + var priority: Int +) + +class PriorityAdapter(override val items: MutableList>) : + AppUtils.DiffAdapter>(items) { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return PriorityViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.player_prioritize_item, parent, false) + ) + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is PriorityViewHolder -> holder.bind(items[position]) + } + } + + class PriorityViewHolder( + itemView: View, + ) : RecyclerView.ViewHolder(itemView) { + fun bind(item: SourcePriority) { + val plusButton: ImageView = itemView.add_button + val subtractButton: ImageView = itemView.subtract_button + val priorityText: TextView = itemView.priority_text + val priorityNumber: TextView = itemView.priority_number + priorityText.text = item.name + + fun updatePriority() { + priorityNumber.text = item.priority.toString() + } + + updatePriority() + plusButton.setOnClickListener { + // If someone clicks til the integer limit then they deserve to crash. + item.priority++ + updatePriority() + } + + subtractButton.setOnClickListener { + item.priority-- + updatePriority() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt new file mode 100644 index 00000000..ff84c1f5 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt @@ -0,0 +1,116 @@ +package com.lagradost.cloudstream3.ui.player.source_priority + +import android.content.res.ColorStateList +import android.graphics.Typeface +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.result.UiImage +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.UIHelper.setImage +import kotlinx.android.synthetic.main.player_quality_profile_item.view.card_view +import kotlinx.android.synthetic.main.player_quality_profile_item.view.outline +import kotlinx.android.synthetic.main.player_quality_profile_item.view.profile_image_background +import kotlinx.android.synthetic.main.player_quality_profile_item.view.profile_text +import kotlinx.android.synthetic.main.player_quality_profile_item.view.text_is_mobile_data +import kotlinx.android.synthetic.main.player_quality_profile_item.view.text_is_wifi + +class ProfilesAdapter( + override val items: MutableList, + val usedProfile: Int, + val clickCallback: (oldIndex: Int?, newIndex: Int) -> Unit, +) : + AppUtils.DiffAdapter( + items, + comparison = { first: QualityDataHelper.QualityProfile, second: QualityDataHelper.QualityProfile -> + first.id == second.id + }) { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return ProfilesViewHolder( + LayoutInflater.from(parent.context) + .inflate(R.layout.player_quality_profile_item, parent, false) + ) + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is ProfilesViewHolder -> holder.bind(items[position], position) + } + } + + private var currentItem: Pair? = null + + fun getCurrentProfile(): QualityDataHelper.QualityProfile? { + return currentItem?.second + } + + inner class ProfilesViewHolder( + itemView: View, + ) : RecyclerView.ViewHolder(itemView) { + private val art = listOf( + R.drawable.profile_bg_teal, + R.drawable.profile_bg_blue, + R.drawable.profile_bg_dark_blue, + R.drawable.profile_bg_purple, + R.drawable.profile_bg_pink, + R.drawable.profile_bg_red, + R.drawable.profile_bg_orange, + ) + + fun bind(item: QualityDataHelper.QualityProfile, index: Int) { + val priorityText: TextView = itemView.profile_text + val profileBg: ImageView = itemView.profile_image_background + val wifiText: TextView = itemView.text_is_wifi + val dataText: TextView = itemView.text_is_mobile_data + val outline: View = itemView.outline + val cardView: View = itemView.card_view + + priorityText.text = item.name.asString(itemView.context) + dataText.isVisible = item.type == QualityDataHelper.QualityProfileType.Data + wifiText.isVisible = item.type == QualityDataHelper.QualityProfileType.WiFi + + fun setCurrentItem() { + val prevIndex = currentItem?.first + // Prevent UI bug when re-selecting the item quickly + if (prevIndex == index) { + return + } + currentItem = index to item + clickCallback.invoke(prevIndex, index) + } + + outline.isVisible = currentItem?.second?.id == item.id + + profileBg.setImage(UiImage.Drawable(art[index % art.size]), null, false) { palette -> + val color = palette.getDarkVibrantColor( + ContextCompat.getColor( + itemView.context, + R.color.dubColorBg + ) + ) + wifiText.backgroundTintList = ColorStateList.valueOf(color) + dataText.backgroundTintList = ColorStateList.valueOf(color) + } + + val textStyle = + if (item.id == usedProfile) { + Typeface.BOLD + } else { + Typeface.NORMAL + } + + priorityText.setTypeface(null, textStyle) + + cardView.setOnClickListener { + setCurrentItem() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt new file mode 100644 index 00000000..96249db4 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt @@ -0,0 +1,159 @@ +package com.lagradost.cloudstream3.ui.player.source_priority + +import android.content.Context +import androidx.annotation.StringRes +import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey +import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.mvvm.debugAssert +import com.lagradost.cloudstream3.ui.result.UiText +import com.lagradost.cloudstream3.ui.result.txt +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount +import com.lagradost.cloudstream3.utils.Qualities + +object QualityDataHelper { + private const val VIDEO_SOURCE_PRIORITY = "video_source_priority" + private const val VIDEO_PROFILE_NAME = "video_profile_name" + private const val VIDEO_QUALITY_PRIORITY = "video_quality_priority" + private const val VIDEO_PROFILE_TYPE = "video_profile_type" + private const val DEFAULT_SOURCE_PRIORITY = 1 + /** + * Automatically skip loading links once this priority is reached + **/ + const val AUTO_SKIP_PRIORITY = 10 + + /** + * Must be higher than amount of QualityProfileTypes + **/ + private const val PROFILE_COUNT = 7 + + /** + * Unique guarantees that there will always be one of this type in the profile list. + **/ + enum class QualityProfileType(@StringRes val stringRes: Int, val unique: Boolean) { + None(R.string.none, false), + WiFi(R.string.wifi, true), + Data(R.string.mobile_data, true) + } + + data class QualityProfile( + val name: UiText, + val id: Int, + val type: QualityProfileType + ) + + fun getSourcePriority(profile: Int, name: String?): Int { + if (name == null) return DEFAULT_SOURCE_PRIORITY + return getKey( + "$currentAccount/$VIDEO_SOURCE_PRIORITY/$profile", + name, + DEFAULT_SOURCE_PRIORITY + ) ?: DEFAULT_SOURCE_PRIORITY + } + + fun setSourcePriority(profile: Int, name: String, priority: Int) { + setKey("$currentAccount/$VIDEO_SOURCE_PRIORITY/$profile", name, priority) + } + + fun setProfileName(profile: Int, name: String?) { + val path = "$currentAccount/$VIDEO_PROFILE_NAME/$profile" + if (name == null) { + removeKey(path) + } else { + setKey(path, name.trim()) + } + } + + fun getProfileName(profile: Int): UiText { + return getKey("$currentAccount/$VIDEO_PROFILE_NAME/$profile")?.let { txt(it) } + ?: txt(R.string.profile_number, profile) + } + + fun getQualityPriority(profile: Int, quality: Qualities): Int { + return getKey( + "$currentAccount/$VIDEO_QUALITY_PRIORITY/$profile", + quality.value.toString(), + quality.defaultPriority + ) ?: quality.defaultPriority + } + + fun setQualityPriority(profile: Int, quality: Qualities, priority: Int) { + setKey( + "$currentAccount/$VIDEO_QUALITY_PRIORITY/$profile", + quality.value.toString(), + priority + ) + } + + fun getQualityProfileType(profile: Int): QualityProfileType { + return getKey("$currentAccount/$VIDEO_PROFILE_TYPE/$profile") ?: QualityProfileType.None + } + + fun setQualityProfileType(profile: Int, type: QualityProfileType?) { + val path = "$currentAccount/$VIDEO_PROFILE_TYPE/$profile" + if (type == QualityProfileType.None) { + removeKey(path) + } else { + setKey(path, type) + } + } + + /** + * Gets all quality profiles, always includes one profile with WiFi and Data + * Must under all circumstances at least return one profile + **/ + fun getProfiles(): List { + val availableTypes = QualityProfileType.values().toMutableList() + val profiles = (1..PROFILE_COUNT).map { profileNumber -> + // Get the real type + val type = getQualityProfileType(profileNumber) + + // This makes it impossible to get more than one of each type + // Duplicates will be turned to None + val uniqueType = if (type.unique && !availableTypes.remove(type)) { + QualityProfileType.None + } else { + type + } + + QualityProfile( + getProfileName(profileNumber), + profileNumber, + uniqueType + ) + }.toMutableList() + + /** + * If no profile of this type exists: insert it on the earliest profile with None type + **/ + fun insertType( + list: MutableList, + type: QualityProfileType + ) { + if (list.any { it.type == type }) return + val index = + list.indexOfFirst { it.type == QualityProfileType.None } + list.getOrNull(index)?.copy(type = type) + ?.let { fixed -> + list.set(index, fixed) + } + } + + QualityProfileType.values().forEach { + if (it.unique) insertType(profiles, it) + } + + debugAssert({ + !QualityProfileType.values().all { type -> + !type.unique || profiles.any { it.type == type } + } + }, { "All unique quality types do not exist" }) + + debugAssert({ + profiles.isEmpty() + }, { "No profiles!" }) + + return profiles + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt new file mode 100644 index 00000000..28a6365f --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt @@ -0,0 +1,106 @@ +package com.lagradost.cloudstream3.ui.player.source_priority + +import android.app.Dialog +import android.view.View +import android.widget.TextView +import androidx.annotation.StyleRes +import androidx.core.view.isVisible +import androidx.fragment.app.FragmentActivity +import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfileName +import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfiles +import com.lagradost.cloudstream3.ui.result.txt +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog +import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import kotlinx.android.synthetic.main.player_quality_profile_dialog.* + +class QualityProfileDialog( + val activity: FragmentActivity, + @StyleRes val themeRes: Int, + private val links: List, + private val usedProfile: Int, + private val profileSelectionCallback: (QualityDataHelper.QualityProfile) -> Unit +) : Dialog(activity, themeRes) { + override fun show() { + setContentView(R.layout.player_quality_profile_dialog) + val profilesRecyclerView: RecyclerView = profiles_recyclerview + val useBtt: View = use_btt + val editBtt: View = edit_btt + val cancelBtt: View = cancel_btt + val defaultBtt: View = set_default_btt + val currentProfileText: TextView = currently_selected_profile_text + val selectedItemActionsHolder: View = selected_item_holder + + fun getCurrentProfile(): QualityDataHelper.QualityProfile? { + return (profilesRecyclerView.adapter as? ProfilesAdapter)?.getCurrentProfile() + } + + fun refreshProfiles() { + currentProfileText.text = getProfileName(usedProfile).asString(context) + (profilesRecyclerView.adapter as? ProfilesAdapter)?.updateList(getProfiles()) + } + + profilesRecyclerView.adapter = ProfilesAdapter( + mutableListOf(), + usedProfile, + ) { oldIndex: Int?, newIndex: Int -> + profilesRecyclerView.adapter?.notifyItemChanged(newIndex) + selectedItemActionsHolder.alpha = 1f + if (oldIndex != null) { + profilesRecyclerView.adapter?.notifyItemChanged(oldIndex) + } + } + + refreshProfiles() + + editBtt.setOnClickListener { + getCurrentProfile()?.let { profile -> + SourcePriorityDialog(context, themeRes, links, profile) { + refreshProfiles() + }.show() + } + } + + + defaultBtt.setOnClickListener { + val currentProfile = getCurrentProfile() ?: return@setOnClickListener + val choices = QualityDataHelper.QualityProfileType.values() + .filter { it != QualityDataHelper.QualityProfileType.None } + val choiceNames = choices.map { txt(it.stringRes).asString(context) } + + activity.showBottomDialog( + choiceNames, + choices.indexOf(currentProfile.type), + txt(R.string.set_default).asString(context), + false, + {}, + { index -> + val pickedChoice = choices.getOrNull(index) ?: return@showBottomDialog + // Remove previous picks + if (pickedChoice.unique) { + getProfiles().filter { it.type == pickedChoice }.forEach { + QualityDataHelper.setQualityProfileType(it.id, null) + } + } + + QualityDataHelper.setQualityProfileType(currentProfile.id, pickedChoice) + refreshProfiles() + }) + } + + cancelBtt.setOnClickListener { + this.dismissSafe() + } + + useBtt.setOnClickListener { + getCurrentProfile()?.let { + profileSelectionCallback.invoke(it) + this.dismissSafe() + } + } + + super.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt new file mode 100644 index 00000000..efc1f1b8 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt @@ -0,0 +1,105 @@ +package com.lagradost.cloudstream3.ui.player.source_priority + +import android.app.Dialog +import android.content.Context +import android.view.View +import android.widget.EditText +import android.widget.TextView +import androidx.annotation.StyleRes +import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.FragmentActivity +import androidx.recyclerview.widget.RecyclerView +import androidx.work.impl.constraints.controllers.ConstraintController +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.result.txt +import com.lagradost.cloudstream3.utils.DataStoreHelper +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import kotlinx.android.synthetic.main.player_select_source_priority.* + +class SourcePriorityDialog( + ctx: Context, + @StyleRes themeRes: Int, + val links: List, + private val profile: QualityDataHelper.QualityProfile, + /** + * Notify that the profile overview should be updated, for example if the name has been updated + * Should not be called excessively. + **/ + private val updatedCallback: () -> Unit +) : Dialog(ctx, themeRes) { + override fun show() { + setContentView(R.layout.player_select_source_priority) + val sourcesRecyclerView: RecyclerView = sort_sources + val qualitiesRecyclerView: RecyclerView = sort_qualities + val profileText: EditText = profile_text_editable + val saveBtt: View = save_btt + val exitBtt: View = close_btt + val helpBtt: View = help_btt + + profileText.setText(QualityDataHelper.getProfileName(profile.id).asString(context)) + profileText.hint = txt(R.string.profile_number, profile.id).asString(context) + + sourcesRecyclerView.adapter = PriorityAdapter( + links.map { link -> + SourcePriority( + null, + link.source, + QualityDataHelper.getSourcePriority(profile.id, link.source) + ) + }.distinctBy { it.name }.sortedBy { -it.priority }.toMutableList() + ) + + qualitiesRecyclerView.adapter = PriorityAdapter( + Qualities.values().mapNotNull { + SourcePriority( + it, + Qualities.getStringByIntFull(it.value).ifBlank { return@mapNotNull null }, + QualityDataHelper.getQualityPriority(profile.id, it) + ) + }.sortedBy { -it.priority }.toMutableList() + ) + + @Suppress("UNCHECKED_CAST") // We know the types + saveBtt.setOnClickListener { + val qualityAdapter = qualitiesRecyclerView.adapter as? PriorityAdapter + val sourcesAdapter = sourcesRecyclerView.adapter as? PriorityAdapter + + val qualities = qualityAdapter?.items ?: emptyList() + val sources = sourcesAdapter?.items ?: emptyList() + + qualities.forEach { + val data = it.data as? Qualities ?: return@forEach + QualityDataHelper.setQualityPriority(profile.id, data, it.priority) + } + + sources.forEach { + QualityDataHelper.setSourcePriority(profile.id, it.name, it.priority) + } + + qualityAdapter?.updateList(qualities.sortedBy { -it.priority }) + sourcesAdapter?.updateList(sources.sortedBy { -it.priority }) + + val savedProfileName = profileText.text.toString() + if (savedProfileName.isBlank()) { + QualityDataHelper.setProfileName(profile.id, null) + } else { + QualityDataHelper.setProfileName(profile.id, savedProfileName) + } + updatedCallback.invoke() + } + + exitBtt.setOnClickListener { + this.dismissSafe() + } + + helpBtt.setOnClickListener { + AlertDialog.Builder(context, R.style.AlertDialogCustom).apply { + setMessage(R.string.quality_profile_help) + }.show() + } + + super.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt index 81ef8d57..f2eca5b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt @@ -72,7 +72,7 @@ sealed class UiImage { fun ImageView?.setImage(value: UiImage?, fadeIn: Boolean = true) { when (value) { - is UiImage.Image -> setImageImage(value,fadeIn) + is UiImage.Image -> setImageImage(value, fadeIn) is UiImage.Drawable -> setImageDrawable(value) null -> { this?.isVisible = false @@ -88,7 +88,7 @@ fun ImageView?.setImageImage(value: UiImage.Image, fadeIn: Boolean = true) { fun ImageView?.setImageDrawable(value: UiImage.Drawable) { if (this == null) return this.isVisible = true - setImageResource(value.resId) + this.setImage(UiImage.Drawable(value.resId)) } @JvmName("imgNull") diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 516cd990..3bdb64e1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -117,7 +117,7 @@ object DataStoreHelper { /** * A datastore wide account for future implementations of a multiple account system **/ - private var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION + var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION fun getAllWatchStateIds(): List? { val folder = "$currentAccount/$RESULT_WATCH_STATE" 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 5062ebd9..f6373dce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -114,16 +114,16 @@ data class ExtractorSubtitleLink( */ val schemaStripRegex = Regex("""^(https:|)//(www\.|)""") -enum class Qualities(var value: Int) { - Unknown(400), - P144(144), // 144p - P240(240), // 240p - P360(360), // 360p - P480(480), // 480p - P720(720), // 720p - P1080(1080), // 1080p - P1440(1440), // 1440p - P2160(2160); // 4k or 2160p +enum class Qualities(var value: Int, val defaultPriority: Int) { + Unknown(400, 4), + P144(144, 0), // 144p + P240(240, 2), // 240p + P360(360, 3), // 360p + P480(480, 4), // 480p + P720(720, 5), // 720p + P1080(1080, 6), // 1080p + P1440(1440, 7), // 1440p + P2160(2160, 8); // 4k or 2160p companion object { fun getStringByInt(qual: Int?): String { @@ -135,6 +135,14 @@ enum class Qualities(var value: Int) { else -> "${qual}p" } } + fun getStringByIntFull(quality: Int): String { + return when (quality) { + 0 -> "Auto" + Unknown.value -> "Unknown" + P2160.value -> "4K" + else -> "${quality}p" + } + } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt index 2dc6846c..1f6d726d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt @@ -250,17 +250,6 @@ object SingleSelectionHelper { ) } - fun showBottomDialog( - items: List, - selectedIndex: Int, - name: String, - showApply: Boolean, - dismissCallback: () -> Unit, - callback: (Int) -> Unit, - ) { - - } - /** Only for a low amount of items */ fun Activity?.showBottomDialog( items: List, diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index c300d615..7d798204 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -44,12 +44,13 @@ import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.model.GlideUrl import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.RequestOptions.bitmapTransform import com.bumptech.glide.request.target.Target import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.ui.result.UiImage import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isEmulatorSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings -import com.lagradost.cloudstream3.utils.GlideOptions.bitmapTransform import jp.wasabeef.glide.transformations.BlurTransformation import kotlin.math.roundToInt @@ -188,11 +189,30 @@ object UIHelper { fadeIn: Boolean = true, colorCallback: ((Palette) -> Unit)? = null ): Boolean { - if (this == null || url.isNullOrBlank()) return false + if (url.isNullOrBlank()) return false + this.setImage(UiImage.Image(url, headers, errorImageDrawable), errorImageDrawable, fadeIn, colorCallback) + return true + } + + fun ImageView?.setImage( + uiImage: UiImage?, + @DrawableRes + errorImageDrawable: Int? = null, + fadeIn: Boolean = true, + colorCallback: ((Palette) -> Unit)? = null + ): Boolean { + if (this == null || uiImage == null) return false + + val (glideImage, identifier) = + (uiImage as? UiImage.Drawable)?.resId?.let { + it to it.toString() + } ?: (uiImage as? UiImage.Image)?.let { image -> + GlideUrl(image.url) { image.headers ?: emptyMap() } to image.url + } ?: return false return try { val builder = GlideApp.with(this) - .load(GlideUrl(url) { headers ?: emptyMap() }) + .load(glideImage) .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.ALL).let { req -> if (fadeIn) @@ -211,7 +231,13 @@ object UIHelper { isFirstResource: Boolean ): Boolean { resource?.toBitmapOrNull() - ?.let { bitmap -> createPaletteAsync(url, bitmap, colorCallback) } + ?.let { bitmap -> + createPaletteAsync( + identifier, + bitmap, + colorCallback + ) + } return false } diff --git a/app/src/main/res/drawable/baseline_help_outline_24.xml b/app/src/main/res/drawable/baseline_help_outline_24.xml new file mode 100644 index 00000000..3a72cda0 --- /dev/null +++ b/app/src/main/res/drawable/baseline_help_outline_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/baseline_remove_24.xml b/app/src/main/res/drawable/baseline_remove_24.xml index 791a2f81..f4455598 100644 --- a/app/src/main/res/drawable/baseline_remove_24.xml +++ b/app/src/main/res/drawable/baseline_remove_24.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="?attr/colorControlNormal"> + android:tint="?attr/white"> diff --git a/app/src/main/res/drawable/profile_bg_blue.jpg b/app/src/main/res/drawable/profile_bg_blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e573439b04e57d86042066539a6b521621662eb8 GIT binary patch literal 21107 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

    16UgK~XVKnIr>}rG^j`L`1 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

    T4~l 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 IyM1T>*`W+&=l}o! literal 117989 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 diff --git a/app/src/main/res/drawable/profile_bg_teal.jpg b/app/src/main/res/drawable/profile_bg_teal.jpg index 75ef777bfebf000ff741ad7dab8e0aacc69a6937..9323665088fa221aa7d7c777bb8a901848f88e43 100644 GIT binary patch literal 121206 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 From a95fcfc9dba211187470f4250db4ca1e96eb7564 Mon Sep 17 00:00:00 2001 From: Saksham Shekher <95137948+OshekharO@users.noreply.github.com> Date: Tue, 27 Jun 2023 18:24:05 +0530 Subject: [PATCH 406/888] SpeedoStream update (#493) --- .../com/lagradost/cloudstream3/extractors/SpeedoStream.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt index 8ef6c463..90104ace 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt @@ -8,7 +8,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper class SpeedoStream1 : SpeedoStream() { - override val mainUrl = "https://speedostream.nl" + override val mainUrl = "https://speedostream.pm" } open class SpeedoStream : ExtractorApi() { @@ -39,4 +39,4 @@ open class SpeedoStream : ExtractorApi() { ) -} \ No newline at end of file +} From da0be63b7ce5241e69d1221f60d1a24f49d778e3 Mon Sep 17 00:00:00 2001 From: Nexus <79303560+Nexus-Gits@users.noreply.github.com> Date: Fri, 30 Jun 2023 21:49:52 +0530 Subject: [PATCH 407/888] Update ByteShare.kt (#494) * Update ByteShare.kt --- .../java/com/lagradost/cloudstream3/extractors/ByteShare.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt index 3e0a03c0..2d56fe1f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt @@ -4,7 +4,7 @@ import com.lagradost.cloudstream3.utils.* open class ByteShare : ExtractorApi() { override val name = "ByteShare" - override val mainUrl = "https://byteshare.net" + override val mainUrl = "https://byteshare.to" override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?): List { @@ -20,4 +20,4 @@ open class ByteShare : ExtractorApi() { ) return sources } -} \ No newline at end of file +} From 51c10891626fee6e3a1638ad4c1e020f1fc6bf05 Mon Sep 17 00:00:00 2001 From: Nexus <79303560+Nexus-Gits@users.noreply.github.com> Date: Sun, 2 Jul 2023 23:11:19 +0530 Subject: [PATCH 408/888] Updated some of the extractor Domains (#495) * Update AsianLoad.kt Asianload domain changed * Update Hxfile.kt Some of the old url fix * Update Moviehab.kt * Update MultiQuality.kt * Update AsianLoad.kt * Update Hxfile.kt * Update MultiQuality.kt --- .../java/com/lagradost/cloudstream3/extractors/AsianLoad.kt | 4 ++-- .../java/com/lagradost/cloudstream3/extractors/Hxfile.kt | 6 +++--- .../java/com/lagradost/cloudstream3/extractors/Moviehab.kt | 4 ++-- .../com/lagradost/cloudstream3/extractors/MultiQuality.kt | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt index 7a62fb52..4bed3169 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt @@ -9,7 +9,7 @@ import java.net.URI open class AsianLoad : ExtractorApi() { override var name = "AsianLoad" - override var mainUrl = "https://asianembed.io" + override var mainUrl = "https://asianhdplay.pro" override val requiresReferer = true private val sourceRegex = Regex("""sources:[\W\w]*?file:\s*?["'](.*?)["']""") @@ -43,4 +43,4 @@ open class AsianLoad : ExtractorApi() { return extractedLinksList } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt index f5dde774..bfd7cae5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson class Neonime7n : Hxfile() { override val name = "Neonime7n" - override val mainUrl = "https://7njctn.neonime.watch" + override val mainUrl = "https://neonime.fun" override val redirect = false } @@ -19,7 +19,7 @@ class Neonime8n : Hxfile() { class KotakAnimeid : Hxfile() { override val name = "KotakAnimeid" - override val mainUrl = "https://kotakanimeid.com" + override val mainUrl = "https://nontonanimeid.bio" override val requiresReferer = true } @@ -97,4 +97,4 @@ open class Hxfile : ExtractorApi() { @JsonProperty("label") val label: String? ) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt index aaa33ca1..51939cc2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt @@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper class MoviehabNet : Moviehab() { - override var mainUrl = "https://play.moviehab.net" + override var mainUrl = "https://play.moviehab.asia" } open class Moviehab : ExtractorApi() { @@ -41,4 +41,4 @@ open class Moviehab : ExtractorApi() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt index 44657196..c7f4ac76 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt @@ -9,7 +9,7 @@ import java.net.URI open class MultiQuality : ExtractorApi() { override var name = "MultiQuality" - override var mainUrl = "https://gogo-play.net" + override var mainUrl = "https://anihdplay.com" private val sourceRegex = Regex("""file:\s*['"](.*?)['"],label:\s*['"](.*?)['"]""") private val m3u8Regex = Regex(""".*?(\d*).m3u8""") private val urlRegex = Regex("""(.*?)([^/]+$)""") @@ -56,4 +56,4 @@ open class MultiQuality : ExtractorApi() { return extractedLinksList } } -} \ No newline at end of file +} From 847957362f498c7801ff3d92c4e2a914d3202a11 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Mon, 10 Jul 2023 06:52:03 +0700 Subject: [PATCH 409/888] Extractor: added Pixeldrain, Wibufile and fix some extractors (#502) Co-authored-by: Sofie99 --- .../cloudstream3/extractors/DoodExtractor.kt | 4 ++ .../cloudstream3/extractors/Filesim.kt | 19 +++++++++- .../cloudstream3/extractors/Pixeldrain.kt | 30 +++++++++++++++ .../cloudstream3/extractors/StreamSB.kt | 25 +++++++++++++ .../cloudstream3/extractors/Wibufile.kt | 37 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 11 ++++++ 6 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Pixeldrain.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt 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 24495a40..8dcfb859 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -7,6 +7,10 @@ import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getQualityFromName import kotlinx.coroutines.delay +class Dooood : DoodLaExtractor() { + override var mainUrl = "https://dooood.com" +} + class DoodWfExtractor : DoodLaExtractor() { override var mainUrl = "https://dood.wf" } 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 4c1791a8..be0efd0c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -5,6 +5,16 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 +class Guccihide : Filesim() { + override val name = "Guccihide" + override var mainUrl = "https://guccihide.com" +} + +class Ahvsh : Filesim() { + override val name = "Ahvsh" + override var mainUrl = "https://ahvsh.com" +} + class Moviesm4u : Filesim() { override val mainUrl = "https://moviesm4u.com" override val name = "Moviesm4u" @@ -15,6 +25,11 @@ class FileMoonIn : Filesim() { override val name = "FileMoon" } +class StreamhideTo : Filesim() { + override val mainUrl = "https://streamhide.to" + override val name = "Streamhide" +} + class StreamhideCom : Filesim() { override var name: String = "Streamhide" override var mainUrl: String = "https://streamhide.com" @@ -42,7 +57,7 @@ class FileMoonSx : Filesim() { open class Filesim : ExtractorApi() { override val name = "Filesim" override val mainUrl = "https://files.im" - override val requiresReferer = false + override val requiresReferer = true override suspend fun getUrl( url: String, @@ -50,7 +65,7 @@ open class Filesim : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url, referer = mainUrl).document + val response = app.get(url, referer = referer).document response.select("script[type=text/javascript]").map { script -> if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) { val unpackedscript = getAndUnpack(script.data()) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pixeldrain.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pixeldrain.kt new file mode 100644 index 00000000..9b481240 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pixeldrain.kt @@ -0,0 +1,30 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +open class Pixeldrain : ExtractorApi() { + override val name = "Pixeldrain" + override val mainUrl = "https://pixeldrain.com" + override val requiresReferer = false + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val mId = Regex("/([ul]/[\\da-zA-Z\\-]+)").find(url)?.groupValues?.get(1)?.split("/") + callback.invoke( + ExtractorLink( + this.name, + this.name, + "$mainUrl/api/file/${mId?.last() ?: return}?download", + url, + Qualities.Unknown.value, + ) + ) + } + +} \ 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 3d2a81b7..df050cf3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -8,6 +8,31 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper import kotlin.random.Random +class Sblona : StreamSB() { + override var name = "Sblona" + override var mainUrl = "https://sblona.com" +} + +class Lvturbo : StreamSB() { + override var name = "Lvturbo" + override var mainUrl = "https://lvturbo.com" +} + +class Sbrapid : StreamSB() { + override var name = "Sbrapid" + override var mainUrl = "https://sbrapid.com" +} + +class Sbface : StreamSB() { + override var name = "Sbface" + override var mainUrl = "https://sbface.com" +} + +class Sbsonic : StreamSB() { + override var name = "Sbsonic" + override var mainUrl = "https://sbsonic.com" +} + class Vidgomunimesb : StreamSB() { override var mainUrl = "https://vidgomunimesb.xyz" } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt new file mode 100644 index 00000000..ae1e872a --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt @@ -0,0 +1,37 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import java.net.URI + +open class Wibufile : ExtractorApi() { + override val name: String = "Wibufile" + override val mainUrl: String = "https://wibufile.com" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val res = app.get(url).text + val video = Regex("src: ['\"](.*?)['\"]").find(res)?.groupValues?.get(1) + + callback.invoke( + ExtractorLink( + name, + name, + video ?: return, + "$mainUrl/", + Qualities.Unknown.value, + URI(url).path.endsWith(".m3u8") + ) + ) + + } + +} \ 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 f6373dce..f0c1ea3b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -244,6 +244,7 @@ val extractorApis: MutableList = arrayListOf( XStreamCdn(), StreamSB(), + Sblona(), Vidgomunimesb(), StreamSB1(), StreamSB2(), @@ -265,6 +266,10 @@ val extractorApis: MutableList = arrayListOf( Sbflix(), Streamsss(), Sbspeed(), + Sbsonic(), + Sbface(), + Sbrapid(), + Lvturbo(), Fastream(), @@ -300,6 +305,7 @@ val extractorApis: MutableList = arrayListOf( DoodToExtractor(), DoodSoExtractor(), DoodLaExtractor(), + Dooood(), DoodWsExtractor(), DoodShExtractor(), DoodWatchExtractor(), @@ -366,9 +372,14 @@ val extractorApis: MutableList = arrayListOf( Movhide(), StreamhideCom(), + StreamhideTo(), + Pixeldrain(), + Wibufile(), FileMoonIn(), Moviesm4u(), Filesim(), + Ahvsh(), + Guccihide(), FileMoon(), FileMoonSx(), Vido(), From 525bf8d86116036b8a1e370f44aa19db8fc0cbcf Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 9 Jul 2023 01:35:42 +0200 Subject: [PATCH 410/888] Translated using Weblate (Odia) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 38.9% (242 of 621 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Turkish) Currently translated at 99.5% (618 of 621 strings) Translated using Weblate (Turkish) Currently translated at 99.5% (618 of 621 strings) Translated using Weblate (German) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Malay) Currently translated at 20.4% (127 of 621 strings) Translated using Weblate (Italian) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (German) Currently translated at 99.8% (620 of 621 strings) Translated using Weblate (Polish) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Czech) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (621 of 621 strings) Translated using Weblate (Odia) Currently translated at 39.1% (239 of 610 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Hebrew) Currently translated at 94.9% (579 of 610 strings) Translated using Weblate (Malay) Currently translated at 18.1% (111 of 610 strings) Translated using Weblate (Urdu) Currently translated at 100.0% (610 of 610 strings) Translated using Weblate (Odia) Currently translated at 39.0% (238 of 610 strings) Translated using Weblate (Norwegian Nynorsk) Currently translated at 46.0% (281 of 610 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 96.7% (590 of 610 strings) Translated using Weblate (Odia) Currently translated at 39.0% (238 of 610 strings) Translated using Weblate (Odia) Currently translated at 38.6% (236 of 610 strings) Translated using Weblate (Bengali) Currently translated at 38.1% (233 of 610 strings) Co-authored-by: Aftabuzzaman Co-authored-by: Aitor Salaberria Co-authored-by: Alexthegib Co-authored-by: Andreas Co-authored-by: Bananenbrot Co-authored-by: BluTiger Co-authored-by: Clxff H3r4ld0 <123844876+clxf12@users.noreply.github.com> Co-authored-by: Dan Co-authored-by: Efe Devirgen Co-authored-by: Eryk Michalak Co-authored-by: Ettore Atalan Co-authored-by: Fjuro Co-authored-by: Hosted Weblate Co-authored-by: Kai Co-authored-by: Levi Klippel Co-authored-by: Nathan Khutorskoy Co-authored-by: Rex_sa Co-authored-by: Subham Jena Co-authored-by: Sufyan Zahoor Jutt Co-authored-by: enescan201 Co-authored-by: gallegonovato Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/bn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/he/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ms/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/nn/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/or/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ur/ Translation: Cloudstream/App --- app/src/main/res/values-ar/strings.xml | 19 ++- app/src/main/res/values-bn/strings.xml | 31 ++--- app/src/main/res/values-cs/strings.xml | 19 ++- app/src/main/res/values-de/strings.xml | 19 ++- app/src/main/res/values-es/strings.xml | 21 ++- app/src/main/res/values-in/strings.xml | 19 ++- app/src/main/res/values-it/strings.xml | 19 ++- app/src/main/res/values-iw/strings.xml | 4 +- app/src/main/res/values-ms/strings.xml | 40 +++++- app/src/main/res/values-nl/strings.xml | 19 ++- app/src/main/res/values-nn/strings.xml | 15 ++- app/src/main/res/values-no/strings.xml | 34 ++--- app/src/main/res/values-or/strings.xml | 11 +- app/src/main/res/values-pl/strings.xml | 19 ++- app/src/main/res/values-pt/strings.xml | 19 ++- app/src/main/res/values-tr/strings.xml | 23 +++- app/src/main/res/values-uk/strings.xml | 19 ++- app/src/main/res/values-ur/strings.xml | 179 ++++++++++++++++++++++++- 18 files changed, 473 insertions(+), 56 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index c1f07d6c..6b722e43 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -561,4 +561,21 @@ تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - + الملف الشخصي %d + واي فاي + بيانات الهاتف + تعيين الافتراضي + استخدام + تعديل + الملفات التعريفية + مساعدة + ‎‎هنا يمكنك تغيير طريقة ترتيب المصادر. إذا كان للفيديو أولوية أعلى ، فسيظهر في الأعلى في اختيار المصدر. يمثل مجموع أولوية المصدر وأولوية الجودة أولوية الفيديو. +\n +\nالمصدر أ: 3 +\nالجودة ب: 7 +\nسيكون لها أولوية فيديو مجمعة تبلغ 10. +\n +\nملاحظة: إذا كان المجموع 10 أو أكثر ، فسيتخطى المشغل التحميل تلقائيًا عند تحميل هذا الرابط! + النوعيات + خلفية الملف الشخصي + \ No newline at end of file diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 12752938..cc272a3a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -7,7 +7,7 @@ %dদিন %dঘন্টা %dমিনিট %dঘন্টা %dমিনিট %d মিনিট - এপিসোড পোস্টার + পর্বের পোস্টার মূল পোস্টার পরবর্তী র‍্যান্ডম ফিরে যান @@ -24,9 +24,9 @@ ডাউনলোডসমূহ সেটিংস %s এপি %d - এপিসোড %d রিলিজ হবে + পর্ব %d মুক্তির তারিখ শেয়ার - ব্রাঊজারে খুলুন + ব্রাউজারে খুলুন জনরা খুঁজুন… খুঁজুন %s… @@ -35,7 +35,7 @@ পিছনে যান কোন তথ্য নেই আরো অপশন - পরবর্তি এপিসোড + পরবর্তী পর্ব লোডিং বাদ দিন লোডিং… দেখা হচ্ছে @@ -46,10 +46,10 @@ কোন কিছুই না পুনরায় দেখা হচ্ছে টরেন্ট স্ট্রিম করুন - সোর্সসমূহ + উৎসসমূহ সাবটাইটেলসমূহ আবার সংযোগ দেওয়ার চেষ্টা করুন… - এপিসোড চালান + পর্ব চালান ডাউনলোড ডাউনলোড হয়েছে ডাউনলোড চলছে @@ -61,22 +61,22 @@ লিংক লোডিং ব্যর্থ ডাব সাব - ফাইল প্লে করুন + ফাইল চালান ডাউনলোড থামান আটো বাগ রিপোর্ট বন্ধ করুন আরো তথ্য বন্ধ করুন - প্লে + চালান তথ্য বুকমার্কসমূহ বাদ দিন বুকমার্ক করুন - এপ্লাই করুন + প্রয়োগ করুন বাদ দিন কপি করুন বন্ধ করুন মুছুন - সেভ করুন + সংরক্ষণ করুন ভিডিও এর গতি ফন্ট আউটলাইন কালার সাবটাইটেল এজের ধরণ @@ -100,11 +100,11 @@ ডাউনলোড ব্যর্থ ইন্টারনাল স্টোরেজ বুকমার্ক ফিল্টার করুন - ফাইল ডিলিট করুন + ফাইল মুছুন ডাউনলোড চালু করুন সাবটাইটেল সেটিংস সাবটাইটেল ব্যাকগ্রাউন্ড কালার - ফন্ট কালার + লেখার রং এটা একটি টরেন্ট প্রভাইডার, ভিপিএন ব্যবহার করা উচিৎ উইন্ডো কালার ফন্টের সাইজ @@ -130,8 +130,8 @@ ভিডিওপ্লেয়ার এ সময় নিয়ন্ত্রণ করতে, ডানে অথবা বামে সোয়াইপ করুন সেটিংস পরিবর্তন করতে সোয়াইপ করুন উজ্জ্বলতা অথবা স্বরমাত্রা পরিবর্তন করতে যথাক্রমে বামে অথবা ডানে সোয়াইপ করুন - স্বয়ংক্রিয়ভাবে পরবর্তী এপিসোড প্লে করুন - পরবর্তী এপিসোডটি চালু করুন যখন চলতি এপিসোডটি শেষ হয় + স্বয়ংক্রিয়ভাবে পরবর্তী পর্ব চালান + বর্তমান পর্বটি শেষ হলে পরের পর্বটি চালান থামতে দুইবার চাপুন ডাটা জমা হয়েছে স্টোরেজ এর অনুমতি অনুপস্থিত। দয়া করে আবার চেষ্টা করুন। @@ -148,4 +148,5 @@ আগাতে ডবল ট্যাপ করুন আইজেনগ্রাভি মোড আপডেট শুরু হয়েছে - + ব্রাউজার + \ 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 16ceff2d..5cbdb7db 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -553,4 +553,21 @@ 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 - + Profil %d + Wi-Fi + Mobilní data + Nastavit jako výchozí + Použít + Upravit + Profily + Nápověda + Kvality + Pozadí profilu + Zde můžete změnit pořadí zdrojů. Pokud má video vyšší prioritu, objeví se ve výběru zdrojů výše. Součet priority zdroje a priority kvality je priorita videa. +\n +\nZdroj A: 3 +\nKvalita B: 7 +\nBudou mít celkovou prioritu videa 10. +\n +\nPOZNÁMKA: Pokud je součet 10 nebo vyšší, přehrávač automaticky přeskočí načítání při načtení daného odkazu! + \ 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 e0a9594c..69a850b3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -529,4 +529,21 @@ Rückgängig Abonniert ISP-Umgehungen - + Profil %d + Wi-Fi + Mobile Daten + Standard festlegen + Verwenden + Bearbeiten + Profile + Hilfe + Qualitäten + Profil-Hintergrund + Hier kannst du verändern, wie die Quellen geordnet werden. Wenn ein Video eine höhere Priorität hat, wird es höher in der Quellenauswahl erscheinen. Die Summe der Quellenpriorität und der Qualitätspriorität ist die Videopriorität. +\n +\nQuelle A: 3 +\nQualität B: 7 +\nWerden eine kombinierte Videopriorität von 10 haben. +\n +\nHINWEIS: Wenn die Summe 10 oder mehr beträgt, überspringt der Player automatisch das Laden, wenn der Link geladen wird! + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d248044d..4326bccd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -503,7 +503,7 @@ Seleccionar biblioteca Abrir con Tu biblioteca está vacía :( -\nRegístrate con una cuenta en la biblioteca o agrega los títulos a tu biblioteca local. +\nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local. ¡Se encontró un archivo en modo seguro! \nNo cargar ninguna extensión al inicio hasta que se elimine el archivo. Reproductor visible - buscar cantidad @@ -529,4 +529,21 @@ Revertir ISP Bypasses Calidad de visualización preferida (Datos móviles) - + Ayuda + Aquí puedes cambiar el orden de las fuentes. Si un vídeo tiene una prioridad más alta, aparecerá más arriba en la selección de las fuentes. La suma de la prioridad de la fuente y la prioridad de la calidad es la prioridad del vídeo. +\n +\nFuente A: 3 +\nCalidad B: 7 +\nTendrá una prioridad en el vídeo combinada de 10. +\n +\nNOTA: ¡Si la suma es 10 o más el reproductor saltará automáticamente la carga cuando se cargue ese enlace! + Perfil %d + Wifi + Editar + Perfiles + Datos móviles + Establecer por defecto + Usar + Calidades + Perfil del fondo + \ 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 a8c6a197..e519d062 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -552,4 +552,21 @@ Bypass ISP Pulihkan Nonton dengan kualitas yang di inginkan (Data Seluler) - + Data seluler + Bantuan + Di sini anda dapat mengubah sumber yang diurutkan. Jika video memiliki prioritas lebih tinggi, video tersebut akan muncul lebih tinggi dalam pemilihan sumber. Jumlah prioritas sumber dan prioritas kualitas adalah prioritas video. +\n +\nSumber A: 3 +\nKualitas B: 7 +\nAkan memiliki prioritas video yang digabung 10. +\n +\nCATATAN: Jika jumlahnya 10 atau lebih, pemain akan melewatkan pemuatan secara otomatis saat tautan dimuat! + Profil %d + Wifi + Pengaturan default + Gunakan + Edit + Profil + Kualitas + Latar belakang profil + \ 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 6dca2e3a..9a90b6e9 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -551,4 +551,21 @@ Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! Qualità di visualizzazione preferita (Dati mobili) - + Qui puoi cambiare l\'ordine delle fonti. Se un video ha una priorità maggiore, apparirà più in alto nella selezione delle fonti. La somma tra la priorità della fonte e la priorità della qualità è la priorità video. +\n +\nFonte A: 3 +\nQualità B: 7 +\nAvranno una priorità video combinata di 10. +\n +\nNOTA: se la somma è pari o superiore a 10, il lettore salterà automaticamente il caricamento quando viene caricato quel link! + Profilo %d + Wi-Fi + Imposta predefinito + Usa + Modifica + Profili + Aiuto + Dati Mobili + Qualità + Sfondo profilo + \ No newline at end of file diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 50e96c7c..e59cdd66 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -96,7 +96,7 @@ הורדת שפות שפת הכתוביות ייבא גופנים בהצבתם ב %s - להמשיך לצפות + המשך צפיה להסיר עוד מידע הספק הזה הוא טורנט, שימוש ב-VPN הוא מומלץ @@ -506,4 +506,4 @@ אלפביתי (ת\' עד א\') פתח עם נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת - + \ No newline at end of file diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 42eba3cc..7fd5504e 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -1,2 +1,40 @@ - + + Semua bahasa + Langkau %s + Pelayar web + Sejarah + Kosongkan sejarah + Pengenalan + Kredit + Pembukaan bercampur + Penamat + Pembukaan + Memasang kemaskini aplikasi… + Memuat turun kemaskini aplikasi… + Tidak + Ya + Adakah anda pasti anda ingin keluar\? + Keluarkan daripada ditonton + Tanda sebagai sudah ditonton + Tunjukkan pop timbul yang dilangkau untuk pembukaan/pengakhiran + Tidak dapat memasang versi aplikasi terkini + Terlalu banyak perkataan. Tidak dapat disimpan di papan klip. + Aplikasi tidak ditemui + Penamat bercampur + Imbas kembali + Episod %d akan disiarkan dalam + Pelakon:%s + Mod Selamat Hidup + %dd %dh %dm + %dh %dm + %dm + Poster Episod + Poster Utama + Pergi Kembali + Seterusnya Rawak + Tukar Pembekal + Kelajuan (%.2fx) + Poster + Poster + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f56b0bfb..9054eada 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -551,4 +551,21 @@ \nWord lid van onze Discord of zoek online. Audiosporen Gesorteerd op - + Wifi + Mobiele data + Maak standaard + Aanpassen + Profielen + Help + Kwaliteiten + Profiel achtergrond + Gebruik + Hier kan je de volgorde van de bronnen veranderen. Als een video een hogere prioriteit heeft zal het hoger in de bronnenlijst staan. De som van de prioriteit van de bron en de prioriteit van de kwaliteit is de prioriteit van de video. +\n +\nBron A: 3 +\nKwaliteit B: 7 +\nHeeft een totale prioriteit van de video van 10. +\n +\nNOTITIE: Als de som 10 of hoger is zal de speler automatisch het laden overslaan wanneer die link is geladen! + Profiel %d + \ No newline at end of file diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index b3dda84f..135b7272 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -183,4 +183,17 @@ Varigheit Direktesendingar Programoppdateringar - + Trykk og hold inne for å nullstille til standardinnstillinger + Søk ved bruk av typer + Automatisk språkvalg + Last ned språk + Undertekstspråk + Metadata er ikke tilgjengelig fra nettsiden. Videoavspilling vil mislykkes hvis metadata ikke finnes på nettsiden. + Innstillinger for avspilling av undertekster + Plakat + Denne leverandøren er en torrent, og det anbefales å bruke en VPN-tjeneste. + For at denne leverandøren skal fungere korrekt, kan det være nødvendig å bruke en VPN-tjeneste + Bilde i bilde + Fortsett å sjå + Prøv tilkopling på nytt… + \ No newline at end of file diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 92882faf..65b5a462 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -2,7 +2,7 @@ Plakat - @string/result_poster_img_des + Plakat Episode Plakat Main Plakat Neste tilfeldig @@ -104,7 +104,7 @@ Sveip for å søke Sveip til venstre eller høyre for å kontrollere tiden i videospilleren Sveip for å endre innstillinger - Sveip på venstre eller høyre side for å endre lysstyrke eller volum + Sveip opp eller ned på venstre eller høyre side for å endre lysstyrke eller volum Dobbelttrykk til å søke Trykk to ganger på høyre eller venstre for å søke fremover eller bakover Bruk systemets lysstyrke @@ -117,7 +117,7 @@ Sender ingen rapportere Vis filler-episode til anime Vis appoppdateringer - Søk automatisk etter nye oppdateringer + Søk automatisk etter nye oppdateringer etter at appen har startet. Oppdatering til forhåndsutgivelser Søk etter oppdateringer før utgivelse i stedet for fullstendige utgivelser Github @@ -186,7 +186,7 @@ Hoppe OP Ikke vis igjen Oppdater - Foretrukket klokkekvalitet + Foretrukket avspillingskvalitet (WiFi) DNS rundt HTTPS Nyttig til omgå Internettleverandør hinder Vis dubbet/subbed Anime @@ -296,7 +296,7 @@ Chromecast-undertekster Autospill neste episode Historikk - Trykk i midten for å sette på pause + Trykk to ganger midt på skjermen for å pause Fant ingen episoder Fyllstoff Spill direktestrøm @@ -323,7 +323,7 @@ Hovedrolle Støtterolle Neste - Referent + Referanse Programtillegg slettet Pakkebrønnsnavn Pakkebrønnsnettadresse @@ -364,7 +364,7 @@ programtillegg Trygt modus påslått Sett visningsstatus - Auto-synkroniser din nåværende episode-framdrift + Synkroniser automatisk fremdriften din for gjeldende episode %d-%d Offentlig liste programtillegg @@ -399,7 +399,7 @@ Rulletekst Introduksjon Lagringstilgang mangler. Prøv igjen. - Vis forfilmer + Vis trailere Dubbingsetikett Undertekstetikett Videomellomlagringsstørrelse @@ -407,11 +407,11 @@ Videohurtiglager på disk Tøm video- og bildehurtiglager Legg til en klone av en eksisterende side, med en annen nettadresse - Installer alle programtillegg som ikke er installert enda fra de pakkebrønnene som er lagt til. + Installer automatisk alle plugins som ikke er installert fra de tilføyde depotene. Kvalitetsetikett Slå av/på grensesnittselementer på plakat Hopp over denne oppdateringen - Forårsaker tilfeldige krasj hvis satt for høyt. Ikke endre dette hvis du ikke har lite minne. + Kan forårsake krasj hvis satt for høyt på enheter med lite minne, for eksempel en Android TV. @string/home_play Sikkerhetskopier data Data lagret @@ -425,13 +425,13 @@ @string/anime Skjul valgt videokvalitet i søkeresultater Lastet inn sikkerhetkopifil - Oppdateringer og sikkerhetskopi + Oppdateringer og sikkerhetskopier @string/ova Avslutt\? Sensurerbart Alle %s er allerede nedlastet Kunne ikke installere den nye versjonen av programmet - Installerer ny versjon av programmet … + Installerer appoppdatering… Laster ned ny versjon av programmet … Synkroniser %s innlogget @@ -449,7 +449,7 @@ TS TC Fjern døveteksting fra undertekster - Minimale undertekster + Fjern unødvendig informasjon fra undertekster Ekstra Filtrer etter foretrukket mediaspråk Vev-videosending @@ -488,7 +488,7 @@ Undertekster Sikkerhetskopi APK-installatør - Noen enheter støtter ikke den nye pakkeinstallatøren. Prøv gammeldags alternativ hvis ting ikke installeres. + Noen telefoner støtter ikke den nye pakkeinstallatøren. Prøv det eldre alternativet hvis oppdateringer ikke blir installert. Oppdatering startet Programtillegg nedlastet Programmet vil oppgraderes når du avslutter det @@ -511,7 +511,7 @@ Vist avspiller — blafringsmengde Oppdatert (gammel til ny) Vellykket - Episode %d sluppet. + Episode %d sluppet! Foretrukket visningskvalitet (mobildata) Stopp Fjern fra sette @@ -525,7 +525,7 @@ Abonnerer på %s Blafringsmengde med skjult avspiller Velg bibliotek - Omgår blokkering av GitHub ved bruk av jsDelivr. Kan utsette oppdateringer et par dager. + Omgår blokkering av GitHub ved hjelp av jsDelivr. Dette kan forårsake forsinkelser på oppdateringer med noen få dager. ISP-omgåelser Denne listen er tom. Prøv å bytte til en annen. Sorter @@ -533,4 +533,4 @@ \nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet. Biblioteket ditt er tomt :( \nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek. - + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index eaa76652..19b071e4 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -27,7 +27,7 @@ ଅଧ୍ୟାୟ ଚଲାଅ କୌଣସି ଅଧ୍ୟାୟ ମିଳିଲା ନାହିଁ ଟି ଅଧ୍ୟାୟ - ଟିଏ ଅଧ୍ୟାୟ + ଅଧ୍ୟାୟ %s‌ରେ ଚଲାଅ ବ୍ରାଉଜର୍‌ରେ ଚଲାଅ ଉପଶୀର୍ଷକ ଡାଉନଲୋଡ୍ କରିବା @@ -146,4 +146,11 @@ ଉପଶୀର୍ଷକ +୩୦ ଵର୍ଷ - + ଅନ୍ତଃ-ଷ୍ଟୋରେଜ୍ + ପ୍ରଦାତା ବଦଳାଅ + ପ୍ରଦାତା ଵ୍ୟଵହାର କରି ଖୋଜିବା + ଶୀଘ୍ର ଆସୁଅଛି… + ଆପ୍ ଅଦ୍ୟତନ ଦେଖାଇବା + ଅଦ୍ୟତନ ଆରମ୍ଭ ହୋଇଛି + ସନ୍ଧାନ କରିବା… + \ 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 2961cb47..d08a760d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -532,4 +532,21 @@ 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… Domyślna jakość (dane mobilne) - + W tym miejscu można zmienić kolejność źródeł. Jeśli wideo ma wyższy priorytet, pojawi się wyżej w wyborze źródła. Priorytet wideo jest sumą priorytetu źródła i priorytetu jakości. +\n +\nŹródło A: 3 +\nJakość B: 7 +\nŁączny priorytet wideo będzie wynosił 10. +\n +\nUWAGA: Jeśli suma wynosi 10 lub więcej, odtwarzacz automatycznie pominie ładowanie po załadowaniu tego łącza! + Profil %d + Wi-Fi + Dane mobilne + Ustaw domyślny + Użyj + Edytuj + Profile + Pomoc + Jakości + Tło profilu + \ 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 705285eb..d91e79f8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -529,4 +529,21 @@ Configurações padrão SD Faixas de áudio - + Perfil %d + Wi-Fi + Dados móveis + Definir predefinição + Utilização + Editar + Perfis + Ajuda + Qualidades + Perfil de fundo + Aqui pode alterar a forma como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais elevada, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte com a prioridade da qualidade é a prioridade do vídeo. +\n +\nFonte A: 3 +\nQualidade B: 7 +\nTerá uma prioridade de vídeo combinada de 10. +\n +\nNOTA: Se a soma for 10 ou mais, o leitor saltará automaticamente o carregamento quando essa ligação for carregada! + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 170c3679..372552bc 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -551,13 +551,13 @@ Alfabetik (Z - A) Kütüphane Seçin Şununla aç - Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin + Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin. Derecelendirme (Yüksekten Düşüğe) Derecelendirme (Düşükten Yükseğe) Yeniden başlat Oynatıcı gizlenmişken atlanacak süre İSS Kısıtlamaları - GitHub\'a ulaşılamadı, jsdelivr vekil sunucusu etkinleştiriliyor. + GitHub\'a ulaşılamadı. jsDelivr vekil sunucusu etkinleştiriliyor… Başlat Başarılı oldu raw.githubusercontent.com vekil sunucusu (proxy) @@ -577,4 +577,21 @@ %s kanalı aboneliğinden çıkıldı Günlük Oynatıcı görünür durumdayken atlanacak süre miktarı - + Wi-Fi + Profiller + Yardım + Profil %d + Kullan + Mobil veri + Varsayılanı ayarla + Düzenle + Burada kaynakların nasıl sıralandığını değiştirebilirsiniz. Bir video daha yüksek bir önceliğe sahipse, kaynak seçiminde daha yüksek görünecektir. Kaynak önceliği ve kalite önceliğinin toplamı video önceliğidir. +\n +\nKaynak A: 3 +\nKalite B: 7 +\nBirleştirilmiş video önceliği 10 olacaktır. +\n +\nNOT: Toplam 10 veya daha fazlaysa, bu bağlantı yüklendiğinde oynatıcı otomatik olarak yüklemeyi atlayacaktır! + Kaliteler + Profil arkaplanı + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 82527c95..09fd40d5 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -529,4 +529,21 @@ Обходи ISP Обхід блокування GitHub за допомогою jsDelivr. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - + Встановити за замовчуванням + Профілі + Допомога + Тут ви можете змінити порядок джерел. Якщо відео має вищий пріоритет, воно з\'явиться вище у списку джерел. Сума пріоритету джерела та пріоритету якості є пріоритетом відео. +\n +\nДжерело A: 3 +\nЯкість B: 7 +\nСумарний пріоритет відео дорівнюватиме 10. +\n +\nПРИМІТКА: Якщо сума пріоритетів дорівнює 10 або більше, плеєр автоматично пропустить завантаження при завантаженні цього посилання! + Профіль %d + Wi-Fi + Мобільні дані + Використовувати + Редагувати + Якості + Фон профілю + \ No newline at end of file diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index df2e9a8b..4c9091dd 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -165,9 +165,9 @@ ڈیفالٹ سیٹنگز پر ری سیٹ کرنے کے لیے دبائیں اور تھامیں سائٹ کی طرف سے میٹا ڈیٹا فراہم نہیں کیا گیا ہے، اور اگر ویڈیو سائٹ میں موجود نہیں ہے تو وہ لوڈ ہونے میں ناکام ہو جائے گا. پلیئر کے ترجمہ کی ترتیبات - ویڈیو پلیئر میں وقت کو کنٹرول کرنے کے لیے بائیں یا دائیں سوائپ کریں + ویڈیو میں اپنی پوزیشن کو کنٹرول کرنے کے لیے ایک طرف سے دوسری طرف سوائپ کریں سکرین کی روشنی یا والیوم تبدیل کرنے کے لیے بائیں یا دائیں سوائپ کریں - کنٹرول کریں کہ پلیئر کتنا آگے ہے + کنٹرول کریں کہ پلیئر کتنا آگے ہے(سیکنڈوں میں) توقف کرنے کے لیے درمیان میں دبائیں سٹوریج کی اجازتیں غائب ہیں، براہ کرم دوبارہ کوشش کریں۔ کٹسو سے پوسٹر نمایش کریں @@ -263,7 +263,7 @@ دوبارہ نہ دکھائیں اس اپ ڈیٹ کو چھوڑ دیں اپ ڈیٹ - ترجیحی ویڈیو کا معیار + ترجیحی ویڈیو کا معیار(وائ فائ) ویڈیو پلیئر کے عنوان کے زیادہ سے زیادہ حروف ویڈیو پلیئر ریزولوشن ویڈیو بفر سائز @@ -356,4 +356,175 @@ %d / 10 اٹھایا اگر سب ٹائٹلز %d ms بہت جلد دکھائے جائیں تو اسے استعمال کریں - + کریڈٹس + اضافی + مرکزی + ترتیب + قرارداد اور عنوان + HDR + %s سے ان سبسکرائب کیا گیا + ویب ویڈیو کاسٹ + 18+ + لاگ + سلسلہ سے لنک کریں + اینڈرائیڈ ٹی وی + پچھلا + ٹریلر + حادثے کی معلومات دیکھیں + باہر نکلنے پر ایپ کو اپ ڈیٹ کر دیا جائے گا + اس ذخیرہ سے تمام پلگ ان ڈاؤن لوڈ کریں؟ + قسط %d ریلیز ہو گئی! + ایپ کا نیا ورژن انسٹال نہیں ہو سکا + تجویز کردہ + دوبارہ شروع کریں + لوڈ %s + انٹرنیٹ سے لوڈ کریں + ڈاؤن لوڈڈ فائل + پس منظر + ذریعہ + کیم + کیم + کیم + ایچ ڈی + ٹی ایس + ٹی سی + ڈبلیو پی + 4کے + SDR + پلیئر + عنوان + قرارداد + غلط ڈیٹا + خرابی + سب ٹائٹلز سے بلوٹ کو ہٹا دیں + ترجیحی میڈیا زبان کے لحاظ سے فلٹر کریں + حوالہ دینے والا + ان زبانوں میں ویڈیوز دیکھیں + سیٹ اپ کو چھوڑ دیں + کریش رپورٹنگ + ہو گیا + ایکسٹینشنز + ذخیرہ URL + پلگ ان لوڈ ہو گیا + %s کو لوڈ نہیں کیا جا سکا + ڈاؤن لوڈ ہونا شروع ہو گیا %d %s… + ڈاؤن لوڈ کیا گیا %d %s + سبھی %s پہلے ہی ڈاؤن لوڈ ہو چکے ہیں + رابطہ بحال کرو + پلگ ان + ذخیرہ کو حذف کریں + ان سائٹس کی فہرست ڈاؤن لوڈ کریں جنہیں آپ استعمال کرنا چاہتے ہیں + ڈاؤن لوڈڈ: %d + غیر فعال: %d + اپ ڈیٹ کردہ %d پلگ ان + تمام سب ٹائٹلز کو بڑے کریں + %s (غیر فعال) + ٹریکس + آڈیو ٹریکس + ری اسٹارٹ پر اپلائی کریں + سیف موڈ آن + درجہ بندی: %s + تفصیل + ورژن + حالت + سائز + زبان + وی ایل سی + ترجیحی ویڈیو پلیئر + اندرونی پلیئر + ایم پی وی + ویب براؤزر + ایپ نہیں ملی + Recap + مخلوط اختتام + مخلوط افتتاحی + کھولنے/ختم کرنے کے لیے سکپ پاپ اپ دکھائیں + دیکھا گیا کے طور پر نشان زد کریں + نہیں + ایپ اپ ڈیٹ ڈاؤن لوڈ ہو رہا ہے… + میراث + اپ ڈیٹ شروع ہو گیا + پلگ ان ڈاؤن لوڈ ہو گیا + دیکھے گئے سے ہٹا دیں + پیکیج انسٹالر + درجہ بندی (اعلی سے کم) + درجہ بندی (کم سے زیادہ) + اپ ڈیٹ کیا گیا (پرانا سے نیا) + حروف تہجی (A سے Z) + حروف تہجی (Z سے A) + لائبریری کو منتخب کریں + پلیئر دکھایا گیا - مقدار تلاش کریں + پلیئر کے نظر آنے پر استعمال کی جانے والی مقدار + پلیئر کے چھپنے پر استعمال ہونے والی تلاش کی مقدار + سیف موڈ فائل مل گئی! +\nفائل کو ہٹانے تک اسٹارٹ اپ پر کوئی ایکسٹینشن لوڈ نہیں کرنا۔ + شروع کریں + ناکام + کامیاب ہو گیا + فراہم کنندہ ٹیسٹ + رک جاؤ + سبسکرائب شدہ شوز کو اپ ڈیٹ کرنا + دیکھنے کا ترجیحی معیار (موبائل ڈیٹا) + raw.githubusercontent.com پراکسی + آئی ایس پی بائی پاسز + %s کو سبسکرائب کیا + jsDelivr کا استعمال کرتے ہوئے GitHub کو بلاک کرنے کو نظرانداز کرتا ہے۔ اپ ڈیٹس میں کچھ دنوں کی تاخیر ہو سکتی ہے۔ + آپ کی لائبریری خالی ہے:( +\nلائبریری اکاؤنٹ میں لاگ ان کریں یا اپنی مقامی لائبریری میں شوز شامل کریں۔ + غلط URL + براؤزر + ویب + مددگار + ایچ کیو + حمایت کی + ہاں + سبسکرائب کیا ہوا + تازہ کاری (نئے سے پرانے) + ڈی وی ڈی + ماضی مٹا دو + تعارف + تاریخ + کے ساتھ کھولیں + غلط ID + مخزن کا نام + ختم ہونے والا + کھل رہا + کیا آپ کو یقین ہے کہ آپ ہیاں سے نکلنا چاہتے ہیں؟ + ایس ڈی + تمام زبانیں + پلیئر پوشیدہ - مقدار تلاش کریں + لائبریری + بلو رے + واپس لوٹنا + ذخیرہ شامل کریں + آپ کیا دیکھنا چاہتے ہیں + ‪کمیونٹی ریپوزٹریز دیکھیں + ڈاؤن لوڈ نہیں ہوا: %d + عوامی فہرست + فائل سے لوڈ کریں + ویڈیو ٹریکس + HLS پلے لسٹ + پوسٹر کی تصویر + UHD + %s کو چھوڑ دیں + بے ترتیب + ترتیب دیں + مصنفین + اس سے تمام ریپوزٹری پلگ ان بھی حذف ہو جائیں گے + پلگ ان کو حذف کر دیا گیا + بیچ ڈاؤن لوڈ + GitHub تک نہیں پہنچ سکا۔ jsDelivr پراکسی کو آن کیا جا رہا ہے… + تیز بھوری لومڑی سست کتے پر چھلانگ لگاتی ہے + جلد آرہا ہے… + سب ٹائٹلز سے بند کیپشنز کو ہٹا دیں + اپنے آلے کے مطابق ایپ کی شکل تبدیل کریں + اگلے + CloudStream میں بذریعہ ڈیفالٹ کوئی سائٹ انسٹال نہیں ہے۔ آپ کو ریپوزٹری سے سائٹس انسٹال کرنے کی ضرورت ہے۔ +\nSky UK Limited 🤮 کی طرف سے بے دماغ DMCA ہٹانے کی وجہ سے ہم ایپ میں ریپوزٹری سائٹ کو لنک نہیں کر سکتے۔ +\nہمارے ڈسکارڈ میں شامل ہوں یا آن لائن تلاش کریں۔ + تمام ایکسٹینشنز کریش کی وجہ سے آف کر دی گئیں تاکہ آپ کو پریشانی کا باعث تلاش کرنے میں مدد مل سکے۔ + پہلے ایکسٹینشن انسٹال کریں + بہت زیادہ متن۔ کلپ بورڈ میں محفوظ کرنے سے قاصر۔ + ایپ اپ ڈیٹ انسٹال ہو رہا ہے… + یہ فہرست خالی ہے۔ کسی اور پر سوئچ کرنے کی کوشش کریں۔ + \ No newline at end of file From 9237817bd3ab3c48548e6ee69152cdb8c35ac8a6 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 06:36:01 +0000 Subject: [PATCH 411/888] chore(locales): fix locale issues --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 2 +- app/src/main/res/values-ms/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-nn/strings.xml | 2 +- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 6b722e43..c423b239 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -578,4 +578,4 @@ \nملاحظة: إذا كان المجموع 10 أو أكثر ، فسيتخطى المشغل التحميل تلقائيًا عند تحميل هذا الرابط! النوعيات خلفية الملف الشخصي - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index cc272a3a..ba754fa5 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -149,4 +149,4 @@ আইজেনগ্রাভি মোড আপডেট শুরু হয়েছে ব্রাউজার - \ 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 5cbdb7db..cc9f0ad4 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -570,4 +570,4 @@ \nBudou mít celkovou prioritu videa 10. \n \nPOZNÁMKA: Pokud je součet 10 nebo vyšší, přehrávač automaticky přeskočí načítání při načtení daného odkazu! - \ 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 69a850b3..45a6a66c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -546,4 +546,4 @@ \nWerden eine kombinierte Videopriorität von 10 haben. \n \nHINWEIS: Wenn die Summe 10 oder mehr beträgt, überspringt der Player automatisch das Laden, wenn der Link geladen wird! - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4326bccd..bc830084 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -546,4 +546,4 @@ Usar Calidades Perfil del fondo - \ 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 e519d062..722352a6 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -569,4 +569,4 @@ Profil Kualitas Latar belakang profil - \ 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 9a90b6e9..431b2a8c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -568,4 +568,4 @@ Dati Mobili Qualità Sfondo profilo - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index e59cdd66..aaa65897 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -506,4 +506,4 @@ אלפביתי (ת\' עד א\') פתח עם נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת - \ No newline at end of file + diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 7fd5504e..17eeb883 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -37,4 +37,4 @@ Kelajuan (%.2fx) Poster Poster - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 9054eada..dff95be7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -568,4 +568,4 @@ \n \nNOTITIE: Als de som 10 of hoger is zal de speler automatisch het laden overslaan wanneer die link is geladen! Profiel %d - \ No newline at end of file + diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 135b7272..592ff22c 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -196,4 +196,4 @@ Bilde i bilde Fortsett å sjå Prøv tilkopling på nytt… - \ No newline at end of file + diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 65b5a462..dac15d61 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -533,4 +533,4 @@ \nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet. Biblioteket ditt er tomt :( \nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek. - \ No newline at end of file + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 19b071e4..9b9385c2 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -153,4 +153,4 @@ ଆପ୍ ଅଦ୍ୟତନ ଦେଖାଇବା ଅଦ୍ୟତନ ଆରମ୍ଭ ହୋଇଛି ସନ୍ଧାନ କରିବା… - \ 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 d08a760d..7d4bf3e3 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -549,4 +549,4 @@ Pomoc Jakości Tło profilu - \ 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 d91e79f8..773598bf 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -546,4 +546,4 @@ \nTerá uma prioridade de vídeo combinada de 10. \n \nNOTA: Se a soma for 10 ou mais, o leitor saltará automaticamente o carregamento quando essa ligação for carregada! - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 372552bc..eef9bc95 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -594,4 +594,4 @@ \nNOT: Toplam 10 veya daha fazlaysa, bu bağlantı yüklendiğinde oynatıcı otomatik olarak yüklemeyi atlayacaktır! Kaliteler Profil arkaplanı - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 09fd40d5..0fad744c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -546,4 +546,4 @@ Редагувати Якості Фон профілю - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 4c9091dd..48b73efa 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -527,4 +527,4 @@ بہت زیادہ متن۔ کلپ بورڈ میں محفوظ کرنے سے قاصر۔ ایپ اپ ڈیٹ انسٹال ہو رہا ہے… یہ فہرست خالی ہے۔ کسی اور پر سوئچ کرنے کی کوشش کریں۔ - \ No newline at end of file + From 927453d9fe0bb370ae811ea6df10f385eb0862b6 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:15:25 +0700 Subject: [PATCH 412/888] Extractor: added Moviesapi and fix some extractors (#504) * Extractor: added Pixeldrain, Wibufile and fix some extractors * Extractor: added Moviesapi and fix some extractors --------- Co-authored-by: Sofie99 --- .../cloudstream3/extractors/Chillx.kt | 9 ++++-- .../cloudstream3/extractors/Filesim.kt | 32 +++++++------------ .../cloudstream3/utils/ExtractorApi.kt | 1 + 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt index 1c548e74..b4f3d897 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -12,6 +12,11 @@ import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.PBEKeySpec import javax.crypto.spec.SecretKeySpec +class Moviesapi : Chillx() { + override val name = "Moviesapi" + override val mainUrl = "https://w1.moviesapi.club" +} + class Bestx : Chillx() { override val name = "Bestx" override val mainUrl = "https://bestx.stream" @@ -27,7 +32,7 @@ open class Chillx : ExtractorApi() { override val requiresReferer = true companion object { - private const val KEY = "4VqE3#N7zt&HEP^a" + private const val KEY = "11x&W5UBrcqn\$9Yl" } override suspend fun getUrl( @@ -45,7 +50,7 @@ open class Chillx : ExtractorApi() { val encData = AppUtils.tryParseJson(base64Decode(master ?: return)) val decrypt = cryptoAESHandler(encData ?: return, KEY, false) - val source = Regex("""sources:\s*\[\{"file":"([^"]+)""").find(decrypt)?.groupValues?.get(1) + val source = Regex(""""?file"?:\s*"([^"]+)""").find(decrypt)?.groupValues?.get(1) val tracks = Regex("""tracks:\s*\[(.+)]""").find(decrypt)?.groupValues?.get(1) // required 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 be0efd0c..a1148bb8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -65,27 +65,19 @@ open class Filesim : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val response = app.get(url, referer = referer).document - response.select("script[type=text/javascript]").map { script -> - if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) { - val unpackedscript = getAndUnpack(script.data()) - val m3u8Regex = Regex("file.\"(.*?m3u8.*?)\"") - val m3u8 = m3u8Regex.find(unpackedscript)?.destructured?.component1() ?: "" - if (m3u8.isNotEmpty()) { - generateM3u8( - name, - m3u8, - mainUrl - ).forEach(callback) - } - } + val response = app.get(url, referer = referer) + val script = if (!getPacked(response.text).isNullOrEmpty()) { + getAndUnpack(response.text) + } else { + response.document.selectFirst("script:containsData(sources:)")?.data() } + val m3u8 = + Regex("file:\\s*\"(.*?m3u8.*?)\"").find(script ?: return)?.groupValues?.getOrNull(1) + generateM3u8( + name, + m3u8 ?: return, + mainUrl + ).forEach(callback) } - /* private data class ResponseSource( - @JsonProperty("file") val file: String, - @JsonProperty("type") val type: String?, - @JsonProperty("label") val label: String? - ) */ - } \ 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 f0c1ea3b..f6f76fe7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -357,6 +357,7 @@ val extractorApis: MutableList = arrayListOf( DesuDrive(), Chillx(), + Moviesapi(), Watchx(), Bestx(), Keephealth(), From 05a0d3cd817c5484a44acd9bb6e8199e52ced387 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 13 Jul 2023 23:18:37 +0200 Subject: [PATCH 413/888] migrated some items to viewbindings + removed Some --- app/build.gradle.kts | 5 + .../cloudstream3/mvvm/ArchComponentExt.kt | 26 -- .../ui/download/DownloadChildFragment.kt | 44 ++- .../ui/download/DownloadFragment.kt | 98 +++--- .../cloudstream3/ui/home/HomeFragment.kt | 325 ++++++++++-------- .../ui/home/HomeParentItemAdapterPreview.kt | 4 +- .../ui/library/LibraryFragment.kt | 198 ++++++----- .../ui/library/LibraryViewModel.kt | 1 - .../cloudstream3/ui/library/PageAdapter.kt | 30 +- .../ui/library/ViewpagerAdapter.kt | 70 ++-- .../ui/quicksearch/QuickSearchFragment.kt | 65 ++-- .../cloudstream3/ui/result/ActorAdaptor.kt | 77 ++--- .../cloudstream3/ui/result/EpisodeAdapter.kt | 296 ++++++++++------ .../cloudstream3/ui/result/ImageAdapter.kt | 14 +- .../cloudstream3/ui/result/ResultFragment.kt | 133 +++---- .../ui/result/ResultFragmentPhone.kt | 106 +++--- .../ui/result/ResultFragmentTv.kt | 77 ++--- .../ui/result/ResultViewModel2.kt | 194 ++++++----- .../cloudstream3/ui/result/SelectAdaptor.kt | 13 +- .../cloudstream3/ui/result/UiText.kt | 9 - .../cloudstream3/ui/search/SearchAdaptor.kt | 2 +- .../cloudstream3/ui/search/SearchFragment.kt | 128 ++++--- .../ui/search/SearchHistoryAdaptor.kt | 30 +- .../ui/search/SearchResultBuilder.kt | 20 +- .../ui/settings/AccountAdapter.kt | 22 +- .../ui/settings/SettingsAccount.kt | 2 +- .../ui/settings/SettingsFragment.kt | 4 +- .../settings/extensions/ExtensionsFragment.kt | 42 ++- .../extensions/ExtensionsViewModel.kt | 7 +- .../ui/settings/extensions/PluginsFragment.kt | 74 ++-- .../ui/setup/SetupFragmentExtensions.kt | 79 +++-- .../ui/setup/SetupFragmentLanguage.kt | 53 +-- .../ui/setup/SetupFragmentLayout.kt | 101 +++--- .../ui/setup/SetupFragmentMedia.kt | 89 +++-- .../ui/setup/SetupFragmentProviderLanguage.kt | 50 ++- .../subtitles/ChromecastSubtitlesFragment.kt | 90 +++-- .../ui/subtitles/SubtitlesFragment.kt | 2 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 13 +- app/src/main/res/layout/fragment_home_tv.xml | 11 + app/src/main/res/layout/fragment_plugins.xml | 2 +- app/src/main/res/layout/fragment_search.xml | 2 +- .../main/res/layout/fragment_search_tv.xml | 2 +- .../main/res/layout/home_select_mainpage.xml | 2 +- .../res/layout/library_viewpager_page.xml | 2 - .../main/res/layout/result_episode_large.xml | 213 ++++++------ .../main/res/layout/tvtypes_chips_scroll.xml | 2 +- 46 files changed, 1565 insertions(+), 1264 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ebde6187..86d91147 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,6 +28,11 @@ android { testOptions { unitTests.isReturnDefaultValues = true } + + viewBinding { + enable = true + } + signingConfigs { create("prerelease") { if (prereleaseStoreFile != null) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index bb15bc85..28b552d1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -57,32 +57,6 @@ fun LifecycleOwner.observeNullable(liveData: LiveData, action: (t: T) -> liveData.observe(this) { action(it) } } -inline fun some(value: T?): Some { - return if (value == null) { - Some.None - } else { - Some.Success(value) - } -} - -sealed class Some { - data class Success(val value: T) : Some() - object None : Some() - - override fun toString(): String { - return when (this) { - is None -> "None" - is Success -> "Some(${value.toString()})" - } - } -} - -sealed class ResourceSome { - data class Success(val value: T) : ResourceSome() - object None : ResourceSome() - data class Loading(val data: Any? = null) : ResourceSome() -} - sealed class Resource { data class Success(val value: T) : Resource() data class Failure( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index 477a18e0..0cef49b1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentChildDownloadsBinding import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey @@ -15,13 +16,12 @@ import com.lagradost.cloudstream3.utils.DataStore.getKeys import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager -import kotlinx.android.synthetic.main.fragment_child_downloads.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext class DownloadChildFragment : Fragment() { companion object { - fun newInstance(headerName: String, folder: String) : Bundle { + fun newInstance(headerName: String, folder: String): Bundle { return Bundle().apply { putString("folder", folder) putString("name", headerName) @@ -30,13 +30,21 @@ class DownloadChildFragment : Fragment() { } override fun onDestroyView() { - (download_child_list?.adapter as DownloadChildAdapter?)?.killAdapter() + (binding?.downloadChildList?.adapter as DownloadChildAdapter?)?.killAdapter() downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent -= it } + binding = null super.onDestroyView() } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_child_downloads, container, false) + var binding: FragmentChildDownloadsBinding? = null + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val localBinding = FragmentChildDownloadsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.fragment_child_downloads, container, false) } private fun updateList(folder: String) = main { @@ -50,14 +58,15 @@ class DownloadChildFragment : Fragment() { ?: return@mapNotNull null VisualDownloadChildCached(info.fileLength, info.totalBytes, it) } - }.sortedBy { it.data.episode + (it.data.season?: 0)*100000 } + }.sortedBy { it.data.episode + (it.data.season ?: 0) * 100000 } if (eps.isEmpty()) { activity?.onBackPressed() return@main } - (download_child_list?.adapter as DownloadChildAdapter? ?: return@main).cardList = eps - download_child_list?.adapter?.notifyDataSetChanged() + (binding?.downloadChildList?.adapter as DownloadChildAdapter? ?: return@main).cardList = + eps + binding?.downloadChildList?.adapter?.notifyDataSetChanged() } } @@ -72,14 +81,17 @@ class DownloadChildFragment : Fragment() { activity?.onBackPressed() // TODO FIX return } - context?.fixPaddingStatusbar(download_child_root) + fixPaddingStatusbar(binding?.downloadChildRoot) - download_child_toolbar.title = name - download_child_toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) - download_child_toolbar.setNavigationOnClickListener { - activity?.onBackPressed() + binding?.downloadChildToolbar?.apply { + title = name + setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) + setNavigationOnClickListener { + activity?.onBackPressed() + } } + val adapter: RecyclerView.Adapter = DownloadChildAdapter( ArrayList(), @@ -88,7 +100,7 @@ class DownloadChildFragment : Fragment() { } downloadDeleteEventListener = { id: Int -> - val list = (download_child_list?.adapter as DownloadChildAdapter?)?.cardList + val list = (binding?.downloadChildList?.adapter as DownloadChildAdapter?)?.cardList if (list != null) { if (list.any { it.data.id == id }) { updateList(folder) @@ -98,8 +110,8 @@ class DownloadChildFragment : Fragment() { downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } - download_child_list.adapter = adapter - download_child_list.layoutManager = GridLayoutManager(context, 1) + binding?.downloadChildList?.adapter = adapter + binding?.downloadChildList?.layoutManager = GridLayoutManager(context, 1) updateList(folder) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index e80a8fa5..629ab11a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -34,10 +34,10 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager -import kotlinx.android.synthetic.main.fragment_downloads.* -import kotlinx.android.synthetic.main.stream_input.* import android.text.format.Formatter.formatShortFileSize import androidx.core.widget.doOnTextChanged +import com.lagradost.cloudstream3.databinding.FragmentDownloadsBinding +import com.lagradost.cloudstream3.databinding.StreamInputBinding import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.player.BasicLink import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings @@ -60,8 +60,8 @@ class DownloadFragment : Fragment() { private fun setList(list: List) { main { - (download_list?.adapter as DownloadHeaderAdapter?)?.cardList = list - download_list?.adapter?.notifyDataSetChanged() + (binding?.downloadList?.adapter as DownloadHeaderAdapter?)?.cardList = list + binding?.downloadList?.adapter?.notifyDataSetChanged() } } @@ -70,10 +70,13 @@ class DownloadFragment : Fragment() { VideoDownloadManager.downloadDeleteEvent -= downloadDeleteEventListener!! downloadDeleteEventListener = null } - (download_list?.adapter as DownloadHeaderAdapter?)?.killAdapter() + (binding?.downloadList?.adapter as DownloadHeaderAdapter?)?.killAdapter() + binding = null super.onDestroyView() } + var binding : FragmentDownloadsBinding? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -82,7 +85,9 @@ class DownloadFragment : Fragment() { downloadsViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] - return inflater.inflate(R.layout.fragment_downloads, container, false) + val localBinding = FragmentDownloadsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.fragment_downloads, container, false) } private var downloadDeleteEventListener: ((Int) -> Unit)? = null @@ -92,36 +97,40 @@ class DownloadFragment : Fragment() { hideKeyboard() observe(downloadsViewModel.noDownloadsText) { - text_no_downloads.text = it + binding?.textNoDownloads?.text = it } observe(downloadsViewModel.headerCards) { setList(it) - download_loading.isVisible = false + binding?.downloadLoading?.isVisible = false } observe(downloadsViewModel.availableBytes) { - download_free_txt?.text = + binding?.downloadFreeTxt?.text = getString(R.string.storage_size_format).format( getString(R.string.free_storage), formatShortFileSize(view.context, it) ) - download_free?.setLayoutWidth(it) + binding?.downloadFree?.setLayoutWidth(it) } observe(downloadsViewModel.usedBytes) { - download_used_txt?.text = - getString(R.string.storage_size_format).format( - getString(R.string.used_storage), - formatShortFileSize(view.context, it) - ) - download_used?.setLayoutWidth(it) - download_storage_appbar?.isVisible = it > 0 + binding?.apply { + downloadUsedTxt.text = + getString(R.string.storage_size_format).format( + getString(R.string.used_storage), + formatShortFileSize(view.context, it) + ) + downloadUsed.setLayoutWidth(it) + downloadStorageAppbar.isVisible = it > 0 + } } observe(downloadsViewModel.downloadBytes) { - download_app_txt?.text = - getString(R.string.storage_size_format).format( - getString(R.string.app_storage), - formatShortFileSize(view.context, it) - ) - download_app?.setLayoutWidth(it) + binding?.apply { + downloadAppTxt.text = + getString(R.string.storage_size_format).format( + getString(R.string.app_storage), + formatShortFileSize(view.context, it) + ) + downloadApp.setLayoutWidth(it) + } } val adapter: RecyclerView.Adapter = @@ -164,7 +173,7 @@ class DownloadFragment : Fragment() { ) downloadDeleteEventListener = { id -> - val list = (download_list?.adapter as DownloadHeaderAdapter?)?.cardList + val list = (binding?.downloadList?.adapter as DownloadHeaderAdapter?)?.cardList if (list != null) { if (list.any { it.data.id == id }) { context?.let { ctx -> @@ -177,31 +186,36 @@ class DownloadFragment : Fragment() { downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } - download_list?.adapter = adapter - download_list?.layoutManager = GridLayoutManager(context, 1) + binding?.downloadList?.apply { + this.adapter = adapter + layoutManager = GridLayoutManager(context, 1) + } // Should be visible in emulator layout - download_stream_button?.isGone = isTrueTvSettings() - download_stream_button?.setOnClickListener { + binding?.downloadStreamButton?.isGone = isTrueTvSettings() + binding?.downloadStreamButton?.setOnClickListener { val dialog = Dialog(it.context ?: return@setOnClickListener, R.style.AlertDialogCustom) - dialog.setContentView(R.layout.stream_input) + + val binding = StreamInputBinding.inflate(dialog.layoutInflater) + + dialog.setContentView(binding.root) dialog.show() // If user has clicked the switch do not interfere var preventAutoSwitching = false - dialog.hls_switch?.setOnClickListener { + binding.hlsSwitch.setOnClickListener { preventAutoSwitching = true } fun activateSwitchOnHls(text: String?) { - dialog.hls_switch?.isChecked = normalSafeApiCall { + binding.hlsSwitch.isChecked = normalSafeApiCall { URI(text).path?.substringAfterLast(".")?.contains("m3u") } == true } - dialog.stream_referer?.doOnTextChanged { text, _, _, _ -> + binding.streamReferer.doOnTextChanged { text, _, _, _ -> if (!preventAutoSwitching) activateSwitchOnHls(text?.toString()) } @@ -210,16 +224,16 @@ class DownloadFragment : Fragment() { 0 )?.text?.toString()?.let { copy -> val fixedText = copy.trim() - dialog.stream_url?.setText(fixedText) + binding.streamUrl.setText(fixedText) activateSwitchOnHls(fixedText) } - dialog.apply_btt?.setOnClickListener { - val url = dialog.stream_url.text?.toString() + binding.applyBtt.setOnClickListener { + val url = binding.streamUrl.text?.toString() if (url.isNullOrEmpty()) { showToast(activity, R.string.error_invalid_url, Toast.LENGTH_SHORT) } else { - val referer = dialog.stream_referer.text?.toString() + val referer = binding.streamReferer.text?.toString() activity?.navigate( R.id.global_to_navigation_player, @@ -228,7 +242,7 @@ class DownloadFragment : Fragment() { listOf(BasicLink(url)), extract = true, referer = referer, - isM3u8 = dialog.hls_switch?.isChecked + isM3u8 = binding.hlsSwitch.isChecked ) ) ) @@ -237,22 +251,22 @@ class DownloadFragment : Fragment() { } } - dialog.cancel_btt?.setOnClickListener { + binding.cancelBtt.setOnClickListener { dialog.dismissSafe(activity) } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - download_list?.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> + binding?.downloadList?.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> val dy = scrollY - oldScrollY if (dy > 0) { //check for scroll down - download_stream_button?.shrink() // hide + binding?.downloadStreamButton?.shrink() // hide } else if (dy < -5) { - download_stream_button?.extend() // show + binding?.downloadStreamButton?.extend() // show } } } downloadsViewModel.updateList(requireContext()) - context?.fixPaddingStatusbar(download_root) + fixPaddingStatusbar(binding?.downloadRoot) } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 5cf6fc8e..99ce7c3b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -34,12 +34,15 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.MainActivity.Companion.bookmarksUpdatedEvent import com.lagradost.cloudstream3.MainActivity.Companion.mainPluginsLoadedEvent +import com.lagradost.cloudstream3.databinding.FragmentHomeBinding +import com.lagradost.cloudstream3.databinding.HomeEpisodesExpandedBinding +import com.lagradost.cloudstream3.databinding.HomeSelectMainpageBinding +import com.lagradost.cloudstream3.databinding.TvtypesChipsBinding import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi -import com.lagradost.cloudstream3.ui.AutofitRecyclerView import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment import com.lagradost.cloudstream3.ui.search.* @@ -64,24 +67,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API -import kotlinx.android.synthetic.main.activity_main_tv.* -import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_home.home_api_fab -import kotlinx.android.synthetic.main.fragment_home.home_change_api_loading -import kotlinx.android.synthetic.main.fragment_home.home_loading -import kotlinx.android.synthetic.main.fragment_home.home_loading_error -import kotlinx.android.synthetic.main.fragment_home.home_loading_shimmer -import kotlinx.android.synthetic.main.fragment_home.home_loading_statusbar -import kotlinx.android.synthetic.main.fragment_home.home_master_recycler -import kotlinx.android.synthetic.main.fragment_home.home_reload_connection_open_in_browser -import kotlinx.android.synthetic.main.fragment_home.home_reload_connectionerror -import kotlinx.android.synthetic.main.fragment_home.result_error_text -import kotlinx.android.synthetic.main.fragment_home_tv.* -import kotlinx.android.synthetic.main.fragment_result.* -import kotlinx.android.synthetic.main.fragment_search.* -import kotlinx.android.synthetic.main.home_episodes_expanded.* -import kotlinx.android.synthetic.main.tvtypes_chips.* -import kotlinx.android.synthetic.main.tvtypes_chips.view.* + import java.util.* @@ -125,22 +111,26 @@ class HomeFragment : Fragment() { expand: HomeViewModel.ExpandableHomepageList, deleteCallback: (() -> Unit)? = null, expandCallback: (suspend (String) -> HomeViewModel.ExpandableHomepageList?)? = null, - dismissCallback : (() -> Unit), + dismissCallback: (() -> Unit), ): BottomSheetDialog { val context = this val bottomSheetDialogBuilder = BottomSheetDialog(context) - - bottomSheetDialogBuilder.setContentView(R.layout.home_episodes_expanded) - val title = bottomSheetDialogBuilder.findViewById(R.id.home_expanded_text)!! + val binding: HomeEpisodesExpandedBinding = HomeEpisodesExpandedBinding.inflate( + bottomSheetDialogBuilder.layoutInflater, + null, + false + ) + bottomSheetDialogBuilder.setContentView(binding.root) + //val title = bottomSheetDialogBuilder.findViewById(R.id.home_expanded_text)!! //title.findViewTreeLifecycleOwner().lifecycle.addObserver() val item = expand.list - title.text = item.name - val recycle = - bottomSheetDialogBuilder.findViewById(R.id.home_expanded_recycler)!! - val titleHolder = - bottomSheetDialogBuilder.findViewById(R.id.home_expanded_drag_down)!! + binding.homeExpandedText.text = item.name + // val recycle = + // bottomSheetDialogBuilder.findViewById(R.id.home_expanded_recycler)!! + //val titleHolder = + // bottomSheetDialogBuilder.findViewById(R.id.home_expanded_drag_down)!! // main { //(bottomSheetDialogBuilder.ownerActivity as androidx.fragment.app.FragmentActivity?)?.supportFragmentManager?.fragments?.lastOrNull()?.viewLifecycleOwner?.apply { @@ -159,10 +149,10 @@ class HomeFragment : Fragment() { // }) //} // } - val delete = bottomSheetDialogBuilder.home_expanded_delete - delete.isGone = deleteCallback == null + //val delete = bottomSheetDialogBuilder.home_expanded_delete + binding.homeExpandedDelete.isGone = deleteCallback == null if (deleteCallback != null) { - delete.setOnClickListener { + binding.homeExpandedDelete.setOnClickListener { try { val builder: AlertDialog.Builder = AlertDialog.Builder(context) val dialogClickListener = @@ -172,6 +162,7 @@ class HomeFragment : Fragment() { deleteCallback.invoke() bottomSheetDialogBuilder.dismissSafe(this) } + DialogInterface.BUTTON_NEGATIVE -> {} } } @@ -191,26 +182,27 @@ class HomeFragment : Fragment() { } } } - - titleHolder.setOnClickListener { + binding.homeExpandedDragDown.setOnClickListener { bottomSheetDialogBuilder.dismissSafe(this) } // Span settings - recycle.spanCount = currentSpan + binding.homeExpandedRecycler.spanCount = currentSpan - recycle.adapter = SearchAdapter(item.list.toMutableList(), recycle) { callback -> - handleSearchClickCallback(this, callback) - if (callback.action == SEARCH_ACTION_LOAD || callback.action == SEARCH_ACTION_PLAY_FILE) { - bottomSheetDialogBuilder.ownHide() // we hide here because we want to resume it later - //bottomSheetDialogBuilder.dismissSafe(this) + binding.homeExpandedRecycler.adapter = + SearchAdapter(item.list.toMutableList(), binding.homeExpandedRecycler) { callback -> + handleSearchClickCallback(this, callback) + if (callback.action == SEARCH_ACTION_LOAD || callback.action == SEARCH_ACTION_PLAY_FILE) { + bottomSheetDialogBuilder.ownHide() // we hide here because we want to resume it later + //bottomSheetDialogBuilder.dismissSafe(this) + } + }.apply { + hasNext = expand.hasNext } - }.apply { - hasNext = expand.hasNext - } - recycle.addOnScrollListener(object : RecyclerView.OnScrollListener() { + binding.homeExpandedRecycler.addOnScrollListener(object : + RecyclerView.OnScrollListener() { var expandCount = 0 val name = expand.list.name @@ -238,7 +230,7 @@ class HomeFragment : Fragment() { }) val spanListener = { span: Int -> - recycle.spanCount = span + binding.homeExpandedRecycler.spanCount = span //(recycle.adapter as SearchAdapter).notifyDataSetChanged() } @@ -280,19 +272,19 @@ class HomeFragment : Fragment() { ) } - private fun getPairList(header: ChipGroup) = getPairList( - header.home_select_anime, - header.home_select_cartoons, - header.home_select_tv_series, - header.home_select_documentaries, - header.home_select_movies, - header.home_select_asian, - header.home_select_livestreams, - header.home_select_nsfw, - header.home_select_others + private fun getPairList(header: TvtypesChipsBinding) = getPairList( + header.homeSelectAnime, + header.homeSelectCartoons, + header.homeSelectTvSeries, + header.homeSelectDocumentaries, + header.homeSelectMovies, + header.homeSelectAsian, + header.homeSelectLivestreams, + header.homeSelectNsfw, + header.homeSelectOthers ) - fun validateChips(header: ChipGroup?, validTypes: List) { + fun validateChips(header: TvtypesChipsBinding?, validTypes: List) { if (header == null) return val pairList = getPairList(header) for ((button, types) in pairList) { @@ -301,7 +293,7 @@ class HomeFragment : Fragment() { } } - fun updateChips(header: ChipGroup?, selectedTypes: List) { + fun updateChips(header: TvtypesChipsBinding?, selectedTypes: List) { if (header == null) return val pairList = getPairList(header) for ((button, types) in pairList) { @@ -311,7 +303,7 @@ class HomeFragment : Fragment() { } fun bindChips( - header: ChipGroup?, + header: TvtypesChipsBinding?, selectedTypes: List, validTypes: List, callback: (List) -> Unit @@ -344,7 +336,13 @@ class HomeFragment : Fragment() { BottomSheetDialog(this) builder.behavior.state = BottomSheetBehavior.STATE_EXPANDED - builder.setContentView(R.layout.home_select_mainpage) + val binding: HomeSelectMainpageBinding = HomeSelectMainpageBinding.inflate( + builder.layoutInflater, + null, + false + ) + + builder.setContentView(binding.root) builder.show() builder.let { dialog -> val isMultiLang = getApiProviderLangSettings().let { set -> @@ -408,7 +406,7 @@ class HomeFragment : Fragment() { } bindChips( - dialog.home_select_group, + binding.tvtypesChipsScroll.tvtypesChips, preSelectedTypes, validAPIs.flatMap { it.supportedTypes }.distinct() ) { list -> @@ -423,6 +421,9 @@ class HomeFragment : Fragment() { private val homeViewModel: HomeViewModel by activityViewModels() + var binding: FragmentHomeBinding? = null + + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -433,11 +434,24 @@ class HomeFragment : Fragment() { bottomSheetDialog?.ownShow() val layout = if (isTvSettings()) R.layout.fragment_home_tv else R.layout.fragment_home - return inflater.inflate(layout, container, false) + + /* val binding = FragmentHomeTvBinding.inflate(layout, container, false) + binding.homeLoadingError + + val binding2 = FragmentHomeBinding.inflate(layout, container, false) + binding2.homeLoadingError*/ + val root = inflater.inflate(layout, container, false) + binding = FragmentHomeBinding.bind(root) + //val localBinding = FragmentHomeBinding.inflate(inflater) + //binding = localBinding + return root + + //return inflater.inflate(layout, container, false) } override fun onDestroyView() { bottomSheetDialog?.ownHide() + binding = null super.onDestroyView() } @@ -467,7 +481,7 @@ class HomeFragment : Fragment() { fixGrid() } - fun bookmarksUpdated(_data : Boolean) { + fun bookmarksUpdated(_data: Boolean) { reloadStored() } @@ -525,14 +539,18 @@ class HomeFragment : Fragment() { private var bottomSheetDialog: BottomSheetDialog? = null + @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) fixGrid() - home_change_api_loading?.setOnClickListener(apiChangeClickListener) - home_api_fab?.setOnClickListener(apiChangeClickListener) - home_random?.setOnClickListener { + binding?.homeChangeApiLoading?.setOnClickListener(apiChangeClickListener) + + + binding?.homeChangeApiLoading?.setOnClickListener(apiChangeClickListener) + binding?.homeApiFab?.setOnClickListener(apiChangeClickListener) + binding?.homeRandom?.setOnClickListener { if (listHomepageItems.isNotEmpty()) { activity.loadSearchResult(listHomepageItems.random()) } @@ -542,91 +560,100 @@ class HomeFragment : Fragment() { context?.let { val settingsManager = PreferenceManager.getDefaultSharedPreferences(it) toggleRandomButton = - settingsManager.getBoolean(getString(R.string.random_button_key), false) - home_random?.visibility = View.GONE + settingsManager.getBoolean( + getString(R.string.random_button_key), + false + ) && !isTvSettings() + binding?.homeRandom?.visibility = View.GONE } observe(homeViewModel.preview) { preview -> - (home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setPreviewData( + (binding?.homeMasterRecycler?.adapter as? HomeParentItemAdapterPreview?)?.setPreviewData( preview ) } observe(homeViewModel.apiName) { apiName -> currentApiName = apiName - home_api_fab?.text = apiName - (home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setApiName( + binding?.homeApiFab?.text = apiName + (binding?.homeMasterRecycler?.adapter as? HomeParentItemAdapterPreview?)?.setApiName( apiName ) } observe(homeViewModel.page) { data -> - when (data) { - is Resource.Success -> { - home_loading_shimmer?.stopShimmer() + binding?.apply { + when (data) { + is Resource.Success -> { + homeLoadingShimmer.stopShimmer() - val d = data.value - val mutableListOfResponse = mutableListOf() - listHomepageItems.clear() + val d = data.value + val mutableListOfResponse = mutableListOf() + listHomepageItems.clear() - (home_master_recycler?.adapter as? ParentItemAdapter)?.updateList( - d.values.toMutableList(), - home_master_recycler - ) + (homeMasterRecycler.adapter as? ParentItemAdapter)?.updateList( + d.values.toMutableList(), + homeMasterRecycler + ) - home_loading?.isVisible = false - home_loading_error?.isVisible = false - home_master_recycler?.isVisible = true - //home_loaded?.isVisible = true - if (toggleRandomButton) { - //Flatten list - d.values.forEach { dlist -> - mutableListOfResponse.addAll(dlist.list.list) + homeLoading.isVisible = false + homeLoadingError.isVisible = false + homeMasterRecycler.isVisible = true + //home_loaded?.isVisible = true + if (toggleRandomButton) { + //Flatten list + d.values.forEach { dlist -> + mutableListOfResponse.addAll(dlist.list.list) + } + listHomepageItems.addAll(mutableListOfResponse.distinctBy { it.url }) + + homeRandom.isVisible = listHomepageItems.isNotEmpty() + } else { + homeRandom.isGone = true } - listHomepageItems.addAll(mutableListOfResponse.distinctBy { it.url }) - home_random?.isVisible = listHomepageItems.isNotEmpty() - } else { - home_random?.isGone = true } - } - is Resource.Failure -> { - home_loading_shimmer?.stopShimmer() - result_error_text.text = data.errorString + is Resource.Failure -> { - home_reload_connectionerror.setOnClickListener(apiChangeClickListener) + homeLoadingShimmer.stopShimmer() - home_reload_connection_open_in_browser.setOnClickListener { view -> - val validAPIs = apis//.filter { api -> api.hasMainPage } + resultErrorText.text = data.errorString - view.popupMenuNoIconsAndNoStringRes(validAPIs.mapIndexed { index, api -> - Pair( - index, - api.name - ) - }) { - try { - val i = Intent(Intent.ACTION_VIEW) - i.data = Uri.parse(validAPIs[itemId].mainUrl) - startActivity(i) - } catch (e: Exception) { - logError(e) + homeReloadConnectionerror.setOnClickListener(apiChangeClickListener) + + homeReloadConnectionOpenInBrowser.setOnClickListener { view -> + val validAPIs = apis//.filter { api -> api.hasMainPage } + + view.popupMenuNoIconsAndNoStringRes(validAPIs.mapIndexed { index, api -> + Pair( + index, + api.name + ) + }) { + try { + val i = Intent(Intent.ACTION_VIEW) + i.data = Uri.parse(validAPIs[itemId].mainUrl) + startActivity(i) + } catch (e: Exception) { + logError(e) + } } } + + homeLoading.isVisible = false + homeLoadingError.isVisible = true + homeMasterRecycler.isVisible = false + //home_loaded?.isVisible = false } - home_loading?.isVisible = false - home_loading_error?.isVisible = true - home_master_recycler?.isVisible = false - //home_loaded?.isVisible = false - } - is Resource.Loading -> { - (home_master_recycler?.adapter as? ParentItemAdapter)?.updateList(listOf()) - home_loading_shimmer?.startShimmer() - home_loading?.isVisible = true - home_loading_error?.isVisible = false - home_master_recycler?.isVisible = false - //home_loaded?.isVisible = false + is Resource.Loading -> { + (homeMasterRecycler.adapter as? ParentItemAdapter)?.updateList(listOf()) + homeLoadingShimmer.startShimmer() + homeLoading.isVisible = true + homeLoadingError.isVisible = false + homeMasterRecycler.isVisible = false + //home_loaded?.isVisible = false + } } } } @@ -638,19 +665,19 @@ class HomeFragment : Fragment() { HOME_BOOKMARK_VALUE_LIST, availableWatchStatusTypes.first.map { it.internalId }.toIntArray() ) - (home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setAvailableWatchStatusTypes( + (binding?.homeMasterRecycler?.adapter as? HomeParentItemAdapterPreview?)?.setAvailableWatchStatusTypes( availableWatchStatusTypes ) } observe(homeViewModel.bookmarks) { data -> - (home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setBookmarkData( + (binding?.homeMasterRecycler?.adapter as? HomeParentItemAdapterPreview?)?.setBookmarkData( data ) } observe(homeViewModel.resumeWatching) { resumeWatching -> - (home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setResumeWatchingData( + (binding?.homeMasterRecycler?.adapter as? HomeParentItemAdapterPreview?)?.setResumeWatchingData( resumeWatching ) if (isTrueTvSettings()) { @@ -665,9 +692,9 @@ class HomeFragment : Fragment() { //context?.fixPaddingStatusbarView(home_statusbar) //context?.fixPaddingStatusbar(home_padding) - context?.fixPaddingStatusbar(home_loading_statusbar) + fixPaddingStatusbar(binding?.homeLoadingStatusbar) - home_master_recycler?.adapter = + binding?.homeMasterRecycler?.adapter = HomeParentItemAdapterPreview(mutableListOf(), { callback -> homeHandleSearch(callback) }, { item -> @@ -699,18 +726,22 @@ class HomeFragment : Fragment() { reloadStored() loadHomePage(false) - home_master_recycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() { + binding?.homeMasterRecycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - if (dy > 0) { //check for scroll down - home_api_fab?.shrink() // hide - home_random?.shrink() - } else if (dy < -5) { - if (!isTvSettings()) { - home_api_fab?.extend() // show - home_random?.extend() + + binding?.apply { + if (dy > 0) { //check for scroll down + homeApiFab.shrink() // hide + homeRandom.shrink() + } else if (dy < -5) { + if (!isTvSettings()) { + homeApiFab.extend() // show + homeRandom.extend() + } } } + super.onScrolled(recyclerView, dx, dy) } }) @@ -718,18 +749,20 @@ class HomeFragment : Fragment() { // nice profile pic on homepage //home_profile_picture_holder?.isVisible = false // just in case - if (isTvSettings()) { - home_api_fab?.isVisible = false - if (isTrueTvSettings()) { - home_change_api_loading?.isVisible = true - home_change_api_loading?.isFocusable = true - home_change_api_loading?.isFocusableInTouchMode = true + binding?.apply { + if (isTvSettings()) { + homeApiFab.isVisible = false + if (isTrueTvSettings()) { + homeChangeApiLoading.isVisible = true + homeChangeApiLoading.isFocusable = true + homeChangeApiLoading.isFocusableInTouchMode = true + } + // home_bookmark_select?.isFocusable = true + // home_bookmark_select?.isFocusableInTouchMode = true + } else { + homeApiFab.isVisible = true + homeChangeApiLoading.isVisible = false } - // home_bookmark_select?.isFocusable = true - // home_bookmark_select?.isFocusableInTouchMode = true - } else { - home_api_fab?.isVisible = true - home_change_api_loading?.isVisible = false } //TODO READD THIS /*for (syncApi in OAuth2Apis) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 94a1a526..715f1867 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -544,7 +544,7 @@ class HomeParentItemAdapterPreview( } } - itemView.home_search?.context?.fixPaddingStatusbar(itemView.home_search) + fixPaddingStatusbar(itemView.home_search) itemView.home_search?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { @@ -575,7 +575,7 @@ class HomeParentItemAdapterPreview( layoutParams = params } } else { - itemView.home_none_padding?.context?.fixPaddingStatusbarView(itemView.home_none_padding) + fixPaddingStatusbarView(itemView.home_none_padding) } when (preview) { is Resource.Success -> { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index d7c06c4e..a20cd5c6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -6,7 +6,6 @@ import android.content.res.Configuration import android.os.Bundle import android.os.Handler import android.os.Looper -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,6 +13,7 @@ import android.view.animation.AlphaAnimation import androidx.annotation.StringRes import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible +import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.google.android.material.tabs.TabLayoutMediator import com.lagradost.cloudstream3.APIHolder @@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentLibraryBinding import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.observe @@ -37,7 +38,6 @@ import com.lagradost.cloudstream3.utils.AppUtils.reduceDragSensitivity import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount -import kotlinx.android.synthetic.main.fragment_library.* import kotlin.math.abs const val LIBRARY_FOLDER = "library_folder" @@ -73,14 +73,25 @@ class LibraryFragment : Fragment() { private val libraryViewModel: LibraryViewModel by activityViewModels() + var binding: FragmentLibraryBinding? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_library, container, false) + ): View { + val localBinding = FragmentLibraryBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + + //return inflater.inflate(R.layout.fragment_library, container, false) + } + + override fun onDestroyView() { + binding = null + super.onDestroyView() } override fun onSaveInstanceState(outState: Bundle) { - viewpager?.currentItem?.let { currentItem -> + binding?.viewpager?.currentItem?.let { currentItem -> outState.putInt(VIEWPAGER_ITEM_KEY, currentItem) } super.onSaveInstanceState(outState) @@ -88,9 +99,9 @@ class LibraryFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(search_status_bar_padding) + fixPaddingStatusbar(binding?.searchStatusBarPadding) - sort_fab?.setOnClickListener { + binding?.sortFab?.setOnClickListener { val methods = libraryViewModel.sortingMethods.map { txt(it.stringRes).asString(view.context) } @@ -106,7 +117,7 @@ class LibraryFragment : Fragment() { }) } - main_search?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + binding?.mainSearch?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String?): Boolean { libraryViewModel.sort(ListSorting.Query, query) return true @@ -129,7 +140,7 @@ class LibraryFragment : Fragment() { libraryViewModel.reloadPages(false) - list_selector?.setOnClickListener { + binding?.listSelector?.setOnClickListener { val items = libraryViewModel.availableApiNames val currentItem = libraryViewModel.currentApiName.value @@ -209,20 +220,22 @@ class LibraryFragment : Fragment() { } } - provider_selector?.setOnClickListener { + binding?.providerSelector?.setOnClickListener { val syncName = libraryViewModel.currentSyncApi?.syncIdName ?: return@setOnClickListener activity?.showPluginSelectionDialog(syncName.name, syncName) } - viewpager?.setPageTransformer(LibraryScrollTransformer()) - viewpager?.adapter = - viewpager.adapter ?: ViewpagerAdapter(mutableListOf(), { isScrollingDown: Boolean -> - if (isScrollingDown) { - sort_fab?.shrink() - } else { - sort_fab?.extend() - } - }) callback@{ searchClickCallback -> + binding?.viewpager?.setPageTransformer(LibraryScrollTransformer()) + binding?.viewpager?.adapter = + binding?.viewpager?.adapter ?: ViewpagerAdapter( + mutableListOf(), + { isScrollingDown: Boolean -> + if (isScrollingDown) { + binding?.sortFab?.shrink() + } else { + binding?.sortFab?.extend() + } + }) callback@{ searchClickCallback -> // To prevent future accidents debugAssert({ searchClickCallback.card !is SyncAPI.LibraryItem @@ -267,6 +280,7 @@ class LibraryFragment : Fragment() { ) } } + LibraryOpenerType.None -> {} LibraryOpenerType.Provider -> savedSelection.providerData?.apiName?.let { apiName -> @@ -275,8 +289,10 @@ class LibraryFragment : Fragment() { apiName, ) } + LibraryOpenerType.Browser -> openBrowser(searchClickCallback.card.url) + LibraryOpenerType.Search -> { QuickSearchFragment.pushSearch( activity, @@ -288,22 +304,28 @@ class LibraryFragment : Fragment() { } } - viewpager?.offscreenPageLimit = 2 - viewpager?.reduceDragSensitivity() + binding?.apply { + viewpager.offscreenPageLimit = 2 + viewpager.reduceDragSensitivity() + } val startLoading = Runnable { - gridview?.numColumns = context?.getSpanCount() ?: 3 - gridview?.adapter = - context?.let { LoadingPosterAdapter(it, 6 * 3) } - library_loading_overlay?.isVisible = true - library_loading_shimmer?.startShimmer() - empty_list_textview?.isVisible = false + binding?.apply { + gridview.numColumns = context?.getSpanCount() ?: 3 + gridview.adapter = + context?.let { LoadingPosterAdapter(it, 6 * 3) } + libraryLoadingOverlay.isVisible = true + libraryLoadingShimmer.startShimmer() + emptyListTextview.isVisible = false + } } val stopLoading = Runnable { - gridview?.adapter = null - library_loading_overlay?.isVisible = false - library_loading_shimmer?.stopShimmer() + binding?.apply { + gridview.adapter = null + libraryLoadingOverlay.isVisible = false + libraryLoadingShimmer.stopShimmer() + } } val handler = Handler(Looper.getMainLooper()) @@ -314,65 +336,75 @@ class LibraryFragment : Fragment() { handler.removeCallbacks(startLoading) val pages = resource.value val showNotice = pages.all { it.items.isEmpty() } - empty_list_textview?.isVisible = showNotice - if (showNotice) { - if (libraryViewModel.availableApiNames.size > 1) { - empty_list_textview?.setText(R.string.empty_library_logged_in_message) - } else { - empty_list_textview?.setText(R.string.empty_library_no_accounts_message) + + + binding?.apply { + emptyListTextview.isVisible = showNotice + if (showNotice) { + if (libraryViewModel.availableApiNames.size > 1) { + emptyListTextview.setText(R.string.empty_library_logged_in_message) + } else { + emptyListTextview.setText(R.string.empty_library_no_accounts_message) + } } + + (viewpager.adapter as? ViewpagerAdapter)?.pages = pages + // Using notifyItemRangeChanged keeps the animations when sorting + viewpager.adapter?.notifyItemRangeChanged( + 0, + viewpager.adapter?.itemCount ?: 0 + ) + + // Only stop loading after 300ms to hide the fade effect the viewpager produces when updating + // Without this there would be a flashing effect: + // loading -> show old viewpager -> black screen -> show new viewpager + handler.postDelayed(stopLoading, 300) + + savedInstanceState?.getInt(VIEWPAGER_ITEM_KEY)?.let { currentPos -> + if (currentPos < 0) return@let + viewpager.setCurrentItem(currentPos, false) + // Using remove() sets the key to 0 instead of removing it + savedInstanceState.putInt(VIEWPAGER_ITEM_KEY, -1) + } + + // Since the animation to scroll multiple items is so much its better to just hide + // the viewpager a bit while the fastest animation is running + fun hideViewpager(distance: Int) { + if (distance < 3) return + + val hideAnimation = AlphaAnimation(1f, 0f).apply { + duration = distance * 50L + fillAfter = true + } + val showAnimation = AlphaAnimation(0f, 1f).apply { + duration = distance * 50L + startOffset = distance * 100L + fillAfter = true + } + viewpager.startAnimation(hideAnimation) + viewpager.startAnimation(showAnimation) + } + + TabLayoutMediator( + libraryTabLayout, + viewpager, + ) { tab, position -> + tab.text = pages.getOrNull(position)?.title?.asStringNull(context) + tab.view.setOnClickListener { + val currentItem = + binding?.viewpager?.currentItem ?: return@setOnClickListener + val distance = abs(position - currentItem) + hideViewpager(distance) + } + }.attach() } - - (viewpager.adapter as? ViewpagerAdapter)?.pages = pages - // Using notifyItemRangeChanged keeps the animations when sorting - viewpager.adapter?.notifyItemRangeChanged(0, viewpager.adapter?.itemCount ?: 0) - - // Only stop loading after 300ms to hide the fade effect the viewpager produces when updating - // Without this there would be a flashing effect: - // loading -> show old viewpager -> black screen -> show new viewpager - handler.postDelayed(stopLoading, 300) - - savedInstanceState?.getInt(VIEWPAGER_ITEM_KEY)?.let { currentPos -> - if (currentPos < 0) return@let - viewpager?.setCurrentItem(currentPos, false) - // Using remove() sets the key to 0 instead of removing it - savedInstanceState.putInt(VIEWPAGER_ITEM_KEY, -1) - } - - // Since the animation to scroll multiple items is so much its better to just hide - // the viewpager a bit while the fastest animation is running - fun hideViewpager(distance: Int) { - if (distance < 3) return - - val hideAnimation = AlphaAnimation(1f, 0f).apply { - duration = distance * 50L - fillAfter = true - } - val showAnimation = AlphaAnimation(0f, 1f).apply { - duration = distance * 50L - startOffset = distance * 100L - fillAfter = true - } - viewpager?.startAnimation(hideAnimation) - viewpager?.startAnimation(showAnimation) - } - - TabLayoutMediator( - library_tab_layout, - viewpager, - ) { tab, position -> - tab.text = pages.getOrNull(position)?.title?.asStringNull(context) - tab.view.setOnClickListener { - val currentItem = viewpager?.currentItem ?: return@setOnClickListener - val distance = abs(position - currentItem) - hideViewpager(distance) - } - }.attach() } + is Resource.Loading -> { // Only start loading after 200ms to prevent loading cached lists handler.postDelayed(startLoading, 200) } + is Resource.Failure -> { stopLoading.run() // No user indication it failed :( @@ -383,7 +415,7 @@ class LibraryFragment : Fragment() { } override fun onConfigurationChanged(newConfig: Configuration) { - (viewpager.adapter as? ViewpagerAdapter)?.rebind() + (binding?.viewpager?.adapter as? ViewpagerAdapter)?.rebind() super.onConfigurationChanged(newConfig) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index 5f64880c..14d31356 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -11,7 +11,6 @@ import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.utils.Coroutines.ioSafe -import kotlinx.coroutines.delay enum class ListSorting(@StringRes val stringRes: Int) { Query(R.string.none), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index 2435f8be..05b05f44 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -3,23 +3,21 @@ package com.lagradost.cloudstream3.ui.library import android.content.res.ColorStateList import android.graphics.Color import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.core.graphics.ColorUtils import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.AcraApplication import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.SearchResultGridExpandedBinding import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.AutofitRecyclerView import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.search_result_grid_expanded.view.* import kotlin.math.roundToInt @@ -32,8 +30,7 @@ class PageAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return LibraryItemViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.search_result_grid_expanded, parent, false) + SearchResultGridExpandedBinding.inflate(LayoutInflater.from(parent.context), parent, false) ) } @@ -57,8 +54,7 @@ class PageAdapter( } } - inner class LibraryItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val cardView: ImageView = itemView.imageView + inner class LibraryItemViewHolder(val binding : SearchResultGridExpandedBinding) : RecyclerView.ViewHolder(binding.root) { private val compactView = false//itemView.context.getGridIsCompact() private val coverHeight: Int = @@ -85,11 +81,11 @@ class PageAdapter( val fg = getDifferentColor(bg)//palette.getVibrantColor(ContextCompat.getColor(ctx,R.color.ratingColor)) - itemView.text_rating.apply { + binding.textRating.apply { setTextColor(ColorStateList.valueOf(fg)) } - itemView.text_rating_holder?.backgroundTintList = ColorStateList.valueOf(bg) - itemView.watchProgress?.apply { + binding.textRatingHolder.backgroundTintList = ColorStateList.valueOf(bg) + binding.watchProgress.apply { progressTintList = ColorStateList.valueOf(fg) progressBackgroundTintList = ColorStateList.valueOf(bg) } @@ -99,7 +95,7 @@ class PageAdapter( // See searchAdaptor for this, it basically fixes the height if (!compactView) { - cardView.apply { + binding.imageView.apply { layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, coverHeight @@ -108,22 +104,22 @@ class PageAdapter( } val showProgress = item.episodesCompleted != null && item.episodesTotal != null - itemView.watchProgress.isVisible = showProgress + binding.watchProgress.isVisible = showProgress if (showProgress) { - itemView.watchProgress.max = item.episodesTotal!! - itemView.watchProgress.progress = item.episodesCompleted!! + binding.watchProgress.max = item.episodesTotal!! + binding.watchProgress.progress = item.episodesCompleted!! } - itemView.imageText.text = item.name + binding.imageText.text = item.name val showRating = (item.personalRating ?: 0) != 0 - itemView.text_rating_holder.isVisible = showRating + binding.textRatingHolder.isVisible = showRating if (showRating) { // We want to show 8.5 but not 8.0 hence the replace val rating = ((item.personalRating ?: 0).toDouble() / 10).toString() .replace(".0", "") - itemView.text_rating.text = "★ $rating" + binding.textRating.text = "★ $rating" } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index 33a40386..441d6adc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -2,16 +2,14 @@ package com.lagradost.cloudstream3.ui.library import android.os.Build import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.view.doOnAttach import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.OnFlingListener -import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.LibraryViewpagerPageBinding import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount -import kotlinx.android.synthetic.main.library_viewpager_page.view.* class ViewpagerAdapter( var pages: List, @@ -20,8 +18,7 @@ class ViewpagerAdapter( ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return PageViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.library_viewpager_page, parent, false) + LibraryViewpagerPageBinding.inflate(LayoutInflater.from(parent.context), parent, false) ) } @@ -34,6 +31,7 @@ class ViewpagerAdapter( } private val unbound = mutableSetOf() + /** * Used to mark all pages for re-binding and forces all items to be refreshed * Without this the pages will still use the same adapters @@ -43,44 +41,46 @@ class ViewpagerAdapter( this.notifyItemRangeChanged(0, pages.size) } - inner class PageViewHolder(private val itemViewTest: View) : - RecyclerView.ViewHolder(itemViewTest) { + inner class PageViewHolder(private val binding: LibraryViewpagerPageBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(page: SyncAPI.Page, rebind: Boolean) { - itemView.page_recyclerview?.spanCount = - this@PageViewHolder.itemView.context.getSpanCount() ?: 3 - - if (itemViewTest.page_recyclerview?.adapter == null || rebind) { - // Only add the items after it has been attached since the items rely on ItemWidth - // Which is only determined after the recyclerview is attached. - // If this fails then item height becomes 0 when there is only one item - itemViewTest.page_recyclerview?.doOnAttach { - itemViewTest.page_recyclerview?.adapter = PageAdapter( - page.items.toMutableList(), - itemViewTest.page_recyclerview, - clickCallback - ) + binding.pageRecyclerview.apply { + spanCount = + this@PageViewHolder.itemView.context.getSpanCount() ?: 3 + if (adapter == null || rebind) { + // Only add the items after it has been attached since the items rely on ItemWidth + // Which is only determined after the recyclerview is attached. + // If this fails then item height becomes 0 when there is only one item + doOnAttach { + adapter = PageAdapter( + page.items.toMutableList(), + this, + clickCallback + ) + } + } else { + (adapter as? PageAdapter)?.updateList(page.items) + scrollToPosition(0) } - } else { - (itemViewTest.page_recyclerview?.adapter as? PageAdapter)?.updateList(page.items) - itemViewTest.page_recyclerview?.scrollToPosition(0) - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - itemViewTest.page_recyclerview.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY -> - val diff = scrollY - oldScrollY - if (diff == 0) return@setOnScrollChangeListener + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY -> + val diff = scrollY - oldScrollY + if (diff == 0) return@setOnScrollChangeListener - scrollCallback.invoke(diff > 0) - } - } else { - itemViewTest.page_recyclerview.onFlingListener = object : OnFlingListener() { - override fun onFling(velocityX: Int, velocityY: Int): Boolean { - scrollCallback.invoke(velocityY > 0) - return false + scrollCallback.invoke(diff > 0) + } + } else { + onFlingListener = object : OnFlingListener() { + override fun onFling(velocityX: Int, velocityY: Int): Boolean { + scrollCallback.invoke(velocityY > 0) + return false + } } } } + } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt index ba57d2de..9e5ca6ba 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt @@ -21,6 +21,7 @@ import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.QuickSearchBinding import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe @@ -37,7 +38,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage -import kotlinx.android.synthetic.main.quick_search.* import java.util.concurrent.locks.ReentrantLock class QuickSearchFragment : Fragment() { @@ -72,6 +72,8 @@ class QuickSearchFragment : Fragment() { private var providers: Set? = null private lateinit var searchViewModel: SearchViewModel + var binding: QuickSearchBinding? = null + private var bottomSheetDialog: BottomSheetDialog? = null @@ -79,13 +81,21 @@ class QuickSearchFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { activity?.window?.setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE ) searchViewModel = ViewModelProvider(this)[SearchViewModel::class.java] bottomSheetDialog?.ownShow() - return inflater.inflate(R.layout.quick_search, container, false) + val localBinding = QuickSearchBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.quick_search, container, false) + } + + override fun onDestroyView() { + binding = null + super.onDestroyView() } override fun onDestroy() { @@ -111,7 +121,7 @@ class QuickSearchFragment : Fragment() { activity?.getSpanCount()?.let { HomeFragment.currentSpan = it } - quick_search_autofit_results.spanCount = HomeFragment.currentSpan + binding?.quickSearchAutofitResults?.spanCount = HomeFragment.currentSpan HomeFragment.currentSpan = HomeFragment.currentSpan HomeFragment.configEvent.invoke(HomeFragment.currentSpan) } @@ -123,7 +133,7 @@ class QuickSearchFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(quick_search_root) + fixPaddingStatusbar(binding?.quickSearchRoot) fixGrid() arguments?.getStringArray(PROVIDER_KEY)?.let { @@ -136,21 +146,22 @@ class QuickSearchFragment : Fragment() { } else false if (isSingleProvider) { - quick_search_autofit_results.adapter = activity?.let { - SearchAdapter( + binding?.quickSearchAutofitResults?.apply { + adapter = SearchAdapter( ArrayList(), - quick_search_autofit_results, + this, ) { callback -> SearchHelper.handleSearchClickCallback(activity, callback) } } + try { - quick_search?.queryHint = getString(R.string.search_hint_site).format(providers?.first()) + binding?.quickSearch?.queryHint = getString(R.string.search_hint_site).format(providers?.first()) } catch (e: Exception) { logError(e) } } else { - quick_search_master_recycler?.adapter = + binding?.quickSearchMasterRecycler?.adapter = ParentItemAdapter(mutableListOf(), { callback -> SearchHelper.handleSearchClickCallback(activity, callback) //when (callback.action) { @@ -164,18 +175,17 @@ class QuickSearchFragment : Fragment() { bottomSheetDialog = null }) }) - quick_search_master_recycler?.layoutManager = GridLayoutManager(context, 1) + binding?.quickSearchMasterRecycler?.layoutManager = GridLayoutManager(context, 1) } - - quick_search_autofit_results?.isVisible = isSingleProvider - quick_search_master_recycler?.isGone = isSingleProvider + binding?.quickSearchAutofitResults?.isVisible = isSingleProvider + binding?.quickSearchMasterRecycler?.isGone = isSingleProvider val listLock = ReentrantLock() observe(searchViewModel.currentSearch) { list -> try { // https://stackoverflow.com/questions/6866238/concurrent-modification-exception-adding-to-an-arraylist listLock.lock() - (quick_search_master_recycler?.adapter as ParentItemAdapter?)?.apply { + (binding?.quickSearchMasterRecycler?.adapter as ParentItemAdapter?)?.apply { updateList(list.map { ongoing -> val ongoingList = HomePageList( ongoing.apiName, @@ -192,19 +202,18 @@ class QuickSearchFragment : Fragment() { } val searchExitIcon = - quick_search?.findViewById(androidx.appcompat.R.id.search_close_btn) + binding?.quickSearch?.findViewById(androidx.appcompat.R.id.search_close_btn) //val searchMagIcon = - // quick_search?.findViewById(androidx.appcompat.R.id.search_mag_icon) + // binding.quickSearch.findViewById(androidx.appcompat.R.id.search_mag_icon) //searchMagIcon?.scaleX = 0.65f //searchMagIcon?.scaleY = 0.65f - - quick_search?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + binding?.quickSearch?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { if (search(context, query, false)) - UIHelper.hideKeyboard(quick_search) + UIHelper.hideKeyboard(binding?.quickSearch) return true } @@ -214,27 +223,26 @@ class QuickSearchFragment : Fragment() { return true } }) - - quick_search_loading_bar.alpha = 0f + binding?.quickSearchLoadingBar?.alpha = 0f observe(searchViewModel.searchResponse) { when (it) { is Resource.Success -> { it.value.let { data -> - (quick_search_autofit_results?.adapter as? SearchAdapter)?.updateList( + (binding?.quickSearchAutofitResults?.adapter as? SearchAdapter)?.updateList( context?.filterSearchResultByFilmQuality(data) ?: data ) } searchExitIcon?.alpha = 1f - quick_search_loading_bar?.alpha = 0f + binding?.quickSearchLoadingBar?.alpha = 0f } is Resource.Failure -> { // Toast.makeText(activity, "Server error", Toast.LENGTH_LONG).show() searchExitIcon?.alpha = 1f - quick_search_loading_bar?.alpha = 0f + binding?.quickSearchLoadingBar?.alpha = 0f } is Resource.Loading -> { searchExitIcon?.alpha = 0f - quick_search_loading_bar?.alpha = 1f + binding?.quickSearchLoadingBar?.alpha = 1f } } } @@ -246,13 +254,12 @@ class QuickSearchFragment : Fragment() { // UIHelper.showInputMethod(view.findFocus()) // } //} - - quick_search_back.setOnClickListener { + binding?.quickSearchBack?.setOnClickListener { activity?.popCurrentPage() } arguments?.getString(AUTOSEARCH_KEY)?.let { - quick_search?.setQuery(it, true) + binding?.quickSearch?.setQuery(it, true) arguments?.remove(AUTOSEARCH_KEY) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index 92cecc37..7b415d78 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -1,20 +1,17 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.ActorData import com.lagradost.cloudstream3.ActorRole import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.CastItemBinding import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.cast_item.view.* -class ActorAdaptor() : RecyclerView.Adapter() { +class ActorAdaptor : RecyclerView.Adapter() { data class ActorMetaData( var isInverted: Boolean, val actor: ActorData, @@ -24,7 +21,7 @@ class ActorAdaptor() : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.cast_item, parent, false), + CastItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) ) } @@ -68,15 +65,9 @@ class ActorAdaptor() : RecyclerView.Adapter() { private class CardViewHolder constructor( - itemView: View, + val binding: CastItemBinding, ) : - RecyclerView.ViewHolder(itemView) { - private val actorImage: ImageView = itemView.actor_image - private val actorName: TextView = itemView.actor_name - private val actorExtra: TextView = itemView.actor_extra - private val voiceActorImage: ImageView = itemView.voice_actor_image - private val voiceActorImageHolder: View = itemView.voice_actor_image_holder - private val voiceActorName: TextView = itemView.voice_actor_name + RecyclerView.ViewHolder(binding.root) { fun bind(actor: ActorData, isInverted: Boolean, position: Int, callback: (Int) -> Unit) { val (mainImg, vaImage) = if (!isInverted || actor.voiceActor?.image.isNullOrBlank()) { @@ -89,39 +80,43 @@ class ActorAdaptor() : RecyclerView.Adapter() { callback(position) } - actorImage.setImage(mainImg) + binding.apply { + actorImage.setImage(mainImg) - actorName.text = actor.actor.name - actor.role?.let { - actorExtra.context?.getString( - when (it) { - ActorRole.Main -> { - R.string.actor_main - } - ActorRole.Supporting -> { - R.string.actor_supporting - } - ActorRole.Background -> { - R.string.actor_background + actorName.text = actor.actor.name + actor.role?.let { + actorExtra.context?.getString( + when (it) { + ActorRole.Main -> { + R.string.actor_main + } + + ActorRole.Supporting -> { + R.string.actor_supporting + } + + ActorRole.Background -> { + R.string.actor_background + } } + )?.let { text -> + actorExtra.isVisible = true + actorExtra.text = text } - )?.let { text -> + } ?: actor.roleString?.let { actorExtra.isVisible = true - actorExtra.text = text + actorExtra.text = it + } ?: run { + actorExtra.isVisible = false } - } ?: actor.roleString?.let { - actorExtra.isVisible = true - actorExtra.text = it - } ?: run { - actorExtra.isVisible = false - } - if (actor.voiceActor == null) { - voiceActorImageHolder.isVisible = false - voiceActorName.isVisible = false - } else { - voiceActorName.text = actor.voiceActor.name - voiceActorImageHolder.isVisible = voiceActorImage.setImage(vaImage) + if (actor.voiceActor == null) { + voiceActorImageHolder.isVisible = false + voiceActorName.isVisible = false + } else { + voiceActorName.text = actor.voiceActor.name + voiceActorImageHolder.isVisible = voiceActorImage.setImage(vaImage) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 0932b001..216d95a4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -3,34 +3,25 @@ package com.lagradost.cloudstream3.ui.result import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView import androidx.core.view.isGone import androidx.core.view.isVisible -import androidx.core.widget.ContentLoadingProgressBar import androidx.preference.PreferenceManager import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.ResultEpisodeBinding +import com.lagradost.cloudstream3.databinding.ResultEpisodeLargeBinding import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_DOWNLOAD import com.lagradost.cloudstream3.ui.download.DownloadButtonViewHolder import com.lagradost.cloudstream3.ui.download.DownloadClickEvent import com.lagradost.cloudstream3.ui.download.EasyDownloadButton import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager -import kotlinx.android.synthetic.main.result_episode.view.* -import kotlinx.android.synthetic.main.result_episode.view.episode_text -import kotlinx.android.synthetic.main.result_episode_large.view.* -import kotlinx.android.synthetic.main.result_episode_large.view.episode_filler -import kotlinx.android.synthetic.main.result_episode_large.view.episode_progress -import kotlinx.android.synthetic.main.result_episode_large.view.result_episode_download -import kotlinx.android.synthetic.main.result_episode_large.view.result_episode_progress_downloaded import java.util.* const val ACTION_PLAY_EPISODE_IN_PLAYER = 1 @@ -144,26 +135,52 @@ class EpisodeAdapter( diffResult.dispatchUpdatesTo(this) } - var layout = R.layout.result_episode_both + fun getItem(position: Int) : ResultEpisode { + return cardList[position] + } + + override fun getItemViewType(position: Int): Int { + val item = getItem(position) + return if(item.poster.isNullOrBlank()) 0 else 1 + } + + + // private val layout = R.layout.result_episode_both override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { /*val layout = if (cardList.filter { it.poster != null }.size >= cardList.size / 2) R.layout.result_episode_large else R.layout.result_episode*/ - return EpisodeCardViewHolder( - LayoutInflater.from(parent.context) - .inflate(layout, parent, false), - hasDownloadSupport, - clickCallback, - downloadClickCallback - ) + return when(viewType) { + 0 -> { + EpisodeCardViewHolderSmall( + ResultEpisodeBinding.inflate(LayoutInflater.from(parent.context), parent, false), + hasDownloadSupport, + clickCallback, + downloadClickCallback + ) + } + 1 -> { + EpisodeCardViewHolderLarge( + ResultEpisodeLargeBinding.inflate(LayoutInflater.from(parent.context), parent, false), + hasDownloadSupport, + clickCallback, + downloadClickCallback + ) + } + else -> throw NotImplementedError() + } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { - is EpisodeCardViewHolder -> { - holder.bind(cardList[position]) + is EpisodeCardViewHolderLarge -> { + holder.bind(getItem(position)) + mBoundViewHolders.add(holder) + } + is EpisodeCardViewHolderSmall -> { + holder.bind(getItem(position)) mBoundViewHolders.add(holder) } } @@ -173,94 +190,81 @@ class EpisodeAdapter( return cardList.size } - class EpisodeCardViewHolder + class EpisodeCardViewHolderLarge constructor( - itemView: View, + val binding : ResultEpisodeLargeBinding, private val hasDownloadSupport: Boolean, private val clickCallback: (EpisodeClickEvent) -> Unit, private val downloadClickCallback: (DownloadClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(itemView), DownloadButtonViewHolder { + ) : RecyclerView.ViewHolder(binding.root), DownloadButtonViewHolder { override var downloadButton = EasyDownloadButton() - var episodeDownloadBar: ContentLoadingProgressBar? = null - var episodeDownloadImage: ImageView? = null + // TODO TV + var localCard: ResultEpisode? = null @SuppressLint("SetTextI18n") fun bind(card: ResultEpisode) { localCard = card + binding.episodeLinHolder.layoutParams.apply { + width = if(isTvSettings()) ViewGroup.LayoutParams.WRAP_CONTENT else ViewGroup.LayoutParams.MATCH_PARENT + } + val isTrueTv = isTrueTvSettings() - val (parentView, otherView) = if (card.poster == null) { - itemView.episode_holder to itemView.episode_holder_large - } else { - itemView.episode_holder_large to itemView.episode_holder - } - parentView.isVisible = true - otherView.isVisible = false + binding.apply { - val episodeText: TextView = parentView.episode_text - val episodeFiller: MaterialButton? = parentView.episode_filler - val episodeRating: TextView? = parentView.episode_rating - val episodeDescript: TextView? = parentView.episode_descript - val episodeProgress: ContentLoadingProgressBar? = parentView.episode_progress - val episodePoster: ImageView? = parentView.episode_poster + val name = + if (card.name == null) "${episodeText.context.getString(R.string.episode)} ${card.episode}" else "${card.episode}. ${card.name}" + episodeFiller.isVisible = card.isFiller == true + episodeText.text = + name//if(card.isFiller == true) episodeText.context.getString(R.string.filler).format(name) else name + episodeText.isSelected = true // is needed for text repeating - episodeDownloadBar = - parentView.result_episode_progress_downloaded - episodeDownloadImage = parentView.result_episode_download - - val name = - if (card.name == null) "${episodeText.context.getString(R.string.episode)} ${card.episode}" else "${card.episode}. ${card.name}" - episodeFiller?.isVisible = card.isFiller == true - episodeText.text = - name//if(card.isFiller == true) episodeText.context.getString(R.string.filler).format(name) else name - episodeText.isSelected = true // is needed for text repeating - - if (card.videoWatchState == VideoWatchState.Watched) { - // This cannot be done in getDisplayPosition() as when you have not watched something - // the duration and position is 0 - episodeProgress?.max = 1 - episodeProgress?.progress = 1 - episodeProgress?.isVisible = true - } else { - val displayPos = card.getDisplayPosition() - episodeProgress?.max = (card.duration / 1000).toInt() - episodeProgress?.progress = (displayPos / 1000).toInt() - episodeProgress?.isVisible = displayPos > 0L - } - - episodePoster?.isVisible = episodePoster?.setImage(card.poster) == true - - if (card.rating != null) { - episodeRating?.text = episodeRating?.context?.getString(R.string.rated_format) - ?.format(card.rating.toFloat() / 10f) - } else { - episodeRating?.text = "" - } - - episodeRating?.isGone = episodeRating?.text.isNullOrBlank() - - episodeDescript?.apply { - text = card.description.html() - isGone = text.isNullOrBlank() - setOnClickListener { - clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_DESCRIPTION, card)) - } - } - - if (!isTrueTv) { - episodePoster?.setOnClickListener { - clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) + if (card.videoWatchState == VideoWatchState.Watched) { + // This cannot be done in getDisplayPosition() as when you have not watched something + // the duration and position is 0 + episodeProgress.max = 1 + episodeProgress.progress = 1 + episodeProgress.isVisible = true + } else { + val displayPos = card.getDisplayPosition() + episodeProgress.max = (card.duration / 1000).toInt() + episodeProgress.progress = (displayPos / 1000).toInt() + episodeProgress.isVisible = displayPos > 0L } - episodePoster?.setOnLongClickListener { - clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_TOAST, card)) - return@setOnLongClickListener true + episodePoster.isVisible = episodePoster.setImage(card.poster) == true + + if (card.rating != null) { + episodeRating.text = episodeRating.context?.getString(R.string.rated_format) + ?.format(card.rating.toFloat() / 10f) + } else { + episodeRating.text = "" + } + + episodeRating.isGone = episodeRating.text.isNullOrBlank() + + episodeDescript.apply { + text = card.description.html() + isGone = text.isNullOrBlank() + setOnClickListener { + clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_DESCRIPTION, card)) + } + } + + if (!isTrueTv) { + episodePoster.setOnClickListener { + clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) + } + + episodePoster.setOnLongClickListener { + clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_TOAST, card)) + return@setOnLongClickListener true + } } } - itemView.setOnClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) } @@ -276,8 +280,8 @@ class EpisodeAdapter( return@setOnLongClickListener true } - episodeDownloadImage?.isVisible = hasDownloadSupport - episodeDownloadBar?.isVisible = hasDownloadSupport + binding.resultEpisodeDownload.isVisible = hasDownloadSupport + binding.resultEpisodeProgressDownloaded.isVisible = hasDownloadSupport reattachDownloadButton() } @@ -285,9 +289,6 @@ class EpisodeAdapter( downloadButton.dispose() val card = localCard if (hasDownloadSupport && card != null) { - if (episodeDownloadBar == null || - episodeDownloadImage == null - ) return val downloadInfo = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings( itemView.context, card.id @@ -296,8 +297,109 @@ class EpisodeAdapter( downloadButton.setUpButton( downloadInfo?.fileLength, downloadInfo?.totalBytes, - episodeDownloadBar ?: return, - episodeDownloadImage ?: return, + binding.resultEpisodeProgressDownloaded, + binding.resultEpisodeDownload, + null, + VideoDownloadHelper.DownloadEpisodeCached( + card.name, + card.poster, + card.episode, + card.season, + card.id, + card.parentId, + card.rating, + card.description, + System.currentTimeMillis(), + ) + ) { + if (it.action == DOWNLOAD_ACTION_DOWNLOAD) { + clickCallback.invoke(EpisodeClickEvent(ACTION_DOWNLOAD_EPISODE, card)) + } else { + downloadClickCallback.invoke(it) + } + } + } + } + } + + class EpisodeCardViewHolderSmall + constructor( + val binding : ResultEpisodeBinding, + private val hasDownloadSupport: Boolean, + private val clickCallback: (EpisodeClickEvent) -> Unit, + private val downloadClickCallback: (DownloadClickEvent) -> Unit, + ) : RecyclerView.ViewHolder(binding.root), DownloadButtonViewHolder { + override var downloadButton = EasyDownloadButton() + + var localCard: ResultEpisode? = null + + @SuppressLint("SetTextI18n") + fun bind(card: ResultEpisode) { + localCard = card + + val isTrueTv = isTrueTvSettings() + + binding.episodeHolder.layoutParams.apply { + width = if(isTvSettings()) ViewGroup.LayoutParams.WRAP_CONTENT else ViewGroup.LayoutParams.MATCH_PARENT + } + + binding.apply { + val name = + if (card.name == null) "${episodeText.context.getString(R.string.episode)} ${card.episode}" else "${card.episode}. ${card.name}" + episodeFiller.isVisible = card.isFiller == true + episodeText.text = + name//if(card.isFiller == true) episodeText.context.getString(R.string.filler).format(name) else name + episodeText.isSelected = true // is needed for text repeating + + if (card.videoWatchState == VideoWatchState.Watched) { + // This cannot be done in getDisplayPosition() as when you have not watched something + // the duration and position is 0 + episodeProgress.max = 1 + episodeProgress.progress = 1 + episodeProgress.isVisible = true + } else { + val displayPos = card.getDisplayPosition() + episodeProgress.max = (card.duration / 1000).toInt() + episodeProgress.progress = (displayPos / 1000).toInt() + episodeProgress.isVisible = displayPos > 0L + } + + itemView.setOnClickListener { + clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) + } + + if (isTrueTv) { + itemView.isFocusable = true + itemView.isFocusableInTouchMode = true + //itemView.touchscreenBlocksFocus = false + } + + itemView.setOnLongClickListener { + clickCallback.invoke(EpisodeClickEvent(ACTION_SHOW_OPTIONS, card)) + return@setOnLongClickListener true + } + + binding.resultEpisodeDownload.isVisible = hasDownloadSupport + binding.resultEpisodeProgressDownloaded.isVisible = hasDownloadSupport + reattachDownloadButton() + } + } + + override fun reattachDownloadButton() { + downloadButton.dispose() + val card = localCard + if (hasDownloadSupport && card != null) { + + val downloadInfo = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings( + itemView.context, + card.id + ) + + downloadButton.setUpButton( + downloadInfo?.fileLength, + downloadInfo?.totalBytes, + binding.resultEpisodeProgressDownloaded, + binding.resultEpisodeDownload, null, VideoDownloadHelper.DownloadEpisodeCached( card.name, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt index ebd6a658..ca2934ef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt @@ -1,11 +1,10 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.ImageView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.databinding.ResultMiniImageBinding import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings /* @@ -24,7 +23,6 @@ const val IMAGE_CLICK = 0 const val IMAGE_LONG_CLICK = 1 class ImageAdapter( - val layout: Int, val clickCallback: ((Int) -> Unit)? = null, val nextFocusUp: Int? = null, val nextFocusDown: Int? = null, @@ -34,7 +32,9 @@ class ImageAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ImageViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false) + //result_mini_image + ResultMiniImageBinding.inflate(LayoutInflater.from(parent.context), parent, false) + // LayoutInflater.from(parent.context).inflate(layout, parent, false) ) } @@ -66,15 +66,15 @@ class ImageAdapter( } class ImageViewHolder - constructor(itemView: View) : - RecyclerView.ViewHolder(itemView) { + constructor(val binding: ResultMiniImageBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind( img: Int, clickCallback: ((Int) -> Unit)?, nextFocusUp: Int?, nextFocusDown: Int?, ) { - (itemView as? ImageView?)?.apply { + binding.root.apply { setImageResource(img) if (nextFocusDown != null) { this.nextFocusDownId = nextFocusDown diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 5a3e28b4..68fc87e6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -310,6 +310,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_finish_loading?.isVisible = false result_loading_error?.isVisible = false } + 1 -> { result_bookmark_fab?.isGone = true result_loading?.isVisible = false @@ -317,6 +318,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_loading_error?.isVisible = true result_reload_connection_open_in_browser?.isVisible = true } + 2 -> { result_bookmark_fab?.isGone = isTrueTvSettings() result_bookmark_fab?.extend() @@ -350,9 +352,9 @@ open class ResultFragment : ResultTrailerPlayer() { viewModel.reloadEpisodes() } - open fun updateMovie(data: ResourceSome>) { + open fun updateMovie(data: Resource>?) { when (data) { - is ResourceSome.Success -> { + is Resource.Success -> { data.value.let { (text, ep) -> result_play_movie.setText(text) result_play_movie?.setOnClickListener { @@ -410,6 +412,7 @@ open class ResultFragment : ResultTrailerPlayer() { EpisodeClickEvent(ACTION_DOWNLOAD_EPISODE, ep) ) } + else -> handleDownloadClick(activity, click) } } @@ -417,6 +420,7 @@ open class ResultFragment : ResultTrailerPlayer() { } } } + else -> { result_movie_progress_downloaded_holder?.isVisible = false result_play_movie?.isVisible = false @@ -424,17 +428,14 @@ open class ResultFragment : ResultTrailerPlayer() { } } - open fun updateEpisodes(episodes: ResourceSome>) { + open fun updateEpisodes(episodes: Resource>?) { when (episodes) { - is ResourceSome.None -> { - result_episode_loading?.isVisible = false - result_episodes?.isVisible = false - } - is ResourceSome.Loading -> { + is Resource.Loading -> { result_episode_loading?.isVisible = true result_episodes?.isVisible = false } - is ResourceSome.Success -> { + + is Resource.Success -> { result_episodes?.isVisible = true result_episode_loading?.isVisible = false @@ -471,6 +472,11 @@ open class ResultFragment : ResultTrailerPlayer() { result_episodes?.requestFocus() } } + + else -> { + result_episode_loading?.isVisible = false + result_episodes?.isVisible = false + } } } @@ -565,7 +571,7 @@ open class ResultFragment : ResultTrailerPlayer() { context?.updateHasTrailers() activity?.loadCache() - activity?.fixPaddingStatusbar(result_top_bar) + fixPaddingStatusbar(result_top_bar) //activity?.fixPaddingStatusbar(result_barstatus) /* val backParameter = result_back.layoutParams as FrameLayout.LayoutParams @@ -588,7 +594,7 @@ open class ResultFragment : ResultTrailerPlayer() { result_episodes?.adapter = EpisodeAdapter( - api?.hasDownloadSupport == true, + api?.hasDownloadSupport == true && !isTvSettings(), { episodeClick -> viewModel.handleAction(activity, episodeClick) }, @@ -738,10 +744,12 @@ open class ResultFragment : ResultTrailerPlayer() { viewModel.setMeta(d, syncModel.getSyncs()) } + is Resource.Loading -> { result_sync_max_episodes?.text = result_sync_max_episodes?.context?.getString(R.string.sync_total_episodes_none) } + else -> {} } } @@ -755,11 +763,13 @@ open class ResultFragment : ResultTrailerPlayer() { result_sync_holder?.isVisible = false closed = true } + is Resource.Loading -> { result_sync_loading_shimmer?.startShimmer() result_sync_loading_shimmer?.isVisible = true result_sync_holder?.isVisible = false } + is Resource.Success -> { result_sync_loading_shimmer?.stopShimmer() result_sync_loading_shimmer?.isVisible = false @@ -789,6 +799,7 @@ open class ResultFragment : ResultTrailerPlayer() { } } } + null -> { closed = false } @@ -796,58 +807,56 @@ open class ResultFragment : ResultTrailerPlayer() { result_overlapping_panels?.setStartPanelLockState(if (closed) OverlappingPanelsLayout.LockState.CLOSE else OverlappingPanelsLayout.LockState.UNLOCKED) } - observe(viewModel.resumeWatching) { resume -> - when (resume) { - is Some.Success -> { - result_resume_parent?.isVisible = true - val value = resume.value - value.progress?.let { progress -> - result_resume_series_title?.apply { - isVisible = !value.isMovie - text = - if (value.isMovie) null else activity?.getNameFull( - value.result.name, - value.result.episode, - value.result.season - ) - } - result_resume_series_progress_text.setText(progress.progressLeft) - result_resume_series_progress?.apply { - isVisible = true - this.max = progress.maxProgress - this.progress = progress.progress - } - result_resume_progress_holder?.isVisible = true - } ?: run { - result_resume_progress_holder?.isVisible = false - result_resume_series_progress?.isVisible = false - result_resume_series_title?.isVisible = false - result_resume_series_progress_text?.isVisible = false - } - - result_resume_series_button?.isVisible = !value.isMovie - result_resume_series_button_play?.isVisible = !value.isMovie - - val click = View.OnClickListener { - viewModel.handleAction( - activity, - EpisodeClickEvent( - storedData?.playerAction ?: ACTION_PLAY_EPISODE_IN_PLAYER, - value.result - ) - ) - } - - result_resume_series_button?.setOnClickListener(click) - result_resume_series_button_play?.setOnClickListener(click) - } - is Some.None -> { - result_resume_parent?.isVisible = false - } + observeNullable(viewModel.resumeWatching) { resume -> + if (resume == null) { + result_resume_parent?.isVisible = false + return@observeNullable } + result_resume_parent?.isVisible = true + resume.progress?.let { progress -> + result_resume_series_title?.apply { + isVisible = !resume.isMovie + text = + if (resume.isMovie) null else activity?.getNameFull( + resume.result.name, + resume.result.episode, + resume.result.season + ) + } + result_resume_series_progress_text?.setText(progress.progressLeft) + result_resume_series_progress?.apply { + isVisible = true + this.max = progress.maxProgress + this.progress = progress.progress + } + result_resume_progress_holder?.isVisible = true + } ?: run { + result_resume_progress_holder?.isVisible = false + result_resume_series_progress?.isVisible = false + result_resume_series_title?.isVisible = false + result_resume_series_progress_text?.isVisible = false + } + + result_resume_series_button?.isVisible = !resume.isMovie + result_resume_series_button_play?.isVisible = !resume.isMovie + + val click = View.OnClickListener { + viewModel.handleAction( + activity, + EpisodeClickEvent( + storedData?.playerAction ?: ACTION_PLAY_EPISODE_IN_PLAYER, + resume.result + ) + ) + } + + result_resume_series_button?.setOnClickListener(click) + result_resume_series_button_play?.setOnClickListener(click) } - observe(viewModel.episodes) { episodes -> + + + observeNullable(viewModel.episodes) { episodes -> updateEpisodes(episodes) } @@ -868,7 +877,7 @@ open class ResultFragment : ResultTrailerPlayer() { setRecommendations(recommendations, null) } - observe(viewModel.movie) { data -> + observeNullable(viewModel.movie) { data -> updateMovie(data) } @@ -1046,10 +1055,12 @@ open class ResultFragment : ResultTrailerPlayer() { }*/ //} } + is Resource.Failure -> { result_error_text.text = storedData?.url?.plus("\n") + data.errorString updateVisStatus(1) } + is Resource.Loading -> { updateVisStatus(0) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 2f232995..571d4b0b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -20,9 +20,9 @@ import com.google.android.gms.cast.framework.CastState import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.updateHasTrailers -import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe +import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.ui.player.CSPlayerEvent import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchHelper @@ -212,7 +212,6 @@ class ResultFragmentPhone : ResultFragment() { }*/ result_mini_sync?.adapter = ImageAdapter( - R.layout.result_mini_image, nextFocusDown = R.id.result_sync_set_score, clickCallback = { action -> if (action == IMAGE_CLICK || action == IMAGE_LONG_CLICK) { @@ -271,73 +270,68 @@ class ResultFragmentPhone : ResultFragment() { } } - observe(viewModel.episodesCountText) { count -> + observeNullable(viewModel.episodesCountText) { count -> result_episodes_text.setText(count) } - observe(viewModel.selectPopup) { popup -> - when (popup) { - is Some.Success -> { - popupDialog?.dismissSafe(activity) - - popupDialog = activity?.let { act -> - val pop = popup.value - val options = pop.getOptions(act) - val title = pop.getTitle(act) - - act.showBottomDialogInstant( - options, title, { - popupDialog = null - pop.callback(null) - }, { - popupDialog = null - pop.callback(it) - } - ) - } - } - is Some.None -> { - popupDialog?.dismissSafe(activity) - popupDialog = null - } + observeNullable(viewModel.selectPopup) { popup -> + if (popup == null) { + popupDialog?.dismissSafe(activity) + popupDialog = null + return@observeNullable } + popupDialog?.dismissSafe(activity) + + popupDialog = activity?.let { act -> + val options = popup.getOptions(act) + val title = popup.getTitle(act) + + act.showBottomDialogInstant( + options, title, { + popupDialog = null + popup.callback(null) + }, { + popupDialog = null + popup.callback(it) + } + ) + } + + } observe(viewModel.loadedLinks) { load -> - when (load) { - is Some.Success -> { - if (loadingDialog?.isShowing != true) { - loadingDialog?.dismissSafe(activity) - loadingDialog = null - } - loadingDialog = loadingDialog ?: context?.let { ctx -> - val builder = - BottomSheetDialog(ctx) - builder.setContentView(R.layout.bottom_loading) - builder.setOnDismissListener { - loadingDialog = null - viewModel.cancelLinks() - } - //builder.setOnCancelListener { - // it?.dismiss() - //} - builder.setCanceledOnTouchOutside(true) - builder.show() - builder - } - } - is Some.None -> { - loadingDialog?.dismissSafe(activity) + if (load == null) { + loadingDialog?.dismissSafe(activity) + loadingDialog = null + return@observe + } + if (loadingDialog?.isShowing != true) { + loadingDialog?.dismissSafe(activity) + loadingDialog = null + } + loadingDialog = loadingDialog ?: context?.let { ctx -> + val builder = + BottomSheetDialog(ctx) + builder.setContentView(R.layout.bottom_loading) + builder.setOnDismissListener { loadingDialog = null + viewModel.cancelLinks() } + //builder.setOnCancelListener { + // it?.dismiss() + //} + builder.setCanceledOnTouchOutside(true) + builder.show() + builder } } - observe(viewModel.selectedSeason) { text -> + observeNullable(viewModel.selectedSeason) { text -> result_season_button.setText(text) selectSeason = - (if (text is Some.Success) text.value else null)?.asStringNull(result_season_button?.context) + text?.asStringNull(result_season_button?.context) // If the season button is visible the result season button will be next focus down if (result_season_button?.isVisible == true) if (result_resume_parent?.isVisible == true) @@ -346,7 +340,7 @@ class ResultFragmentPhone : ResultFragment() { // setFocusUpAndDown(result_bookmark_button, result_season_button) } - observe(viewModel.selectedDubStatus) { status -> + observeNullable(viewModel.selectedDubStatus) { status -> result_dub_select?.setText(status) if (result_dub_select?.isVisible == true) @@ -357,7 +351,7 @@ class ResultFragmentPhone : ResultFragment() { // setFocusUpAndDown(result_bookmark_button, result_dub_select) } } - observe(viewModel.selectedRange) { range -> + observeNullable(viewModel.selectedRange) { range -> result_episode_select.setText(range) // If Season button is invisible then the bookmark button next focus is episode select diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 71ecb0e9..91354117 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -12,9 +12,9 @@ import com.lagradost.cloudstream3.DubStatus import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchResponse -import com.lagradost.cloudstream3.mvvm.ResourceSome -import com.lagradost.cloudstream3.mvvm.Some +import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.observe +import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.ui.player.ExtractorLinkGenerator import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.search.SearchAdapter @@ -69,16 +69,16 @@ class ResultFragmentTv : ResultFragment() { return focus == this.result_root } - override fun updateEpisodes(episodes: ResourceSome>) { + override fun updateEpisodes(episodes: Resource>?) { super.updateEpisodes(episodes) - if (episodes is ResourceSome.Success && hasNoFocus()) { + if (episodes is Resource.Success && hasNoFocus()) { result_episodes?.requestFocus() } } - override fun updateMovie(data: ResourceSome>) { + override fun updateMovie(data: Resource>?) { super.updateMovie(data) - if (data is ResourceSome.Success && hasNoFocus()) { + if (data is Resource.Success && hasNoFocus()) { result_play_movie?.requestFocus() } } @@ -130,9 +130,9 @@ class ResultFragmentTv : ResultFragment() { LinearListLayout(result_episodes?.context).apply { setHorizontal() } - (result_episodes?.adapter as EpisodeAdapter?)?.apply { - layout = R.layout.result_episode_both_tv - } + // (result_episodes?.adapter as EpisodeAdapter?)?.apply { + // layout = R.layout.result_episode_both_tv + // } //result_episodes?.setMaxViewPoolSize(0, Int.MAX_VALUE) result_season_selection.setAdapter() @@ -140,37 +140,37 @@ class ResultFragmentTv : ResultFragment() { result_dub_selection.setAdapter() result_recommendations_filter_selection.setAdapter() - observe(viewModel.selectPopup) { popup -> - when (popup) { - is Some.Success -> { - popupDialog?.dismissSafe(activity) + observeNullable(viewModel.selectPopup) { popup -> + if(popup == null) { + popupDialog?.dismissSafe(activity) + popupDialog = null + return@observeNullable + } - popupDialog = activity?.let { act -> - val pop = popup.value - val options = pop.getOptions(act) - val title = pop.getTitle(act) + popupDialog?.dismissSafe(activity) - act.showBottomDialogInstant( - options, title, { - popupDialog = null - pop.callback(null) - }, { - popupDialog = null - pop.callback(it) - } - ) + popupDialog = activity?.let { act -> + val options = popup.getOptions(act) + val title = popup.getTitle(act) + + act.showBottomDialogInstant( + options, title, { + popupDialog = null + popup.callback(null) + }, { + popupDialog = null + popup.callback(it) } - } - is Some.None -> { - popupDialog?.dismissSafe(activity) - popupDialog = null - } + ) } } - observe(viewModel.loadedLinks) { load -> - when (load) { - is Some.Success -> { + observeNullable(viewModel.loadedLinks) { load -> + if(load == null) { + loadingDialog?.dismissSafe(activity) + loadingDialog = null + return@observeNullable + } if (loadingDialog?.isShowing != true) { loadingDialog?.dismissSafe(activity) loadingDialog = null @@ -189,16 +189,11 @@ class ResultFragmentTv : ResultFragment() { builder.show() builder } - } - is Some.None -> { - loadingDialog?.dismissSafe(activity) - loadingDialog = null - } - } + } - observe(viewModel.episodesCountText) { count -> + observeNullable(viewModel.episodesCountText) { count -> result_episodes_text.setText(count) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 46a8c9f6..dbd1dd40 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -145,15 +145,18 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData { minute ) } + hours > 0 -> txt( R.string.next_episode_time_hour_format, hours, minute ) + minute > 0 -> txt( R.string.next_episode_time_min_format, minute ) + else -> null }?.also { nextAiringEpisode = txt(R.string.next_episode_format, airing.episode) @@ -305,6 +308,7 @@ fun SelectPopup.getOptions(context: Context): List { is SelectPopup.SelectArray -> { this.options.map { it.first.asString(context) } } + is SelectPopup.SelectText -> options.map { it.asString(context) } } } @@ -352,17 +356,17 @@ class ResultViewModel2 : ViewModel() { MutableLiveData(null) val page: LiveData?> = _page - private val _episodes: MutableLiveData>> = - MutableLiveData(ResourceSome.Loading()) - val episodes: LiveData>> = _episodes + private val _episodes: MutableLiveData>?> = + MutableLiveData(Resource.Loading()) + val episodes: LiveData>?> = _episodes - private val _movie: MutableLiveData>> = - MutableLiveData(ResourceSome.None) - val movie: LiveData>> = _movie + private val _movie: MutableLiveData>?> = + MutableLiveData(null) + val movie: LiveData>?> = _movie - private val _episodesCountText: MutableLiveData> = - MutableLiveData(Some.None) - val episodesCountText: LiveData> = _episodesCountText + private val _episodesCountText: MutableLiveData = + MutableLiveData(null) + val episodesCountText: LiveData = _episodesCountText private val _trailers: MutableLiveData> = MutableLiveData(mutableListOf()) @@ -384,16 +388,16 @@ class ResultViewModel2 : ViewModel() { MutableLiveData(emptyList()) val recommendations: LiveData> = _recommendations - private val _selectedRange: MutableLiveData> = - MutableLiveData(Some.None) - val selectedRange: LiveData> = _selectedRange + private val _selectedRange: MutableLiveData = + MutableLiveData(null) + val selectedRange: LiveData = _selectedRange - private val _selectedSeason: MutableLiveData> = - MutableLiveData(Some.None) - val selectedSeason: LiveData> = _selectedSeason + private val _selectedSeason: MutableLiveData = + MutableLiveData(null) + val selectedSeason: LiveData = _selectedSeason - private val _selectedDubStatus: MutableLiveData> = MutableLiveData(Some.None) - val selectedDubStatus: LiveData> = _selectedDubStatus + private val _selectedDubStatus: MutableLiveData = MutableLiveData(null) + val selectedDubStatus: LiveData = _selectedDubStatus private val _selectedRangeIndex: MutableLiveData = MutableLiveData(-1) @@ -406,12 +410,12 @@ class ResultViewModel2 : ViewModel() { private val _selectedDubStatusIndex: MutableLiveData = MutableLiveData(-1) val selectedDubStatusIndex: LiveData = _selectedDubStatusIndex - private val _loadedLinks: MutableLiveData> = MutableLiveData(Some.None) - val loadedLinks: LiveData> = _loadedLinks + private val _loadedLinks: MutableLiveData = MutableLiveData(null) + val loadedLinks: LiveData = _loadedLinks - private val _resumeWatching: MutableLiveData> = - MutableLiveData(Some.None) - val resumeWatching: LiveData> = _resumeWatching + private val _resumeWatching: MutableLiveData = + MutableLiveData(null) + val resumeWatching: LiveData = _resumeWatching private val _episodeSynopsis: MutableLiveData = MutableLiveData(null) val episodeSynopsis: LiveData = _episodeSynopsis @@ -800,8 +804,8 @@ class ResultViewModel2 : ViewModel() { private val _watchStatus: MutableLiveData = MutableLiveData(WatchType.NONE) val watchStatus: LiveData get() = _watchStatus - private val _selectPopup: MutableLiveData> = MutableLiveData(Some.None) - val selectPopup: LiveData> get() = _selectPopup + private val _selectPopup: MutableLiveData = MutableLiveData(null) + val selectPopup: LiveData = _selectPopup fun updateWatchStatus(status: WatchType) { @@ -885,23 +889,22 @@ class ResultViewModel2 : ViewModel() { } fun cancelLinks() { - println("called::cancelLinks") currentLoadLinkJob?.cancel() currentLoadLinkJob = null - _loadedLinks.postValue(Some.None) + _loadedLinks.postValue(null) } private fun postPopup(text: UiText, options: List, callback: suspend (Int?) -> Unit) { _selectPopup.postValue( - some(SelectPopup.SelectText( + SelectPopup.SelectText( text, options ) { value -> viewModelScope.launchSafe { - _selectPopup.postValue(Some.None) + _selectPopup.postValue(null) callback.invoke(value) } - }) + } ) } @@ -912,15 +915,15 @@ class ResultViewModel2 : ViewModel() { callback: suspend (Int?) -> Unit ) { _selectPopup.postValue( - some(SelectPopup.SelectArray( + SelectPopup.SelectArray( text, options, ) { value -> viewModelScope.launchSafe { - _selectPopup.value = Some.None + _selectPopup.postValue(null) callback.invoke(value) } - }) + } ) } @@ -988,7 +991,7 @@ class ResultViewModel2 : ViewModel() { val subs: MutableSet = mutableSetOf() fun updatePage() { if (isVisible && isActive) { - _loadedLinks.postValue(some(LinkProgress(links.size, subs.size))) + _loadedLinks.postValue(LinkProgress(links.size, subs.size)) } } try { @@ -1005,7 +1008,7 @@ class ResultViewModel2 : ViewModel() { } catch (e: Exception) { logError(e) } finally { - _loadedLinks.postValue(Some.None) + _loadedLinks.postValue(null) } return LinkLoadingResult(sortUrls(links), sortSubs(subs)) @@ -1233,6 +1236,7 @@ class ResultViewModel2 : ViewModel() { ) } } + ACTION_CLICK_DEFAULT -> { activity?.let { ctx -> if (ctx.isConnectedToChromecast()) { @@ -1249,6 +1253,7 @@ class ResultViewModel2 : ViewModel() { } } } + ACTION_SHOW_DESCRIPTION -> { _episodeSynopsis.postValue(click.data.description) } @@ -1286,9 +1291,11 @@ class ResultViewModel2 : ViewModel() { ) } } + ACTION_SHOW_TOAST -> { showToast(activity, R.string.play_episode_toast, Toast.LENGTH_SHORT) } + ACTION_DOWNLOAD_EPISODE -> { val response = currentResponse ?: return downloadEpisode( @@ -1303,6 +1310,7 @@ class ResultViewModel2 : ViewModel() { response.url ) } + ACTION_DOWNLOAD_MIRROR -> { val response = currentResponse ?: return acquireSingleLink( @@ -1332,6 +1340,7 @@ class ResultViewModel2 : ViewModel() { ) } } + ACTION_RELOAD_EPISODE -> { ioSafe { loadLinks( @@ -1342,6 +1351,7 @@ class ResultViewModel2 : ViewModel() { ) } } + ACTION_CHROME_CAST_MIRROR -> { acquireSingleLink( click.data, @@ -1351,6 +1361,7 @@ class ResultViewModel2 : ViewModel() { startChromecast(activity, click.data, result.links, result.subs, index) } } + ACTION_PLAY_EPISODE_IN_BROWSER -> acquireSingleLink( click.data, isCasting = true, @@ -1364,6 +1375,7 @@ class ResultViewModel2 : ViewModel() { logError(e) } } + ACTION_COPY_LINK -> { acquireSingleLink( click.data, @@ -1380,9 +1392,11 @@ class ResultViewModel2 : ViewModel() { showToast(act, R.string.copy_link_toast, Toast.LENGTH_SHORT) } } + ACTION_CHROME_CAST_EPISODE -> { startChromecast(activity, click.data) } + ACTION_PLAY_EPISODE_IN_VLC_PLAYER -> { loadLinks(click.data, isVisible = true, isCasting = true) { links -> if (links.links.isEmpty()) { @@ -1397,6 +1411,7 @@ class ResultViewModel2 : ViewModel() { ) } } + ACTION_PLAY_EPISODE_IN_WEB_VIDEO -> acquireSingleLink( click.data, isCasting = true, @@ -1413,6 +1428,7 @@ class ResultViewModel2 : ViewModel() { result.subs ) } + ACTION_PLAY_EPISODE_IN_MPV -> acquireSingleLink( click.data, isCasting = true, @@ -1428,6 +1444,7 @@ class ResultViewModel2 : ViewModel() { result.subs ) } + ACTION_PLAY_EPISODE_IN_PLAYER -> { val data = currentResponse?.syncData?.toList() ?: emptyList() val list = @@ -1448,6 +1465,7 @@ class ResultViewModel2 : ViewModel() { ) ) } + ACTION_MARK_AS_WATCHED -> { val isWatched = DataStoreHelper.getVideoWatchState(click.data.id) == VideoWatchState.Watched @@ -1672,10 +1690,10 @@ class ResultViewModel2 : ViewModel() { private fun postMovie() { val response = currentResponse - _episodes.postValue(ResourceSome.None) + _episodes.postValue(null) if (response == null) { - _movie.postValue(ResourceSome.None) + _movie.postValue(null) return } @@ -1692,11 +1710,11 @@ class ResultViewModel2 : ViewModel() { } ) val data = getMovie() - _episodes.postValue(ResourceSome.None) + _episodes.postValue(null) if (text == null || data == null) { - _movie.postValue(ResourceSome.None) + _movie.postValue(null) } else { - _movie.postValue(ResourceSome.Success(text to data)) + _movie.postValue(Resource.Success(text to data)) } } @@ -1705,14 +1723,14 @@ class ResultViewModel2 : ViewModel() { postMovie() } else { _episodes.postValue( - ResourceSome.Success( + Resource.Success( getEpisodes( currentIndex ?: return, currentRange ?: return ) ) ) - _movie.postValue(ResourceSome.None) + _movie.postValue(null) } postResume() } @@ -1755,14 +1773,14 @@ class ResultViewModel2 : ViewModel() { val size = currentEpisodes[indexer]?.size _episodesCountText.postValue( - some( - if (isMovie) null else - txt( - R.string.episode_format, - size, - txt(if (size == 1) R.string.episode else R.string.episodes), - ) - ) + + if (isMovie) null else + txt( + R.string.episode_format, + size, + txt(if (size == 1) R.string.episode else R.string.episodes), + ) + ) _selectedSeasonIndex.postValue( @@ -1770,29 +1788,29 @@ class ResultViewModel2 : ViewModel() { ) _selectedSeason.postValue( - some( - if (isMovie || currentSeasons.size <= 1) null else - when (indexer.season) { - 0 -> txt(R.string.no_season) - else -> { - val seasonNames = (currentResponse as? EpisodeResponse)?.seasonNames - val seasonData = seasonNames.getSeason(indexer.season) - // If displaySeason is null then only show the name! - if (seasonData?.name != null && seasonData.displaySeason == null) { - txt(seasonData.name) - } else { - val suffix = seasonData?.name?.let { " $it" } ?: "" - txt( - R.string.season_format, - txt(R.string.season), - seasonData?.displaySeason ?: indexer.season, - suffix - ) - } + if (isMovie || currentSeasons.size <= 1) null else + when (indexer.season) { + 0 -> txt(R.string.no_season) + else -> { + val seasonNames = (currentResponse as? EpisodeResponse)?.seasonNames + val seasonData = seasonNames.getSeason(indexer.season) + + // If displaySeason is null then only show the name! + if (seasonData?.name != null && seasonData.displaySeason == null) { + txt(seasonData.name) + } else { + val suffix = seasonData?.name?.let { " $it" } ?: "" + txt( + R.string.season_format, + txt(R.string.season), + seasonData?.displaySeason ?: indexer.season, + suffix + ) } } - ) + } + ) _selectedRangeIndex.postValue( @@ -1800,13 +1818,13 @@ class ResultViewModel2 : ViewModel() { ) _selectedRange.postValue( - some( - if (isMovie) null else if ((currentRanges[indexer]?.size ?: 0) > 1) { - txt(R.string.episodes_range, range.startEpisode, range.endEpisode) - } else { - null - } - ) + + if (isMovie) null else if ((currentRanges[indexer]?.size ?: 0) > 1) { + txt(R.string.episodes_range, range.startEpisode, range.endEpisode) + } else { + null + } + ) _selectedDubStatusIndex.postValue( @@ -1814,10 +1832,10 @@ class ResultViewModel2 : ViewModel() { ) _selectedDubStatus.postValue( - some( - if (isMovie || currentDubStatus.size <= 1) null else - txt(indexer.dubStatus) - ) + + if (isMovie || currentDubStatus.size <= 1) null else + txt(indexer.dubStatus) + ) currentId?.let { id -> @@ -1851,7 +1869,7 @@ class ResultViewModel2 : ViewModel() { } }*/ - _episodes.postValue(ResourceSome.Success(ret)) + _episodes.postValue(Resource.Success(ret)) } } @@ -1869,7 +1887,7 @@ class ResultViewModel2 : ViewModel() { } private suspend fun postEpisodes(loadResponse: LoadResponse, updateFillers: Boolean) { - _episodes.postValue(ResourceSome.Loading()) + _episodes.postValue(Resource.Loading()) val mainId = loadResponse.getId() currentId = mainId @@ -1924,6 +1942,7 @@ class ResultViewModel2 : ViewModel() { } episodes } + is TvSeriesLoadResponse -> { val episodes: MutableMap> = mutableMapOf() @@ -1968,6 +1987,7 @@ class ResultViewModel2 : ViewModel() { } episodes } + is MovieLoadResponse -> { singleMap( buildResultEpisode( @@ -1989,6 +2009,7 @@ class ResultViewModel2 : ViewModel() { ) ) } + is LiveStreamLoadResponse -> { singleMap( buildResultEpisode( @@ -2010,6 +2031,7 @@ class ResultViewModel2 : ViewModel() { ) ) } + is TorrentLoadResponse -> { singleMap( buildResultEpisode( @@ -2031,6 +2053,7 @@ class ResultViewModel2 : ViewModel() { ) ) } + else -> { mapOf() } @@ -2088,7 +2111,7 @@ class ResultViewModel2 : ViewModel() { } fun postResume() { - _resumeWatching.postValue(some(resume())) + _resumeWatching.postValue(resume()) } private fun resume(): ResumeWatchingStatus? { @@ -2196,6 +2219,7 @@ class ResultViewModel2 : ViewModel() { } } } + START_ACTION_LOAD_EP -> { val all = currentEpisodes.values.flatten() val episode = @@ -2227,7 +2251,7 @@ class ResultViewModel2 : ViewModel() { ) = ioSafe { _page.postValue(Resource.Loading(url)) - _episodes.postValue(ResourceSome.Loading()) + _episodes.postValue(Resource.Loading()) preferDubStatus = dubStatus currentShowFillers = showFillers @@ -2271,6 +2295,7 @@ class ResultViewModel2 : ViewModel() { is Resource.Failure -> { _page.postValue(data) } + is Resource.Success -> { if (!isActive) return@ioSafe val loadResponse = ioWork { @@ -2307,6 +2332,7 @@ class ResultViewModel2 : ViewModel() { if (!isActive) return@ioSafe handleAutoStart(activity, autostart) } + is Resource.Loading -> { debugException { "Invalid load result" } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt index 2e7ec529..bcf401ea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt @@ -1,12 +1,11 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.google.android.material.button.MaterialButton -import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.ResultSelectionBinding import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings typealias SelectData = Pair @@ -17,7 +16,9 @@ class SelectAdaptor(val callback: (Any) -> Unit) : RecyclerView.Adapter Unit) : RecyclerView.Adapter?) { - setTextHtml(if (text is Some.Success) text.value else null) -} - -fun TextView?.setText(text: Some?) { - setText(if (text is Some.Success) text.value else null) -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt index 649641c8..7fdd6e1d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt @@ -78,7 +78,7 @@ class SearchAdapter( resView: AutofitRecyclerView ) : RecyclerView.ViewHolder(itemView) { - val cardView: ImageView = itemView.imageView + private val cardView: ImageView = itemView.imageView private val compactView = false//itemView.context.getGridIsCompact() private val coverHeight: Int = diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index b4a38216..e0f67d4a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -33,6 +33,8 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent +import com.lagradost.cloudstream3.databinding.FragmentSearchBinding +import com.lagradost.cloudstream3.databinding.HomeSelectMainpageBinding import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe @@ -56,8 +58,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -import kotlinx.android.synthetic.main.fragment_search.* -import kotlinx.android.synthetic.main.tvtypes_chips.* import java.util.concurrent.locks.ReentrantLock const val SEARCH_PREF_TAGS = "search_pref_tags" @@ -89,6 +89,7 @@ class SearchFragment : Fragment() { private val searchViewModel: SearchViewModel by activityViewModels() private var bottomSheetDialog: BottomSheetDialog? = null + var binding: FragmentSearchBinding? = null override fun onCreateView( inflater: LayoutInflater, @@ -99,18 +100,20 @@ class SearchFragment : Fragment() { WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE ) bottomSheetDialog?.ownShow() - return inflater.inflate( - if (isTvSettings()) R.layout.fragment_search_tv else R.layout.fragment_search, - container, - false - ) + + val layout = if (isTvSettings()) R.layout.fragment_search_tv else R.layout.fragment_search + + val root = inflater.inflate(layout, container, false) + binding = FragmentSearchBinding.bind(root) + + return root } private fun fixGrid() { activity?.getSpanCount()?.let { currentSpan = it } - search_autofit_results.spanCount = currentSpan + binding?.searchAutofitResults?.spanCount = currentSpan currentSpan = currentSpan HomeFragment.configEvent.invoke(currentSpan) } @@ -123,6 +126,7 @@ class SearchFragment : Fragment() { override fun onDestroyView() { hideKeyboard() bottomSheetDialog?.ownHide() + binding = null super.onDestroyView() } @@ -181,7 +185,7 @@ class SearchFragment : Fragment() { searchViewModel.reloadRepos() context?.filterProviderByPreferredMedia()?.let { validAPIs -> bindChips( - home_select_group, + binding?.tvtypesChipsScroll?.tvtypesChips, selectedSearchTypes, validAPIs.flatMap { api -> api.supportedTypes }.distinct() ) { list -> @@ -189,7 +193,7 @@ class SearchFragment : Fragment() { setKey(SEARCH_PREF_TAGS, selectedSearchTypes) selectedSearchTypes.clear() selectedSearchTypes.addAll(list) - search(main_search?.query?.toString()) + search(binding?.mainSearch?.query?.toString()) } } } @@ -199,24 +203,27 @@ class SearchFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(searchRoot) + fixPaddingStatusbar(binding?.searchRoot) fixGrid() reloadRepos() - val adapter: RecyclerView.Adapter? = activity?.let { - SearchAdapter( - ArrayList(), - search_autofit_results, - ) { callback -> - SearchHelper.handleSearchClickCallback(activity, callback) - } + binding?.apply { + val adapter: RecyclerView.Adapter? = + SearchAdapter( + ArrayList(), + searchAutofitResults, + ) { callback -> + SearchHelper.handleSearchClickCallback(activity, callback) + } + + + searchAutofitResults.adapter = adapter + searchLoadingBar.alpha = 0f } - search_autofit_results.adapter = adapter - search_loading_bar.alpha = 0f val searchExitIcon = - main_search.findViewById(androidx.appcompat.R.id.search_close_btn) + binding?.mainSearch?.findViewById(androidx.appcompat.R.id.search_close_btn) // val searchMagIcon = // main_search.findViewById(androidx.appcompat.R.id.search_mag_icon) //searchMagIcon.scaleX = 0.65f @@ -230,7 +237,7 @@ class SearchFragment : Fragment() { )!!.toMutableSet() } - search_filter.setOnClickListener { searchView -> + binding?.searchFilter?.setOnClickListener { searchView -> searchView?.context?.let { ctx -> val validAPIs = ctx.filterProviderByPreferredMedia(hasHomePageIsRequired = false) var currentValidApis = listOf() @@ -241,7 +248,13 @@ class SearchFragment : Fragment() { BottomSheetDialog(ctx) builder.behavior.state = BottomSheetBehavior.STATE_EXPANDED - builder.setContentView(R.layout.home_select_mainpage) + + val binding: HomeSelectMainpageBinding = HomeSelectMainpageBinding.inflate( + builder.layoutInflater, + null, + false + ) + builder.setContentView(binding.root) builder.show() builder.let { dialog -> val isMultiLang = ctx.getApiProviderLangSettings().let { set -> @@ -303,7 +316,7 @@ class SearchFragment : Fragment() { ?: mutableListOf(TvType.Movie, TvType.TvSeries) bindChips( - dialog.home_select_group, + binding.tvtypesChipsScroll.tvtypesChips, selectedSearchTypes, TvType.values().toList() ) { list -> @@ -343,15 +356,15 @@ class SearchFragment : Fragment() { ?: mutableListOf(TvType.Movie, TvType.TvSeries) if (isTrueTvSettings()) { - search_filter.isFocusable = true - search_filter.isFocusableInTouchMode = true + binding?.searchFilter?.isFocusable = true + binding?.searchFilter?.isFocusableInTouchMode = true } - main_search.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + binding?.mainSearch?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { search(query) - main_search?.let { + binding?.mainSearch?.let { hideKeyboard(it) } @@ -365,17 +378,17 @@ class SearchFragment : Fragment() { searchViewModel.clearSearch() searchViewModel.updateHistory() } - - search_history_holder?.isVisible = showHistory - - search_master_recycler?.isVisible = !showHistory && isAdvancedSearch - search_autofit_results?.isVisible = !showHistory && !isAdvancedSearch + binding?.apply { + searchHistoryHolder.isVisible = showHistory + searchMasterRecycler.isVisible = !showHistory && isAdvancedSearch + searchAutofitResults.isVisible = !showHistory && !isAdvancedSearch + } return true } }) - search_clear_call_history?.setOnClickListener { + binding?.searchClearCallHistory?.setOnClickListener { activity?.let { ctx -> val builder: AlertDialog.Builder = AlertDialog.Builder(ctx) val dialogClickListener = @@ -409,8 +422,8 @@ class SearchFragment : Fragment() { } observe(searchViewModel.currentHistory) { list -> - search_clear_call_history?.isVisible = list.isNotEmpty() - (search_history_recycler.adapter as? SearchHistoryAdaptor?)?.updateList(list) + binding?.searchClearCallHistory?.isVisible = list.isNotEmpty() + (binding?.searchHistoryRecycler?.adapter as? SearchHistoryAdaptor?)?.updateList(list) } searchViewModel.updateHistory() @@ -420,20 +433,20 @@ class SearchFragment : Fragment() { is Resource.Success -> { it.value.let { data -> if (data.isNotEmpty()) { - (search_autofit_results?.adapter as? SearchAdapter)?.updateList(data) + (binding?.searchAutofitResults?.adapter as? SearchAdapter)?.updateList(data) } } - searchExitIcon.alpha = 1f - search_loading_bar.alpha = 0f + searchExitIcon?.alpha = 1f + binding?.searchLoadingBar?.alpha = 0f } is Resource.Failure -> { // Toast.makeText(activity, "Server error", Toast.LENGTH_LONG).show() - searchExitIcon.alpha = 1f - search_loading_bar.alpha = 0f + searchExitIcon?.alpha = 1f + binding?.searchLoadingBar?.alpha = 0f } is Resource.Loading -> { - searchExitIcon.alpha = 0f - search_loading_bar.alpha = 1f + searchExitIcon?.alpha = 0f + binding?.searchLoadingBar?.alpha = 1f } } } @@ -443,7 +456,7 @@ class SearchFragment : Fragment() { try { // https://stackoverflow.com/questions/6866238/concurrent-modification-exception-adding-to-an-arraylist listLock.lock() - (search_master_recycler?.adapter as ParentItemAdapter?)?.apply { + (binding?.searchMasterRecycler?.adapter as ParentItemAdapter?)?.apply { val newItems = list.map { ongoing -> val dataList = if (ongoing.data is Resource.Success) ongoing.data.value else ArrayList() @@ -490,8 +503,8 @@ class SearchFragment : Fragment() { SEARCH_HISTORY_OPEN -> { searchViewModel.clearSearch() if (searchItem.type.isNotEmpty()) - updateChips(home_select_group, searchItem.type.toMutableList()) - main_search?.setQuery(searchItem.searchText, true) + updateChips(binding?.tvtypesChipsScroll?.tvtypesChips, searchItem.type.toMutableList()) + binding?.mainSearch?.setQuery(searchItem.searchText, true) } SEARCH_HISTORY_REMOVE -> { removeKey(SEARCH_HISTORY_KEY, searchItem.key) @@ -503,20 +516,23 @@ class SearchFragment : Fragment() { } } - search_history_recycler?.adapter = historyAdapter - search_history_recycler?.layoutManager = GridLayoutManager(context, 1) + binding?.apply { + searchHistoryRecycler.adapter = historyAdapter + searchHistoryRecycler.layoutManager = GridLayoutManager(context, 1) - search_master_recycler?.adapter = masterAdapter - search_master_recycler?.layoutManager = GridLayoutManager(context, 1) + searchMasterRecycler.adapter = masterAdapter + searchMasterRecycler.layoutManager = GridLayoutManager(context, 1) - // Automatically search the specified query, this allows the app search to launch from intent - arguments?.getString(SEARCH_QUERY)?.let { query -> - if (query.isBlank()) return@let - main_search?.setQuery(query, true) - // Clear the query as to not make it request the same query every time the page is opened - arguments?.putString(SEARCH_QUERY, null) + // Automatically search the specified query, this allows the app search to launch from intent + arguments?.getString(SEARCH_QUERY)?.let { query -> + if (query.isBlank()) return@let + mainSearch.setQuery(query, true) + // Clear the query as to not make it request the same query every time the page is opened + arguments?.putString(SEARCH_QUERY, null) + } } + // SubtitlesFragment.push(activity) //searchViewModel.search("iron man") //(activity as AppCompatActivity).loadResult("https://shiro.is/overlord-dubbed", "overlord-dubbed", "Shiro") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt index 8132301b..0a2ecb81 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt @@ -10,7 +10,8 @@ import androidx.recyclerview.widget.RecyclerView import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType -import kotlinx.android.synthetic.main.search_history_item.view.* +import com.lagradost.cloudstream3.databinding.AccountSingleBinding +import com.lagradost.cloudstream3.databinding.SearchHistoryItemBinding data class SearchHistoryItem( @JsonProperty("searchedAt") val searchedAt: Long, @@ -34,8 +35,7 @@ class SearchHistoryAdaptor( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.search_history_item, parent, false), + SearchHistoryItemBinding.inflate(LayoutInflater.from(parent.context), parent, false), clickCallback, ) } @@ -65,22 +65,24 @@ class SearchHistoryAdaptor( class CardViewHolder constructor( - itemView: View, + val binding: SearchHistoryItemBinding, private val clickCallback: (SearchHistoryCallback) -> Unit, ) : - RecyclerView.ViewHolder(itemView) { - private val removeButton: ImageView = itemView.home_history_remove - private val openButton: View = itemView.home_history_tab - private val title: TextView = itemView.home_history_title + RecyclerView.ViewHolder(binding.root) { + // private val removeButton: ImageView = itemView.home_history_remove + // private val openButton: View = itemView.home_history_tab + // private val title: TextView = itemView.home_history_title fun bind(card: SearchHistoryItem) { - title.text = card.searchText + binding.apply { + homeHistoryTitle.text = card.searchText - removeButton.setOnClickListener { - clickCallback.invoke(SearchHistoryCallback(card, SEARCH_HISTORY_REMOVE)) - } - openButton.setOnClickListener { - clickCallback.invoke(SearchHistoryCallback(card, SEARCH_HISTORY_OPEN)) + homeHistoryRemove.setOnClickListener { + clickCallback.invoke(SearchHistoryCallback(card, SEARCH_HISTORY_REMOVE)) + } + homeHistoryTab.setOnClickListener { + clickCallback.invoke(SearchHistoryCallback(card, SEARCH_HISTORY_OPEN)) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index 3447ee32..69812f22 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -1,7 +1,6 @@ package com.lagradost.cloudstream3.ui.search import android.content.Context -import android.graphics.drawable.Drawable import android.view.View import android.widget.ImageView import android.widget.ProgressBar @@ -10,14 +9,29 @@ import androidx.cardview.widget.CardView import androidx.core.view.isVisible import androidx.palette.graphics.Palette import androidx.preference.PreferenceManager -import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.AnimeSearchResponse +import com.lagradost.cloudstream3.DubStatus +import com.lagradost.cloudstream3.LiveSearchResponse +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.SearchQuality +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.isMovieType import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.home_result_grid.view.* +import kotlinx.android.synthetic.main.home_result_grid.view.background_card +import kotlinx.android.synthetic.main.home_result_grid.view.imageText +import kotlinx.android.synthetic.main.home_result_grid.view.imageView +import kotlinx.android.synthetic.main.home_result_grid.view.search_item_download_play +import kotlinx.android.synthetic.main.home_result_grid.view.text_flag +import kotlinx.android.synthetic.main.home_result_grid.view.text_is_dub +import kotlinx.android.synthetic.main.home_result_grid.view.text_is_sub +import kotlinx.android.synthetic.main.home_result_grid.view.text_quality +import kotlinx.android.synthetic.main.home_result_grid.view.title_shadow +import kotlinx.android.synthetic.main.home_result_grid.view.watchProgress object SearchResultBuilder { private val showCache: MutableMap = mutableMapOf() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt index e879f0df..1dc79dc0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt @@ -3,11 +3,10 @@ package com.lagradost.cloudstream3.ui.settings import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.AccountSingleBinding import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.utils.UIHelper.setImage @@ -15,14 +14,15 @@ class AccountClickCallback(val action: Int, val view: View, val card: AuthAPI.Lo class AccountAdapter( val cardList: List, - val layout: Int = R.layout.account_single, private val clickCallback: (AccountClickCallback) -> Unit ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false), clickCallback + AccountSingleBinding.inflate(LayoutInflater.from(parent.context), parent, false), //LayoutInflater.from(parent.context).inflate(layout, parent, false), + + clickCallback ) } @@ -43,18 +43,18 @@ class AccountAdapter( } class CardViewHolder - constructor(itemView: View, private val clickCallback: (AccountClickCallback) -> Unit) : - RecyclerView.ViewHolder(itemView) { - private val pfp: ImageView = itemView.findViewById(R.id.account_profile_picture)!! - private val accountName: TextView = itemView.findViewById(R.id.account_name)!! + constructor(val binding: AccountSingleBinding, private val clickCallback: (AccountClickCallback) -> Unit) : + RecyclerView.ViewHolder(binding.root) { + // private val pfp: ImageView = itemView.findViewById(R.id.account_profile_picture)!! + // private val accountName: TextView = itemView.findViewById(R.id.account_name)!! fun bind(card: AuthAPI.LoginInfo) { // just in case name is null account index will show, should never happened - accountName.text = card.name ?: "%s %d".format( - accountName.context.getString(R.string.account), + binding.accountName.text = card.name ?: "%s %d".format( + binding.accountName.context.getString(R.string.account), card.accountIndex ) - pfp.isVisible = pfp.setImage(card.profilePicture) + binding.accountProfilePicture.isVisible = binding.accountProfilePicture.setImage(card.profilePicture) itemView.setOnClickListener { clickCallback.invoke(AccountClickCallback(0, itemView, card)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 1ef3cb55..acf715b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -96,7 +96,7 @@ class SettingsAccount : PreferenceFragmentCompat() { } } api.accountIndex = ogIndex - val adapter = AccountAdapter(items, R.layout.account_single) { + val adapter = AccountAdapter(items) { dialog?.dismissSafe(activity) api.changeAccount(it.card.accountIndex) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 40c996cc..453f93be 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -62,7 +62,7 @@ class SettingsFragment : Fragment() { activity?.onBackPressed() } } - context.fixPaddingStatusbar(settings_toolbar) + fixPaddingStatusbar(settings_toolbar) } fun Fragment?.setUpToolbar(@StringRes title: Int) { @@ -74,7 +74,7 @@ class SettingsFragment : Fragment() { activity?.onBackPressed() } } - context.fixPaddingStatusbar(settings_toolbar) + fixPaddingStatusbar(settings_toolbar) } fun getFolderSize(dir: File): Long { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 045ed92d..75ff8305 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -18,8 +18,8 @@ import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.observe +import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings @@ -97,6 +97,7 @@ class ExtensionsFragment : Fragment() { extensionViewModel.loadRepositories() } } + DialogInterface.BUTTON_NEGATIVE -> {} } } @@ -138,29 +139,26 @@ class ExtensionsFragment : Fragment() { // } // } - observe(extensionViewModel.pluginStats) { - when (it) { - is Some.Success -> { - val value = it.value + observeNullable(extensionViewModel.pluginStats) { value -> + if (value == null) { + plugin_storage_appbar?.isVisible = false - plugin_storage_appbar?.isVisible = true - if (value.total == 0) { - plugin_download?.setLayoutWidth(1) - plugin_disabled?.setLayoutWidth(0) - plugin_not_downloaded?.setLayoutWidth(0) - } else { - plugin_download?.setLayoutWidth(value.downloaded) - plugin_disabled?.setLayoutWidth(value.disabled) - plugin_not_downloaded?.setLayoutWidth(value.notDownloaded) - } - plugin_not_downloaded_txt.setText(value.notDownloadedText) - plugin_disabled_txt.setText(value.disabledText) - plugin_download_txt.setText(value.downloadedText) - } - is Some.None -> { - plugin_storage_appbar?.isVisible = false - } + return@observeNullable } + + plugin_storage_appbar?.isVisible = true + if (value.total == 0) { + plugin_download?.setLayoutWidth(1) + plugin_disabled?.setLayoutWidth(0) + plugin_not_downloaded?.setLayoutWidth(0) + } else { + plugin_download?.setLayoutWidth(value.downloaded) + plugin_disabled?.setLayoutWidth(value.disabled) + plugin_not_downloaded?.setLayoutWidth(value.notDownloaded) + } + plugin_not_downloaded_txt.setText(value.notDownloadedText) + plugin_disabled_txt.setText(value.disabledText) + plugin_download_txt.setText(value.downloadedText) } plugin_storage_appbar?.setOnClickListener { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt index 63ed5357..866d167c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsViewModel.kt @@ -7,7 +7,6 @@ import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.amap -import com.lagradost.cloudstream3.mvvm.Some import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.PluginManager.getPluginsOnline @@ -40,8 +39,8 @@ class ExtensionsViewModel : ViewModel() { private val _repositories = MutableLiveData>() val repositories: LiveData> = _repositories - private val _pluginStats: MutableLiveData> = MutableLiveData(Some.None) - val pluginStats: LiveData> = _pluginStats + private val _pluginStats: MutableLiveData = MutableLiveData(null) + val pluginStats: LiveData = _pluginStats //TODO CACHE GET REQUESTS // DO not use viewModelScope.launchSafe, it will ANR on slow internet @@ -78,7 +77,7 @@ class ExtensionsViewModel : ViewModel() { debugAssert({ stats.downloaded + stats.notDownloaded + stats.disabled != stats.total }) { "downloaded(${stats.downloaded}) + notDownloaded(${stats.notDownloaded}) + disabled(${stats.disabled}) != total(${stats.total})" } - _pluginStats.postValue(Some.Success(stats)) + _pluginStats.postValue(stats) } private fun repos() = (getKey>(REPOSITORIES_KEY) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index d328d226..1a6215db 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -12,6 +12,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.databinding.FragmentPluginsBinding import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.bindChips import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings @@ -20,9 +21,6 @@ import com.lagradost.cloudstream3.ui.settings.appLanguages import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.fragment_plugins.* -import kotlinx.android.synthetic.main.tvtypes_chips.* -import kotlinx.android.synthetic.main.tvtypes_chips_scroll.* const val PLUGINS_BUNDLE_NAME = "name" const val PLUGINS_BUNDLE_URL = "url" @@ -33,11 +31,19 @@ class PluginsFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { - return inflater.inflate(R.layout.fragment_plugins, container, false) + ): View { + val localBinding = FragmentPluginsBinding.inflate(inflater,container,false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.fragment_plugins, container, false) + } + + override fun onDestroyView() { + binding = null + super.onDestroyView() } private val pluginViewModel: PluginsViewModel by activityViewModels() + var binding: FragmentPluginsBinding? = null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -66,8 +72,8 @@ class PluginsFragment : Fragment() { } setUpToolbar(name) - - settings_toolbar?.setOnMenuItemClickListener { menuItem -> + binding?.settingsToolbar?.apply { + setOnMenuItemClickListener { menuItem -> when (menuItem?.itemId) { R.id.download_all -> { PluginsViewModel.downloadAll(activity, url, pluginViewModel) @@ -99,67 +105,69 @@ class PluginsFragment : Fragment() { } val searchView = - settings_toolbar?.menu?.findItem(R.id.search_button)?.actionView as? SearchView + menu?.findItem(R.id.search_button)?.actionView as? SearchView // Don't go back if active query - settings_toolbar?.setNavigationOnClickListener { + setNavigationOnClickListener { if (searchView?.isIconified == false) { searchView.isIconified = true } else { activity?.onBackPressed() } } + searchView?.setOnQueryTextFocusChangeListener { _, hasFocus -> + if (!hasFocus) pluginViewModel.search(null) + } + searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + pluginViewModel.search(query) + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + pluginViewModel.search(newText) + return true + } + }) + } // searchView?.onActionViewCollapsed = { // pluginViewModel.search(null) // } // Because onActionViewCollapsed doesn't wanna work we need this workaround :( - searchView?.setOnQueryTextFocusChangeListener { _, hasFocus -> - if (!hasFocus) pluginViewModel.search(null) - } - - searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String?): Boolean { - pluginViewModel.search(query) - return true - } - - override fun onQueryTextChange(newText: String?): Boolean { - pluginViewModel.search(newText) - return true - } - }) - plugin_recycler_view?.adapter = + + binding?.pluginRecyclerView?.adapter = PluginAdapter { pluginViewModel.handlePluginAction(activity, url, it, isLocal) } if (isTvSettings()) { // Scrolling down does not reveal the whole RecyclerView on TV, add to bypass that. - plugin_recycler_view?.setPadding(0, 0, 0, 200.toPx) + binding?.pluginRecyclerView?.setPadding(0, 0, 0, 200.toPx) } observe(pluginViewModel.filteredPlugins) { (scrollToTop, list) -> - (plugin_recycler_view?.adapter as? PluginAdapter)?.updateList(list) + (binding?.pluginRecyclerView?.adapter as? PluginAdapter)?.updateList(list) if (scrollToTop) - plugin_recycler_view?.scrollToPosition(0) + binding?.pluginRecyclerView?.scrollToPosition(0) } if (isLocal) { // No download button and no categories on local - settings_toolbar?.menu?.findItem(R.id.download_all)?.isVisible = false - settings_toolbar?.menu?.findItem(R.id.lang_filter)?.isVisible = false + binding?.settingsToolbar?.menu?.findItem(R.id.download_all)?.isVisible = false + binding?.settingsToolbar?.menu?.findItem(R.id.lang_filter)?.isVisible = false pluginViewModel.updatePluginListLocal() - tv_types_scroll_view?.isVisible = false + + binding?.tvtypesChipsScroll?.root?.isVisible = false } else { pluginViewModel.updatePluginList(context, url) - tv_types_scroll_view?.isVisible = true + binding?.tvtypesChipsScroll?.root?.isVisible = true - bindChips(home_select_group, emptyList(), TvType.values().toList()) { list -> + bindChips(binding?.tvtypesChipsScroll?.tvtypesChips, emptyList(), TvType.values().toList()) { list -> pluginViewModel.tvTypes.clear() pluginViewModel.tvTypes.addAll(list.map { it.name }) pluginViewModel.updateFilteredPlugins() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt index b7d2fff6..138a31a3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt @@ -8,21 +8,16 @@ import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.APIHolder.apis -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings -import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentSetupExtensionsBinding +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.ui.settings.extensions.PluginsViewModel import com.lagradost.cloudstream3.ui.settings.extensions.RepoAdapter import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import kotlinx.android.synthetic.main.fragment_extensions.blank_repo_screen -import kotlinx.android.synthetic.main.fragment_extensions.repo_recycler_view -import kotlinx.android.synthetic.main.fragment_setup_media.next_btt -import kotlinx.android.synthetic.main.fragment_setup_media.prev_btt -import kotlinx.android.synthetic.main.fragment_setup_media.setup_root class SetupFragmentExtensions : Fragment() { @@ -39,13 +34,24 @@ class SetupFragmentExtensions : Fragment() { } } + var binding: FragmentSetupExtensionsBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_setup_extensions, container, false) + ): View { + val localBinding = FragmentSetupExtensionsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_setup_extensions, container, false) } + override fun onResume() { super.onResume() afterRepositoryLoadedEvent += ::setRepositories @@ -60,12 +66,12 @@ class SetupFragmentExtensions : Fragment() { main { val repositories = RepositoryManager.getRepositories() + PREBUILT_REPOSITORIES val hasRepos = repositories.isNotEmpty() - repo_recycler_view?.isVisible = hasRepos - blank_repo_screen?.isVisible = !hasRepos + binding?.repoRecyclerView?.isVisible = hasRepos + binding?.blankRepoScreen?.isVisible = !hasRepos // view_public_repositories_button?.isVisible = hasRepos if (hasRepos) { - repo_recycler_view?.adapter = RepoAdapter(true, {}, { + binding?.repoRecyclerView?.adapter = RepoAdapter(true, {}, { PluginsViewModel.downloadAll(activity, it.url, null) }).apply { updateList(repositories) } } @@ -80,39 +86,40 @@ class SetupFragmentExtensions : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(setup_root) + fixPaddingStatusbar(binding?.setupRoot) val isSetup = arguments?.getBoolean(SETUP_EXTENSION_BUNDLE_IS_SETUP) ?: false // view_public_repositories_button?.setOnClickListener { // openBrowser(PUBLIC_REPOSITORIES_LIST, isTvSettings(), this) // } - with(context) { - if (this == null) return + normalSafeApiCall { + // val ctx = context ?: return@normalSafeApiCall setRepositories() + binding?.apply { + if (!isSetup) { + nextBtt.setText(R.string.setup_done) + } + prevBtt.isVisible = isSetup - if (!isSetup) { - next_btt.setText(R.string.setup_done) - } - prev_btt?.isVisible = isSetup + nextBtt.setOnClickListener { + // Continue setup + if (isSetup) + if ( + // If any available languages + apis.distinctBy { it.lang }.size > 1 + ) { + findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_provider_languages) + } else { + findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_media) + } + else + findNavController().navigate(R.id.navigation_home) + } - next_btt?.setOnClickListener { - // Continue setup - if (isSetup) - if ( - // If any available languages - apis.distinctBy { it.lang }.size > 1 - ) { - findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_provider_languages) - } else { - findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_media) - } - else - findNavController().navigate(R.id.navigation_home) - } - - prev_btt?.setOnClickListener { - findNavController().navigate(R.id.navigation_setup_language) + prevBtt.setOnClickListener { + findNavController().navigate(R.id.navigation_setup_language) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt index 80db59ee..5c473b73 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt @@ -13,40 +13,49 @@ import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentSetupLanguageBinding import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.ui.settings.appLanguages import com.lagradost.cloudstream3.ui.settings.getCurrentLocale import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import kotlinx.android.synthetic.main.fragment_setup_language.* -import kotlinx.android.synthetic.main.fragment_setup_media.listview1 -import kotlinx.android.synthetic.main.fragment_setup_media.next_btt const val HAS_DONE_SETUP_KEY = "HAS_DONE_SETUP" class SetupFragmentLanguage : Fragment() { + var binding: FragmentSetupLanguageBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_setup_language, container, false) + ): View { + val localBinding = FragmentSetupLanguageBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_setup_language, container, false) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(setup_root) // We don't want a crash for all users normalSafeApiCall { - with(context) { - if (this == null) return@normalSafeApiCall - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + fixPaddingStatusbar(binding?.setupRoot) - val arrayAdapter = - ArrayAdapter(this, R.layout.sort_bottom_single_choice) + val ctx = context ?: return@normalSafeApiCall + val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) + val arrayAdapter = + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) + + binding?.apply { // Icons may crash on some weird android versions? normalSafeApiCall { val drawable = when { @@ -54,10 +63,10 @@ class SetupFragmentLanguage : Fragment() { BuildConfig.BUILD_TYPE == "prerelease" -> R.drawable.cloud_2_gradient_beta else -> R.drawable.cloud_2_gradient } - app_icon_image?.setImageDrawable(ContextCompat.getDrawable(this, drawable)) + appIconImage.setImageDrawable(ContextCompat.getDrawable(ctx, drawable)) } - val current = getCurrentLocale(this) + val current = getCurrentLocale(ctx) val languageCodes = appLanguages.map { it.third } val languageNames = appLanguages.map { (emoji, name, iso) -> val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } @@ -66,18 +75,19 @@ class SetupFragmentLanguage : Fragment() { val index = languageCodes.indexOf(current) arrayAdapter.addAll(languageNames) - listview1?.adapter = arrayAdapter - listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE - listview1?.setItemChecked(index, true) + listview1.adapter = arrayAdapter + listview1.choiceMode = AbsListView.CHOICE_MODE_SINGLE + listview1.setItemChecked(index, true) - listview1?.setOnItemClickListener { _, _, position, _ -> + listview1.setOnItemClickListener { _, _, position, _ -> val code = languageCodes[position] CommonActivity.setLocale(activity, code) - settingsManager.edit().putString(getString(R.string.locale_key), code).apply() + settingsManager.edit().putString(getString(R.string.locale_key), code) + .apply() activity?.recreate() } - next_btt?.setOnClickListener { + nextBtt.setOnClickListener { // If no plugins go to plugins page val nextDestination = if ( PluginManager.getPluginsOnline().isEmpty() @@ -92,10 +102,11 @@ class SetupFragmentLanguage : Fragment() { ) } - skip_btt?.setOnClickListener { + skipBtt.setOnClickListener { findNavController().navigate(R.id.navigation_home) } } + } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLayout.kt index 50fb37d6..98803818 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLayout.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLayout.kt @@ -10,30 +10,39 @@ import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentSetupLayoutBinding +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import kotlinx.android.synthetic.main.fragment_setup_layout.* -import kotlinx.android.synthetic.main.fragment_setup_media.listview1 -import kotlinx.android.synthetic.main.fragment_setup_media.next_btt -import kotlinx.android.synthetic.main.fragment_setup_media.prev_btt -import kotlinx.android.synthetic.main.fragment_setup_media.setup_root import org.acra.ACRA class SetupFragmentLayout : Fragment() { + + var binding: FragmentSetupLayoutBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_setup_layout, container, false) + ): View { + val localBinding = FragmentSetupLayoutBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_setup_layout, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(setup_root) + fixPaddingStatusbar(binding?.setupRoot) - with(context) { - if (this == null) return - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + normalSafeApiCall { + val ctx = context ?: return@normalSafeApiCall + + val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) val prefNames = resources.getStringArray(R.array.app_layout) val prefValues = resources.getIntArray(R.array.app_layout_values) @@ -42,48 +51,48 @@ class SetupFragmentLayout : Fragment() { settingsManager.getInt(getString(R.string.app_layout_key), -1) val arrayAdapter = - ArrayAdapter(this, R.layout.sort_bottom_single_choice) + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) arrayAdapter.addAll(prefNames.toList()) - listview1?.adapter = arrayAdapter - listview1?.choiceMode = AbsListView.CHOICE_MODE_SINGLE - listview1?.setItemChecked( - prefValues.indexOf(currentLayout), true - ) - - listview1?.setOnItemClickListener { _, _, position, _ -> - settingsManager.edit() - .putInt(getString(R.string.app_layout_key), prefValues[position]) - .apply() - activity?.recreate() - } - - acra_switch?.setOnCheckedChangeListener { _, enableCrashReporting -> - // Use same pref as in settings - settingsManager.edit().putBoolean(ACRA.PREF_DISABLE_ACRA, !enableCrashReporting) - .apply() - val text = - if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on - crash_reporting_text?.text = getText(text) - } - - val enableCrashReporting = !settingsManager.getBoolean(ACRA.PREF_DISABLE_ACRA, true) - acra_switch.isChecked = enableCrashReporting - crash_reporting_text.text = - getText( - if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on + binding?.apply { + listview1.adapter = arrayAdapter + listview1.choiceMode = AbsListView.CHOICE_MODE_SINGLE + listview1.setItemChecked( + prefValues.indexOf(currentLayout), true ) + listview1.setOnItemClickListener { _, _, position, _ -> + settingsManager.edit() + .putInt(getString(R.string.app_layout_key), prefValues[position]) + .apply() + activity?.recreate() + } + acraSwitch.setOnCheckedChangeListener { _, enableCrashReporting -> + // Use same pref as in settings + settingsManager.edit().putBoolean(ACRA.PREF_DISABLE_ACRA, !enableCrashReporting) + .apply() + val text = + if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on + crashReportingText.text = getText(text) + } - next_btt?.setOnClickListener { - findNavController().navigate(R.id.navigation_home) - } + val enableCrashReporting = !settingsManager.getBoolean(ACRA.PREF_DISABLE_ACRA, true) - prev_btt?.setOnClickListener { - findNavController().popBackStack() + acraSwitch.isChecked = enableCrashReporting + crashReportingText.text = + getText( + if (enableCrashReporting) R.string.bug_report_settings_off else R.string.bug_report_settings_on + ) + + + nextBtt.setOnClickListener { + findNavController().navigate(R.id.navigation_home) + } + + prevBtt.setOnClickListener { + findNavController().popBackStack() + } } } } - - } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt index 257ce5c1..6916cafe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt @@ -10,72 +10,85 @@ import androidx.core.util.forEach import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.utils.DataStore.removeKey -import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API +import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import kotlinx.android.synthetic.main.fragment_setup_media.* +import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API class SetupFragmentMedia : Fragment() { + var binding: FragmentSetupMediaBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_setup_media, container, false) + ): View { + val localBinding = FragmentSetupMediaBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_setup_media, container, false) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(setup_root) + normalSafeApiCall { + fixPaddingStatusbar(binding?.setupRoot) - with(context) { - if (this == null) return - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + val ctx = context ?: return@normalSafeApiCall + val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) val arrayAdapter = - ArrayAdapter(this, R.layout.sort_bottom_single_choice) + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) val names = enumValues().sorted().map { it.name } val selected = mutableListOf() arrayAdapter.addAll(names) - listview1?.let { - it.adapter = arrayAdapter - it.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE + binding?.apply { + listview1.let { + it.adapter = arrayAdapter + it.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE - it.setOnItemClickListener { _, _, _, _ -> - it.checkedItemPositions?.forEach { key, value -> - if (value) { - selected.add(key) - } else { - selected.remove(key) + it.setOnItemClickListener { _, _, _, _ -> + it.checkedItemPositions?.forEach { key, value -> + if (value) { + selected.add(key) + } else { + selected.remove(key) + } } + val prefValues = selected.mapNotNull { pos -> + val item = + it.getItemAtPosition(pos)?.toString() ?: return@mapNotNull null + val itemVal = TvType.valueOf(item) + itemVal.ordinal.toString() + }.toSet() + settingsManager.edit() + .putStringSet(getString(R.string.prefer_media_type_key), prefValues) + .apply() + + // Regenerate set homepage + removeKey(USER_SELECTED_HOMEPAGE_API) } - val prefValues = selected.mapNotNull { pos -> - val item = it.getItemAtPosition(pos)?.toString() ?: return@mapNotNull null - val itemVal = TvType.valueOf(item) - itemVal.ordinal.toString() - }.toSet() - settingsManager.edit() - .putStringSet(getString(R.string.prefer_media_type_key), prefValues) - .apply() - - // Regenerate set homepage - removeKey(USER_SELECTED_HOMEPAGE_API) } - } - next_btt?.setOnClickListener { - findNavController().navigate(R.id.navigation_setup_media_to_navigation_setup_layout) - } + nextBtt.setOnClickListener { + findNavController().navigate(R.id.navigation_setup_media_to_navigation_setup_layout) + } - prev_btt?.setOnClickListener { - findNavController().popBackStack() + prevBtt.setOnClickListener { + findNavController().popBackStack() + } } } } - - } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt index 51abee90..8637fc99 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt @@ -14,31 +14,43 @@ import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentSetupProviderLanguagesBinding +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import kotlinx.android.synthetic.main.fragment_setup_media.* class SetupFragmentProviderLanguage : Fragment() { + var binding: FragmentSetupProviderLanguagesBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_setup_provider_languages, container, false) + ): View { + val localBinding = FragmentSetupProviderLanguagesBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_setup_provider_languages, container, false) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - context?.fixPaddingStatusbar(setup_root) + fixPaddingStatusbar(binding?.setupRoot) - with(context) { - if (this == null) return - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + normalSafeApiCall { + val ctx = context ?: return@normalSafeApiCall + + val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx) val arrayAdapter = - ArrayAdapter(this, R.layout.sort_bottom_single_choice) + ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) - val current = this.getApiProviderLangSettings() + val current = ctx.getApiProviderLangSettings() val langs = APIHolder.apis.map { it.lang }.toSet() .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + AllLanguagesName @@ -56,31 +68,31 @@ class SetupFragmentProviderLanguage : Fragment() { } arrayAdapter.addAll(languageNames) - - listview1?.adapter = arrayAdapter - listview1?.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE + binding?.apply { + listview1.adapter = arrayAdapter + listview1.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE currentList.forEach { listview1.setItemChecked(it, true) } - listview1?.setOnItemClickListener { _, _, _, _ -> + listview1.setOnItemClickListener { _, _, _, _ -> val currentLanguages = mutableListOf() - listview1?.checkedItemPositions?.forEach { key, value -> + listview1.checkedItemPositions?.forEach { key, value -> if (value) currentLanguages.add(langs[key]) } settingsManager.edit().putStringSet( - this.getString(R.string.provider_lang_key), + ctx.getString(R.string.provider_lang_key), currentLanguages.toSet() ).apply() } - next_btt?.setOnClickListener { + nextBtt.setOnClickListener { findNavController().navigate(R.id.navigation_setup_provider_languages_to_navigation_setup_media) } - prev_btt?.setOnClickListener { + prevBtt.setOnClickListener { findNavController().popBackStack() - } + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt index 83d134cb..40bf8417 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.ChromecastSubtitleSettingsBinding import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.Event @@ -31,7 +32,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage -import kotlinx.android.synthetic.main.subtitle_settings.* const val CHROME_SUBTITLE_KEY = "chome_subtitle_settings" @@ -137,12 +137,21 @@ class ChromecastSubtitlesFragment : Fragment() { //subtitle_text?.setStyle(fromSaveToStyle(state)) } + var binding : ChromecastSubtitleSettingsBinding? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { - return inflater.inflate(R.layout.chromecast_subtitle_settings, container, false) + ): View { + val localBinding = ChromecastSubtitleSettingsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.chromecast_subtitle_settings, container, false) + } + + override fun onDestroyView() { + binding = null + super.onDestroyView() } private lateinit var state: SaveChromeCaptionStyle @@ -159,7 +168,7 @@ class ChromecastSubtitlesFragment : Fragment() { onColorSelectedEvent += ::onColorSelected onDialogDismissedEvent += ::onDialogDismissed - context?.fixPaddingStatusbar(subs_root) + fixPaddingStatusbar(binding?.subsRoot) state = getCurrentSavedStyle() context?.updateState() @@ -190,17 +199,20 @@ class ChromecastSubtitlesFragment : Fragment() { } } - subs_text_color.setup(0) - subs_outline_color.setup(1) - subs_background_color.setup(2) + binding?.apply { + subsTextColor.setup(0) + subsOutlineColor.setup(1) + subsBackgroundColor.setup(2) + } + val dismissCallback = { if (hide) activity?.hideSystemUI() } - subs_edge_type.setFocusableInTv() - subs_edge_type.setOnClickListener { textView -> + binding?.subsEdgeType?.setFocusableInTv() + binding?.subsEdgeType?.setOnClickListener { textView -> val edgeTypes = listOf( Pair( EDGE_TYPE_NONE, @@ -237,15 +249,15 @@ class ChromecastSubtitlesFragment : Fragment() { } } - subs_edge_type.setOnLongClickListener { + binding?.subsEdgeType?.setOnLongClickListener { state.edgeType = defaultState.edgeType it.context.updateState() showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } - subs_font_size.setFocusableInTv() - subs_font_size.setOnClickListener { textView -> + binding?.subsFontSize?.setFocusableInTv() + binding?.subsFontSize?.setOnClickListener { textView -> val fontSizes = listOf( Pair(0.75f, "75%"), Pair(0.80f, "80%"), @@ -278,24 +290,26 @@ class ChromecastSubtitlesFragment : Fragment() { } } - subs_font_size.setOnLongClickListener { _ -> + binding?.subsFontSize?.setOnLongClickListener { _ -> state.fontScale = defaultState.fontScale //textView.context.updateState() // font size not changed showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } - subs_font.setFocusableInTv() - subs_font.setOnClickListener { textView -> + + + binding?.subsFont?.setFocusableInTv() + binding?.subsFont?.setOnClickListener { textView -> val fontTypes = listOf( - Pair(null, textView.context.getString(R.string.normal)), - Pair("Droid Sans", "Droid Sans"), - Pair("Droid Sans Mono", "Droid Sans Mono"), - Pair("Droid Serif Regular", "Droid Serif Regular"), - Pair("Cutive Mono", "Cutive Mono"), - Pair("Short Stack", "Short Stack"), - Pair("Quintessential", "Quintessential"), - Pair("Alegreya Sans SC", "Alegreya Sans SC"), + null to textView.context.getString(R.string.normal), + "Droid Sans" to "Droid Sans", + "Droid Sans Mono" to "Droid Sans Mono", + "Droid Serif Regular" to "Droid Serif Regular", + "Cutive Mono" to "Cutive Mono", + "Short Stack" to "Short Stack", + "Quintessential" to "Quintessential", + "Alegreya Sans SC" to "Alegreya Sans SC", ) //showBottomDialog @@ -310,35 +324,35 @@ class ChromecastSubtitlesFragment : Fragment() { textView.context.updateState() } } - - subs_font.setOnLongClickListener { textView -> + binding?.subsFont?.setOnLongClickListener { textView -> state.fontFamily = defaultState.fontFamily textView.context.updateState() showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } - cancel_btt.setOnClickListener { + binding?.cancelBtt?.setOnClickListener { activity?.popCurrentPage() } - apply_btt.setOnClickListener { + binding?.applyBtt?.setOnClickListener { it.context.saveStyle(state) applyStyleEvent.invoke(state) //it.context.fromSaveToStyle(state) activity?.popCurrentPage() } - - subtitle_text.setCues( - listOf( - Cue.Builder() - .setTextSize( - getPixels(TypedValue.COMPLEX_UNIT_SP, 25.0f).toFloat(), - Cue.TEXT_SIZE_TYPE_ABSOLUTE - ) - .setText(subtitle_text.context.getString(R.string.subtitles_example_text)) - .build() + binding?.subtitleText?.apply { + setCues( + listOf( + Cue.Builder() + .setTextSize( + getPixels(TypedValue.COMPLEX_UNIT_SP, 25.0f).toFloat(), + Cue.TEXT_SIZE_TYPE_ABSOLUTE + ) + .setText(context.getString(R.string.subtitles_example_text)) + .build() + ) ) - ) + } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index ff0e0e82..8db205ef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -238,7 +238,7 @@ class SubtitlesFragment : Fragment() { context?.getExternalFilesDir(null)?.absolutePath.toString() + "/Fonts" ) - context?.fixPaddingStatusbar(subs_root) + fixPaddingStatusbar(subs_root) state = getCurrentSavedStyle() context?.updateState() diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 7d798204..4ed1aee6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -397,21 +397,22 @@ object UIHelper { return result } - fun Context?.fixPaddingStatusbar(v: View?) { - if (v == null || this == null) return + fun fixPaddingStatusbar(v: View?) { + if (v == null) return + val ctx = v.context ?: return v.setPadding( v.paddingLeft, - v.paddingTop + getStatusBarHeight(), + v.paddingTop + ctx.getStatusBarHeight(), v.paddingRight, v.paddingBottom ) } - fun Context.fixPaddingStatusbarView(v: View?) { + fun fixPaddingStatusbarView(v: View?) { if (v == null) return - + val ctx = v.context ?: return val params = v.layoutParams - params.height = getStatusBarHeight() + params.height = ctx.getStatusBarHeight() v.layoutParams = params } diff --git a/app/src/main/res/layout/fragment_home_tv.xml b/app/src/main/res/layout/fragment_home_tv.xml index ebcd3e9f..ac7c4abd 100644 --- a/app/src/main/res/layout/fragment_home_tv.xml +++ b/app/src/main/res/layout/fragment_home_tv.xml @@ -172,4 +172,15 @@ app:icon="@drawable/ic_baseline_filter_list_24" tools:ignore="ContentDescription" tools:visibility="visible" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_plugins.xml b/app/src/main/res/layout/fragment_plugins.xml index 40a0299c..c207b2c3 100644 --- a/app/src/main/res/layout/fragment_plugins.xml +++ b/app/src/main/res/layout/fragment_plugins.xml @@ -25,7 +25,7 @@ app:titleTextColor="?attr/textColor" tools:title="Overlord" /> - + - + diff --git a/app/src/main/res/layout/fragment_search_tv.xml b/app/src/main/res/layout/fragment_search_tv.xml index 0a85a471..bb59d503 100644 --- a/app/src/main/res/layout/fragment_search_tv.xml +++ b/app/src/main/res/layout/fragment_search_tv.xml @@ -89,7 +89,7 @@ app:tint="?attr/textColor" /> - + diff --git a/app/src/main/res/layout/home_select_mainpage.xml b/app/src/main/res/layout/home_select_mainpage.xml index a4bb686c..1d2d1780 100644 --- a/app/src/main/res/layout/home_select_mainpage.xml +++ b/app/src/main/res/layout/home_select_mainpage.xml @@ -26,7 +26,7 @@ android:layout_gravity="bottom" android:layout_width="match_parent" android:layout_height="60dp"> - + - - + app:cardCornerRadius="@dimen/rounded_image_radius"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:orientation="vertical" + android:padding="10dp"> + android:id="@+id/episode_lin_holder" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + android:layout_width="126dp" + android:layout_height="72dp" + android:foreground="@drawable/outline_drawable"> + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:nextFocusRight="@id/result_episode_download" + android:scaleType="centerCrop" + tools:src="@drawable/example_poster" /> + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_gravity="center" + android:contentDescription="@string/play_episode" + android:src="@drawable/play_button" /> + android:id="@+id/episode_progress" + style="@android:style/Widget.Material.ProgressBar.Horizontal" + android:layout_width="match_parent" + android:layout_height="5dp" + android:layout_gravity="bottom" + android:layout_marginBottom="-1.5dp" + android:progressBackgroundTint="?attr/colorPrimary" + android:progressTint="?attr/colorPrimary" + tools:progress="50" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginStart="15dp" + android:layout_marginEnd="50dp" + android:orientation="vertical"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal"> + android:id="@+id/episode_filler" + style="@style/SmallBlackButton" + android:layout_gravity="start" + android:layout_marginEnd="10dp" + android:text="@string/filler" /> + android:id="@+id/episode_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:textColor="?attr/textColor" + android:textStyle="bold" + tools:text="1. Jobless" /> + android:id="@+id/episode_rating" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="?attr/grayTextColor" + tools:text="Rated: 8.8" /> + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_gravity="end" + android:layout_marginStart="-50dp"> + android:id="@+id/result_episode_progress_downloaded" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="40dp" + android:layout_height="40dp" + android:layout_gravity="end|center_vertical" + android:layout_margin="5dp" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:background="@drawable/circle_shape" + android:indeterminate="false" + android:max="100" + android:progress="0" + android:progressDrawable="@drawable/circular_progress_bar" + android:visibility="visible" /> + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:background="?selectableItemBackgroundBorderless" + android:contentDescription="@string/download" + android:nextFocusLeft="@id/episode_poster" + android:padding="10dp" + android:src="@drawable/ic_baseline_play_arrow_24" + android:visibility="visible" + app:tint="?attr/white" /> + android:id="@+id/episode_descript" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ellipsize="end" + android:maxLines="4" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:textColor="?attr/grayTextColor" + tools:text="Jon and Daenerys arrive in Winterfell and are met with skepticism. Sam learns about the fate of his family. Cersei gives Euron the reward he aims for. Theon follows his heart. Jon and Daenerys arrive in Winterfell and are met with skepticism. Sam learns about the fate of his family. Cersei gives Euron the reward he aims for. Theon follows his heart." /> \ No newline at end of file diff --git a/app/src/main/res/layout/tvtypes_chips_scroll.xml b/app/src/main/res/layout/tvtypes_chips_scroll.xml index 45b27dbc..66c7efda 100644 --- a/app/src/main/res/layout/tvtypes_chips_scroll.xml +++ b/app/src/main/res/layout/tvtypes_chips_scroll.xml @@ -6,5 +6,5 @@ android:requiresFadingEdge="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> - + \ No newline at end of file From 166a21f74eacd239be86aa1f4e60380edc571b12 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 14 Jul 2023 02:28:49 +0200 Subject: [PATCH 414/888] more views -> viewbinding --- .../lagradost/cloudstream3/MainActivity.kt | 1 + .../cloudstream3/ui/EasterEggMonke.kt | 21 +-- .../cloudstream3/ui/WebviewFragment.kt | 33 ++-- .../ui/download/DownloadChildAdapter.kt | 57 +++---- .../ui/download/DownloadHeaderAdapter.kt | 60 +++---- .../ui/home/HomeParentItemAdapter.kt | 25 --- .../ui/library/LoadingPosterAdapter.kt | 8 - .../ui/player/FullScreenPlayer.kt | 6 - .../cloudstream3/ui/player/GeneratorPlayer.kt | 2 +- .../ui/player/PlayerEpisodeAdapter.kt | 158 ------------------ .../cloudstream3/ui/search/SearchAdaptor.kt | 31 ++-- .../cloudstream3/ui/search/SearchFragment.kt | 1 + .../ui/settings/SettingsAccount.kt | 104 ++++++------ .../ui/settings/SettingsFragment.kt | 77 +++++---- .../ui/settings/SettingsGeneral.kt | 27 +-- .../ui/settings/SettingsUpdates.kt | 16 +- .../settings/extensions/ExtensionsFragment.kt | 95 ++++++----- .../ui/settings/extensions/RepoAdapter.kt | 72 ++++++-- .../ui/settings/testing/TestFragment.kt | 120 ++++++------- 19 files changed, 412 insertions(+), 502 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index d054f504..f409c10f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -743,6 +743,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) updateTv() + if (isTvSettings()) { setContentView(R.layout.activity_main_tv) } else { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt index 556ebd34..c7041776 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt @@ -16,14 +16,16 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatImageView import androidx.core.view.isVisible import com.lagradost.cloudstream3.R -import kotlinx.android.synthetic.main.activity_easter_egg_monke.* -import java.util.* +import com.lagradost.cloudstream3.databinding.ActivityEasterEggMonkeBinding class EasterEggMonke : AppCompatActivity() { + lateinit var binding : ActivityEasterEggMonkeBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_easter_egg_monke) + + binding = ActivityEasterEggMonkeBinding.inflate(layoutInflater) + setContentView(binding.root) val handler = Handler(mainLooper) lateinit var runnable: Runnable @@ -32,15 +34,14 @@ class EasterEggMonke : AppCompatActivity() { handler.postDelayed(runnable, 300) } handler.postDelayed(runnable, 1000) - } private fun shower() { - val containerW = frame.width - val containerH = frame.height - var starW: Float = monke.width.toFloat() - var starH: Float = monke.height.toFloat() + val containerW = binding.frame.width + val containerH = binding.frame.height + var starW: Float = binding.monke.width.toFloat() + var starH: Float = binding.monke.height.toFloat() val newStar = AppCompatImageView(this) val idx = (monkeys.size * Math.random()).toInt() @@ -48,7 +49,7 @@ class EasterEggMonke : AppCompatActivity() { newStar.isVisible = true newStar.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT) - frame.addView(newStar) + binding.frame.addView(newStar) newStar.scaleX = Math.random().toFloat() * 1.5f + newStar.scaleX newStar.scaleY = newStar.scaleX @@ -70,7 +71,7 @@ class EasterEggMonke : AppCompatActivity() { set.addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { - frame.removeView(newStar) + binding.frame.removeView(newStar) } }) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index 19e24f74..9ed58e2c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -12,20 +12,23 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.MainActivity -import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.USER_AGENT +import com.lagradost.cloudstream3.databinding.FragmentWebviewBinding import com.lagradost.cloudstream3.network.WebViewResolver import com.lagradost.cloudstream3.utils.AppUtils.loadRepository -import kotlinx.android.synthetic.main.fragment_webview.* + class WebviewFragment : Fragment() { + + var binding: FragmentWebviewBinding? = null + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val url = arguments?.getString(WEBVIEW_URL) ?: "".also { findNavController().popBackStack() } - web_view.webViewClient = object : WebViewClient() { + binding?.webView?.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest? @@ -40,24 +43,28 @@ class WebviewFragment : Fragment() { return super.shouldOverrideUrlLoading(view, request) } } + binding?.webView?.apply { + WebViewResolver.webViewUserAgent = settings.userAgentString - WebViewResolver.webViewUserAgent = web_view.settings.userAgentString - - web_view.addJavascriptInterface(RepoApi(activity), "RepoApi") - web_view.settings.javaScriptEnabled = true - web_view.settings.userAgentString = USER_AGENT - web_view.settings.domStorageEnabled = true + addJavascriptInterface(RepoApi(activity), "RepoApi") + settings.javaScriptEnabled = true + settings.userAgentString = USER_AGENT + settings.domStorageEnabled = true // WebView.setWebContentsDebuggingEnabled(true) - web_view.loadUrl(url) + loadUrl(url) + } + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { + val localBinding = FragmentWebviewBinding.inflate(inflater, container, false) + binding = localBinding // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_webview, container, false) + return localBinding.root//inflater.inflate(R.layout.fragment_webview, container, false) } companion object { @@ -70,7 +77,7 @@ class WebviewFragment : Fragment() { private class RepoApi(val activity: FragmentActivity?) { @JavascriptInterface - fun installRepo(repoUrl: String) { + fun installRepo(repoUrl: String) { activity?.loadRepository(repoUrl) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt index a541171b..1a3e2db3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt @@ -3,18 +3,13 @@ package com.lagradost.cloudstream3.ui.download import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.cardview.widget.CardView -import androidx.core.widget.ContentLoadingProgressBar import androidx.recyclerview.widget.RecyclerView -import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.VideoDownloadHelper -import kotlinx.android.synthetic.main.download_child_episode.view.* -import java.util.* +import java.util.Collections const val DOWNLOAD_ACTION_PLAY_FILE = 0 const val DOWNLOAD_ACTION_DELETE_FILE = 1 @@ -68,7 +63,7 @@ class DownloadChildAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return DownloadChildViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.download_child_episode, parent, false), + DownloadChildEpisodeBinding.inflate(LayoutInflater.from(parent.context), parent, false), clickCallback ) } @@ -88,17 +83,17 @@ class DownloadChildAdapter( class DownloadChildViewHolder constructor( - itemView: View, + val binding: DownloadChildEpisodeBinding, private val clickCallback: (DownloadClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(itemView), DownloadButtonViewHolder { + ) : RecyclerView.ViewHolder(binding.root), DownloadButtonViewHolder { override var downloadButton = EasyDownloadButton() - private val title: TextView = itemView.download_child_episode_text + /*private val title: TextView = itemView.download_child_episode_text private val extraInfo: TextView = itemView.download_child_episode_text_extra private val holder: CardView = itemView.download_child_episode_holder private val progressBar: ContentLoadingProgressBar = itemView.download_child_episode_progress private val progressBarDownload: ContentLoadingProgressBar = itemView.download_child_episode_progress_downloaded - private val downloadImage: ImageView = itemView.download_child_episode_download + private val downloadImage: ImageView = itemView.download_child_episode_download*/ private var localCard: VisualDownloadChildCached? = null @@ -107,29 +102,35 @@ class DownloadChildAdapter( val d = card.data val posDur = getViewPos(d.id) - if (posDur != null) { - val visualPos = posDur.fixVisual() - progressBar.max = (visualPos.duration / 1000).toInt() - progressBar.progress = (visualPos.position / 1000).toInt() - progressBar.visibility = View.VISIBLE - } else { - progressBar.visibility = View.GONE + binding.downloadChildEpisodeProgress.apply { + if (posDur != null) { + val visualPos = posDur.fixVisual() + max = (visualPos.duration / 1000).toInt() + progress = (visualPos.position / 1000).toInt() + visibility = View.VISIBLE + } else { + visibility = View.GONE + } + } + + + binding.downloadChildEpisodeText.apply { + text = context.getNameFull(d.name, d.episode, d.season) + isSelected = true // is needed for text repeating } - title.text = title.context.getNameFull(d.name, d.episode, d.season) - title.isSelected = true // is needed for text repeating downloadButton.setUpButton( card.currentBytes, card.totalBytes, - progressBarDownload, - downloadImage, - extraInfo, + binding.downloadChildEpisodeProgressDownloaded, + binding.downloadChildEpisodeDownload, + binding.downloadChildEpisodeTextExtra, card.data, clickCallback ) - holder.setOnClickListener { + binding.downloadChildEpisodeHolder.setOnClickListener { clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d)) } } @@ -141,9 +142,9 @@ class DownloadChildAdapter( downloadButton.setUpButton( card.currentBytes, card.totalBytes, - progressBarDownload, - downloadImage, - extraInfo, + binding.downloadChildEpisodeProgressDownloaded, + binding.downloadChildEpisodeDownload, + binding.downloadChildEpisodeTextExtra, card.data, clickCallback ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt index 29bb303a..1634009b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt @@ -5,16 +5,12 @@ import android.text.format.Formatter.formatShortFileSize import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.cardview.widget.CardView -import androidx.core.widget.ContentLoadingProgressBar import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.DownloadHeaderEpisodeBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.VideoDownloadHelper -import kotlinx.android.synthetic.main.download_header_episode.view.* import java.util.* data class VisualDownloadHeaderCached( @@ -66,7 +62,7 @@ class DownloadHeaderAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return DownloadHeaderViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.download_header_episode, parent, false), + DownloadHeaderEpisodeBinding.inflate(LayoutInflater.from(parent.context),parent,false), clickCallback, movieClickCallback ) @@ -87,20 +83,20 @@ class DownloadHeaderAdapter( class DownloadHeaderViewHolder constructor( - itemView: View, + val binding: DownloadHeaderEpisodeBinding, private val clickCallback: (DownloadHeaderClickEvent) -> Unit, private val movieClickCallback: (DownloadClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(itemView), DownloadButtonViewHolder { + ) : RecyclerView.ViewHolder(binding.root), DownloadButtonViewHolder { override var downloadButton = EasyDownloadButton() - private val poster: ImageView? = itemView.download_header_poster + /*private val poster: ImageView? = itemView.download_header_poster private val title: TextView = itemView.download_header_title private val extraInfo: TextView = itemView.download_header_info private val holder: CardView = itemView.episode_holder private val downloadBar: ContentLoadingProgressBar = itemView.download_header_progress_downloaded private val downloadImage: ImageView = itemView.download_header_episode_download - private val normalImage: ImageView = itemView.download_header_goto_child + private val normalImage: ImageView = itemView.download_header_goto_child*/ private var localCard: VisualDownloadHeaderCached? = null @SuppressLint("SetTextI18n") @@ -108,19 +104,24 @@ class DownloadHeaderAdapter( localCard = card val d = card.data - poster?.setImage(d.poster) - poster?.setOnClickListener { - clickCallback.invoke(DownloadHeaderClickEvent(1, d)) + binding.downloadHeaderPoster.apply { + setImage(d.poster) + setOnClickListener { + clickCallback.invoke(DownloadHeaderClickEvent(1, d)) + } } - title.text = d.name + binding.apply { + + binding.downloadHeaderTitle.text = d.name val mbString = formatShortFileSize(itemView.context, card.totalBytes) //val isMovie = d.type.isMovieType() if (card.child != null) { - downloadBar.visibility = View.VISIBLE - downloadImage.visibility = View.VISIBLE - normalImage.visibility = View.GONE + downloadHeaderProgressDownloaded.visibility = View.VISIBLE + + downloadHeaderEpisodeDownload.visibility = View.VISIBLE + binding.downloadHeaderGotoChild.visibility = View.GONE /*setUpButton( card.currentBytes, card.totalBytes, @@ -131,34 +132,35 @@ class DownloadHeaderAdapter( movieClickCallback )*/ - holder.setOnClickListener { + episodeHolder.setOnClickListener { movieClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, card.child)) } } else { - downloadBar.visibility = View.GONE - downloadImage.visibility = View.GONE - normalImage.visibility = View.VISIBLE + downloadHeaderProgressDownloaded.visibility = View.GONE + downloadHeaderEpisodeDownload.visibility = View.GONE + binding.downloadHeaderGotoChild.visibility = View.VISIBLE try { - extraInfo.text = - extraInfo.context.getString(R.string.extra_info_format).format( + downloadHeaderInfo.text = + downloadHeaderInfo.context.getString(R.string.extra_info_format).format( card.totalDownloads, - if (card.totalDownloads == 1) extraInfo.context.getString(R.string.episode) else extraInfo.context.getString( + if (card.totalDownloads == 1) downloadHeaderInfo.context.getString(R.string.episode) else downloadHeaderInfo.context.getString( R.string.episodes ), mbString ) } catch (t : Throwable) { // you probably formatted incorrectly - extraInfo.text = "Error" + downloadHeaderInfo.text = "Error" logError(t) } - holder.setOnClickListener { + episodeHolder.setOnClickListener { clickCallback.invoke(DownloadHeaderClickEvent(0, d)) } } + } } override fun reattachDownloadButton() { @@ -168,9 +170,9 @@ class DownloadHeaderAdapter( downloadButton.setUpButton( card.currentBytes, card.totalBytes, - downloadBar, - downloadImage, - extraInfo, + binding.downloadHeaderProgressDownloaded, + binding.downloadHeaderEpisodeDownload, + binding.downloadHeaderInfo, card.child, movieClickCallback ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index 58c6dbe0..7ce9e67d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -3,49 +3,24 @@ package com.lagradost.cloudstream3.ui.home import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.LinearLayout import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.core.view.isGone -import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListUpdateCallback import androidx.recyclerview.widget.RecyclerView -import androidx.transition.ChangeBounds -import androidx.transition.TransitionManager -import androidx.viewpager2.widget.ViewPager2 -import com.google.android.material.chip.Chip -import com.google.android.material.chip.ChipDrawable -import com.lagradost.cloudstream3.APIHolder.getId -import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.SearchResponse -import com.lagradost.cloudstream3.mvvm.Resource -import com.lagradost.cloudstream3.ui.WatchType -import com.lagradost.cloudstream3.ui.result.LinearListLayout -import com.lagradost.cloudstream3.ui.result.ResultViewModel2 -import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST import com.lagradost.cloudstream3.ui.result.setLinearListLayout -import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_LOAD import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchFragment.Companion.filterSearchResponse import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable -import com.lagradost.cloudstream3.utils.AppUtils.loadResult -import com.lagradost.cloudstream3.utils.DataStoreHelper -import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog -import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView import kotlinx.android.synthetic.main.activity_main_tv.* import kotlinx.android.synthetic.main.activity_main_tv.view.* import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.fragment_home.view.* import kotlinx.android.synthetic.main.fragment_home_head_tv.* import kotlinx.android.synthetic.main.fragment_home_head_tv.view.* -import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview -import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_viewpager import kotlinx.android.synthetic.main.homepage_parent.view.* class LoadClickCallback( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LoadingPosterAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LoadingPosterAdapter.kt index a637133b..160fbe2b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LoadingPosterAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LoadingPosterAdapter.kt @@ -5,15 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter -import android.widget.FrameLayout -import android.widget.LinearLayout -import android.widget.ListPopupWindow.MATCH_PARENT -import android.widget.RelativeLayout import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.loading_poster_dynamic.view.* -import kotlin.math.roundToInt -import kotlin.math.sqrt class LoadingPosterAdapter(context: Context, private val itemCount: Int) : BaseAdapter() { 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 9ff1c52d..37fb0373 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 @@ -97,12 +97,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() { protected var isShowing = false protected var isLocked = false - //private var episodes: List = listOf() - protected fun setEpisodes(ep: List) { - //hasEpisodes = ep.size > 1 // if has 2 episodes or more because you dont want to switch to your current episode - //(player_episode_list?.adapter as? PlayerEpisodeAdapter?)?.updateList(ep) - } - protected var hasEpisodes = false private set //protected val hasEpisodes diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index fd29d998..4f29468c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -163,7 +163,7 @@ class GeneratorPlayer : FullScreenPlayer() { currentSelectedLink = link currentMeta = viewModel.getMeta() nextMeta = viewModel.getNextMeta() - setEpisodes(viewModel.getAllMeta() ?: emptyList()) + // setEpisodes(viewModel.getAllMeta() ?: emptyList()) isActive = true setPlayerDimen(null) setTitle() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt deleted file mode 100644 index cfe27a30..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerEpisodeAdapter.kt +++ /dev/null @@ -1,158 +0,0 @@ -package com.lagradost.cloudstream3.ui.player - -import android.annotation.SuppressLint -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.core.view.isGone -import androidx.core.view.isVisible -import androidx.core.widget.ContentLoadingProgressBar -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.button.MaterialButton -import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.ui.result.ResultEpisode -import com.lagradost.cloudstream3.ui.result.getDisplayPosition -import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings -import com.lagradost.cloudstream3.utils.AppUtils.html -import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.player_episodes_large.view.episode_holder_large -import kotlinx.android.synthetic.main.player_episodes_large.view.episode_progress -import kotlinx.android.synthetic.main.player_episodes_small.view.episode_holder -import kotlinx.android.synthetic.main.result_episode_large.view.* - - -data class PlayerEpisodeClickEvent(val action: Int, val data: Any) - -class PlayerEpisodeAdapter( - private val items: MutableList = mutableListOf(), - private val clickCallback: (PlayerEpisodeClickEvent) -> Unit, -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return PlayerEpisodeCardViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.player_episodes, parent, false), - clickCallback, - ) - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - println("HOLDER $holder $position") - - when (holder) { - is PlayerEpisodeCardViewHolder -> { - holder.bind(items[position]) - } - } - } - - override fun getItemCount(): Int { - return items.size - } - - fun updateList(newList: List) { - println("Updated list $newList") - val diffResult = DiffUtil.calculateDiff(EpisodeDiffCallback(this.items, newList)) - items.clear() - items.addAll(newList) - - diffResult.dispatchUpdatesTo(this) - } - - class PlayerEpisodeCardViewHolder - constructor( - itemView: View, - private val clickCallback: (PlayerEpisodeClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(itemView) { - @SuppressLint("SetTextI18n") - fun bind(card: Any) { - if (card is ResultEpisode) { - val (parentView, otherView) = if (card.poster == null) { - itemView.episode_holder to itemView.episode_holder_large - } else { - itemView.episode_holder_large to itemView.episode_holder - } - - val episodeText: TextView? = parentView.episode_text - val episodeFiller: MaterialButton? = parentView.episode_filler - val episodeRating: TextView? = parentView.episode_rating - val episodeDescript: TextView? = parentView.episode_descript - val episodeProgress: ContentLoadingProgressBar? = parentView.episode_progress - val episodePoster: ImageView? = parentView.episode_poster - - parentView.isVisible = true - otherView.isVisible = false - - - episodeText?.apply { - val name = - if (card.name == null) "${context.getString(R.string.episode)} ${card.episode}" else "${card.episode}. ${card.name}" - - text = name - isSelected = true - } - - episodeFiller?.isVisible = card.isFiller == true - - val displayPos = card.getDisplayPosition() - episodeProgress?.max = (card.duration / 1000).toInt() - episodeProgress?.progress = (displayPos / 1000).toInt() - episodeProgress?.isVisible = displayPos > 0L - episodePoster?.isVisible = episodePoster?.setImage(card.poster) == true - - if (card.rating != null) { - episodeRating?.text = episodeRating?.context?.getString(R.string.rated_format) - ?.format(card.rating.toFloat() / 10f) - } else { - episodeRating?.text = "" - } - - episodeRating?.isGone = episodeRating?.text.isNullOrBlank() - - episodeDescript?.apply { - text = card.description.html() - isGone = text.isNullOrBlank() - //setOnClickListener { - // clickCallback.invoke(PlayerEpisodeClickEvent(ACTION_SHOW_DESCRIPTION, card)) - //} - } - - parentView.setOnClickListener { - clickCallback.invoke(PlayerEpisodeClickEvent(0, card)) - } - - if (isTrueTvSettings()) { - parentView.isFocusable = true - parentView.isFocusableInTouchMode = true - parentView.touchscreenBlocksFocus = false - } - } - } - } -} - -class EpisodeDiffCallback( - private val oldList: List, - private val newList: List -) : - DiffUtil.Callback() { - override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { - val a = oldList[oldItemPosition] - val b = newList[newItemPosition] - return if (a is ResultEpisode && b is ResultEpisode) { - a.id == b.id - } else { - a == b - } - } - - override fun getOldListSize() = oldList.size - - override fun getNewListSize() = newList.size - - override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = - oldList[oldItemPosition] == newList[newItemPosition] -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt index 7fdd6e1d..233614dd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt @@ -4,16 +4,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import android.widget.ImageView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import com.lagradost.cloudstream3.R +import androidx.viewbinding.ViewBinding import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.databinding.SearchResultGridBinding +import com.lagradost.cloudstream3.databinding.SearchResultGridExpandedBinding import com.lagradost.cloudstream3.ui.AutofitRecyclerView -import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.IsBottomLayout import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.search_result_compact.view.* import kotlin.math.roundToInt /** Click */ @@ -39,10 +38,23 @@ class SearchAdapter( var hasNext: Boolean = false override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + + val layout = - if (parent.context.IsBottomLayout()) R.layout.search_result_grid_expanded else R.layout.search_result_grid + if (parent.context.IsBottomLayout()) SearchResultGridExpandedBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) else SearchResultGridBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) //R.layout.search_result_grid_expanded else R.layout.search_result_grid + + + return CardViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false), + layout, clickCallback, resView ) @@ -73,12 +85,11 @@ class SearchAdapter( class CardViewHolder constructor( - itemView: View, + val binding: ViewBinding, private val clickCallback: (SearchClickCallback) -> Unit, resView: AutofitRecyclerView ) : - RecyclerView.ViewHolder(itemView) { - private val cardView: ImageView = itemView.imageView + RecyclerView.ViewHolder(binding.root) { private val compactView = false//itemView.context.getGridIsCompact() private val coverHeight: Int = @@ -86,7 +97,7 @@ class SearchAdapter( fun bind(card: SearchResponse, position: Int) { if (!compactView) { - cardView.apply { + binding.root.apply { layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, coverHeight diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index e0f67d4a..a11dab25 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -104,6 +104,7 @@ class SearchFragment : Fragment() { val layout = if (isTvSettings()) R.layout.fragment_search_tv else R.layout.fragment_search val root = inflater.inflate(layout, container, false) + // TODO TRYCATCH binding = FragmentSearchBinding.bind(root) return root diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index acf715b3..a0166409 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -15,6 +15,9 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.AccountManagmentBinding +import com.lagradost.cloudstream3.databinding.AccountSwitchBinding +import com.lagradost.cloudstream3.databinding.AddAccountInputBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi @@ -31,9 +34,6 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.account_managment.* -import kotlinx.android.synthetic.main.account_switch.* -import kotlinx.android.synthetic.main.add_account_input.* class SettingsAccount : PreferenceFragmentCompat() { companion object { @@ -43,15 +43,18 @@ class SettingsAccount : PreferenceFragmentCompat() { api: AccountManager, info: AuthAPI.LoginInfo ) { + if (activity == null) return + val binding: AccountManagmentBinding = + AccountManagmentBinding.inflate(activity.layoutInflater, null, false) val builder = - AlertDialog.Builder(activity ?: return, R.style.AlertDialogCustom) - .setView(R.layout.account_managment) + AlertDialog.Builder(activity, R.style.AlertDialogCustom) + .setView(binding.root) val dialog = builder.show() - dialog.account_main_profile_picture_holder?.isVisible = - dialog.account_main_profile_picture?.setImage(info.profilePicture) == true + binding.accountMainProfilePictureHolder.isVisible = + binding.accountMainProfilePicture.setImage(info.profilePicture) - dialog.account_logout?.setOnClickListener { + binding.accountLogout.setOnClickListener { api.logOut() dialog.dismissSafe(activity) } @@ -60,26 +63,28 @@ class SettingsAccount : PreferenceFragmentCompat() { dialog.findViewById(R.id.account_name)?.text = it } - dialog.account_site?.text = api.name - dialog.account_switch_account?.setOnClickListener { + binding.accountSite.text = api.name + binding.accountSwitchAccount.setOnClickListener { dialog.dismissSafe(activity) showAccountSwitch(activity, api) } if (isTvSettings()) { - dialog.account_switch_account?.requestFocus() + binding.accountSwitchAccount.requestFocus() } } - fun showAccountSwitch(activity: FragmentActivity, api: AccountManager) { + private fun showAccountSwitch(activity: FragmentActivity, api: AccountManager) { val accounts = api.getAccounts() ?: return + val binding: AccountSwitchBinding = + AccountSwitchBinding.inflate(activity.layoutInflater, null, false) val builder = AlertDialog.Builder(activity, R.style.AlertDialogCustom) - .setView(R.layout.account_switch) + .setView(binding.root) val dialog = builder.show() - dialog.account_add?.setOnClickListener { + binding.accountAdd.setOnClickListener { addAccount(activity, api) dialog?.dismissSafe(activity) } @@ -111,17 +116,21 @@ class SettingsAccount : PreferenceFragmentCompat() { is OAuth2API -> { api.authenticate(activity) } + is InAppAuthAPI -> { + if (activity == null) return + val binding: AddAccountInputBinding = + AddAccountInputBinding.inflate(activity.layoutInflater, null, false) val builder = - AlertDialog.Builder(activity ?: return, R.style.AlertDialogCustom) - .setView(R.layout.add_account_input) + AlertDialog.Builder(activity, R.style.AlertDialogCustom) + .setView(binding.root) val dialog = builder.show() - val visibilityMap = mapOf( - dialog.login_email_input to api.requiresEmail, - dialog.login_password_input to api.requiresPassword, - dialog.login_server_input to api.requiresServer, - dialog.login_username_input to api.requiresUsername + val visibilityMap = listOf( + binding.loginEmailInput to api.requiresEmail, + binding.loginPasswordInput to api.requiresPassword, + binding.loginServerInput to api.requiresServer, + binding.loginUsernameInput to api.requiresUsername ) if (isTvSettings()) { @@ -145,12 +154,12 @@ class SettingsAccount : PreferenceFragmentCompat() { } } - dialog.login_email_input?.isVisible = api.requiresEmail - dialog.login_password_input?.isVisible = api.requiresPassword - dialog.login_server_input?.isVisible = api.requiresServer - dialog.login_username_input?.isVisible = api.requiresUsername - dialog.create_account?.isGone = api.createAccountUrl.isNullOrBlank() - dialog.create_account?.setOnClickListener { + binding.loginEmailInput.isVisible = api.requiresEmail + binding.loginPasswordInput.isVisible = api.requiresPassword + binding.loginServerInput.isVisible = api.requiresServer + binding.loginUsernameInput.isVisible = api.requiresUsername + binding.createAccount.isGone = api.createAccountUrl.isNullOrBlank() + binding.createAccount.setOnClickListener { openBrowser( api.createAccountUrl ?: return@setOnClickListener, activity @@ -159,43 +168,43 @@ class SettingsAccount : PreferenceFragmentCompat() { } val displayedItems = listOf( - dialog.login_username_input, - dialog.login_email_input, - dialog.login_server_input, - dialog.login_password_input + binding.loginUsernameInput, + binding.loginEmailInput, + binding.loginServerInput, + binding.loginPasswordInput ).filter { it.isVisible } displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous -> - item?.id?.let { previous?.nextFocusDownId = it } - previous?.id?.let { item?.nextFocusUpId = it } + item.id.let { previous?.nextFocusDownId = it } + previous?.id?.let { item.nextFocusUpId = it } item } displayedItems.firstOrNull()?.let { - dialog.create_account?.nextFocusDownId = it.id - it.nextFocusUpId = dialog.create_account.id + binding.createAccount.nextFocusDownId = it.id + it.nextFocusUpId = binding.createAccount.id } - dialog.apply_btt?.id?.let { + binding.applyBtt.id.let { displayedItems.lastOrNull()?.nextFocusDownId = it } - dialog.text1?.text = api.name + binding.text1.text = api.name if (api.storesPasswordInPlainText) { api.getLatestLoginData()?.let { data -> - dialog.login_email_input?.setText(data.email ?: "") - dialog.login_server_input?.setText(data.server ?: "") - dialog.login_username_input?.setText(data.username ?: "") - dialog.login_password_input?.setText(data.password ?: "") + binding.loginEmailInput.setText(data.email ?: "") + binding.loginServerInput.setText(data.server ?: "") + binding.loginUsernameInput.setText(data.username ?: "") + binding.loginPasswordInput.setText(data.password ?: "") } } - dialog.apply_btt?.setOnClickListener { + binding.applyBtt.setOnClickListener { val loginData = InAppAuthAPI.LoginData( - username = if (api.requiresUsername) dialog.login_username_input?.text?.toString() else null, - password = if (api.requiresPassword) dialog.login_password_input?.text?.toString() else null, - email = if (api.requiresEmail) dialog.login_email_input?.text?.toString() else null, - server = if (api.requiresServer) dialog.login_server_input?.text?.toString() else null, + username = if (api.requiresUsername) binding.loginUsernameInput.text?.toString() else null, + password = if (api.requiresPassword) binding.loginPasswordInput.text?.toString() else null, + email = if (api.requiresEmail) binding.loginEmailInput.text?.toString() else null, + server = if (api.requiresServer) binding.loginServerInput.text?.toString() else null, ) ioSafe { val isSuccessful = try { @@ -220,10 +229,11 @@ class SettingsAccount : PreferenceFragmentCompat() { } dialog.dismissSafe(activity) } - dialog.cancel_btt?.setOnClickListener { + binding.cancelBtt.setOnClickListener { dialog.dismissSafe(activity) } } + else -> { throw NotImplementedError("You are trying to add an account that has an unknown login method") } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 453f93be..85afc048 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -14,7 +14,9 @@ import androidx.fragment.app.Fragment import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.google.android.material.appbar.MaterialToolbar import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.MainSettingsBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers import com.lagradost.cloudstream3.ui.home.HomeFragment @@ -22,16 +24,14 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.main_settings.* -import kotlinx.android.synthetic.main.standard_toolbar.* import java.io.File class SettingsFragment : Fragment() { companion object { var beneneCount = 0 - private var isTv : Boolean = false - private var isTrueTv : Boolean = false + private var isTv: Boolean = false + private var isTrueTv: Boolean = false fun PreferenceFragmentCompat?.getPref(id: Int): Preference? { if (this == null) return null @@ -55,26 +55,30 @@ class SettingsFragment : Fragment() { fun Fragment?.setUpToolbar(title: String) { if (this == null) return - settings_toolbar?.apply { + val settingsToolbar = view?.findViewById(R.id.settings_toolbar) ?: return + + settingsToolbar.apply { setTitle(title) setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) setNavigationOnClickListener { activity?.onBackPressed() } } - fixPaddingStatusbar(settings_toolbar) + fixPaddingStatusbar(settingsToolbar) } fun Fragment?.setUpToolbar(@StringRes title: Int) { if (this == null) return - settings_toolbar?.apply { + val settingsToolbar = view?.findViewById(R.id.settings_toolbar) ?: return + + settingsToolbar.apply { setTitle(title) setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) setNavigationOnClickListener { activity?.onBackPressed() } } - fixPaddingStatusbar(settings_toolbar) + fixPaddingStatusbar(settingsToolbar) } fun getFolderSize(dir: File): Long { @@ -139,12 +143,21 @@ class SettingsFragment : Fragment() { } } + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + + var binding: MainSettingsBinding? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { - return inflater.inflate(R.layout.main_settings, container, false) + ): View { + val localBinding = MainSettingsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.main_settings, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -157,36 +170,34 @@ class SettingsFragment : Fragment() { for (syncApi in accountManagers) { val login = syncApi.loginInfo() val pic = login?.profilePicture ?: continue - if (settings_profile_pic?.setImage( + if (binding?.settingsProfilePic?.setImage( pic, errorImageDrawable = HomeFragment.errorProfilePic ) == true ) { - settings_profile_text?.text = login.name - settings_profile?.isVisible = true + binding?.settingsProfileText?.text = login.name + binding?.settingsProfile?.isVisible = true break } } - - listOf( - Pair(settings_general, R.id.action_navigation_settings_to_navigation_settings_general), - Pair(settings_player, R.id.action_navigation_settings_to_navigation_settings_player), - Pair(settings_credits, R.id.action_navigation_settings_to_navigation_settings_account), - Pair(settings_ui, R.id.action_navigation_settings_to_navigation_settings_ui), - Pair(settings_providers, R.id.action_navigation_settings_to_navigation_settings_providers), - Pair(settings_updates, R.id.action_navigation_settings_to_navigation_settings_updates), - Pair( - settings_extensions, - R.id.action_navigation_settings_to_navigation_settings_extensions - ), - ).forEach { (view, navigationId) -> - view?.apply { - setOnClickListener { - navigate(navigationId) - } - if (isTrueTv) { - isFocusable = true - isFocusableInTouchMode = true + binding?.apply { + listOf( + settingsGeneral to R.id.action_navigation_settings_to_navigation_settings_general, + settingsPlayer to R.id.action_navigation_settings_to_navigation_settings_player, + settingsCredits to R.id.action_navigation_settings_to_navigation_settings_account, + settingsUi to R.id.action_navigation_settings_to_navigation_settings_ui, + settingsProviders to R.id.action_navigation_settings_to_navigation_settings_providers, + settingsUpdates to R.id.action_navigation_settings_to_navigation_settings_updates, + settingsExtensions to R.id.action_navigation_settings_to_navigation_settings_extensions, + ).forEach { (view, navigationId) -> + view.apply { + setOnClickListener { + navigate(navigationId) + } + if (isTrueTv) { + isFocusable = true + isFocusableInTouchMode = true + } } } } 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 ee262eec..ef194b57 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 @@ -22,6 +22,8 @@ import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.databinding.AddRemoveSitesBinding +import com.lagradost.cloudstream3.databinding.AddSiteInputBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient @@ -38,8 +40,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.USER_PROVIDER_API import com.lagradost.cloudstream3.utils.VideoDownloadManager import com.lagradost.cloudstream3.utils.VideoDownloadManager.getBasePath -import kotlinx.android.synthetic.main.add_remove_sites.* -import kotlinx.android.synthetic.main.add_site_input.* import java.io.File fun getCurrentLocale(context: Context): String { @@ -197,18 +197,20 @@ class SettingsGeneral : PreferenceFragmentCompat() { {}) { selection -> val provider = providers.getOrNull(selection) ?: return@showDialog + val binding : AddSiteInputBinding = AddSiteInputBinding.inflate(layoutInflater,null,false) + val builder = AlertDialog.Builder(context ?: return@showDialog, R.style.AlertDialogCustom) - .setView(R.layout.add_site_input) + .setView(binding.root) val dialog = builder.create() dialog.show() - dialog.text2?.text = provider.name - dialog.apply_btt?.setOnClickListener { - val name = dialog.site_name_input?.text?.toString() - val url = dialog.site_url_input?.text?.toString() - val lang = dialog.site_lang_input?.text?.toString() + binding.text2.text = provider.name + binding.applyBtt.setOnClickListener { + val name = binding.siteNameInput.text?.toString() + val url = binding.siteUrlInput.text?.toString() + val lang = binding.siteLangInput.text?.toString() val realLang = if (lang.isNullOrBlank()) provider.lang else lang if (url.isNullOrBlank() || name.isNullOrBlank() || realLang.length != 2) { showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT) @@ -222,7 +224,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { dialog.dismissSafe(activity) } - dialog.cancel_btt?.setOnClickListener { + binding.cancelBtt.setOnClickListener { dialog.dismissSafe(activity) } } @@ -242,18 +244,19 @@ class SettingsGeneral : PreferenceFragmentCompat() { } fun showAddOrDelete() { + val binding : AddRemoveSitesBinding = AddRemoveSitesBinding.inflate(layoutInflater,null,false) val builder = AlertDialog.Builder(context ?: return, R.style.AlertDialogCustom) - .setView(R.layout.add_remove_sites) + .setView(binding.root) val dialog = builder.create() dialog.show() - dialog.add_site?.setOnClickListener { + binding.addSite.setOnClickListener { showAdd() dialog.dismissSafe(activity) } - dialog.remove_site?.setOnClickListener { + binding.removeSite.setOnClickListener { showDelete() dialog.dismissSafe(activity) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index f9ac3fee..4208f965 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -13,6 +13,7 @@ import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.LogcatBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom @@ -25,7 +26,6 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.VideoDownloadManager -import kotlinx.android.synthetic.main.logcat.* import okhttp3.internal.closeQuietly import java.io.BufferedReader import java.io.InputStreamReader @@ -60,7 +60,9 @@ class SettingsUpdates : PreferenceFragmentCompat() { getPref(R.string.show_logcat_key)?.setOnPreferenceClickListener { pref -> val builder = AlertDialog.Builder(pref.context, R.style.AlertDialogCustom) - .setView(R.layout.logcat) + + val binding = LogcatBinding.inflate(layoutInflater,null,false ) + builder.setView(binding.root) val dialog = builder.create() dialog.show() @@ -81,9 +83,9 @@ class SettingsUpdates : PreferenceFragmentCompat() { } val text = log.toString() - dialog.text1?.text = text + binding.text1.text = text - dialog.copy_btt?.setOnClickListener { + binding.copyBtt.setOnClickListener { // Can crash on too much text try { val serviceClipboard = @@ -96,11 +98,11 @@ class SettingsUpdates : PreferenceFragmentCompat() { showToast(activity, R.string.clipboard_too_large) } } - dialog.clear_btt?.setOnClickListener { + binding.clearBtt.setOnClickListener { Runtime.getRuntime().exec("logcat -c") dialog.dismissSafe(activity) } - dialog.save_btt?.setOnClickListener { + binding.saveBtt.setOnClickListener { var fileStream: OutputStream? = null try { fileStream = @@ -119,7 +121,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { dialog.dismissSafe(activity) } } - dialog.close_btt?.setOnClickListener { + binding.closeBtt.setOnClickListener { dialog.dismissSafe(activity) } return@setOnPreferenceClickListener true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 75ff8305..711026c6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -18,6 +18,8 @@ import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.AddRepoInputBinding +import com.lagradost.cloudstream3.databinding.FragmentExtensionsBinding import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.plugins.RepositoryManager @@ -30,16 +32,22 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.widget.LinearRecycleViewLayoutManager -import kotlinx.android.synthetic.main.add_repo_input.* -import kotlinx.android.synthetic.main.fragment_extensions.* class ExtensionsFragment : Fragment() { + var binding: FragmentExtensionsBinding? = null + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { - return inflater.inflate(R.layout.fragment_extensions, container, false) + ): View { + val localBinding = FragmentExtensionsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.fragment_extensions, container, false) } private fun View.setLayoutWidth(weight: Int) { @@ -74,7 +82,7 @@ class ExtensionsFragment : Fragment() { setUpToolbar(R.string.extensions) - repo_recycler_view?.adapter = RepoAdapter(false, { + binding?.repoRecyclerView?.adapter = RepoAdapter(false, { findNavController().navigate( R.id.navigation_settings_extensions_to_navigation_settings_plugins, PluginsFragment.newInstance( @@ -113,12 +121,12 @@ class ExtensionsFragment : Fragment() { }) observe(extensionViewModel.repositories) { - repo_recycler_view?.isVisible = it.isNotEmpty() - blank_repo_screen?.isVisible = it.isEmpty() - (repo_recycler_view?.adapter as? RepoAdapter)?.updateList(it) + binding?.repoRecyclerView?.isVisible = it.isNotEmpty() + binding?.blankRepoScreen?.isVisible = it.isEmpty() + (binding?.repoRecyclerView?.adapter as? RepoAdapter)?.updateList(it) } - repo_recycler_view?.apply { + binding?.repoRecyclerView?.apply { context?.let { ctx -> layoutManager = LinearRecycleViewLayoutManager(ctx, nextFocusUpId, nextFocusDownId) } @@ -140,28 +148,30 @@ class ExtensionsFragment : Fragment() { // } observeNullable(extensionViewModel.pluginStats) { value -> - if (value == null) { - plugin_storage_appbar?.isVisible = false + binding?.apply { + if (value == null) { + pluginStorageAppbar.isVisible = false - return@observeNullable - } + return@observeNullable + } - plugin_storage_appbar?.isVisible = true - if (value.total == 0) { - plugin_download?.setLayoutWidth(1) - plugin_disabled?.setLayoutWidth(0) - plugin_not_downloaded?.setLayoutWidth(0) - } else { - plugin_download?.setLayoutWidth(value.downloaded) - plugin_disabled?.setLayoutWidth(value.disabled) - plugin_not_downloaded?.setLayoutWidth(value.notDownloaded) + pluginStorageAppbar.isVisible = true + if (value.total == 0) { + pluginDownload.setLayoutWidth(1) + pluginDisabled.setLayoutWidth(0) + pluginNotDownloaded.setLayoutWidth(0) + } else { + pluginDownload.setLayoutWidth(value.downloaded) + pluginDisabled.setLayoutWidth(value.disabled) + pluginNotDownloaded.setLayoutWidth(value.notDownloaded) + } + pluginNotDownloadedTxt.setText(value.notDownloadedText) + pluginDisabledTxt.setText(value.disabledText) + pluginDownloadTxt.setText(value.downloadedText) } - plugin_not_downloaded_txt.setText(value.notDownloadedText) - plugin_disabled_txt.setText(value.disabledText) - plugin_download_txt.setText(value.downloadedText) } - plugin_storage_appbar?.setOnClickListener { + binding?.pluginStorageAppbar?.setOnClickListener { findNavController().navigate( R.id.navigation_settings_extensions_to_navigation_settings_plugins, PluginsFragment.newInstance( @@ -173,16 +183,18 @@ class ExtensionsFragment : Fragment() { } val addRepositoryClick = View.OnClickListener { + val ctx = context ?: return@OnClickListener + val binding = AddRepoInputBinding.inflate(LayoutInflater.from(ctx), null, false) val builder = - AlertDialog.Builder(context ?: return@OnClickListener, R.style.AlertDialogCustom) - .setView(R.layout.add_repo_input) + AlertDialog.Builder(ctx, R.style.AlertDialogCustom) + .setView(binding.root) val dialog = builder.create() dialog.show() (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager?)?.primaryClip?.getItemAt( 0 )?.text?.toString()?.let { copy -> - dialog.repo_url_input?.setText(copy) + binding.repoUrlInput.setText(copy) } // dialog.list_repositories?.setOnClickListener { @@ -192,10 +204,10 @@ class ExtensionsFragment : Fragment() { // } // dialog.text2?.text = provider.name - dialog.apply_btt?.setOnClickListener secondListener@{ - val name = dialog.repo_name_input?.text?.toString() + binding.applyBtt.setOnClickListener secondListener@{ + val name = binding.repoNameInput.text?.toString() ioSafe { - val url = dialog.repo_url_input?.text?.toString() + val url = binding.repoUrlInput.text?.toString() ?.let { it1 -> RepositoryManager.parseRepoUrl(it1) } if (url.isNullOrBlank()) { main { @@ -214,22 +226,23 @@ class ExtensionsFragment : Fragment() { } dialog.dismissSafe(activity) } - dialog.cancel_btt?.setOnClickListener { + binding.cancelBtt.setOnClickListener { dialog.dismissSafe(activity) } } val isTv = isTrueTvSettings() - add_repo_button?.isGone = isTv - add_repo_button_imageview_holder?.isVisible = isTv + binding?.apply { + addRepoButton.isGone = isTv + addRepoButtonImageviewHolder.isVisible = isTv - // Band-aid for Fire TV - plugin_storage_appbar?.isFocusableInTouchMode = isTv - add_repo_button_imageview?.isFocusableInTouchMode = isTv - - add_repo_button?.setOnClickListener(addRepositoryClick) - add_repo_button_imageview?.setOnClickListener(addRepositoryClick) + // Band-aid for Fire TV + pluginStorageAppbar.isFocusableInTouchMode = isTv + addRepoButtonImageview.isFocusableInTouchMode = isTv + addRepoButton.setOnClickListener(addRepositoryClick) + addRepoButtonImageview.setOnClickListener(addRepositoryClick) + } reloadRepositories() } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt index e90166a8..602b45e4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/RepoAdapter.kt @@ -1,14 +1,15 @@ package com.lagradost.cloudstream3.ui.settings.extensions import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.RepositoryItemBinding +import com.lagradost.cloudstream3.databinding.RepositoryItemTvBinding import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings -import kotlinx.android.synthetic.main.repository_item.view.* class RepoAdapter( val isSetup: Boolean, @@ -20,9 +21,17 @@ class RepoAdapter( private val repositories: MutableList = mutableListOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val layout = if(isTrueTvSettings()) R.layout.repository_item_tv else R.layout.repository_item + val layout = if (isTrueTvSettings()) RepositoryItemTvBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) else RepositoryItemBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) //R.layout.repository_item_tv else R.layout.repository_item return RepoViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false) + layout ) } @@ -57,30 +66,57 @@ class RepoAdapter( diffResult.dispatchUpdatesTo(this) } - inner class RepoViewHolder(itemView: View) : - RecyclerView.ViewHolder(itemView) { + inner class RepoViewHolder( + val binding: ViewBinding + ) : + RecyclerView.ViewHolder(binding.root) { fun bind( repositoryData: RepositoryData ) { val isPrebuilt = PREBUILT_REPOSITORIES.contains(repositoryData) val drawable = if (isSetup) R.drawable.netflix_download else R.drawable.ic_baseline_delete_outline_24 + when (binding) { + is RepositoryItemTvBinding -> { + binding.apply { + // Only shows icon if on setup or if it isn't a prebuilt repo. + // No delete buttons on prebuilt repos. + if (!isPrebuilt || isSetup) { + actionButton.setImageResource(drawable) + } - // Only shows icon if on setup or if it isn't a prebuilt repo. - // No delete buttons on prebuilt repos. - if (!isPrebuilt || isSetup) { - itemView.action_button?.setImageResource(drawable) - } + actionButton.setOnClickListener { + imageClickCallback(repositoryData) + } - itemView.action_button?.setOnClickListener { - imageClickCallback(repositoryData) - } + repositoryItemRoot.setOnClickListener { + clickCallback(repositoryData) + } + mainText.text = repositoryData.name + subText.text = repositoryData.url + } + } - itemView.repository_item_root?.setOnClickListener { - clickCallback(repositoryData) + is RepositoryItemBinding -> { + binding.apply { + // Only shows icon if on setup or if it isn't a prebuilt repo. + // No delete buttons on prebuilt repos. + if (!isPrebuilt || isSetup) { + actionButton.setImageResource(drawable) + } + + actionButton.setOnClickListener { + imageClickCallback(repositoryData) + } + + repositoryItemRoot.setOnClickListener { + clickCallback(repositoryData) + } + mainText.text = repositoryData.name + subText.text = repositoryData.url + } + } } - itemView.main_text?.text = repositoryData.name - itemView.sub_text?.text = repositoryData.url } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestFragment.kt index 34cd67cd..59b1b856 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestFragment.kt @@ -1,97 +1,105 @@ package com.lagradost.cloudstream3.ui.settings.testing import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentTestingBinding import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import kotlinx.android.synthetic.main.fragment_testing.* -import kotlinx.android.synthetic.main.view_test.* class TestFragment : Fragment() { private val testViewModel: TestViewModel by activityViewModels() + var binding: FragmentTestingBinding? = null + + override fun onDestroyView() { + binding = null + super.onDestroyView() + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { setUpToolbar(R.string.category_provider_test) super.onViewCreated(view, savedInstanceState) - provider_test_recycler_view?.adapter = TestResultAdapter( - mutableListOf() - ) + binding?.apply { + providerTestRecyclerView.adapter = TestResultAdapter( + mutableListOf() + ) - testViewModel.init() - if (testViewModel.isRunningTest) { - provider_test?.setState(TestView.TestState.Running) - } - - observe(testViewModel.providerProgress) { (passed, failed, total) -> - provider_test?.setProgress(passed, failed, total) - } - - observeNullable(testViewModel.providerResults) { - normalSafeApiCall { - val newItems = it.sortedBy { api -> api.first.name } - (provider_test_recycler_view?.adapter as? TestResultAdapter)?.updateList( - newItems - ) + testViewModel.init() + if (testViewModel.isRunningTest) { + providerTest.setState(TestView.TestState.Running) } - } - provider_test?.setOnPlayButtonListener { state -> - when (state) { - TestView.TestState.Stopped -> testViewModel.stopTest() - TestView.TestState.Running -> testViewModel.startTest() - TestView.TestState.None -> testViewModel.startTest() + observe(testViewModel.providerProgress) { (passed, failed, total) -> + providerTest.setProgress(passed, failed, total) } - } - if (isTrueTvSettings()) { - tests_play_pause?.isFocusableInTouchMode = true - tests_play_pause?.requestFocus() - } - - provider_test?.playPauseButton?.setOnFocusChangeListener { _, hasFocus -> - if (hasFocus) { - provider_test_appbar?.setExpanded(true, true) + observeNullable(testViewModel.providerResults) { + normalSafeApiCall { + val newItems = it.sortedBy { api -> api.first.name } + (providerTestRecyclerView.adapter as? TestResultAdapter)?.updateList( + newItems + ) + } + } + + providerTest.setOnPlayButtonListener { state -> + when (state) { + TestView.TestState.Stopped -> testViewModel.stopTest() + TestView.TestState.Running -> testViewModel.startTest() + TestView.TestState.None -> testViewModel.startTest() + } } - } - fun focusRecyclerView() { - // Hack to make it possible to focus the recyclerview. if (isTrueTvSettings()) { - provider_test_recycler_view?.requestFocus() - provider_test_appbar?.setExpanded(false, true) + providerTest.playPauseButton?.isFocusableInTouchMode = true + providerTest.playPauseButton?.requestFocus() } - } - provider_test?.setOnMainClick { - testViewModel.setFilterMethod(TestViewModel.ProviderFilter.All) - focusRecyclerView() - } - provider_test?.setOnFailedClick { - testViewModel.setFilterMethod(TestViewModel.ProviderFilter.Failed) - focusRecyclerView() - } - provider_test?.setOnPassedClick { - testViewModel.setFilterMethod(TestViewModel.ProviderFilter.Passed) - focusRecyclerView() + providerTest.playPauseButton?.setOnFocusChangeListener { _, hasFocus -> + if (hasFocus) { + providerTestAppbar.setExpanded(true, true) + } + } + + fun focusRecyclerView() { + // Hack to make it possible to focus the recyclerview. + if (isTrueTvSettings()) { + providerTestRecyclerView.requestFocus() + providerTestAppbar.setExpanded(false, true) + } + } + + providerTest.setOnMainClick { + testViewModel.setFilterMethod(TestViewModel.ProviderFilter.All) + focusRecyclerView() + } + providerTest.setOnFailedClick { + testViewModel.setFilterMethod(TestViewModel.ProviderFilter.Failed) + focusRecyclerView() + } + providerTest.setOnPassedClick { + testViewModel.setFilterMethod(TestViewModel.ProviderFilter.Passed) + focusRecyclerView() + } } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_testing, container, false) + ): View { + val localBinding = FragmentTestingBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root//inflater.inflate(R.layout.fragment_testing, container, false) } } \ No newline at end of file From c3296f3210bf5268b1f098d2a7a86e2457cec6ea Mon Sep 17 00:00:00 2001 From: Osten <11805592+LagradOst@users.noreply.github.com> Date: Fri, 14 Jul 2023 21:33:14 +0200 Subject: [PATCH 415/888] fixed bug with source priority --- .../com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index fd29d998..da0e43d3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -209,7 +209,7 @@ class GeneratorPlayer : FullScreenPlayer() { closestQuality(linkData?.quality) ) val sourcePriority = - QualityDataHelper.getSourcePriority(qualityProfile, linkData?.name) + QualityDataHelper.getSourcePriority(qualityProfile, linkData?.source) // negative because we want to sort highest quality first return qualityPriority + sourcePriority @@ -1410,4 +1410,4 @@ class GeneratorPlayer : FullScreenPlayer() { } } } -} \ No newline at end of file +} From 647e91bc4b850bcae227e28e4a638b7162d8fc7b Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 14 Jul 2023 21:43:46 +0200 Subject: [PATCH 416/888] more views + MainActivity viewbindings --- app/build.gradle.kts | 4 +- .../lagradost/cloudstream3/AcraApplication.kt | 4 +- .../lagradost/cloudstream3/MainActivity.kt | 140 +++++++++++------- .../cloudstream3/ui/home/HomeFragment.kt | 22 +-- .../ui/library/LibraryScrollTransformer.kt | 4 +- .../source_priority/SourcePriorityDialog.kt | 27 ++-- .../cloudstream3/ui/search/SearchAdaptor.kt | 14 +- .../ui/settings/extensions/PluginAdapter.kt | 82 +++++----- .../lagradost/cloudstream3/utils/UIHelper.kt | 51 ++++++- app/src/main/res/layout/activity_main_tv.xml | 16 ++ app/src/main/res/values/strings.xml | 1 + 11 files changed, 237 insertions(+), 128 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 86d91147..d5364045 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -208,7 +208,7 @@ dependencies { implementation("com.github.discord:OverlappingPanels:0.1.3") // debugImplementation because LeakCanary should only run in debug builds. - // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' + // debugImplementation("com.squareup.leakcanary:leakcanary-android:2.7") // for shimmer when loading implementation("com.facebook.shimmer:shimmer:0.5.0") @@ -228,7 +228,7 @@ dependencies { // Library/extensions searching with Levenshtein distance implementation("me.xdrop:fuzzywuzzy:1.4.0") - // color pallette for images -> colors + // color palette for images -> colors implementation("androidx.palette:palette-ktx:1.0.0") } diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 0351b1ff..76b2321f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -51,8 +51,8 @@ class CustomReportSender : ReportSender { thread { // to not run it on main thread runBlocking { suspendSafeApiCall { - val post = app.post(url, data = data) - println("Report response: $post") + app.post(url, data = data) + //println("Report response: $post") } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index f409c10f..4a7a28ad 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -32,6 +32,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.google.android.gms.cast.framework.* +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.navigationrail.NavigationRailView import com.google.android.material.snackbar.Snackbar @@ -49,6 +50,9 @@ import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale +import com.lagradost.cloudstream3.databinding.ActivityMainBinding +import com.lagradost.cloudstream3.databinding.ActivityMainTvBinding +import com.lagradost.cloudstream3.databinding.BottomResultviewPreviewBinding import com.lagradost.cloudstream3.mvvm.* import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.plugins.PluginManager @@ -74,6 +78,7 @@ import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST import com.lagradost.cloudstream3.ui.result.setImage import com.lagradost.cloudstream3.ui.result.setText +import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.search.SearchFragment import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isEmulatorSettings @@ -110,9 +115,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.requestRW import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ResponseParser -import kotlinx.android.synthetic.main.activity_main.* -import kotlinx.android.synthetic.main.bottom_resultview_preview.* -import kotlinx.android.synthetic.main.fragment_result_swipe.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import java.io.File @@ -334,8 +336,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // Use both navigation views to support both layouts. // It might be better to use the QuickSearch. - nav_view?.selectedItemId = R.id.navigation_search - nav_rail_view?.selectedItemId = R.id.navigation_search + activity?.findViewById(R.id.nav_view)?.selectedItemId = + R.id.navigation_search + activity?.findViewById(R.id.nav_rail_view)?.selectedItemId = + R.id.navigation_search } else if (safeURI(str)?.scheme == appStringPlayer) { val uri = Uri.parse(str) val name = uri.getQueryParameter("name") @@ -412,7 +416,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { this.hideKeyboard() // Fucks up anime info layout since that has its own layout - cast_mini_controller_holder?.isVisible = + binding?.castMiniControllerHolder?.isVisible = !listOf( R.id.navigation_results_phone, R.id.navigation_results_tv, @@ -448,7 +452,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { R.id.navigation_player, ).contains(destination.id) - nav_host_fragment?.apply { + binding?.navHostFragment?.apply { val params = layoutParams as ConstraintLayout.LayoutParams params.setMargins( @@ -464,21 +468,24 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { Configuration.ORIENTATION_LANDSCAPE -> { true } + Configuration.ORIENTATION_PORTRAIT -> { - false + isTvSettings() } + else -> { false } } + binding?.apply { + navView.isVisible = isNavVisible && !landscape + navRailView.isVisible = isNavVisible && landscape - nav_view?.isVisible = isNavVisible && !landscape - nav_rail_view?.isVisible = isNavVisible && landscape - - // Hide library on TV since it is not supported yet :( - val isTrueTv = isTrueTvSettings() - nav_view?.menu?.findItem(R.id.navigation_library)?.isVisible = !isTrueTv - nav_rail_view?.menu?.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + // Hide library on TV since it is not supported yet :( + val isTrueTv = isTrueTvSettings() + navView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + } } //private var mCastSession: CastSession? = null @@ -691,28 +698,37 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } private fun hidePreviewPopupDialog() { - viewModel.clear() bottomPreviewPopup.dismissSafe(this) + bottomPreviewPopup = null + bottomPreviewBinding = null } - var bottomPreviewPopup: BottomSheetDialog? = null - private fun showPreviewPopupDialog(): BottomSheetDialog { - val ret = (bottomPreviewPopup ?: run { + private var bottomPreviewPopup: BottomSheetDialog? = null + private var bottomPreviewBinding: BottomResultviewPreviewBinding? = null + private fun showPreviewPopupDialog(): BottomResultviewPreviewBinding { + val ret = (bottomPreviewBinding ?: run { val builder = BottomSheetDialog(this) - builder.setContentView(R.layout.bottom_resultview_preview) + val binding: BottomResultviewPreviewBinding = + BottomResultviewPreviewBinding.inflate(builder.layoutInflater, null, false) + bottomPreviewBinding = binding + builder.setContentView(binding.root) builder.setOnDismissListener { bottomPreviewPopup = null + bottomPreviewBinding = null viewModel.clear() } builder.setCanceledOnTouchOutside(true) builder.show() - builder + bottomPreviewPopup = builder + binding }) - bottomPreviewPopup = ret + return ret } + var binding: ActivityMainBinding? = null + override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) @@ -744,10 +760,20 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) updateTv() - if (isTvSettings()) { - setContentView(R.layout.activity_main_tv) - } else { - setContentView(R.layout.activity_main) + // just in case, MAIN SHOULD *NEVER* BOOT LOOP CRASH + binding = try { + if (isTvSettings()) { + val newLocalBinding = ActivityMainTvBinding.inflate(layoutInflater, null, false) + setContentView(newLocalBinding.root) + ActivityMainBinding.bind(newLocalBinding.root) // this may crash + } else { + val newLocalBinding = ActivityMainBinding.inflate(layoutInflater, null, false) + setContentView(newLocalBinding.root) + newLocalBinding + } + } catch (t: Throwable) { + showToast(this, txt(R.string.unable_to_inflate, t.message ?: ""), Toast.LENGTH_LONG) + null } changeStatusBarState(isEmulatorSettings()) @@ -832,41 +858,44 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { observeNullable(viewModel.page) { resource -> if (resource == null) { - bottomPreviewPopup.dismissSafe(this) + hidePreviewPopupDialog() return@observeNullable } when (resource) { is Resource.Failure -> { showToast(this, R.string.error) + viewModel.clear() hidePreviewPopupDialog() } + is Resource.Loading -> { showPreviewPopupDialog().apply { - resultview_preview_loading?.isVisible = true - resultview_preview_result?.isVisible = false - resultview_preview_loading_shimmer?.startShimmer() + resultviewPreviewLoading.isVisible = true + resultviewPreviewResult.isVisible = false + resultviewPreviewLoadingShimmer.startShimmer() } } + is Resource.Success -> { val d = resource.value showPreviewPopupDialog().apply { - resultview_preview_loading?.isVisible = false - resultview_preview_result?.isVisible = true - resultview_preview_loading_shimmer?.stopShimmer() + resultviewPreviewLoading.isVisible = false + resultviewPreviewResult.isVisible = true + resultviewPreviewLoadingShimmer.stopShimmer() - resultview_preview_title?.text = d.title + resultviewPreviewTitle.text = d.title - resultview_preview_meta_type.setText(d.typeText) - resultview_preview_meta_year.setText(d.yearText) - resultview_preview_meta_duration.setText(d.durationText) - resultview_preview_meta_rating.setText(d.ratingText) + resultviewPreviewMetaType.setText(d.typeText) + resultviewPreviewMetaYear.setText(d.yearText) + resultviewPreviewMetaDuration.setText(d.durationText) + resultviewPreviewMetaRating.setText(d.ratingText) - resultview_preview_description?.setText(d.plotText) - resultview_preview_poster?.setImage( + resultviewPreviewDescription.setText(d.plotText) + resultviewPreviewPoster.setImage( d.posterImage ?: d.posterBackgroundImage ) - resultview_preview_poster?.setOnClickListener { + resultviewPreviewPoster.setOnClickListener { //viewModel.updateWatchStatus(WatchType.PLANTOWATCH) val value = viewModel.watchStatus.value ?: WatchType.NONE @@ -882,7 +911,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } if (!isTvSettings()) // dont want this clickable on tv layout - resultview_preview_description?.setOnClickListener { view -> + resultviewPreviewDescription.setOnClickListener { view -> view.context?.let { ctx -> val builder: AlertDialog.Builder = AlertDialog.Builder(ctx, R.style.AlertDialogCustom) @@ -892,7 +921,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } - resultview_preview_more_info?.setOnClickListener { + resultviewPreviewMoreInfo.setOnClickListener { + viewModel.clear() hidePreviewPopupDialog() lastPopup?.let { loadSearchResult(it) @@ -964,22 +994,22 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { .setPopExitAnim(R.anim.nav_pop_exit) .setPopUpTo(navController.graph.startDestination, false) .build()*/ - nav_view?.setupWithNavController(navController) - val nav_rail = findViewById(R.id.nav_rail_view) - nav_rail?.setupWithNavController(navController) + binding?.navView?.setupWithNavController(navController) + val navRail = findViewById(R.id.nav_rail_view) + navRail?.setupWithNavController(navController) if (isTvSettings()) { - nav_rail?.background?.alpha = 200 + navRail?.background?.alpha = 200 } else { - nav_rail?.background?.alpha = 255 + navRail?.background?.alpha = 255 } - nav_rail?.setOnItemSelectedListener { item -> + navRail?.setOnItemSelectedListener { item -> onNavDestinationSelected( item, navController ) } - nav_view?.setOnItemSelectedListener { item -> + binding?.navView?.setOnItemSelectedListener { item -> onNavDestinationSelected( item, navController @@ -1010,16 +1040,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { }*/ val rippleColor = ColorStateList.valueOf(getResourceColor(R.attr.colorPrimary, 0.1f)) - nav_view?.itemRippleColor = rippleColor - nav_rail?.itemRippleColor = rippleColor - nav_rail?.itemActiveIndicatorColor = rippleColor - nav_view?.itemActiveIndicatorColor = rippleColor + binding?.navView?.itemRippleColor = rippleColor + navRail?.itemRippleColor = rippleColor + navRail?.itemActiveIndicatorColor = rippleColor + binding?.navView?.itemActiveIndicatorColor = rippleColor if (!checkWrite()) { requestRW() if (checkWrite()) return } - CastButtonFactory.setUpMediaRouteButton(this, media_route_button) + //CastButtonFactory.setUpMediaRouteButton(this, media_route_button) // THIS IS CURRENTLY REMOVED BECAUSE HIGHER VERS OF ANDROID NEEDS A NOTIFICATION //if (!VideoDownloadManager.isMyServiceRunning(this, VideoDownloadKeepAliveService::class.java)) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 99ce7c3b..f47432dc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -31,6 +31,7 @@ import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent import com.lagradost.cloudstream3.MainActivity.Companion.bookmarksUpdatedEvent import com.lagradost.cloudstream3.MainActivity.Companion.mainPluginsLoadedEvent @@ -45,6 +46,7 @@ import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment +import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.search.* import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings @@ -431,22 +433,20 @@ class HomeFragment : Fragment() { ): View? { //homeViewModel = // ViewModelProvider(this).get(HomeViewModel::class.java) + bottomSheetDialog?.ownShow() val layout = if (isTvSettings()) R.layout.fragment_home_tv else R.layout.fragment_home - - /* val binding = FragmentHomeTvBinding.inflate(layout, container, false) - binding.homeLoadingError - - val binding2 = FragmentHomeBinding.inflate(layout, container, false) - binding2.homeLoadingError*/ val root = inflater.inflate(layout, container, false) - binding = FragmentHomeBinding.bind(root) - //val localBinding = FragmentHomeBinding.inflate(inflater) - //binding = localBinding - return root + binding = try { + FragmentHomeBinding.bind(root) + } catch (t : Throwable) { + showToast(activity, txt(R.string.unable_to_inflate, t.message ?: ""), Toast.LENGTH_LONG) + logError(t) + null + } - //return inflater.inflate(layout, container, false) + return root } override fun onDestroyView() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryScrollTransformer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryScrollTransformer.kt index 8aafbdd6..c3cee183 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryScrollTransformer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryScrollTransformer.kt @@ -2,13 +2,13 @@ package com.lagradost.cloudstream3.ui.library import android.view.View import androidx.viewpager2.widget.ViewPager2 -import kotlinx.android.synthetic.main.library_viewpager_page.view.* +import com.lagradost.cloudstream3.R import kotlin.math.roundToInt class LibraryScrollTransformer : ViewPager2.PageTransformer { override fun transformPage(page: View, position: Float) { val padding = (-position * page.width).roundToInt() - page.page_recyclerview.setPadding( + page.findViewById(R.id.page_recyclerview).setPadding( padding, 0, -padding, 0 ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt index efc1f1b8..1b59882e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt @@ -2,24 +2,18 @@ package com.lagradost.cloudstream3.ui.player.source_priority import android.app.Dialog import android.content.Context -import android.view.View -import android.widget.EditText -import android.widget.TextView +import android.view.LayoutInflater import androidx.annotation.StyleRes import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.FragmentActivity -import androidx.recyclerview.widget.RecyclerView -import androidx.work.impl.constraints.controllers.ConstraintController import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.PlayerSelectSourcePriorityBinding import com.lagradost.cloudstream3.ui.result.txt -import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe -import kotlinx.android.synthetic.main.player_select_source_priority.* class SourcePriorityDialog( - ctx: Context, + val ctx: Context, @StyleRes themeRes: Int, val links: List, private val profile: QualityDataHelper.QualityProfile, @@ -30,13 +24,14 @@ class SourcePriorityDialog( private val updatedCallback: () -> Unit ) : Dialog(ctx, themeRes) { override fun show() { - setContentView(R.layout.player_select_source_priority) - val sourcesRecyclerView: RecyclerView = sort_sources - val qualitiesRecyclerView: RecyclerView = sort_qualities - val profileText: EditText = profile_text_editable - val saveBtt: View = save_btt - val exitBtt: View = close_btt - val helpBtt: View = help_btt + val binding = PlayerSelectSourcePriorityBinding.inflate(LayoutInflater.from(ctx), null, false) + setContentView(binding.root) + val sourcesRecyclerView = binding.sortSources + val qualitiesRecyclerView = binding.sortQualities + val profileText = binding.profileTextEditable + val saveBtt = binding.saveBtt + val exitBtt = binding.closeBtt + val helpBtt = binding.helpBtt profileText.setText(QualityDataHelper.getProfileName(profile.id).asString(context)) profileText.hint = txt(R.string.profile_number, profile.id).asString(context) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt index 233614dd..b516348d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchAdaptor.kt @@ -38,15 +38,15 @@ class SearchAdapter( var hasNext: Boolean = false override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - + val inflater = LayoutInflater.from(parent.context) val layout = if (parent.context.IsBottomLayout()) SearchResultGridExpandedBinding.inflate( - LayoutInflater.from(parent.context), + inflater, parent, false ) else SearchResultGridBinding.inflate( - LayoutInflater.from(parent.context), + inflater, parent, false ) //R.layout.search_result_grid_expanded else R.layout.search_result_grid @@ -95,9 +95,15 @@ class SearchAdapter( private val coverHeight: Int = if (compactView) 80.toPx else (resView.itemWidth / 0.68).roundToInt() + private val cardView = when(binding) { + is SearchResultGridExpandedBinding -> binding.imageView + is SearchResultGridBinding -> binding.imageView + else -> null + } + fun bind(card: SearchResponse, position: Int) { if (!compactView) { - binding.root.apply { + cardView?.apply { layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, coverHeight diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 0c3d481b..eb0082b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.ui.settings.extensions import android.text.format.Formatter.formatShortFileSize import android.util.Log import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isGone @@ -13,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.RepositoryItemBinding import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.VotingApi.getVotes import com.lagradost.cloudstream3.ui.result.setText @@ -26,10 +26,11 @@ import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.repository_item.view.* import org.junit.Assert import org.junit.Test import java.text.DecimalFormat +import kotlin.math.floor +import kotlin.math.log10 data class PluginViewData( @@ -45,8 +46,10 @@ class PluginAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val layout = if(isTrueTvSettings()) R.layout.repository_item_tv else R.layout.repository_item + val inflated = LayoutInflater.from(parent.context).inflate(layout, parent, false) + return PluginViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false) + RepositoryItemBinding.bind(inflated) // may crash ) } @@ -82,8 +85,10 @@ class PluginAdapter( // Clear glide image because setImageResource doesn't override override fun onViewRecycled(holder: RecyclerView.ViewHolder) { - holder.itemView.entry_icon?.let { pluginIcon -> - GlideApp.with(pluginIcon).clear(pluginIcon) + if (holder is PluginViewHolder) { + holder.binding.entryIcon.let { pluginIcon -> + GlideApp.with(pluginIcon).clear(pluginIcon) + } } super.onViewRecycled(holder) } @@ -112,7 +117,7 @@ class PluginAdapter( fun prettyCount(number: Number): String? { val suffix = charArrayOf(' ', 'k', 'M', 'B', 'T', 'P', 'E') val numValue = number.toLong() - val value = Math.floor(Math.log10(numValue.toDouble())).toInt() + val value = floor(log10(numValue.toDouble())).toInt() val base = value / 3 return if (value >= 3 && base < suffix.size) { DecimalFormat("#0.00").format( @@ -127,8 +132,8 @@ class PluginAdapter( } } - inner class PluginViewHolder(itemView: View) : - RecyclerView.ViewHolder(itemView) { + inner class PluginViewHolder(val binding: RepositoryItemBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind( data: PluginViewData, @@ -138,17 +143,17 @@ class PluginAdapter( val name = metadata.name.removeSuffix("Provider") val alpha = if (disabled) 0.6f else 1f val isLocal = !data.plugin.second.url.startsWith("http") - itemView.main_text?.alpha = alpha - itemView.sub_text?.alpha = alpha + binding.mainText.alpha = alpha + binding.subText.alpha = alpha val drawableInt = if (data.isDownloaded) R.drawable.ic_baseline_delete_outline_24 else R.drawable.netflix_download - itemView.nsfw_marker?.isVisible = metadata.tvTypes?.contains("NSFW") ?: false - itemView.action_button?.setImageResource(drawableInt) + binding.nsfwMarker.isVisible = metadata.tvTypes?.contains("NSFW") ?: false + binding.actionButton.setImageResource(drawableInt) - itemView.action_button?.setOnClickListener { + binding.actionButton.setOnClickListener { iconClickCallback.invoke(data.plugin) } itemView.setOnClickListener { @@ -169,10 +174,11 @@ class PluginAdapter( if (data.isDownloaded) { // On local plugins page the filepath is provided instead of url. - val plugin = PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] + val plugin = + PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] if (plugin?.openSettings != null) { - itemView.action_settings?.isVisible = true - itemView.action_settings.setOnClickListener { + binding.actionSettings.isVisible = true + binding.actionSettings.setOnClickListener { try { plugin.openSettings!!.invoke(itemView.context) } catch (e: Throwable) { @@ -185,13 +191,13 @@ class PluginAdapter( } } } else { - itemView.action_settings?.isVisible = false + binding.actionSettings.isVisible = false } } else { - itemView.action_settings?.isVisible = false + binding.actionSettings.isVisible = false } - if (itemView.entry_icon?.setImage(//itemView.entry_icon?.height ?: + if (!binding.entryIcon.setImage(//itemView.entry_icon?.height ?: metadata.iconUrl?.replace( "%size%", "$iconSize" @@ -201,41 +207,47 @@ class PluginAdapter( ), null, errorImageDrawable = R.drawable.ic_baseline_extension_24 - ) != true + ) ) { - itemView.entry_icon?.setImageResource(R.drawable.ic_baseline_extension_24) + binding.entryIcon.setImageResource(R.drawable.ic_baseline_extension_24) } - itemView.ext_version?.isVisible = true - itemView.ext_version?.text = "v${metadata.version}" + binding.extVersion.isVisible = true + binding.extVersion.text = "v${metadata.version}" if (metadata.language.isNullOrBlank()) { - itemView.lang_icon?.isVisible = false + binding.langIcon.isVisible = false } else { - itemView.lang_icon?.isVisible = true - itemView.lang_icon.text = "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" + binding.langIcon.isVisible = true + binding.langIcon.text = + "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" } - itemView.ext_votes?.isVisible = false + binding.extVotes.isVisible = false if (!isLocal) { ioSafe { metadata.getVotes().main { - itemView.ext_votes?.setText(txt(R.string.extension_rating, prettyCount(it))) - itemView.ext_votes?.isVisible = true + binding.extVotes.setText(txt(R.string.extension_rating, prettyCount(it))) + binding.extVotes.isVisible = true } } } if (metadata.fileSize != null) { - itemView.ext_filesize?.isVisible = true - itemView.ext_filesize?.text = formatShortFileSize(itemView.context, metadata.fileSize) + binding.extFilesize.isVisible = true + binding.extFilesize.text = formatShortFileSize(itemView.context, metadata.fileSize) } else { - itemView.ext_filesize?.isVisible = false + binding.extFilesize.isVisible = false } - itemView.main_text.setText(if(disabled) txt(R.string.single_plugin_disabled, name) else txt(name)) - itemView.sub_text?.isGone = metadata.description.isNullOrBlank() - itemView.sub_text?.text = metadata.description.html() + binding.mainText.setText( + if (disabled) txt( + R.string.single_plugin_disabled, + name + ) else txt(name) + ) + binding.subText.isGone = metadata.description.isNullOrBlank() + binding.subText.text = metadata.description.html() } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 4ed1aee6..3be4b190 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -181,6 +181,50 @@ object UIHelper { } } + /*inline fun bindViewBinding( + inflater: LayoutInflater?, + container: ViewGroup?, + layout: Int + ): Pair { + return try { + val localInflater = inflater ?: container?.context?.let { LayoutInflater.from(it) } + ?: return null to txt( + R.string.unable_to_inflate, + "Requires inflater OR container" + )//throw IllegalArgumentException("Requires inflater OR container")) + + //println("methods: ${T::class.java.methods.map { it.name }}") + val bind = T::class.java.methods.first { it.name == "bind" } + //val inflate = T::class.java.methods.first { it.name == "inflate" } + val root = localInflater.inflate(layout, container, false) + bind.invoke(null, root) as T to null + } catch (t: Throwable) { + logError(t) + val message = txt(R.string.unable_to_inflate, t.message ?: "Primary constructor") + // if the desired layout is not found then we inflate the casted layout + /*try { + val localInflater = inflater ?: container?.context?.let { LayoutInflater.from(it) } + ?: return null to txt( + R.string.unable_to_inflate, + "Requires inflater OR container" + )//throw IllegalArgumentException("Requires inflater OR container")) + + // we don't know what method to use as there are 2, but first *should* always be true + return try { + val inflate = T::class.java.methods.first { it.name == "inflate" } + inflate.invoke(null, localInflater, container, false) as T + } catch (_: Throwable) { + val inflate = T::class.java.methods.last { it.name == "inflate" } + inflate.invoke(null, localInflater, container, false) as T + } to message + } catch (t: Throwable) { + logError(t) + }*/ + + null to message + } + }*/ + fun ImageView?.setImage( url: String?, headers: Map? = null, @@ -190,7 +234,12 @@ object UIHelper { colorCallback: ((Palette) -> Unit)? = null ): Boolean { if (url.isNullOrBlank()) return false - this.setImage(UiImage.Image(url, headers, errorImageDrawable), errorImageDrawable, fadeIn, colorCallback) + this.setImage( + UiImage.Image(url, headers, errorImageDrawable), + errorImageDrawable, + fadeIn, + colorCallback + ) return true } diff --git a/app/src/main/res/layout/activity_main_tv.xml b/app/src/main/res/layout/activity_main_tv.xml index dc29dec9..4e50f464 100644 --- a/app/src/main/res/layout/activity_main_tv.xml +++ b/app/src/main/res/layout/activity_main_tv.xml @@ -41,6 +41,22 @@ + + Qualities Profile background + UI was unable to be created correctly, this is a MAJOR BUG and should be reported immediately %s From 273a947f8ef46c294ff14b4be0aeae1081868e92 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 14 Jul 2023 22:05:13 +0200 Subject: [PATCH 417/888] more views --- .../cloudstream3/ui/home/HomeScrollAdapter.kt | 6 +- .../player/source_priority/PriorityAdapter.kt | 25 +- .../player/source_priority/ProfilesAdapter.kt | 29 +- .../source_priority/QualityProfileDialog.kt | 129 ++-- .../extensions/PluginDetailsFragment.kt | 130 ++-- .../ui/settings/testing/TestResultAdapter.kt | 19 +- .../ui/subtitles/SubtitlesFragment.kt | 607 +++++++++--------- 7 files changed, 491 insertions(+), 454 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt index f296e53d..5902132e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt @@ -11,9 +11,9 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.fragment_home_head_tv.* -import kotlinx.android.synthetic.main.fragment_home_head_tv.view.* -import kotlinx.android.synthetic.main.home_scroll_view.view.* +import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview +import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview_tags +import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview_title class HomeScrollAdapter( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt index 8e0ce67c..fb60ccce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt @@ -1,14 +1,10 @@ package com.lagradost.cloudstream3.ui.player.source_priority import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView import androidx.recyclerview.widget.RecyclerView -import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.PlayerPrioritizeItemBinding import com.lagradost.cloudstream3.utils.AppUtils -import kotlinx.android.synthetic.main.player_prioritize_item.view.* data class SourcePriority( val data: T, @@ -20,7 +16,8 @@ class PriorityAdapter(override val items: MutableList>) : AppUtils.DiffAdapter>(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return PriorityViewHolder( - LayoutInflater.from(parent.context).inflate(R.layout.player_prioritize_item, parent, false) + PlayerPrioritizeItemBinding.inflate(LayoutInflater.from(parent.context),parent,false), + //LayoutInflater.from(parent.context).inflate(R.layout.player_prioritize_item, parent, false) ) } @@ -31,27 +28,27 @@ class PriorityAdapter(override val items: MutableList>) : } class PriorityViewHolder( - itemView: View, - ) : RecyclerView.ViewHolder(itemView) { + val binding: PlayerPrioritizeItemBinding, + ) : RecyclerView.ViewHolder(binding.root) { fun bind(item: SourcePriority) { - val plusButton: ImageView = itemView.add_button + /* val plusButton: ImageView = itemView.add_button val subtractButton: ImageView = itemView.subtract_button val priorityText: TextView = itemView.priority_text - val priorityNumber: TextView = itemView.priority_number - priorityText.text = item.name + val priorityNumber: TextView = itemView.priority_number*/ + binding.priorityText.text = item.name fun updatePriority() { - priorityNumber.text = item.priority.toString() + binding.priorityNumber.text = item.priority.toString() } updatePriority() - plusButton.setOnClickListener { + binding.addButton.setOnClickListener { // If someone clicks til the integer limit then they deserve to crash. item.priority++ updatePriority() } - subtractButton.setOnClickListener { + binding.subtractButton.setOnClickListener { item.priority-- updatePriority() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt index ff84c1f5..8153d7a1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt @@ -8,19 +8,13 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.PlayerQualityProfileItemBinding import com.lagradost.cloudstream3.ui.result.UiImage import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.player_quality_profile_item.view.card_view -import kotlinx.android.synthetic.main.player_quality_profile_item.view.outline -import kotlinx.android.synthetic.main.player_quality_profile_item.view.profile_image_background -import kotlinx.android.synthetic.main.player_quality_profile_item.view.profile_text -import kotlinx.android.synthetic.main.player_quality_profile_item.view.text_is_mobile_data -import kotlinx.android.synthetic.main.player_quality_profile_item.view.text_is_wifi class ProfilesAdapter( override val items: MutableList, @@ -34,8 +28,9 @@ class ProfilesAdapter( }) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ProfilesViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.player_quality_profile_item, parent, false) + PlayerQualityProfileItemBinding.inflate(LayoutInflater.from(parent.context),parent,false) + //LayoutInflater.from(parent.context) + // .inflate(R.layout.player_quality_profile_item, parent, false) ) } @@ -52,8 +47,8 @@ class ProfilesAdapter( } inner class ProfilesViewHolder( - itemView: View, - ) : RecyclerView.ViewHolder(itemView) { + val binding: PlayerQualityProfileItemBinding, + ) : RecyclerView.ViewHolder(binding.root) { private val art = listOf( R.drawable.profile_bg_teal, R.drawable.profile_bg_blue, @@ -65,12 +60,12 @@ class ProfilesAdapter( ) fun bind(item: QualityDataHelper.QualityProfile, index: Int) { - val priorityText: TextView = itemView.profile_text - val profileBg: ImageView = itemView.profile_image_background - val wifiText: TextView = itemView.text_is_wifi - val dataText: TextView = itemView.text_is_mobile_data - val outline: View = itemView.outline - val cardView: View = itemView.card_view + val priorityText: TextView = binding.profileText + val profileBg: ImageView = binding.profileImageBackground + val wifiText: TextView = binding.textIsWifi + val dataText: TextView = binding.textIsMobileData + val outline: View = binding.outline + val cardView: View = binding.cardView priorityText.text = item.name.asString(itemView.context) dataText.isVisible = item.type == QualityDataHelper.QualityProfileType.Data diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt index 28a6365f..e3629158 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt @@ -1,20 +1,16 @@ package com.lagradost.cloudstream3.ui.player.source_priority import android.app.Dialog -import android.view.View -import android.widget.TextView import androidx.annotation.StyleRes -import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity -import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.PlayerQualityProfileDialogBinding import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfileName import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfiles import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe -import kotlinx.android.synthetic.main.player_quality_profile_dialog.* class QualityProfileDialog( val activity: FragmentActivity, @@ -24,83 +20,86 @@ class QualityProfileDialog( private val profileSelectionCallback: (QualityDataHelper.QualityProfile) -> Unit ) : Dialog(activity, themeRes) { override fun show() { - setContentView(R.layout.player_quality_profile_dialog) - val profilesRecyclerView: RecyclerView = profiles_recyclerview + + val binding = PlayerQualityProfileDialogBinding.inflate(this.layoutInflater, null, false) + + setContentView(binding.root)//R.layout.player_quality_profile_dialog) + /*val profilesRecyclerView: RecyclerView = profiles_recyclerview val useBtt: View = use_btt val editBtt: View = edit_btt val cancelBtt: View = cancel_btt val defaultBtt: View = set_default_btt val currentProfileText: TextView = currently_selected_profile_text - val selectedItemActionsHolder: View = selected_item_holder - - fun getCurrentProfile(): QualityDataHelper.QualityProfile? { - return (profilesRecyclerView.adapter as? ProfilesAdapter)?.getCurrentProfile() - } - - fun refreshProfiles() { - currentProfileText.text = getProfileName(usedProfile).asString(context) - (profilesRecyclerView.adapter as? ProfilesAdapter)?.updateList(getProfiles()) - } - - profilesRecyclerView.adapter = ProfilesAdapter( - mutableListOf(), - usedProfile, - ) { oldIndex: Int?, newIndex: Int -> - profilesRecyclerView.adapter?.notifyItemChanged(newIndex) - selectedItemActionsHolder.alpha = 1f - if (oldIndex != null) { - profilesRecyclerView.adapter?.notifyItemChanged(oldIndex) + val selectedItemActionsHolder: View = selected_item_holder*/ + binding.apply { + fun getCurrentProfile(): QualityDataHelper.QualityProfile? { + return (profilesRecyclerview.adapter as? ProfilesAdapter)?.getCurrentProfile() } - } - refreshProfiles() - - editBtt.setOnClickListener { - getCurrentProfile()?.let { profile -> - SourcePriorityDialog(context, themeRes, links, profile) { - refreshProfiles() - }.show() + fun refreshProfiles() { + currentlySelectedProfileText.text = getProfileName(usedProfile).asString(context) + (profilesRecyclerview.adapter as? ProfilesAdapter)?.updateList(getProfiles()) + } + + profilesRecyclerview.adapter = ProfilesAdapter( + mutableListOf(), + usedProfile, + ) { oldIndex: Int?, newIndex: Int -> + profilesRecyclerview.adapter?.notifyItemChanged(newIndex) + selectedItemHolder.alpha = 1f + if (oldIndex != null) { + profilesRecyclerview.adapter?.notifyItemChanged(oldIndex) + } + } + + refreshProfiles() + + editBtt.setOnClickListener { + getCurrentProfile()?.let { profile -> + SourcePriorityDialog(context, themeRes, links, profile) { + refreshProfiles() + }.show() + } } - } - defaultBtt.setOnClickListener { - val currentProfile = getCurrentProfile() ?: return@setOnClickListener - val choices = QualityDataHelper.QualityProfileType.values() - .filter { it != QualityDataHelper.QualityProfileType.None } - val choiceNames = choices.map { txt(it.stringRes).asString(context) } + setDefaultBtt.setOnClickListener { + val currentProfile = getCurrentProfile() ?: return@setOnClickListener + val choices = QualityDataHelper.QualityProfileType.values() + .filter { it != QualityDataHelper.QualityProfileType.None } + val choiceNames = choices.map { txt(it.stringRes).asString(context) } - activity.showBottomDialog( - choiceNames, - choices.indexOf(currentProfile.type), - txt(R.string.set_default).asString(context), - false, - {}, - { index -> - val pickedChoice = choices.getOrNull(index) ?: return@showBottomDialog - // Remove previous picks - if (pickedChoice.unique) { - getProfiles().filter { it.type == pickedChoice }.forEach { - QualityDataHelper.setQualityProfileType(it.id, null) + activity.showBottomDialog( + choiceNames, + choices.indexOf(currentProfile.type), + txt(R.string.set_default).asString(context), + false, + {}, + { index -> + val pickedChoice = choices.getOrNull(index) ?: return@showBottomDialog + // Remove previous picks + if (pickedChoice.unique) { + getProfiles().filter { it.type == pickedChoice }.forEach { + QualityDataHelper.setQualityProfileType(it.id, null) + } } - } - QualityDataHelper.setQualityProfileType(currentProfile.id, pickedChoice) - refreshProfiles() - }) - } + QualityDataHelper.setQualityProfileType(currentProfile.id, pickedChoice) + refreshProfiles() + }) + } - cancelBtt.setOnClickListener { - this.dismissSafe() - } + cancelBtt.setOnClickListener { + this@QualityProfileDialog.dismissSafe() + } - useBtt.setOnClickListener { - getCurrentProfile()?.let { - profileSelectionCallback.invoke(it) - this.dismissSafe() + useBtt.setOnClickListener { + getCurrentProfile()?.let { + profileSelectionCallback.invoke(it) + this@QualityProfileDialog.dismissSafe() + } } } - super.show() } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt index 9729b4de..00e1806d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginDetailsFragment.kt @@ -2,30 +2,29 @@ package com.lagradost.cloudstream3.ui.settings.extensions import android.content.res.ColorStateList import android.os.Bundle -import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import android.text.format.Formatter.formatFileSize +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.UIHelper.setImage -import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.fragment_plugin_details.* -import android.text.format.Formatter.formatFileSize -import android.util.Log import androidx.core.view.isVisible +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.FragmentPluginDetailsBinding +import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.VotingApi +import com.lagradost.cloudstream3.plugins.VotingApi.canVote import com.lagradost.cloudstream3.plugins.VotingApi.getVoteType import com.lagradost.cloudstream3.plugins.VotingApi.getVotes import com.lagradost.cloudstream3.plugins.VotingApi.vote import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main -import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser -import com.lagradost.cloudstream3.plugins.PluginManager -import com.lagradost.cloudstream3.plugins.VotingApi.canVote import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso -import kotlinx.android.synthetic.main.repository_item.view.* +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import com.lagradost.cloudstream3.utils.UIHelper.setImage +import com.lagradost.cloudstream3.utils.UIHelper.toPx class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragment() { @@ -43,18 +42,27 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen } } + override fun onDestroyView() { + binding = null + super.onDestroyView() + } + + var binding: FragmentPluginDetailsBinding? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_plugin_details, container, false) - + ): View { + val localBinding = FragmentPluginDetailsBinding.inflate(inflater, container, false) + binding = localBinding + return localBinding.root + //return inflater.inflate(R.layout.fragment_plugin_details, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val metadata = data.plugin.second - if (plugin_icon?.setImage(//plugin_icon?.height ?: + binding?.apply { + if (!pluginIcon.setImage(//plugin_icon?.height ?: metadata.iconUrl?.replace( "%size%", "$iconSize" @@ -64,23 +72,33 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen ), null, errorImageDrawable = R.drawable.ic_baseline_extension_24 - ) != true + ) ) { - plugin_icon?.setImageResource(R.drawable.ic_baseline_extension_24) + pluginIcon.setImageResource(R.drawable.ic_baseline_extension_24) } - plugin_name?.text = metadata.name.removeSuffix("Provider") - plugin_version?.text = metadata.version.toString() - plugin_description?.text = metadata.description ?: getString(R.string.no_data) - plugin_size?.text = if (metadata.fileSize == null) getString(R.string.no_data) else formatFileSize(context, metadata.fileSize) - plugin_author?.text = if (metadata.authors.isEmpty()) getString(R.string.no_data) else metadata.authors.joinToString(", ") - plugin_status?.text = resources.getStringArray(R.array.extension_statuses)[metadata.status] - plugin_types?.text = if ((metadata.tvTypes == null) || metadata.tvTypes.isEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString(", ") - plugin_lang?.text = if (metadata.language == null) - getString(R.string.no_data) + pluginName.text = metadata.name.removeSuffix("Provider") + pluginVersion.text = metadata.version.toString() + pluginDescription.text = metadata.description ?: getString(R.string.no_data) + pluginSize.text = + if (metadata.fileSize == null) getString(R.string.no_data) else formatFileSize( + context, + metadata.fileSize + ) + pluginAuthor.text = + if (metadata.authors.isEmpty()) getString(R.string.no_data) else metadata.authors.joinToString( + ", " + ) + pluginStatus.text = resources.getStringArray(R.array.extension_statuses)[metadata.status] + pluginTypes.text = + if (metadata.tvTypes.isNullOrEmpty()) getString(R.string.no_data) else metadata.tvTypes.joinToString( + ", " + ) + pluginLang.text = if (metadata.language == null) + getString(R.string.no_data) else - "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" + "${getFlagFromIso(metadata.language)} ${fromTwoLettersToLanguage(metadata.language)}" - github_btn.setOnClickListener { + githubBtn.setOnClickListener { if (metadata.repositoryUrl != null) { openBrowser(metadata.repositoryUrl) } @@ -93,10 +111,11 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen if (data.isDownloaded) { // On local plugins page the filepath is provided instead of url. - val plugin = PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] + val plugin = + PluginManager.urlPlugins[metadata.url] ?: PluginManager.plugins[metadata.url] if (plugin?.openSettings != null && context != null) { - action_settings?.isVisible = true - action_settings.setOnClickListener { + actionSettings.isVisible = true + actionSettings.setOnClickListener { try { plugin.openSettings!!.invoke(requireContext()) } catch (e: Throwable) { @@ -109,10 +128,10 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen } } } else { - action_settings?.isVisible = false + actionSettings.isVisible = false } } else { - action_settings?.isVisible = false + actionSettings.isVisible = false } upvote.setOnClickListener { @@ -136,23 +155,40 @@ class PluginDetailsFragment(val data: PluginViewData) : BottomSheetDialogFragmen updateVoting(it) } } + } } private fun updateVoting(value: Int) { val metadata = data.plugin.second - plugin_votes.text = value.toString() - when (metadata.getVoteType()) { - VotingApi.VoteType.UPVOTE -> { - upvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.colorPrimary) ?: R.color.colorPrimary) - downvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.white) ?: R.color.white) - } - VotingApi.VoteType.DOWNVOTE -> { - downvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.colorPrimary) ?: R.color.colorPrimary) - upvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.white) ?: R.color.white) - } - VotingApi.VoteType.NONE -> { - upvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.white) ?: R.color.white) - downvote.imageTintList = ColorStateList.valueOf(context?.colorFromAttribute(R.attr.white) ?: R.color.white) + binding?.apply { + pluginVotes.text = value.toString() + when (metadata.getVoteType()) { + VotingApi.VoteType.UPVOTE -> { + upvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.colorPrimary) ?: R.color.colorPrimary + ) + downvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.white) ?: R.color.white + ) + } + + VotingApi.VoteType.DOWNVOTE -> { + downvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.colorPrimary) ?: R.color.colorPrimary + ) + upvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.white) ?: R.color.white + ) + } + + VotingApi.VoteType.NONE -> { + upvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.white) ?: R.color.white + ) + downvote.imageTintList = ColorStateList.valueOf( + context?.colorFromAttribute(R.attr.white) ?: R.color.white + ) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt index d04e2379..83480542 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt @@ -10,19 +10,20 @@ import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.ProviderTestItemBinding import com.lagradost.cloudstream3.mvvm.getAllMessages import com.lagradost.cloudstream3.mvvm.getStackTracePretty import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.TestingUtils -import kotlinx.android.synthetic.main.provider_test_item.view.* class TestResultAdapter(override val items: MutableList>) : AppUtils.DiffAdapter>(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ProviderTestViewHolder( - LayoutInflater.from(parent.context) - .inflate(R.layout.provider_test_item, parent, false), + ProviderTestItemBinding.inflate(LayoutInflater.from(parent.context), parent,false) + //LayoutInflater.from(parent.context) + // .inflate(R.layout.provider_test_item, parent, false), ) } @@ -35,12 +36,12 @@ class TestResultAdapter(override val items: MutableList - val suffix = "dp" - val elevationTypes = listOf( - Pair(0, textView.context.getString(R.string.none)), - Pair(10, "10$suffix"), - Pair(20, "20$suffix"), - Pair(30, "30$suffix"), - Pair(40, "40$suffix"), - Pair(50, "50$suffix"), - Pair(60, "60$suffix"), - Pair(70, "70$suffix"), - Pair(80, "80$suffix"), - Pair(90, "90$suffix"), - Pair(100, "100$suffix"), - ) - - //showBottomDialog - activity?.showDialog( - elevationTypes.map { it.second }, - elevationTypes.map { it.first }.indexOf(state.elevation), - (textView as TextView).text.toString(), - false, - dismissCallback - ) { index -> - state.elevation = elevationTypes.map { it.first }[index] - textView.context.updateState() + val dismissCallback = { if (hide) activity?.hideSystemUI() } - } - subs_subtitle_elevation.setOnLongClickListener { - state.elevation = DEF_SUBS_ELEVATION - it.context.updateState() - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } + subsSubtitleElevation.setFocusableInTv() + subsSubtitleElevation.setOnClickListener { textView -> + val suffix = "dp" + val elevationTypes = listOf( + Pair(0, textView.context.getString(R.string.none)), + Pair(10, "10$suffix"), + Pair(20, "20$suffix"), + Pair(30, "30$suffix"), + Pair(40, "40$suffix"), + Pair(50, "50$suffix"), + Pair(60, "60$suffix"), + Pair(70, "70$suffix"), + Pair(80, "80$suffix"), + Pair(90, "90$suffix"), + Pair(100, "100$suffix"), + ) - subs_edge_type.setFocusableInTv() - subs_edge_type.setOnClickListener { textView -> - val edgeTypes = listOf( - Pair( - CaptionStyleCompat.EDGE_TYPE_NONE, - textView.context.getString(R.string.subtitles_none) - ), - Pair( - CaptionStyleCompat.EDGE_TYPE_OUTLINE, - textView.context.getString(R.string.subtitles_outline) - ), - Pair( - CaptionStyleCompat.EDGE_TYPE_DEPRESSED, - textView.context.getString(R.string.subtitles_depressed) - ), - Pair( - CaptionStyleCompat.EDGE_TYPE_DROP_SHADOW, - textView.context.getString(R.string.subtitles_shadow) - ), - Pair( - CaptionStyleCompat.EDGE_TYPE_RAISED, - textView.context.getString(R.string.subtitles_raised) - ), - ) - - //showBottomDialog - activity?.showDialog( - edgeTypes.map { it.second }, - edgeTypes.map { it.first }.indexOf(state.edgeType), - (textView as TextView).text.toString(), - false, - dismissCallback - ) { index -> - state.edgeType = edgeTypes.map { it.first }[index] - textView.context.updateState() - } - } - - subs_edge_type.setOnLongClickListener { - state.edgeType = CaptionStyleCompat.EDGE_TYPE_OUTLINE - it.context.updateState() - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } - - subs_font_size.setFocusableInTv() - subs_font_size.setOnClickListener { textView -> - val suffix = "sp" - val fontSizes = listOf( - Pair(null, textView.context.getString(R.string.normal)), - Pair(6f, "6$suffix"), - Pair(7f, "7$suffix"), - Pair(8f, "8$suffix"), - Pair(9f, "9$suffix"), - Pair(10f, "10$suffix"), - Pair(11f, "11$suffix"), - Pair(12f, "12$suffix"), - Pair(13f, "13$suffix"), - Pair(14f, "14$suffix"), - Pair(15f, "15$suffix"), - Pair(16f, "16$suffix"), - Pair(17f, "17$suffix"), - Pair(18f, "18$suffix"), - Pair(19f, "19$suffix"), - Pair(20f, "20$suffix"), - Pair(21f, "21$suffix"), - Pair(22f, "22$suffix"), - Pair(23f, "23$suffix"), - Pair(24f, "24$suffix"), - Pair(25f, "25$suffix"), - Pair(26f, "26$suffix"), - Pair(28f, "28$suffix"), - Pair(30f, "30$suffix"), - Pair(32f, "32$suffix"), - Pair(34f, "34$suffix"), - Pair(36f, "36$suffix"), - Pair(38f, "38$suffix"), - Pair(40f, "40$suffix"), - Pair(42f, "42$suffix"), - Pair(44f, "44$suffix"), - Pair(48f, "48$suffix"), - Pair(60f, "60$suffix"), - ) - - //showBottomDialog - activity?.showDialog( - fontSizes.map { it.second }, - fontSizes.map { it.first }.indexOf(state.fixedTextSize), - (textView as TextView).text.toString(), - false, - dismissCallback - ) { index -> - state.fixedTextSize = fontSizes.map { it.first }[index] - //textView.context.updateState() // font size not changed - } - } - - subtitles_remove_bloat?.isChecked = state.removeBloat - subtitles_remove_bloat?.setOnCheckedChangeListener { _, b -> - state.removeBloat = b - } - subtitles_uppercase?.isChecked = state.upperCase - subtitles_uppercase?.setOnCheckedChangeListener { _, b -> - state.upperCase = b - context?.updateState() - } - - subtitles_remove_captions?.isChecked = state.removeCaptions - subtitles_remove_captions?.setOnCheckedChangeListener { _, b -> - state.removeCaptions = b - } - - subs_font_size.setOnLongClickListener { _ -> - state.fixedTextSize = null - //textView.context.updateState() // font size not changed - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } - - //Fetch current value from preference - context?.let { ctx -> - subtitles_filter_sub_lang?.isChecked = - PreferenceManager.getDefaultSharedPreferences(ctx) - .getBoolean(getString(R.string.filter_sub_lang_key), false) - } - - subtitles_filter_sub_lang?.setOnCheckedChangeListener { _, b -> - context?.let { ctx -> - PreferenceManager.getDefaultSharedPreferences(ctx) - .edit() - .putBoolean(getString(R.string.filter_sub_lang_key), b) - .apply() - } - } - - subs_font.setFocusableInTv() - subs_font.setOnClickListener { textView -> - val fontTypes = listOf( - Pair(null, textView.context.getString(R.string.normal)), - Pair(R.font.trebuchet_ms, "Trebuchet MS"), - Pair(R.font.netflix_sans, "Netflix Sans"), - Pair(R.font.google_sans, "Google Sans"), - Pair(R.font.open_sans, "Open Sans"), - Pair(R.font.futura, "Futura"), - Pair(R.font.consola, "Consola"), - Pair(R.font.gotham, "Gotham"), - Pair(R.font.lucida_grande, "Lucida Grande"), - Pair(R.font.stix_general, "STIX General"), - Pair(R.font.times_new_roman, "Times New Roman"), - Pair(R.font.verdana, "Verdana"), - Pair(R.font.ubuntu_regular, "Ubuntu"), - Pair(R.font.comic_sans, "Comic Sans"), - Pair(R.font.poppins_regular, "Poppins"), - ) - val savedFontTypes = textView.context.getSavedFonts() - - val currentIndex = - savedFontTypes.indexOfFirst { it.absolutePath == state.typefaceFilePath } - .let { index -> - if (index == -1) - fontTypes.indexOfFirst { it.first == state.typeface } - else index + fontTypes.size - } - - //showBottomDialog - activity?.showDialog( - fontTypes.map { it.second } + savedFontTypes.map { it.name }, - currentIndex, - (textView as TextView).text.toString(), - false, - dismissCallback - ) { index -> - if (index < fontTypes.size) { - state.typeface = fontTypes[index].first - state.typefaceFilePath = null - } else { - state.typefaceFilePath = savedFontTypes[index - fontTypes.size].absolutePath - state.typeface = null + //showBottomDialog + activity?.showDialog( + elevationTypes.map { it.second }, + elevationTypes.map { it.first }.indexOf(state.elevation), + (textView as TextView).text.toString(), + false, + dismissCallback + ) { index -> + state.elevation = elevationTypes.map { it.first }[index] + textView.context.updateState() + if (hide) + activity?.hideSystemUI() } + } + + subsSubtitleElevation.setOnLongClickListener { + state.elevation = DEF_SUBS_ELEVATION + it.context.updateState() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true + } + + subsEdgeType.setFocusableInTv() + subsEdgeType.setOnClickListener { textView -> + val edgeTypes = listOf( + Pair( + CaptionStyleCompat.EDGE_TYPE_NONE, + textView.context.getString(R.string.subtitles_none) + ), + Pair( + CaptionStyleCompat.EDGE_TYPE_OUTLINE, + textView.context.getString(R.string.subtitles_outline) + ), + Pair( + CaptionStyleCompat.EDGE_TYPE_DEPRESSED, + textView.context.getString(R.string.subtitles_depressed) + ), + Pair( + CaptionStyleCompat.EDGE_TYPE_DROP_SHADOW, + textView.context.getString(R.string.subtitles_shadow) + ), + Pair( + CaptionStyleCompat.EDGE_TYPE_RAISED, + textView.context.getString(R.string.subtitles_raised) + ), + ) + + //showBottomDialog + activity?.showDialog( + edgeTypes.map { it.second }, + edgeTypes.map { it.first }.indexOf(state.edgeType), + (textView as TextView).text.toString(), + false, + dismissCallback + ) { index -> + state.edgeType = edgeTypes.map { it.first }[index] + textView.context.updateState() + } + } + + subsEdgeType.setOnLongClickListener { + state.edgeType = CaptionStyleCompat.EDGE_TYPE_OUTLINE + it.context.updateState() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true + } + + subsFontSize.setFocusableInTv() + subsFontSize.setOnClickListener { textView -> + val suffix = "sp" + val fontSizes = listOf( + Pair(null, textView.context.getString(R.string.normal)), + Pair(6f, "6$suffix"), + Pair(7f, "7$suffix"), + Pair(8f, "8$suffix"), + Pair(9f, "9$suffix"), + Pair(10f, "10$suffix"), + Pair(11f, "11$suffix"), + Pair(12f, "12$suffix"), + Pair(13f, "13$suffix"), + Pair(14f, "14$suffix"), + Pair(15f, "15$suffix"), + Pair(16f, "16$suffix"), + Pair(17f, "17$suffix"), + Pair(18f, "18$suffix"), + Pair(19f, "19$suffix"), + Pair(20f, "20$suffix"), + Pair(21f, "21$suffix"), + Pair(22f, "22$suffix"), + Pair(23f, "23$suffix"), + Pair(24f, "24$suffix"), + Pair(25f, "25$suffix"), + Pair(26f, "26$suffix"), + Pair(28f, "28$suffix"), + Pair(30f, "30$suffix"), + Pair(32f, "32$suffix"), + Pair(34f, "34$suffix"), + Pair(36f, "36$suffix"), + Pair(38f, "38$suffix"), + Pair(40f, "40$suffix"), + Pair(42f, "42$suffix"), + Pair(44f, "44$suffix"), + Pair(48f, "48$suffix"), + Pair(60f, "60$suffix"), + ) + + //showBottomDialog + activity?.showDialog( + fontSizes.map { it.second }, + fontSizes.map { it.first }.indexOf(state.fixedTextSize), + (textView as TextView).text.toString(), + false, + dismissCallback + ) { index -> + state.fixedTextSize = fontSizes.map { it.first }[index] + //textView.context.updateState() // font size not changed + } + } + + subtitlesRemoveBloat.isChecked = state.removeBloat + subtitlesRemoveBloat.setOnCheckedChangeListener { _, b -> + state.removeBloat = b + } + subtitlesUppercase.isChecked = state.upperCase + subtitlesUppercase.setOnCheckedChangeListener { _, b -> + state.upperCase = b + context?.updateState() + } + + subtitlesRemoveCaptions.isChecked = state.removeCaptions + subtitlesRemoveCaptions.setOnCheckedChangeListener { _, b -> + state.removeCaptions = b + } + + subsFontSize.setOnLongClickListener { _ -> + state.fixedTextSize = null + //textView.context.updateState() // font size not changed + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true + } + + //Fetch current value from preference + context?.let { ctx -> + subtitlesFilterSubLang.isChecked = + PreferenceManager.getDefaultSharedPreferences(ctx) + .getBoolean(getString(R.string.filter_sub_lang_key), false) + } + + subtitlesFilterSubLang.setOnCheckedChangeListener { _, b -> + context?.let { ctx -> + PreferenceManager.getDefaultSharedPreferences(ctx) + .edit() + .putBoolean(getString(R.string.filter_sub_lang_key), b) + .apply() + } + } + + subsFont.setFocusableInTv() + subsFont.setOnClickListener { textView -> + val fontTypes = listOf( + Pair(null, textView.context.getString(R.string.normal)), + Pair(R.font.trebuchet_ms, "Trebuchet MS"), + Pair(R.font.netflix_sans, "Netflix Sans"), + Pair(R.font.google_sans, "Google Sans"), + Pair(R.font.open_sans, "Open Sans"), + Pair(R.font.futura, "Futura"), + Pair(R.font.consola, "Consola"), + Pair(R.font.gotham, "Gotham"), + Pair(R.font.lucida_grande, "Lucida Grande"), + Pair(R.font.stix_general, "STIX General"), + Pair(R.font.times_new_roman, "Times New Roman"), + Pair(R.font.verdana, "Verdana"), + Pair(R.font.ubuntu_regular, "Ubuntu"), + Pair(R.font.comic_sans, "Comic Sans"), + Pair(R.font.poppins_regular, "Poppins"), + ) + val savedFontTypes = textView.context.getSavedFonts() + + val currentIndex = + savedFontTypes.indexOfFirst { it.absolutePath == state.typefaceFilePath } + .let { index -> + if (index == -1) + fontTypes.indexOfFirst { it.first == state.typeface } + else index + fontTypes.size + } + + //showBottomDialog + activity?.showDialog( + fontTypes.map { it.second } + savedFontTypes.map { it.name }, + currentIndex, + (textView as TextView).text.toString(), + false, + dismissCallback + ) { index -> + if (index < fontTypes.size) { + state.typeface = fontTypes[index].first + state.typefaceFilePath = null + } else { + state.typefaceFilePath = savedFontTypes[index - fontTypes.size].absolutePath + state.typeface = null + } + textView.context.updateState() + } + } + + subsFont.setOnLongClickListener { textView -> + state.typeface = null + state.typefaceFilePath = null textView.context.updateState() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true } - } - subs_font.setOnLongClickListener { textView -> - state.typeface = null - state.typefaceFilePath = null - textView.context.updateState() - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } + subsAutoSelectLanguage.setFocusableInTv() + subsAutoSelectLanguage.setOnClickListener { textView -> + val langMap = arrayListOf( + SubtitleHelper.Language639( + textView.context.getString(R.string.none), + textView.context.getString(R.string.none), + "", + "", + "", + "", + "" + ), + ) + langMap.addAll(SubtitleHelper.languages) - subs_auto_select_language.setFocusableInTv() - subs_auto_select_language.setOnClickListener { textView -> - val langMap = arrayListOf( - SubtitleHelper.Language639( - textView.context.getString(R.string.none), - textView.context.getString(R.string.none), - "", - "", - "", - "", - "" - ), - ) - langMap.addAll(SubtitleHelper.languages) - - val lang639_1 = langMap.map { it.ISO_639_1 } - activity?.showDialog( - langMap.map { it.languageName }, - lang639_1.indexOf(getAutoSelectLanguageISO639_1()), - (textView as TextView).text.toString(), - true, - dismissCallback - ) { index -> - setKey(SUBTITLE_AUTO_SELECT_KEY, lang639_1[index]) + val lang639_1 = langMap.map { it.ISO_639_1 } + activity?.showDialog( + langMap.map { it.languageName }, + lang639_1.indexOf(getAutoSelectLanguageISO639_1()), + (textView as TextView).text.toString(), + true, + dismissCallback + ) { index -> + setKey(SUBTITLE_AUTO_SELECT_KEY, lang639_1[index]) + } } - } - subs_auto_select_language.setOnLongClickListener { - setKey(SUBTITLE_AUTO_SELECT_KEY, "en") - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } - - subs_download_languages.setFocusableInTv() - subs_download_languages.setOnClickListener { textView -> - val langMap = SubtitleHelper.languages - val lang639_1 = langMap.map { it.ISO_639_1 } - val keys = getDownloadSubsLanguageISO639_1() - val keyMap = keys.map { lang639_1.indexOf(it) }.filter { it >= 0 } - - activity?.showMultiDialog( - langMap.map { it.languageName }, - keyMap, - (textView as TextView).text.toString(), - dismissCallback - ) { indexList -> - setKey(SUBTITLE_DOWNLOAD_KEY, indexList.map { lang639_1[it] }.toList()) + subsAutoSelectLanguage.setOnLongClickListener { + setKey(SUBTITLE_AUTO_SELECT_KEY, "en") + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true } - } - subs_download_languages.setOnLongClickListener { - setKey(SUBTITLE_DOWNLOAD_KEY, listOf("en")) + subsDownloadLanguages.setFocusableInTv() + subsDownloadLanguages.setOnClickListener { textView -> + val langMap = SubtitleHelper.languages + val lang639_1 = langMap.map { it.ISO_639_1 } + val keys = getDownloadSubsLanguageISO639_1() + val keyMap = keys.map { lang639_1.indexOf(it) }.filter { it >= 0 } - showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) - return@setOnLongClickListener true - } + activity?.showMultiDialog( + langMap.map { it.languageName }, + keyMap, + (textView as TextView).text.toString(), + dismissCallback + ) { indexList -> + setKey(SUBTITLE_DOWNLOAD_KEY, indexList.map { lang639_1[it] }.toList()) + } + } - cancel_btt.setOnClickListener { - activity?.popCurrentPage() - } + subsDownloadLanguages.setOnLongClickListener { + setKey(SUBTITLE_DOWNLOAD_KEY, listOf("en")) - apply_btt.setOnClickListener { - it.context.saveStyle(state) - applyStyleEvent.invoke(state) - it.context.fromSaveToStyle(state) - activity?.popCurrentPage() + showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) + return@setOnLongClickListener true + } + + cancelBtt.setOnClickListener { + activity?.popCurrentPage() + } + + applyBtt.setOnClickListener { + it.context.saveStyle(state) + applyStyleEvent.invoke(state) + it.context.fromSaveToStyle(state) + activity?.popCurrentPage() + } } } } From 04f52f4a6d3eab60b714479e3bdc647d54439209 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 15 Jul 2023 03:25:32 +0200 Subject: [PATCH 418/888] added tests for layout --- app/build.gradle.kts | 1 + .../cloudstream3/ExampleInstrumentedTest.kt | 63 +++++++++++++++++++ .../lagradost/cloudstream3/MainActivity.kt | 17 ++++- .../ui/home/HomeChildItemAdapter.kt | 2 +- .../ui/home/HomeParentItemAdapterPreview.kt | 19 +++++- .../res/layout/home_result_grid_expanded.xml | 13 +++- 6 files changed, 107 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d5364045..288add26 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,6 +142,7 @@ dependencies { testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.3") androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") + androidTestImplementation("androidx.test:core") //implementation("io.karn:khttp-android:0.1.2") //okhttp instead // implementation("org.jsoup:jsoup:1.13.1") diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index 92042d60..f28018d1 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -1,6 +1,19 @@ package com.lagradost.cloudstream3 +import android.app.Activity +import android.os.Bundle +import android.os.PersistableBundle +import android.view.LayoutInflater +import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.viewbinding.ViewBinding +import com.lagradost.cloudstream3.databinding.FragmentHomeBinding +import com.lagradost.cloudstream3.databinding.FragmentHomeTvBinding +import com.lagradost.cloudstream3.databinding.FragmentSearchBinding +import com.lagradost.cloudstream3.databinding.FragmentSearchTvBinding +import com.lagradost.cloudstream3.databinding.HomeResultGridBinding +import com.lagradost.cloudstream3.databinding.RepositoryItemBinding +import com.lagradost.cloudstream3.databinding.RepositoryItemTvBinding import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.TestingUtils import kotlinx.coroutines.runBlocking @@ -8,11 +21,18 @@ import org.junit.Assert import org.junit.Test import org.junit.runner.RunWith + /** * Instrumented test, which will execute on an Android device. * * See [testing documentation](http://d.android.com/tools/testing). */ +class TestApplication : Activity() { + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + } +} + @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { private fun getAllProviders(): List { @@ -26,6 +46,49 @@ class ExampleInstrumentedTest { println("Done providersExist") } + @Throws + private inline fun testAllLayouts( + activity: Activity, + vararg layouts: Int + ) { + + val bind = T::class.java.methods.first { it.name == "bind" } + val inflater = LayoutInflater.from(activity) + for (layout in layouts) { + val root = inflater.inflate(layout, null, false) + bind.invoke(null, root) + } + } + + @Test + @Throws + fun layoutTest() { + ActivityScenario.launch(MainActivity::class.java).use { scenario -> + scenario.onActivity { activity: MainActivity -> + // FragmentHomeHeadBinding and FragmentHomeHeadTvBinding CANT be the same + //testAllLayouts(activity, R.layout.fragment_home_head, R.layout.fragment_home_head_tv) + //testAllLayouts(activity, R.layout.fragment_home_head, R.layout.fragment_home_head_tv) + + // main cant be tested + // testAllLayouts(activity,R.layout.activity_main, R.layout.activity_main_tv) + // testAllLayouts(activity,R.layout.activity_main, R.layout.activity_main_tv) + //testAllLayouts(activity, R.layout.activity_main_tv) + + testAllLayouts(activity, R.layout.repository_item_tv, R.layout.repository_item) + testAllLayouts(activity, R.layout.repository_item_tv, R.layout.repository_item) + + testAllLayouts(activity, R.layout.fragment_home_tv, R.layout.fragment_home) + testAllLayouts(activity, R.layout.fragment_home_tv, R.layout.fragment_home) + + testAllLayouts(activity, R.layout.fragment_search_tv, R.layout.fragment_search) + testAllLayouts(activity, R.layout.fragment_search_tv, R.layout.fragment_search) + + testAllLayouts(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid) + //testAllLayouts(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid) ??? fails ??? + } + } + } + @Test @Throws(AssertionError::class) fun providerCorrectData() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 4a7a28ad..c1223415 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -97,6 +97,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadRepository import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main @@ -753,13 +754,25 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (isCastApiAvailable()) { mSessionManager = CastContext.getSharedInstance(this).sessionManager } - } catch (e: Exception) { - logError(e) + } catch (t: Throwable) { + logError(t) } window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) updateTv() + // backup when we update the app, I don't trust myself to not boot lock users, might want to make this a setting? + try { + val appVer = BuildConfig.VERSION_NAME + val lastAppAutoBackup = getKey("VERSION_NAME") ?: 0 + if (appVer != lastAppAutoBackup) { + setKey("VERSION_NAME", BuildConfig.VERSION_NAME) + backup() + } + } catch (t : Throwable) { + logError(t) + } + // just in case, MAIN SHOULD *NEVER* BOOT LOOP CRASH binding = try { if (isTvSettings()) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt index b90a4e43..1e04acf0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt @@ -87,7 +87,7 @@ class HomeChildItemAdapter( else -> null } - (itemView.image_holder ?: itemView.background_card)?.apply { + (itemView.background_card)?.apply { val min = 114.toPx val max = 180.toPx diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 715f1867..9bbfbb37 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -32,15 +32,28 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectSt import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.activity_main.view.* -import kotlinx.android.synthetic.main.fragment_home_head.view.* +import kotlinx.android.synthetic.main.activity_main.view.nav_rail_view +import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmark_parent_item_title import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmarked_child_recyclerview +import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_bookmark +import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_image +import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_info +import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_play +import kotlinx.android.synthetic.main.fragment_home_head.view.home_search import kotlinx.android.synthetic.main.fragment_home_head.view.home_watch_parent_item_title -import kotlinx.android.synthetic.main.fragment_home_head_tv.view.* import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_bookmarked_holder import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_none_padding import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_plan_to_watch_btt import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_change_api +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_change_api2 +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_description +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_hidden_next_focus +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_hidden_prev_focus +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_info_btt +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_play_btt +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_tags +import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_text import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_viewpager import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_completed_btt import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_dropped_btt diff --git a/app/src/main/res/layout/home_result_grid_expanded.xml b/app/src/main/res/layout/home_result_grid_expanded.xml index b697c1de..3c3804a5 100644 --- a/app/src/main/res/layout/home_result_grid_expanded.xml +++ b/app/src/main/res/layout/home_result_grid_expanded.xml @@ -7,7 +7,7 @@ + Date: Sat, 15 Jul 2023 03:27:25 +0200 Subject: [PATCH 419/888] mini fix --- app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index c1223415..a2a24243 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -764,7 +764,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // backup when we update the app, I don't trust myself to not boot lock users, might want to make this a setting? try { val appVer = BuildConfig.VERSION_NAME - val lastAppAutoBackup = getKey("VERSION_NAME") ?: 0 + val lastAppAutoBackup : String = getKey("VERSION_NAME") ?: "" if (appVer != lastAppAutoBackup) { setKey("VERSION_NAME", BuildConfig.VERSION_NAME) backup() From f209c7286e34e2640238c5d240170c8569b506da Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 15 Jul 2023 20:00:09 +0200 Subject: [PATCH 420/888] more viewbindings + result fix + more tests --- .../cloudstream3/ExampleInstrumentedTest.kt | 17 ++++ .../ui/home/HomeChildItemAdapter.kt | 22 ++--- .../ui/home/HomeParentItemAdapter.kt | 31 +++--- .../ui/home/HomeParentItemAdapterPreview.kt | 5 +- .../cloudstream3/ui/home/HomeScrollAdapter.kt | 59 +++++++----- .../cloudstream3/ui/library/PageAdapter.kt | 12 +-- .../ui/library/ViewpagerAdapter.kt | 2 +- .../ui/search/SearchResultBuilder.kt | 46 +++++---- .../utils/SingleSelectionHelper.kt | 95 +++++++++++++------ .../main/res/layout/search_result_grid.xml | 22 ++++- .../layout/search_result_grid_expanded.xml | 36 +++---- app/src/main/res/values/styles.xml | 7 +- 12 files changed, 214 insertions(+), 140 deletions(-) diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index f28018d1..68418704 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -12,8 +12,14 @@ import com.lagradost.cloudstream3.databinding.FragmentHomeTvBinding import com.lagradost.cloudstream3.databinding.FragmentSearchBinding import com.lagradost.cloudstream3.databinding.FragmentSearchTvBinding import com.lagradost.cloudstream3.databinding.HomeResultGridBinding +import com.lagradost.cloudstream3.databinding.HomeScrollViewBinding +import com.lagradost.cloudstream3.databinding.HomeScrollViewTvBinding +import com.lagradost.cloudstream3.databinding.HomepageParentBinding +import com.lagradost.cloudstream3.databinding.HomepageParentTvBinding import com.lagradost.cloudstream3.databinding.RepositoryItemBinding import com.lagradost.cloudstream3.databinding.RepositoryItemTvBinding +import com.lagradost.cloudstream3.databinding.SearchResultGridBinding +import com.lagradost.cloudstream3.databinding.SearchResultGridExpandedBinding import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.TestingUtils import kotlinx.coroutines.runBlocking @@ -85,6 +91,17 @@ class ExampleInstrumentedTest { testAllLayouts(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid) //testAllLayouts(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid) ??? fails ??? + + testAllLayouts(activity, R.layout.search_result_grid, R.layout.search_result_grid_expanded) + testAllLayouts(activity, R.layout.search_result_grid, R.layout.search_result_grid_expanded) + + + // testAllLayouts(activity, R.layout.home_scroll_view, R.layout.home_scroll_view_tv) + // testAllLayouts(activity, R.layout.home_scroll_view, R.layout.home_scroll_view_tv) + + testAllLayouts(activity, R.layout.homepage_parent_tv, R.layout.homepage_parent) + testAllLayouts(activity, R.layout.homepage_parent_tv, R.layout.homepage_parent) + } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt index 1e04acf0..92bc242d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt @@ -1,22 +1,20 @@ package com.lagradost.cloudstream3.ui.home import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.databinding.HomeResultGridBinding import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.utils.UIHelper.IsBottomLayout import com.lagradost.cloudstream3.utils.UIHelper.toPx -import kotlinx.android.synthetic.main.home_result_grid.view.background_card -import kotlinx.android.synthetic.main.home_result_grid_expanded.view.* class HomeChildItemAdapter( val cardList: MutableList, - private val overrideLayout: Int? = null, + private val nextFocusUp: Int? = null, private val nextFocusDown: Int? = null, private val clickCallback: (SearchClickCallback) -> Unit, @@ -26,11 +24,13 @@ class HomeChildItemAdapter( var hasNext: Boolean = false override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val layout = overrideLayout - ?: if (parent.context.IsBottomLayout()) R.layout.home_result_grid_expanded else R.layout.home_result_grid + val layout = if (parent.context.IsBottomLayout()) R.layout.home_result_grid_expanded else R.layout.home_result_grid + + val root = LayoutInflater.from(parent.context).inflate(layout, parent, false) + val binding = HomeResultGridBinding.bind(root) return CardViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false), + binding, clickCallback, itemCount, nextFocusUp, @@ -69,14 +69,14 @@ class HomeChildItemAdapter( class CardViewHolder constructor( - itemView: View, + val binding: HomeResultGridBinding, private val clickCallback: (SearchClickCallback) -> Unit, var itemCount: Int, private val nextFocusUp: Int? = null, private val nextFocusDown: Int? = null, private val isHorizontal: Boolean = false ) : - RecyclerView.ViewHolder(itemView) { + RecyclerView.ViewHolder(binding.root) { fun bind(card: SearchResponse, position: Int) { @@ -87,7 +87,7 @@ class HomeChildItemAdapter( else -> null } - (itemView.background_card)?.apply { + binding.backgroundCard.apply { val min = 114.toPx val max = 180.toPx @@ -119,7 +119,7 @@ class HomeChildItemAdapter( itemView.tag = position if (position == 0) { // to fix tv - itemView.background_card?.nextFocusLeftId = R.id.nav_rail_view + binding.backgroundCard.nextFocusLeftId = R.id.nav_rail_view } //val ani = ScaleAnimation(0.9f, 1.0f, 0.9f, 1f) //ani.fillAfter = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index 7ce9e67d..d05b4cab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -10,18 +10,12 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.HomepageParentBinding import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchFragment.Companion.filterSearchResponse import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable -import kotlinx.android.synthetic.main.activity_main_tv.* -import kotlinx.android.synthetic.main.activity_main_tv.view.* -import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_home.view.* -import kotlinx.android.synthetic.main.fragment_home_head_tv.* -import kotlinx.android.synthetic.main.fragment_home_head_tv.view.* -import kotlinx.android.synthetic.main.homepage_parent.view.* class LoadClickCallback( val action: Int = 0, @@ -37,12 +31,17 @@ open class ParentItemAdapter( private val expandCallback: ((String) -> Unit)? = null, ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + + val root = LayoutInflater.from(parent.context).inflate( + if (isTvSettings()) R.layout.homepage_parent_tv else R.layout.homepage_parent, + parent, + false + ) + + val binding = HomepageParentBinding.bind(root) + return ParentViewHolder( - LayoutInflater.from(parent.context).inflate( - if (isTvSettings()) R.layout.homepage_parent_tv else R.layout.homepage_parent, - parent, - false - ), + binding, clickCallback, moreInfoClickCallback, expandCallback @@ -153,14 +152,14 @@ open class ParentItemAdapter( class ParentViewHolder constructor( - itemView: View, + val binding: HomepageParentBinding, private val clickCallback: (SearchClickCallback) -> Unit, private val moreInfoClickCallback: (HomeViewModel.ExpandableHomepageList) -> Unit, private val expandCallback: ((String) -> Unit)? = null, ) : - RecyclerView.ViewHolder(itemView) { - val title: TextView = itemView.home_child_more_info - private val recyclerView: RecyclerView = itemView.home_child_recyclerview + RecyclerView.ViewHolder(binding.root) { + val title: TextView = binding.homeChildMoreInfo + private val recyclerView: RecyclerView = binding.homeChildRecyclerview fun update(expand: HomeViewModel.ExpandableHomepageList) { val info = expand.list diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 9bbfbb37..fffe590e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -409,10 +409,7 @@ class HomeParentItemAdapterPreview( // setPageTransformer(null) if (adapter == null) - adapter = HomeScrollAdapter( - if (isTvSettings()) R.layout.home_scroll_view_tv else R.layout.home_scroll_view, - if (isTvSettings()) true else null - ) + adapter = HomeScrollAdapter() } previewAdapter = previewViewpager?.adapter as? HomeScrollAdapter? // previewViewpager?.registerOnPageChangeCallback(previewCallback) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt index 5902132e..c54996c2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt @@ -2,24 +2,18 @@ package com.lagradost.cloudstream3.ui.home import android.content.res.Configuration import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import androidx.annotation.LayoutRes import androidx.core.view.isGone import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding import com.lagradost.cloudstream3.LoadResponse -import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.HomeScrollViewBinding +import com.lagradost.cloudstream3.databinding.HomeScrollViewTvBinding +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview -import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview_tags -import kotlinx.android.synthetic.main.home_scroll_view.view.home_scroll_preview_title - -class HomeScrollAdapter( - @LayoutRes val layout: Int = R.layout.home_scroll_view, - private val forceHorizontalPosters: Boolean? = null -) : RecyclerView.Adapter() { +class HomeScrollAdapter : RecyclerView.Adapter() { private var items: MutableList = mutableListOf() var hasMoreItems: Boolean = false @@ -45,9 +39,16 @@ class HomeScrollAdapter( } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = if(isTvSettings()) { + HomeScrollViewBinding.inflate(inflater,parent,false) + } else { + HomeScrollViewTvBinding.inflate(inflater,parent,false) + } + return CardViewHolder( - LayoutInflater.from(parent.context).inflate(layout, parent, false), - forceHorizontalPosters + binding, + //forceHorizontalPosters ) } @@ -61,22 +62,30 @@ class HomeScrollAdapter( class CardViewHolder constructor( - itemView: View, - private val forceHorizontalPosters: Boolean? = null + val binding: ViewBinding, + //private val forceHorizontalPosters: Boolean? = null ) : - RecyclerView.ViewHolder(itemView) { + RecyclerView.ViewHolder(binding.root) { fun bind(card: LoadResponse) { - card.apply { - val isHorizontal = - (forceHorizontalPosters == true) || ((forceHorizontalPosters != false) && itemView.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) + val isHorizontal = + binding is HomeScrollViewTvBinding || itemView.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE - val posterUrl = if (isHorizontal) backgroundPosterUrl ?: posterUrl else posterUrl - ?: backgroundPosterUrl - itemView.home_scroll_preview_tags?.text = tags?.joinToString(" • ") ?: "" - itemView.home_scroll_preview_tags?.isGone = tags.isNullOrEmpty() - itemView.home_scroll_preview?.setImage(posterUrl, posterHeaders) - itemView.home_scroll_preview_title?.text = name + val posterUrl = if (isHorizontal) card.backgroundPosterUrl ?: card.posterUrl else card.posterUrl + ?: card.backgroundPosterUrl + + when(binding) { + is HomeScrollViewBinding -> { + binding.homeScrollPreview.setImage(posterUrl) + binding.homeScrollPreviewTags.apply { + text = card.tags?.joinToString(" • ") ?: "" + isGone = card.tags.isNullOrEmpty() + } + binding.homeScrollPreviewTitle.text = card.name + } + is HomeScrollViewTvBinding -> { + binding.homeScrollPreview.setImage(posterUrl) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index 05b05f44..d558d6a5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -84,7 +84,7 @@ class PageAdapter( binding.textRating.apply { setTextColor(ColorStateList.valueOf(fg)) } - binding.textRatingHolder.backgroundTintList = ColorStateList.valueOf(bg) + binding.textRating.backgroundTintList = ColorStateList.valueOf(bg) binding.watchProgress.apply { progressTintList = ColorStateList.valueOf(fg) progressBackgroundTintList = ColorStateList.valueOf(bg) @@ -111,16 +111,6 @@ class PageAdapter( } binding.imageText.text = item.name - - val showRating = (item.personalRating ?: 0) != 0 - binding.textRatingHolder.isVisible = showRating - if (showRating) { - // We want to show 8.5 but not 8.0 hence the replace - val rating = ((item.personalRating ?: 0).toDouble() / 10).toString() - .replace(".0", "") - - binding.textRating.text = "★ $rating" - } } } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index 441d6adc..95fefcbe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -64,7 +64,7 @@ class ViewpagerAdapter( } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY -> + setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> val diff = scrollY - oldScrollY if (diff == 0) return@setOnScrollChangeListener diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index 69812f22..2b2269ff 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -16,22 +16,13 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchQuality import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.isMovieType +import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.home_result_grid.view.background_card -import kotlinx.android.synthetic.main.home_result_grid.view.imageText -import kotlinx.android.synthetic.main.home_result_grid.view.imageView -import kotlinx.android.synthetic.main.home_result_grid.view.search_item_download_play -import kotlinx.android.synthetic.main.home_result_grid.view.text_flag -import kotlinx.android.synthetic.main.home_result_grid.view.text_is_dub -import kotlinx.android.synthetic.main.home_result_grid.view.text_is_sub -import kotlinx.android.synthetic.main.home_result_grid.view.text_quality -import kotlinx.android.synthetic.main.home_result_grid.view.title_shadow -import kotlinx.android.synthetic.main.home_result_grid.view.watchProgress object SearchResultBuilder { private val showCache: MutableMap = mutableMapOf() @@ -59,19 +50,21 @@ object SearchResultBuilder { nextFocusDown: Int? = null, colorCallback : ((Palette) -> Unit)? = null ) { - val cardView: ImageView = itemView.imageView - val cardText: TextView? = itemView.imageText + val cardView: ImageView = itemView.findViewById(R.id.imageView) + val cardText: TextView? = itemView.findViewById(R.id.imageText) - val textIsDub: TextView? = itemView.text_is_dub - val textIsSub: TextView? = itemView.text_is_sub - val textFlag: TextView? = itemView.text_flag - val textQuality: TextView? = itemView.text_quality - val shadow: View? = itemView.title_shadow + val textIsDub: TextView? = itemView.findViewById(R.id.text_is_dub) + val textIsSub: TextView? = itemView.findViewById(R.id.text_is_sub) + val textFlag: TextView? = itemView.findViewById(R.id.text_flag) + val rating: TextView? = itemView.findViewById(R.id.text_rating) - val bg: CardView = itemView.background_card + val textQuality: TextView? = itemView.findViewById(R.id.text_quality) + val shadow: View? = itemView.findViewById(R.id.title_shadow) - val bar: ProgressBar? = itemView.watchProgress - val playImg: ImageView? = itemView.search_item_download_play + val bg: CardView = itemView.findViewById(R.id.background_card) + + val bar: ProgressBar? = itemView.findViewById(R.id.watchProgress) + val playImg: ImageView? = itemView.findViewById(R.id.search_item_download_play) // Do logic @@ -80,12 +73,25 @@ object SearchResultBuilder { textIsDub?.isVisible = false textIsSub?.isVisible = false textFlag?.isVisible = false + rating?.isVisible = false val showSub = showCache[textIsDub?.context?.getString(R.string.show_sub_key)] ?: false val showDub = showCache[textIsDub?.context?.getString(R.string.show_dub_key)] ?: false val showTitle = showCache[cardText?.context?.getString(R.string.show_title_key)] ?: false val showHd = showCache[textQuality?.context?.getString(R.string.show_hd_key)] ?: false + if(card is SyncAPI.LibraryItem) { + val showRating = (card.personalRating ?: 0) != 0 + rating?.isVisible = showRating + if (showRating) { + // We want to show 8.5 but not 8.0 hence the replace + val ratingText = ((card.personalRating ?: 0).toDouble() / 10).toString() + .replace(".0", "") + + rating?.text = ratingText + } + } + shadow?.isVisible = showTitle when (card.quality) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt index 1f6d726d..8285b8ab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SingleSelectionHelper.kt @@ -2,19 +2,28 @@ package com.lagradost.cloudstream3.utils import android.app.Activity import android.app.Dialog +import android.view.LayoutInflater import android.view.View -import android.widget.* +import android.widget.AbsListView +import android.widget.ArrayAdapter +import android.widget.EditText +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ListView +import android.widget.TextView import androidx.appcompat.app.AlertDialog -import androidx.core.view.* +import androidx.core.view.isGone +import androidx.core.view.isVisible +import androidx.core.view.marginLeft +import androidx.core.view.marginRight +import androidx.core.view.marginTop import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.BottomSelectionDialogBinding import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes import com.lagradost.cloudstream3.utils.UIHelper.setImage -import kotlinx.android.synthetic.main.add_account_input.* -import kotlinx.android.synthetic.main.add_account_input.text1 -import kotlinx.android.synthetic.main.bottom_selection_dialog_direct.* object SingleSelectionHelper { fun Activity?.showOptionSelectStringRes( @@ -82,6 +91,7 @@ object SingleSelectionHelper { } fun Activity?.showDialog( + binding: BottomSelectionDialogBinding, dialog: Dialog, items: List, selectedIndex: List, @@ -95,39 +105,39 @@ object SingleSelectionHelper { if (this == null) return val realShowApply = showApply || isMultiSelect - val listView = dialog.listview1//.findViewById(R.id.listview1)!! - val textView = dialog.text1//.findViewById(R.id.text1)!! - val applyButton = dialog.apply_btt//.findViewById(R.id.apply_btt) - val cancelButton = dialog.cancel_btt//findViewById(R.id.cancel_btt) + val listView = binding.listview1//.findViewById(R.id.listview1)!! + val textView = binding.text1//.findViewById(R.id.text1)!! + val applyButton = binding.applyBtt//.findViewById(R.id.apply_btt) + val cancelButton = binding.cancelBtt//findViewById(R.id.cancel_btt) val applyHolder = - dialog.apply_btt_holder//.findViewById(R.id.apply_btt_holder) + binding.applyBttHolder//.findViewById(R.id.apply_btt_holder) - applyHolder?.isVisible = realShowApply + applyHolder.isVisible = realShowApply if (!realShowApply) { val params = listView.layoutParams as LinearLayout.LayoutParams params.setMargins(listView.marginLeft, listView.marginTop, listView.marginRight, 0) listView.layoutParams = params } - textView?.text = name - textView?.isGone = name.isBlank() + textView.text = name + textView.isGone = name.isBlank() val arrayAdapter = ArrayAdapter(this, itemLayout) arrayAdapter.addAll(items) - listView?.adapter = arrayAdapter + listView.adapter = arrayAdapter if (isMultiSelect) { - listView?.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE + listView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE } else { - listView?.choiceMode = AbsListView.CHOICE_MODE_SINGLE + listView.choiceMode = AbsListView.CHOICE_MODE_SINGLE } for (select in selectedIndex) { - listView?.setItemChecked(select, true) + listView.setItemChecked(select, true) } selectedIndex.minOrNull()?.let { - listView?.setSelection(it) + listView.setSelection(it) } // var lastSelectedIndex = if(selectedIndex.isNotEmpty()) selectedIndex.first() else -1 @@ -136,7 +146,7 @@ object SingleSelectionHelper { dismissCallback.invoke() } - listView?.setOnItemClickListener { _, _, which, _ -> + listView.setOnItemClickListener { _, _, which, _ -> // lastSelectedIndex = which if (realShowApply) { if (!isMultiSelect) { @@ -148,7 +158,7 @@ object SingleSelectionHelper { } } if (realShowApply) { - applyButton?.setOnClickListener { + applyButton.setOnClickListener { val list = ArrayList() for (index in 0 until listView.count) { if (listView.checkedItemPositions[index]) @@ -157,7 +167,7 @@ object SingleSelectionHelper { callback.invoke(list) dialog.dismissSafe(this) } - cancelButton?.setOnClickListener { + cancelButton.setOnClickListener { dialog.dismissSafe(this) } } @@ -213,13 +223,26 @@ object SingleSelectionHelper { ) { if (this == null) return + val binding: BottomSelectionDialogBinding = BottomSelectionDialogBinding.inflate( + LayoutInflater.from(this) + ) val builder = AlertDialog.Builder(this, R.style.AlertDialogCustom) - .setView(R.layout.bottom_selection_dialog) + .setView(binding.root) val dialog = builder.create() dialog.show() - showDialog(dialog, items, selectedIndex, name, true, true, callback, dismissCallback) + showDialog( + binding, + dialog, + items, + selectedIndex, + name, + showApply = true, + isMultiSelect = true, + callback, + dismissCallback + ) } fun Activity?.showDialog( @@ -232,13 +255,19 @@ object SingleSelectionHelper { ) { if (this == null) return + val binding: BottomSelectionDialogBinding = BottomSelectionDialogBinding.inflate( + LayoutInflater.from(this) + ) val builder = AlertDialog.Builder(this, R.style.AlertDialogCustom) - .setView(R.layout.bottom_selection_dialog) + .setView(binding.root) val dialog = builder.create() dialog.show() + + showDialog( + binding, dialog, items, listOf(selectedIndex), @@ -260,12 +289,18 @@ object SingleSelectionHelper { callback: (Int) -> Unit, ) { if (this == null) return + + val binding: BottomSelectionDialogBinding = BottomSelectionDialogBinding.inflate( + LayoutInflater.from(this) + ) + val builder = BottomSheetDialog(this) - builder.setContentView(R.layout.bottom_selection_dialog) + builder.setContentView(binding.root) builder.show() showDialog( + binding, builder, items, listOf(selectedIndex), @@ -285,13 +320,19 @@ object SingleSelectionHelper { ): BottomSheetDialog { val builder = BottomSheetDialog(this) - builder.setContentView(R.layout.bottom_selection_dialog_direct) + val binding: BottomSelectionDialogBinding = BottomSelectionDialogBinding.inflate( + LayoutInflater.from(this) + ) + + //builder.setContentView(R.layout.bottom_selection_dialog_direct) + builder.setContentView(binding.root) builder.show() showDialog( + binding, builder, items, - listOf(), + emptyList(), name, showApply = false, isMultiSelect = false, diff --git a/app/src/main/res/layout/search_result_grid.xml b/app/src/main/res/layout/search_result_grid.xml index f3c35ca4..cec7d4ce 100644 --- a/app/src/main/res/layout/search_result_grid.xml +++ b/app/src/main/res/layout/search_result_grid.xml @@ -1,5 +1,5 @@ - + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/search_result_grid_expanded.xml b/app/src/main/res/layout/search_result_grid_expanded.xml index cf6ab3b2..c64486b4 100644 --- a/app/src/main/res/layout/search_result_grid_expanded.xml +++ b/app/src/main/res/layout/search_result_grid_expanded.xml @@ -58,29 +58,12 @@ style="@style/SubButton" android:layout_gravity="end" /> - - - - - + tools:text="7.7" /> + @color/subColorText + + + + + + + + @@ -547,6 +548,7 @@ 0dp 0dp @drawable/outline_drawable_less + @string/tv_no_focus_tag From c987f7581e590a8f69f525fd8246f5a15224577a Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:18:28 +0200 Subject: [PATCH 445/888] major focus fixes --- .../lagradost/cloudstream3/CommonActivity.kt | 79 ++++++++++++------- .../cloudstream3/ui/AutofitRecyclerView.kt | 25 ++++-- .../ui/home/HomeChildItemAdapter.kt | 42 +++++++--- .../ui/home/HomeParentItemAdapter.kt | 4 +- .../ui/home/HomeParentItemAdapterPreview.kt | 4 + .../cloudstream3/ui/result/ActorAdaptor.kt | 12 ++- .../ui/result/LinearListLayout.kt | 24 +++--- .../ui/result/ResultFragmentTv.kt | 34 ++++---- .../ui/search/SearchResultBuilder.kt | 57 ++++++++----- .../drawable/ic_baseline_arrow_back_24.xml | 1 + .../ic_baseline_arrow_back_ios_24.xml | 14 +++- .../drawable/ic_baseline_arrow_forward_24.xml | 1 + .../ic_baseline_keyboard_arrow_left_24.xml | 14 +++- .../res/drawable/ic_baseline_language_24.xml | 13 ++- .../res/drawable/ic_baseline_more_vert_24.xml | 13 ++- .../ic_baseline_notifications_active_24.xml | 13 ++- .../main/res/drawable/netflix_skip_back.xml | 32 ++++---- .../res/drawable/outline_drawable_forced.xml | 5 ++ app/src/main/res/layout/activity_main_tv.xml | 1 - .../main/res/layout/fragment_home_head_tv.xml | 4 +- .../main/res/layout/fragment_result_tv.xml | 3 +- ...sort_bottom_single_choice_no_checkmark.xml | 12 +-- 22 files changed, 268 insertions(+), 139 deletions(-) create mode 100644 app/src/main/res/drawable/outline_drawable_forced.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 7eb1bf6d..684e2269 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -27,6 +27,7 @@ import com.lagradost.cloudstream3.ui.player.PlayerEventType import com.lagradost.cloudstream3.ui.result.ResultFragment import com.lagradost.cloudstream3.ui.result.UiText import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv +import com.lagradost.cloudstream3.utils.AppUtils.isRtl import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.UIHelper @@ -299,22 +300,29 @@ object CommonActivity { view: View?, direction: FocusDirection, depth: Int = 0 - ): Int? { + ): View? { + // if input is invalid let android decide + depth test to not crash if loop is found if (view == null || depth >= 10 || act == null) { return null } val nextId = when (direction) { - FocusDirection.Left -> { - view.nextFocusLeftId + FocusDirection.Start -> { + if (view.isRtl()) + view.nextFocusRightId + else + view.nextFocusLeftId } FocusDirection.Up -> { view.nextFocusUpId } - FocusDirection.Right -> { - view.nextFocusRightId + FocusDirection.End -> { + if (view.isRtl()) + view.nextFocusLeftId + else + view.nextFocusRightId } FocusDirection.Down -> { @@ -322,27 +330,41 @@ object CommonActivity { } } - return if (nextId != -1) { - val next = act.findViewById(nextId) - //println("NAME: ${next.accessibilityClassName} | ${next?.isShown}" ) + // if view not found then return + if (nextId == -1) return null + var next = act.findViewById(nextId) ?: return null - if (next?.isShown == false) { - getNextFocus(act, next, direction, depth + 1) - } else { - if (depth == 0) { - null - } else { - nextId - } + // because we want closes find, aka when multiple have the same id, we go to parent + // until the correct one is found + /*var currentLook: View = view + while (true) { + val tmpNext = currentLook.findViewById(nextId) + if (tmpNext != null) { + next = tmpNext + break } - } else { - null + + currentLook = currentLook.parent as? View ?: break + }*/ + + var currentLook: View = view + while (currentLook.findViewById(nextId)?.also { next = it } == null) { + currentLook = (currentLook.parent as? View) ?: break } + + // if cant focus but visible then break and let android decide + if (!next.isFocusable && next.isShown) return null + + // if not shown then continue because we will "skip" over views to get to a replacement + if (!next.isShown) return getNextFocus(act, next, direction, depth + 1) + + // nothing wrong with the view found, return it + return next } enum class FocusDirection { - Left, - Right, + Start, + End, Up, Down, } @@ -447,17 +469,17 @@ object CommonActivity { event?.keyCode?.let { keyCode -> if (currentFocus == null || event.action != KeyEvent.ACTION_DOWN) return@let - val next = when (keyCode) { + val nextView = when (keyCode) { KeyEvent.KEYCODE_DPAD_LEFT -> getNextFocus( act, currentFocus, - FocusDirection.Left + FocusDirection.Start ) KeyEvent.KEYCODE_DPAD_RIGHT -> getNextFocus( act, currentFocus, - FocusDirection.Right + FocusDirection.End ) KeyEvent.KEYCODE_DPAD_UP -> getNextFocus( @@ -475,13 +497,10 @@ object CommonActivity { else -> null } - if (next != null && next != -1) { - val nextView = act.findViewById(next) - if (nextView != null) { - nextView.requestFocus() - keyEventListener?.invoke(Pair(event, true)) - return true - } + if (nextView != null) { + nextView.requestFocus() + keyEventListener?.invoke(Pair(event, true)) + return true } if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && (act.currentFocus is SearchView || act.currentFocus is SearchView.SearchAutoComplete)) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt index b4c07792..28ced48c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt @@ -24,7 +24,7 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : } } - override fun onRequestChildFocus( + /*override fun onRequestChildFocus( parent: RecyclerView, state: RecyclerView.State, child: View, @@ -32,13 +32,17 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : ): Boolean { // android.widget.FrameLayout$LayoutParams cannot be cast to androidx.recyclerview.widget.RecyclerView$LayoutParams return try { - val pos = maxOf(0, getPosition(focused!!) - 2) - parent.scrollToPosition(pos) + if(focused != null) { + // val pos = maxOf(0, getPosition(focused) - 2) // IDK WHY + val pos = getPosition(focused) + if(pos >= 0) parent.scrollToPosition(pos) + } + super.onRequestChildFocus(parent, state, child, focused) } catch (e: Exception) { false } - } + }*/ // Allows moving right and left with focus https://gist.github.com/vganin/8930b41f55820ec49e4d override fun onInterceptFocusSearch(focused: View, direction: Int): View? { @@ -65,8 +69,17 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : val spanCount = this.spanCount val orientation = this.orientation + // fixes arabic by inverting left and right layout focus + val correctDirection = if(this.isLayoutRTL) { + when(direction) { + View.FOCUS_RIGHT -> View.FOCUS_LEFT + View.FOCUS_LEFT -> View.FOCUS_RIGHT + else -> direction + } + } else direction + if (orientation == VERTICAL) { - when (direction) { + when (correctDirection) { View.FOCUS_DOWN -> { return spanCount } @@ -81,7 +94,7 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : } } } else if (orientation == HORIZONTAL) { - when (direction) { + when (correctDirection) { View.FOCUS_DOWN -> { return 1 } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt index 8b0f9003..607cda01 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt @@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.databinding.HomeResultGridBinding import com.lagradost.cloudstream3.databinding.HomeResultGridExpandedBinding import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder +import com.lagradost.cloudstream3.utils.AppUtils.isRtl import com.lagradost.cloudstream3.utils.UIHelper.IsBottomLayout import com.lagradost.cloudstream3.utils.UIHelper.toPx @@ -27,13 +28,17 @@ class HomeChildItemAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val expanded = parent.context.IsBottomLayout() - /* val layout = if (bottom) R.layout.home_result_grid_expanded else R.layout.home_result_grid + /* val layout = if (bottom) R.layout.home_result_grid_expanded else R.layout.home_result_grid - val root = LayoutInflater.from(parent.context).inflate(layout, parent, false) - val binding = HomeResultGridBinding.bind(root)*/ + val root = LayoutInflater.from(parent.context).inflate(layout, parent, false) + val binding = HomeResultGridBinding.bind(root)*/ val inflater = LayoutInflater.from(parent.context) - val binding = if(expanded) HomeResultGridExpandedBinding.inflate(inflater,parent,false) else HomeResultGridBinding.inflate(inflater,parent,false) + val binding = if (expanded) HomeResultGridExpandedBinding.inflate( + inflater, + parent, + false + ) else HomeResultGridBinding.inflate(inflater, parent, false) return CardViewHolder( @@ -42,7 +47,8 @@ class HomeChildItemAdapter( itemCount, nextFocusUp, nextFocusDown, - isHorizontal + isHorizontal, + parent.isRtl() ) } @@ -81,7 +87,8 @@ class HomeChildItemAdapter( var itemCount: Int, private val nextFocusUp: Int? = null, private val nextFocusDown: Int? = null, - private val isHorizontal: Boolean = false + private val isHorizontal: Boolean = false, + private val isRtl : Boolean ) : RecyclerView.ViewHolder(binding.root) { @@ -93,7 +100,23 @@ class HomeChildItemAdapter( itemCount - 1 -> false else -> null } - when(binding) { + + if (position == 0) { // to fix tv + if (isRtl) { + itemView.nextFocusRightId = R.id.nav_rail_view + itemView.nextFocusLeftId = -1 + } + else { + itemView.nextFocusLeftId = R.id.nav_rail_view + itemView.nextFocusRightId = -1 + } + } else { + itemView.nextFocusRightId = -1 + itemView.nextFocusLeftId = -1 + } + + + when (binding) { is HomeResultGridBinding -> { binding.backgroundCard.apply { val min = 114.toPx @@ -114,10 +137,9 @@ class HomeChildItemAdapter( } } - if (position == 0) { // to fix tv - binding.backgroundCard.nextFocusLeftId = R.id.nav_rail_view - } + } + is HomeResultGridExpandedBinding -> { binding.backgroundCard.apply { val min = 114.toPx diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index d4c0bd62..f6c3fead 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -177,7 +177,7 @@ open class ParentItemAdapter( ).apply { isHorizontal = info.isHorizontalImages } - //recyclerView.setLinearListLayout() + recyclerView.setLinearListLayout() } } @@ -192,7 +192,7 @@ open class ParentItemAdapter( isHorizontal = info.isHorizontalImages hasNext = expand.hasNext } - // recyclerView.setLinearListLayout() + recyclerView.setLinearListLayout() title.text = info.name recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index a304b43f..ce7b8447 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -30,6 +30,7 @@ import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.selectHomepage import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST +import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_LOAD import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_SHOW_METADATA import com.lagradost.cloudstream3.ui.search.SearchClickCallback @@ -427,6 +428,9 @@ class HomeParentItemAdapterPreview( resumeRecyclerView.adapter = resumeAdapter bookmarkRecyclerView.adapter = bookmarkAdapter + resumeRecyclerView.setLinearListLayout() + bookmarkRecyclerView.setLinearListLayout() + for ((chip, watch) in toggleList) { chip.isChecked = false chip.setOnCheckedChangeListener { _, isChecked -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index 7b415d78..531cb5d2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil @@ -11,7 +12,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.CastItemBinding import com.lagradost.cloudstream3.utils.UIHelper.setImage -class ActorAdaptor : RecyclerView.Adapter() { +class ActorAdaptor(private val focusCallback : (View?) -> Unit = {}) : RecyclerView.Adapter() { data class ActorMetaData( var isInverted: Boolean, val actor: ActorData, @@ -21,7 +22,7 @@ class ActorAdaptor : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( - CastItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) + CastItemBinding.inflate(LayoutInflater.from(parent.context), parent, false), focusCallback ) } @@ -66,6 +67,7 @@ class ActorAdaptor : RecyclerView.Adapter() { private class CardViewHolder constructor( val binding: CastItemBinding, + private val focusCallback : (View?) -> Unit = {} ) : RecyclerView.ViewHolder(binding.root) { @@ -76,6 +78,12 @@ class ActorAdaptor : RecyclerView.Adapter() { Pair(actor.voiceActor?.image, actor.actor.image) } + itemView.setOnFocusChangeListener { v, hasFocus -> + if(hasFocus) { + focusCallback(v) + } + } + itemView.setOnClickListener { callback(position) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt index 434355a2..26cb7900 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt @@ -2,19 +2,16 @@ package com.lagradost.cloudstream3.ui.result import android.content.Context import android.view.View -import android.view.View.LAYOUT_DIRECTION_LTR import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.utils.AppUtils.isLtr -import com.lagradost.cloudstream3.utils.AppUtils.isRtl fun RecyclerView?.setLinearListLayout(isHorizontal: Boolean = true) { if (this == null) return this.layoutManager = this.context?.let { LinearListLayout(it).apply { if (isHorizontal) setHorizontal() else setVertical() } } - // ?: this.layoutManager + // ?: this.layoutManager } open class LinearListLayout(context: Context?) : @@ -60,7 +57,7 @@ open class LinearListLayout(context: Context?) : startSmoothScroll(linearSmoothScroller) }*/ override fun onInterceptFocusSearch(focused: View, direction: Int): View? { - var dir = if (orientation == HORIZONTAL) { + val dir = if (orientation == HORIZONTAL) { if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) { // This scrolls the recyclerview before doing focus search, which // allows the focus search to work better. @@ -70,19 +67,28 @@ open class LinearListLayout(context: Context?) : (focused.parent as? RecyclerView)?.focusSearch(direction) return null } - if (direction == View.FOCUS_RIGHT) 1 else -1 + var ret = if (direction == View.FOCUS_RIGHT) 1 else -1 + // only flip on horizontal layout + if (this.isLayoutRTL) { + ret = -ret + } + ret } else { if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_LEFT) return null if (direction == View.FOCUS_DOWN) 1 else -1 } - if(this.isLayoutRTL) { - dir = -dir - } return try { getPosition(getCorrectParent(focused))?.let { position -> val lookfor = dir + position //clamp(dir + position, 0, recyclerView.adapter?.itemCount ?: return null) + + // refocus on the same view if going out of bounds, note that we only do it + // for out of bounds one way as we may override the start where item == -1 + if (lookfor >= itemCount) { + return getViewFromPos(itemCount - 1) ?: focused + } + getViewFromPos(lookfor) ?: run { scrollToPosition(lookfor) null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 69127e86..f62d7e73 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -1,15 +1,12 @@ package com.lagradost.cloudstream3.ui.result import android.animation.Animator -import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.AlphaAnimation -import android.view.animation.Animation import android.view.animation.DecelerateInterpolator import androidx.appcompat.app.AlertDialog import androidx.core.view.isGone @@ -31,20 +28,17 @@ import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup -import com.lagradost.cloudstream3.ui.player.CSPlayerEvent import com.lagradost.cloudstream3.ui.player.ExtractorLinkGenerator import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.result.ResultFragment.getStoredData import com.lagradost.cloudstream3.ui.result.ResultFragment.updateUIEvent +import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_FOCUSED import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.AppUtils.html -import com.lagradost.cloudstream3.utils.AppUtils.isLtr import com.lagradost.cloudstream3.utils.AppUtils.isRtl import com.lagradost.cloudstream3.utils.AppUtils.loadCache -import com.lagradost.cloudstream3.utils.Coroutines.ioSafe -import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogInstant import com.lagradost.cloudstream3.utils.UIHelper @@ -52,10 +46,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate -import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import com.lagradost.cloudstream3.utils.UIHelper.setImage -import com.lagradost.cloudstream3.utils.UIHelper.setImageBlur -import kotlinx.coroutines.delay class ResultFragmentTv : Fragment() { protected lateinit var viewModel: ResultViewModel2 @@ -204,7 +195,7 @@ class ResultFragmentTv : Fragment() { } }) } - this.animate().translationX(if (turnVisible) 0f else 100f).apply { + this.animate().translationX(if (turnVisible) 0f else if(isRtl()) -100.0f else 100f).apply { duration = 200 interpolator = DecelerateInterpolator() } @@ -214,6 +205,13 @@ class ResultFragmentTv : Fragment() { binding?.apply { episodesShadow.fade(show) episodeHolderTv.fade(show) + if(episodesShadow.isRtl()) { + episodesShadow.scaleX = -1.0f + episodesShadow.scaleY = -1.0f + } else { + episodesShadow.scaleX = 1.0f + episodesShadow.scaleY = 1.0f + } } } @@ -238,6 +236,7 @@ class ResultFragmentTv : Fragment() { // ===== ===== ===== binding?.apply { + //episodesShadow.rotationX = 180.0f//if(episodesShadow.isRtl()) 180.0f else 0.0f val leftListener: View.OnFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> @@ -264,6 +263,8 @@ class ResultFragmentTv : Fragment() { toggleEpisodes(!episodeHolderTv.isVisible) } + // resultEpisodes.onFocusChangeListener = leftListener + redirectToPlay.setOnFocusChangeListener { _, hasFocus -> if (!hasFocus) return@setOnFocusChangeListener toggleEpisodes(false) @@ -306,7 +307,7 @@ class ResultFragmentTv : Fragment() { } } - resultEpisodes.setLinearListLayout(false)/*.layoutManager = + resultEpisodes.setLinearListLayout(isHorizontal = false)/*.layoutManager = LinearListLayout(resultEpisodes.context, resultEpisodes.isRtl()).apply { setVertical() }*/ @@ -348,7 +349,10 @@ class ResultFragmentTv : Fragment() { ArrayList(), resultRecommendationsList, ) { callback -> - SearchHelper.handleSearchClickCallback(callback) + if(callback.action == SEARCH_ACTION_FOCUSED) + toggleEpisodes(false) + else + SearchHelper.handleSearchClickCallback(callback) } resultEpisodes.adapter = @@ -381,7 +385,9 @@ class ResultFragmentTv : Fragment() { }.apply { this.orientation = RecyclerView.HORIZONTAL } - resultCastItems.adapter = ActorAdaptor() + resultCastItems.adapter = ActorAdaptor { + toggleEpisodes(false) + } } observeNullable(viewModel.resumeWatching) { resume -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index 2b2269ff..e1b72b30 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -162,15 +162,42 @@ object SearchResultBuilder { } } - bg.setOnClickListener { - click(it) + bg.isFocusable = false + bg.isFocusableInTouchMode = false + if(!isTrueTvSettings()) { + bg.setOnClickListener { + click(it) + } + bg.setOnLongClickListener { + longClick(it) + return@setOnLongClickListener true + } } + // + // + // itemView.setOnClickListener { click(it) } - if (nextFocusUp != null) { + itemView.nextFocusUpId = nextFocusUp + } + + if (nextFocusDown != null) { + itemView.nextFocusDownId = nextFocusDown + } + + /*when (nextFocusBehavior) { + true -> itemView.nextFocusLeftId = bg.id + false -> itemView.nextFocusRightId = bg.id + null -> { + bg.nextFocusRightId = -1 + bg.nextFocusLeftId = -1 + } + }*/ + + /*if (nextFocusUp != null) { bg.nextFocusUpId = nextFocusUp } @@ -178,36 +205,26 @@ object SearchResultBuilder { bg.nextFocusDownId = nextFocusDown } - when (nextFocusBehavior) { - true -> bg.nextFocusLeftId = bg.id - false -> bg.nextFocusRightId = bg.id - null -> { - bg.nextFocusRightId = -1 - bg.nextFocusLeftId = -1 - } - } + */ if (isTrueTvSettings()) { - bg.isFocusable = true - bg.isFocusableInTouchMode = true - bg.touchscreenBlocksFocus = false + // bg.isFocusable = true + // bg.isFocusableInTouchMode = true + // bg.touchscreenBlocksFocus = false itemView.isFocusableInTouchMode = true itemView.isFocusable = true } - bg.setOnLongClickListener { - longClick(it) - return@setOnLongClickListener true - } + /**/ itemView.setOnLongClickListener { longClick(it) return@setOnLongClickListener true } - bg.setOnFocusChangeListener { view, b -> + /*bg.setOnFocusChangeListener { view, b -> focus(view, b) - } + }*/ itemView.setOnFocusChangeListener { view, b -> focus(view, b) diff --git a/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml index ebe459b2..dbda1cc0 100644 --- a/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml +++ b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml @@ -3,6 +3,7 @@ android:viewportWidth="48" android:viewportHeight="48" android:tint="?attr/white" + android:autoMirrored="true" xmlns:android="http://schemas.android.com/apk/res/android"> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_arrow_back_ios_24.xml b/app/src/main/res/drawable/ic_baseline_arrow_back_ios_24.xml index 6c3197a6..516df382 100644 --- a/app/src/main/res/drawable/ic_baseline_arrow_back_ios_24.xml +++ b/app/src/main/res/drawable/ic_baseline_arrow_back_ios_24.xml @@ -1,5 +1,11 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml b/app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml index 2ec8c110..48ac45e7 100644 --- a/app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml +++ b/app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml @@ -3,6 +3,7 @@ android:viewportWidth="48" android:viewportHeight="48" android:tint="?attr/white" + android:autoMirrored="true" xmlns:android="http://schemas.android.com/apk/res/android"> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_24.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_24.xml index 916c761c..b67188db 100644 --- a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_24.xml +++ b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_24.xml @@ -1,5 +1,11 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_language_24.xml b/app/src/main/res/drawable/ic_baseline_language_24.xml index 1749952e..89b47937 100644 --- a/app/src/main/res/drawable/ic_baseline_language_24.xml +++ b/app/src/main/res/drawable/ic_baseline_language_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_more_vert_24.xml b/app/src/main/res/drawable/ic_baseline_more_vert_24.xml index 249fe2a2..b6908e96 100644 --- a/app/src/main/res/drawable/ic_baseline_more_vert_24.xml +++ b/app/src/main/res/drawable/ic_baseline_more_vert_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_baseline_notifications_active_24.xml b/app/src/main/res/drawable/ic_baseline_notifications_active_24.xml index 2003bfe7..5d6045e7 100644 --- a/app/src/main/res/drawable/ic_baseline_notifications_active_24.xml +++ b/app/src/main/res/drawable/ic_baseline_notifications_active_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/netflix_skip_back.xml b/app/src/main/res/drawable/netflix_skip_back.xml index bb63e948..5ad9c1a1 100644 --- a/app/src/main/res/drawable/netflix_skip_back.xml +++ b/app/src/main/res/drawable/netflix_skip_back.xml @@ -1,23 +1,23 @@ + android:width="850.39dp" + android:height="850.39dp" + android:viewportWidth="850.39" + android:viewportHeight="850.39"> + android:fillColor="#00000000" + android:pathData="M143.05,279.28A317.41,317.41 0,0 0,106.3 428c0,176.13 142.77,318.9 318.9,318.9S744.09,604.16 744.09,428 601.32,109.14 425.2,109.14q-14.15,0 -28,1.2" + android:strokeWidth="45" + android:strokeColor="#fff" /> + android:fillColor="#fff" + android:pathData="M483.083,223.108l-111.666,-111.666l25.442,-25.442l111.666,111.666z" /> + android:fillColor="#fff" + android:pathData="M371.421,111.662l111.666,-111.666l25.442,25.442l-111.666,111.666z" /> + android:fillColor="#fff" + android:pathData="M398.087,223.272l-111.666,-111.666l25.442,-25.442l111.666,111.666z" /> + android:fillColor="#fff" + android:pathData="M286.427,111.826l111.666,-111.666l25.442,25.442l-111.666,111.666z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/outline_drawable_forced.xml b/app/src/main/res/drawable/outline_drawable_forced.xml new file mode 100644 index 00000000..16eba83c --- /dev/null +++ b/app/src/main/res/drawable/outline_drawable_forced.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main_tv.xml b/app/src/main/res/layout/activity_main_tv.xml index 77baf1d3..a70a40cd 100644 --- a/app/src/main/res/layout/activity_main_tv.xml +++ b/app/src/main/res/layout/activity_main_tv.xml @@ -83,7 +83,6 @@ android:layout_height="match_parent"> @@ -111,7 +111,7 @@ android:nextFocusLeft="@id/home_preview_play_btt" android:nextFocusRight="@id/home_preview_hidden_next_focus" android:nextFocusUp="@id/home_preview_change_api" - android:nextFocusDown="@id/home_watch_parent_item_title" + android:nextFocusDown="@id/home_watch_child_recyclerview" android:text="@string/home_info" app:icon="@drawable/ic_outline_info_24" /> diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 949ef2ef..324935e5 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -537,6 +537,7 @@ https://developer.android.com/design/ui/tv/samples/jet-fit + xmlns:tools="http://schemas.android.com/tools" + android:id="@android:id/text1" + style="@style/NoCheckLabel" + android:textColor="?attr/textColor" + android:textStyle="normal" + tools:text="hello" /> From 3bdbb35754a45472aad6383df51511f45c4c0dd5 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 30 Jul 2023 05:05:13 +0200 Subject: [PATCH 446/888] alert fix + synchronized + bump + homepage load fix + small focus change --- app/build.gradle.kts | 2 +- .../cloudstream3/ExampleInstrumentedTest.kt | 6 +- .../lagradost/cloudstream3/CommonActivity.kt | 58 +++++++++----- .../com/lagradost/cloudstream3/MainAPI.kt | 36 ++++++--- .../lagradost/cloudstream3/MainActivity.kt | 76 ++++++++++--------- .../metaproviders/CrossTmdbProvider.kt | 13 ++-- .../metaproviders/MultiAnimeProvider.kt | 17 +++-- .../lagradost/cloudstream3/plugins/Plugin.kt | 16 ++-- .../cloudstream3/plugins/PluginManager.kt | 13 +++- .../cloudstream3/ui/home/HomeFragment.kt | 3 +- .../ui/home/HomeParentItemAdapterPreview.kt | 4 +- .../cloudstream3/ui/home/HomeViewModel.kt | 76 +++++++++++++------ .../ui/library/LibraryFragment.kt | 14 ++-- .../ui/result/ResultViewModel2.kt | 22 +++--- .../cloudstream3/ui/search/SearchViewModel.kt | 4 +- .../ui/settings/SettingsFragment.kt | 3 + .../ui/settings/SettingsGeneral.kt | 5 +- .../ui/settings/SettingsProviders.kt | 6 +- .../ui/settings/testing/TestViewModel.kt | 6 +- .../ui/setup/SetupFragmentExtensions.kt | 2 +- .../ui/setup/SetupFragmentProviderLanguage.kt | 4 +- .../lagradost/cloudstream3/utils/DataStore.kt | 2 + .../lagradost/cloudstream3/utils/SyncUtil.kt | 6 +- .../cloudstream3/utils/TestingUtils.kt | 2 +- .../main/res/layout/fragment_home_head_tv.xml | 22 +++--- app/src/main/res/values/styles.xml | 3 +- 26 files changed, 265 insertions(+), 156 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f4886258..27bd1e48 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.0.1" + versionName = "4.1.1" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index 509ea4b9..df41ef91 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -46,9 +46,9 @@ class TestApplication : Activity() { @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { - private fun getAllProviders(): List { + private fun getAllProviders(): Array { println("Providers: ${APIHolder.allProviders.size}") - return APIHolder.allProviders //.filter { !it.usesWebView } + return APIHolder.allProviders.toTypedArray() //.filter { !it.usesWebView } } @Test @@ -147,7 +147,7 @@ class ExampleInstrumentedTest { @Test fun providerCorrectHomepage() { runBlocking { - getAllProviders().amap { api -> + getAllProviders().toList().amap { api -> TestingUtils.testHomepage(api, ::println) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 684e2269..9c7c319e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -9,6 +9,7 @@ import android.content.res.Resources import android.os.Build import android.util.Log import android.view.* +import android.view.View.NO_ID import android.widget.TextView import android.widget.Toast import androidx.activity.ComponentActivity @@ -295,6 +296,30 @@ object CommonActivity { ) // THEME IS SET BEFORE VIEW IS CREATED TO APPLY THE THEME TO THE MAIN VIEW } + /** because we want closes find, aka when multiple have the same id, we go to parent + until the correct one is found */ + private fun localLook(from: View, id: Int): View? { + if (id == NO_ID) return null + var currentLook: View = from + while (true) { + currentLook.findViewById(id)?.let { return it } + currentLook = (currentLook.parent as? View) ?: break + } + return null + } + /*var currentLook: View = view + while (true) { + val tmpNext = currentLook.findViewById(nextId) + if (tmpNext != null) { + next = tmpNext + break + } + currentLook = currentLook.parent as? View ?: break + }*/ + + /** recursively looks for a next focus up to a depth of 10, + * this is used to override the normal shit focus system + * because this application has a lot of invisible views that messes with some tv devices*/ private fun getNextFocus( act: Activity?, view: View?, @@ -306,7 +331,7 @@ object CommonActivity { return null } - val nextId = when (direction) { + var nextId = when (direction) { FocusDirection.Start -> { if (view.isRtl()) view.nextFocusRightId @@ -330,22 +355,16 @@ object CommonActivity { } } - // if view not found then return - if (nextId == -1) return null + if (nextId == NO_ID) { + // if not specified then use forward id + nextId = view.nextFocusForwardId + // if view is still not found to next focus then return and let android decide + if (nextId == NO_ID) return null + } + var next = act.findViewById(nextId) ?: return null - // because we want closes find, aka when multiple have the same id, we go to parent - // until the correct one is found - /*var currentLook: View = view - while (true) { - val tmpNext = currentLook.findViewById(nextId) - if (tmpNext != null) { - next = tmpNext - break - } - - currentLook = currentLook.parent as? View ?: break - }*/ + next = localLook(view, nextId) ?: next var currentLook: View = view while (currentLook.findViewById(nextId)?.also { next = it } == null) { @@ -362,7 +381,7 @@ object CommonActivity { return next } - enum class FocusDirection { + private enum class FocusDirection { Start, End, Up, @@ -463,6 +482,7 @@ object CommonActivity { //} } + /** overrides focus and custom key events */ fun dispatchKeyEvent(act: Activity?, event: KeyEvent?): Boolean? { if (act == null) return null val currentFocus = act.currentFocus @@ -503,7 +523,9 @@ object CommonActivity { return true } - if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && (act.currentFocus is SearchView || act.currentFocus is SearchView.SearchAutoComplete)) { + if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && + (act.currentFocus is SearchView || act.currentFocus is SearchView.SearchAutoComplete) + ) { UIHelper.showInputMethod(act.currentFocus?.findFocus()) } @@ -516,6 +538,8 @@ object CommonActivity { } + // if someone else want to override the focus then don't handle the event as it is already + // consumed. used in video player if (keyEventListener?.invoke(Pair(event, false)) == true) { return true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 86252b40..51d218bf 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -50,8 +50,10 @@ object APIHolder { val allProviders = threadSafeListOf() fun initAll() { - for (api in allProviders) { - api.init() + synchronized(allProviders) { + for (api in allProviders) { + api.init() + } } apiMap = null } @@ -64,27 +66,35 @@ object APIHolder { var apiMap: Map? = null fun addPluginMapping(plugin: MainAPI) { - apis = apis + plugin + synchronized(apis) { + apis = apis + plugin + } initMap(true) } fun removePluginMapping(plugin: MainAPI) { - apis = apis.filter { it != plugin } + synchronized(apis) { + apis = apis.filter { it != plugin } + } initMap(true) } private fun initMap(forcedUpdate: Boolean = false) { - if (apiMap == null || forcedUpdate) - apiMap = apis.mapIndexed { index, api -> api.name to index }.toMap() + synchronized(apis) { + if (apiMap == null || forcedUpdate) + apiMap = apis.mapIndexed { index, api -> api.name to index }.toMap() + } } fun getApiFromNameNull(apiName: String?): MainAPI? { if (apiName == null) return null synchronized(allProviders) { initMap() - return apiMap?.get(apiName)?.let { apis.getOrNull(it) } - // Leave the ?. null check, it can crash regardless - ?: allProviders.firstOrNull { it.name == apiName } + synchronized(apis) { + return apiMap?.get(apiName)?.let { apis.getOrNull(it) } + // Leave the ?. null check, it can crash regardless + ?: allProviders.firstOrNull { it.name == apiName } + } } } @@ -215,7 +225,7 @@ object APIHolder { val hashSet = HashSet() val activeLangs = getApiProviderLangSettings() val hasUniversal = activeLangs.contains(AllLanguagesName) - hashSet.addAll(apis.filter { hasUniversal || activeLangs.contains(it.lang) } + hashSet.addAll(synchronized(apis) { apis.filter { hasUniversal || activeLangs.contains(it.lang) } } .map { it.name }) /*val set = settingsManager.getStringSet( @@ -314,8 +324,9 @@ object APIHolder { } ?: default val langs = this.getApiProviderLangSettings() val hasUniversal = langs.contains(AllLanguagesName) - val allApis = apis.filter { hasUniversal || langs.contains(it.lang) } - .filter { api -> api.hasMainPage || !hasHomePageIsRequired } + val allApis = synchronized(apis) { + apis.filter { api -> (hasUniversal || langs.contains(api.lang)) && (api.hasMainPage || !hasHomePageIsRequired) } + } return if (currentPrefMedia.isEmpty()) { allApis } else { @@ -736,6 +747,7 @@ fun fixTitle(str: String): String { .replaceFirstChar { char -> if (char.isLowerCase()) char.titlecase(Locale.getDefault()) else it } } } + /** * Get rhino context in a safe way as it needs to be initialized on the main thread. * Make sure you get the scope using: val scope: Scriptable = rhino.initSafeStandardObjects() diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 3dd5a495..1083ad49 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -382,10 +382,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { this.navigate(R.id.navigation_downloads) return true } else { - for (api in apis) { - if (str.startsWith(api.mainUrl)) { - loadResult(str, api.name) - return true + synchronized(apis) { + for (api in apis) { + if (str.startsWith(api.mainUrl)) { + loadResult(str, api.name) + return true + } } } } @@ -464,9 +466,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { binding?.navHostFragment?.apply { val params = layoutParams as ConstraintLayout.LayoutParams - val push = if (!dontPush && isTvSettings()) resources.getDimensionPixelSize(R.dimen.navbar_width) else 0 + val push = + if (!dontPush && isTvSettings()) resources.getDimensionPixelSize(R.dimen.navbar_width) else 0 - if(!this.isLtr()) { + if (!this.isLtr()) { params.setMargins( params.leftMargin, params.topMargin, @@ -695,27 +698,29 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { private fun onAllPluginsLoaded(success: Boolean = false) { ioSafe { pluginsLock.withLock { - // Load cloned sites after plugins have been loaded since clones depend on plugins. - try { - getKey>(USER_PROVIDER_API)?.let { list -> - list.forEach { custom -> - allProviders.firstOrNull { it.javaClass.simpleName == custom.parentJavaClass } - ?.let { - allProviders.add(it.javaClass.newInstance().apply { - name = custom.name - lang = custom.lang - mainUrl = custom.url.trimEnd('/') - canBeOverridden = false - }) - } + synchronized(allProviders) { + // Load cloned sites after plugins have been loaded since clones depend on plugins. + try { + getKey>(USER_PROVIDER_API)?.let { list -> + list.forEach { custom -> + allProviders.firstOrNull { it.javaClass.simpleName == custom.parentJavaClass } + ?.let { + allProviders.add(it.javaClass.newInstance().apply { + name = custom.name + lang = custom.lang + mainUrl = custom.url.trimEnd('/') + canBeOverridden = false + }) + } + } } + // it.hashCode() is not enough to make sure they are distinct + apis = + allProviders.distinctBy { it.lang + it.name + it.mainUrl + it.javaClass.name } + APIHolder.apiMap = null + } catch (e: Exception) { + logError(e) } - // it.hashCode() is not enough to make sure they are distinct - apis = - allProviders.distinctBy { it.lang + it.name + it.mainUrl + it.javaClass.name } - APIHolder.apiMap = null - } catch (e: Exception) { - logError(e) } } } @@ -814,6 +819,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { translationX = target.x translationY = target.y + bringToFront() } } @@ -839,10 +845,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val out = IntArray(2) newFocus.getLocationInWindow(out) val (screenX, screenY) = out - var (x,y) = screenX.toFloat() to screenY.toFloat() + var (x, y) = screenX.toFloat() to screenY.toFloat() val (currentX, currentY) = focusOutline.translationX to focusOutline.translationY - // println(">><<< $x $y $currentX $currentY") - if(!newFocus.isLtr()) { + // println(">><<< $x $y $currentX $currentY") + if (!newFocus.isLtr()) { x = x - focusOutline.rootView.width + newFocus.measuredWidth } @@ -1195,7 +1201,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { ioSafe { initAll() // No duplicates (which can happen by registerMainAPI) - apis = allProviders.distinctBy { it } + apis = synchronized(allProviders) { + allProviders.distinctBy { it } + } } // val navView: BottomNavigationView = findViewById(R.id.nav_view) @@ -1347,8 +1355,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { }*/ if (BuildConfig.DEBUG) { - try { - var providersAndroidManifestString = "Current androidmanifest should be:\n" + var providersAndroidManifestString = "Current androidmanifest should be:\n" + synchronized(allProviders) { for (api in allProviders) { providersAndroidManifestString += "\n" } - println(providersAndroidManifestString) - - } catch (t: Throwable) { - logError(t) } - + println(providersAndroidManifestString) } handleAppIntent(intent) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt index 07aa904e..5bbb4538 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/CrossTmdbProvider.kt @@ -21,10 +21,11 @@ class CrossTmdbProvider : TmdbProvider() { return Regex("""[^a-zA-Z0-9-]""").replace(name, "") } - private val validApis by lazy { - apis.filter { it.lang == this.lang && it::class.java != this::class.java } - //.distinctBy { it.uniqueId } - } + private val validApis + get() = + synchronized(apis) { apis.filter { it.lang == this.lang && it::class.java != this::class.java } } + //.distinctBy { it.uniqueId } + data class CrossMetaData( @JsonProperty("isSuccess") val isSuccess: Boolean, @@ -60,7 +61,8 @@ class CrossTmdbProvider : TmdbProvider() { override suspend fun load(url: String): LoadResponse? { val base = super.load(url)?.apply { - this.recommendations = this.recommendations?.filterIsInstance() // TODO REMOVE + this.recommendations = + this.recommendations?.filterIsInstance() // TODO REMOVE val matchName = filterName(this.name) when (this) { is MovieLoadResponse -> { @@ -98,6 +100,7 @@ class CrossTmdbProvider : TmdbProvider() { this.dataUrl = CrossMetaData(true, data.map { it.apiName to it.dataUrl }).toJson() } + else -> { throw ErrorLoadingException("Nothing besides movies are implemented for this provider") } diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt index e8ac1876..8cfe1e9a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/MultiAnimeProvider.kt @@ -25,13 +25,16 @@ class MultiAnimeProvider : MainAPI() { } } - private val validApis by lazy { - APIHolder.apis.filter { - it.lang == this.lang && it::class.java != this::class.java && it.supportedTypes.contains( - TvType.Anime - ) - } - } + private val validApis + get() = + synchronized(APIHolder.apis) { + APIHolder.apis.filter { + it.lang == this.lang && it::class.java != this::class.java && it.supportedTypes.contains( + TvType.Anime + ) + } + } + private fun filterName(name: String): String { return Regex("""[^a-zA-Z0-9-]""").replace(name, "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt index 242baf59..6b7dc90b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt @@ -36,7 +36,9 @@ abstract class Plugin { Log.i(PLUGIN_TAG, "Adding ${element.name} (${element.mainUrl}) MainAPI") element.sourcePlugin = this.__filename // Race condition causing which would case duplicates if not for distinctBy - APIHolder.allProviders.add(element) + synchronized(APIHolder.allProviders) { + APIHolder.allProviders.add(element) + } APIHolder.addPluginMapping(element) } @@ -51,10 +53,14 @@ abstract class Plugin { } class Manifest { - @JsonProperty("name") var name: String? = null - @JsonProperty("pluginClassName") var pluginClassName: String? = null - @JsonProperty("version") var version: Int? = null - @JsonProperty("requiresResources") var requiresResources: Boolean = false + @JsonProperty("name") + var name: String? = null + @JsonProperty("pluginClassName") + var pluginClassName: String? = null + @JsonProperty("version") + var version: Int? = null + @JsonProperty("requiresResources") + var requiresResources: Boolean = false } /** diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 0dee57eb..49b5a752 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -163,7 +163,8 @@ object PluginManager { private val classLoaders: MutableMap = HashMap() - private var loadedLocalPlugins = false + var loadedLocalPlugins = false + private set private val gson = Gson() private suspend fun maybeLoadPlugin(context: Context, file: File) { @@ -531,10 +532,14 @@ object PluginManager { } // remove all registered apis - APIHolder.apis.filter { api -> api.sourcePlugin == plugin.__filename }.forEach { - removePluginMapping(it) + synchronized(APIHolder.apis) { + APIHolder.apis.filter { api -> api.sourcePlugin == plugin.__filename }.forEach { + removePluginMapping(it) + } + } + synchronized(APIHolder.allProviders) { + APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.__filename } } - APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.__filename } extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.__filename } classLoaders.values.removeIf { v -> v == plugin } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index eb12c411..a6e1b5e6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -462,7 +462,7 @@ class HomeFragment : Fragment() { private val apiChangeClickListener = View.OnClickListener { view -> view.context.selectHomepage(currentApiName) { api -> - homeViewModel.loadAndCancel(api) + homeViewModel.loadAndCancel(api, forceReload = true,fromUI = true) } /*val validAPIs = view.context?.filterProviderByPreferredMedia()?.toMutableList() ?: mutableListOf() @@ -652,6 +652,7 @@ class HomeFragment : Fragment() { } homeViewModel.reloadStored() + homeViewModel.loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), false) //loadHomePage(false) // nice profile pic on homepage diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index ce7b8447..fd2412da 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -447,12 +447,12 @@ class HomeParentItemAdapterPreview( (binding as? FragmentHomeHeadTvBinding)?.apply { homePreviewChangeApi.setOnClickListener { view -> view.context.selectHomepage(viewModel.repo?.name) { api -> - viewModel.loadAndCancel(api) + viewModel.loadAndCancel(api, forceReload = true, fromUI = true) } } homePreviewChangeApi2.setOnClickListener { view -> view.context.selectHomepage(viewModel.repo?.name) { api -> - viewModel.loadAndCancel(api) + viewModel.loadAndCancel(api, forceReload = true, fromUI = true) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index 563a326e..a2dc9821 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.filterHomePageListByFilmQuality import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia @@ -15,12 +14,22 @@ 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.CommonActivity.activity -import com.lagradost.cloudstream3.mvvm.* +import com.lagradost.cloudstream3.HomePageList +import com.lagradost.cloudstream3.LoadResponse +import com.lagradost.cloudstream3.MainAPI +import com.lagradost.cloudstream3.MainActivity +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.amap +import com.lagradost.cloudstream3.mvvm.Resource +import com.lagradost.cloudstream3.mvvm.debugAssert +import com.lagradost.cloudstream3.mvvm.debugWarning +import com.lagradost.cloudstream3.mvvm.launchSafe +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi import com.lagradost.cloudstream3.ui.WatchType -import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.loadHomepageList import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_FOCUSED import com.lagradost.cloudstream3.ui.search.SearchClickCallback @@ -30,8 +39,6 @@ import com.lagradost.cloudstream3.utils.AppUtils.addProgramsToContinueWatching import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE -import com.lagradost.cloudstream3.utils.DataStore.getKey -import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds @@ -44,7 +51,7 @@ import com.lagradost.cloudstream3.utils.VideoDownloadHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.withContext -import java.util.* +import java.util.EnumSet import kotlin.collections.set class HomeViewModel : ViewModel() { @@ -95,7 +102,7 @@ class HomeViewModel : ViewModel() { private var currentShuffledList: List = listOf() private fun autoloadRepo(): APIRepository { - return APIRepository(apis.first { it.hasMainPage }) + return APIRepository(synchronized(apis) { apis.first { it.hasMainPage }}) } private val _availableWatchStatusTypes = @@ -177,8 +184,10 @@ class HomeViewModel : ViewModel() { } private var onGoingLoad: Job? = null - private fun loadAndCancel(api: MainAPI?) { + private var isCurrentlyLoadingName : String? = null + private fun loadAndCancel(api: MainAPI) { onGoingLoad?.cancel() + isCurrentlyLoadingName = api.name onGoingLoad = load(api) } @@ -280,12 +289,12 @@ class HomeViewModel : ViewModel() { } } - private fun load(api: MainAPI?) = ioSafe { - repo = if (api != null) { + private fun load(api: MainAPI) : Job = ioSafe { + repo = //if (api != null) { APIRepository(api) - } else { - autoloadRepo() - } + //} else { + // autoloadRepo() + //} _apiName.postValue(repo?.name) _randomItems.postValue(listOf()) @@ -299,6 +308,7 @@ class HomeViewModel : ViewModel() { _page.postValue(Resource.Loading()) _preview.postValue(Resource.Loading()) + // cancel the current preview expand as that is no longer relevant addJob?.cancel() when (val data = repo?.getMainPage(1, null)) { @@ -370,7 +380,7 @@ class HomeViewModel : ViewModel() { else -> Unit } - onGoingLoad = null + isCurrentlyLoadingName = null } fun click(callback: SearchClickCallback) { @@ -437,33 +447,51 @@ class HomeViewModel : ViewModel() { loadResult(load.response.url, load.response.apiName, load.action) } - fun loadAndCancel(preferredApiName: String?, forceReload: Boolean = true) = - viewModelScope.launchSafe { + // only save the key if it is from UI, as we don't want internal functions changing the setting + fun loadAndCancel( + preferredApiName: String?, + forceReload: Boolean = true, + fromUI: Boolean = false + ) = + ioSafe { // Since plugins are loaded in stages this function can get called multiple times. // The issue with this is that the homepage may be fetched multiple times while the first request is loading val api = getApiFromNameNull(preferredApiName) - if (!forceReload && api?.let { expandable[it.name]?.list?.list?.isNotEmpty() } == true) { - return@launchSafe + // api?.let { expandable[it.name]?.list?.list?.isNotEmpty() } == true + val currentPage = page.value + + // if we don't need to reload and we have a valid homepage or currently loading the same thing then return + val currentLoading = isCurrentlyLoadingName + if (!forceReload && (currentPage is Resource.Success && currentPage.value.isNotEmpty() || (currentLoading != null && currentLoading == preferredApiName))) { + return@ioSafe } if (preferredApiName == noneApi.name) { - setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) + // just set to random + if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) loadAndCancel(noneApi) } else if (preferredApiName == randomApi.name) { + // randomize the api, if none exist like if not loaded or not installed + // then use nothing val validAPIs = context?.filterProviderByPreferredMedia() if (validAPIs.isNullOrEmpty()) { - // Do not set USER_SELECTED_HOMEPAGE_API when there is no plugins loaded loadAndCancel(noneApi) } else { val apiRandom = validAPIs.random() loadAndCancel(apiRandom) - setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name) + if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name) } - // If the plugin isn't loaded yet. (Does not set the key) } else if (api == null) { - loadAndCancel(noneApi) + // API is not found aka not loaded or removed, post the loading + // progress if waiting for plugins, otherwise nothing + if(PluginManager.loadedLocalPlugins) { + loadAndCancel(noneApi) + } else { + _page.postValue(Resource.Loading()) + } } else { - setKey(USER_SELECTED_HOMEPAGE_API, api.name) + // if the api is found, then set it to it and save key + if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, api.name) loadAndCancel(api) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index a20cd5c6..04ef3d96 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -163,12 +163,14 @@ class LibraryFragment : Fragment() { syncId: SyncIdName, apiName: String? = null, ) { - val availableProviders = allProviders.filter { - it.supportedSyncNames.contains(syncId) - }.map { it.name } + - // Add the api if it exists - (APIHolder.getApiFromNameNull(apiName)?.let { listOf(it.name) } ?: emptyList()) - + val availableProviders = synchronized(allProviders) { + allProviders.filter { + it.supportedSyncNames.contains(syncId) + }.map { it.name } + + // Add the api if it exists + (APIHolder.getApiFromNameNull(apiName)?.let { listOf(it.name) } + ?: emptyList()) + } val baseOptions = listOf( LibraryOpenerType.Default, LibraryOpenerType.None, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 88f55444..011d133d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -321,7 +321,7 @@ data class ExtractedTrailerData( class ResultViewModel2 : ViewModel() { private var currentResponse: LoadResponse? = null - var EPISODE_RANGE_SIZE : Int = 20 + var EPISODE_RANGE_SIZE: Int = 20 fun clear() { currentResponse = null _page.postValue(null) @@ -456,7 +456,7 @@ class ResultViewModel2 : ViewModel() { currentResponse.year ) ) - if(currentWatchType != status) { + if (currentWatchType != status) { MainActivity.bookmarksUpdatedEvent(true) } } @@ -477,7 +477,10 @@ class ResultViewModel2 : ViewModel() { ) ) - private fun getRanges(allEpisodes: Map>, EPISODE_RANGE_SIZE : Int): Map> { + private fun getRanges( + allEpisodes: Map>, + EPISODE_RANGE_SIZE: Int + ): Map> { return allEpisodes.keys.mapNotNull { index -> val episodes = allEpisodes[index] ?: return@mapNotNull null // this should never happened @@ -1505,13 +1508,14 @@ class ResultViewModel2 : ViewModel() { } val realRecommendations = ArrayList() - val apiNames = apis.filter { - it.name.contains("gogoanime", true) || - it.name.contains("9anime", true) - }.map { - it.name + val apiNames = synchronized(apis) { + apis.filter { + it.name.contains("gogoanime", true) || + it.name.contains("9anime", true) + }.map { + it.name + } } - meta.recommendations?.forEach { rec -> apiNames.forEach { name -> realRecommendations.add(rec.copy(apiName = name)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt index aceda644..320687f8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt @@ -37,7 +37,7 @@ class SearchViewModel : ViewModel() { private val _currentHistory: MutableLiveData> = MutableLiveData() val currentHistory: LiveData> get() = _currentHistory - private var repos = apis.map { APIRepository(it) } + private var repos = synchronized(apis) { apis.map { APIRepository(it) } } fun clearSearch() { _searchResponse.postValue(Resource.Success(ArrayList())) @@ -48,7 +48,7 @@ class SearchViewModel : ViewModel() { private var onGoingSearch: Job? = null fun reloadRepos() { - repos = apis.map { APIRepository(it) } + repos = synchronized(apis) { apis.map { APIRepository(it) } } } fun searchAndCancel( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 070389b0..e53fa91a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -8,7 +8,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import androidx.annotation.StringRes +import androidx.core.view.children import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.preference.Preference @@ -74,6 +76,7 @@ class SettingsFragment : Fragment() { settingsToolbar.apply { setTitle(title) setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) + children.firstOrNull { it is ImageView }?.tag = getString(R.string.tv_no_focus_tag) setNavigationOnClickListener { activity?.onBackPressed() } 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 b308efc7..85dd9540 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 @@ -20,6 +20,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.databinding.AddRemoveSitesBinding @@ -188,7 +189,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { fun showAdd() { - val providers = allProviders.distinctBy { it.javaClass }.sortedBy { it.name } + val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } } activity?.showDialog( providers.map { "${it.name} (${it.mainUrl})" }, -1, @@ -221,6 +222,8 @@ class SettingsGeneral : PreferenceFragmentCompat() { val newSite = CustomSite(provider.javaClass.simpleName, name, url, realLang) current.add(newSite) setKey(USER_PROVIDER_API, current.toTypedArray()) + // reload apis + MainActivity.afterPluginsLoadedEvent.invoke(false) dialog.dismissSafe(activity) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index 42a864a6..0bef5e9a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -105,8 +105,10 @@ class SettingsProviders : PreferenceFragmentCompat() { getPref(R.string.provider_lang_key)?.setOnPreferenceClickListener { activity?.getApiProviderLangSettings()?.let { current -> - val languages = APIHolder.apis.map { it.lang }.toSet() - .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + AllLanguagesName + val languages = synchronized(APIHolder.apis) { + APIHolder.apis.map { it.lang }.toSet() + .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + AllLanguagesName + } val currentList = current.map { languages.indexOf(it) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt index 2e05baff..4fd24afe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt @@ -10,6 +10,7 @@ import com.lagradost.cloudstream3.utils.TestingUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel +import okhttp3.internal.toImmutableList class TestViewModel : ViewModel() { data class TestProgress( @@ -81,15 +82,14 @@ class TestViewModel : ViewModel() { } fun init() { - val apis = APIHolder.allProviders - total = apis.size + total = synchronized(APIHolder.allProviders) { APIHolder.allProviders.size } updateProgress() } fun startTest() { scope = CoroutineScope(Dispatchers.Default) - val apis = APIHolder.allProviders + val apis = synchronized(APIHolder.allProviders) { APIHolder.allProviders.toTypedArray() } total = apis.size failed = 0 passed = 0 diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt index 138a31a3..4369b22f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt @@ -107,7 +107,7 @@ class SetupFragmentExtensions : Fragment() { if (isSetup) if ( // If any available languages - apis.distinctBy { it.lang }.size > 1 + synchronized(apis) { apis.distinctBy { it.lang }.size > 1 } ) { findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_provider_languages) } else { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt index 8637fc99..59dcc402 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt @@ -51,8 +51,8 @@ class SetupFragmentProviderLanguage : Fragment() { ArrayAdapter(ctx, R.layout.sort_bottom_single_choice) val current = ctx.getApiProviderLangSettings() - val langs = APIHolder.apis.map { it.lang }.toSet() - .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + AllLanguagesName + val langs = synchronized(APIHolder.apis) { APIHolder.apis.map { it.lang }.toSet() + .sortedBy { SubtitleHelper.fromTwoLettersToLanguage(it) } + AllLanguagesName} val currentList = current.map { langs.indexOf(it) }.filter { it != -1 } // TODO LOOK INTO diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt index e1cedd39..dd2b40a3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt @@ -18,6 +18,8 @@ const val USER_PROVIDER_API = "user_custom_sites" const val PREFERENCES_NAME = "rebuild_preference" +// TODO degelgate by value for get & set + object DataStore { val mapper: JsonMapper = JsonMapper.builder().addModule(KotlinModule()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build() diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt index 817e9235..71d3a1ef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt @@ -96,8 +96,10 @@ object SyncUtil { .mapNotNull { it.url }.toMutableList() if (type == "anilist") { // TODO MAKE BETTER - apis.filter { it.name.contains("Aniflix", ignoreCase = true) }.forEach { - current.add("${it.mainUrl}/anime/$id") + synchronized(apis) { + apis.filter { it.name.contains("Aniflix", ignoreCase = true) }.forEach { + current.add("${it.mainUrl}/anime/$id") + } } } return current diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt index 66e1e504..dd973538 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt @@ -211,7 +211,7 @@ object TestingUtils { fun getDeferredProviderTests( scope: CoroutineScope, - providers: List, + providers: Array, logger: (String) -> Unit, callback: (MainAPI, TestResultProvider) -> Unit ) { diff --git a/app/src/main/res/layout/fragment_home_head_tv.xml b/app/src/main/res/layout/fragment_home_head_tv.xml index 0a2c52b2..8592daea 100644 --- a/app/src/main/res/layout/fragment_home_head_tv.xml +++ b/app/src/main/res/layout/fragment_home_head_tv.xml @@ -1,13 +1,13 @@ - + android:orientation="vertical"> @@ -39,7 +39,9 @@ android:layout_width="wrap_content" android:layout_gravity="top|start" android:layout_marginStart="@dimen/navbar_width" - android:minWidth="150dp" /> + android:minWidth="150dp" + android:nextFocusLeft="@id/nav_rail_view" + android:nextFocusDown="@id/home_preview_play_btt" /> + android:minWidth="150dp" + android:nextFocusLeft="@id/nav_rail_view" + android:nextFocusDown="@id/home_watch_child_recyclerview" /> @null - @drawable/outline_drawable_less + @drawable/outline_drawable_forced false @@ -572,6 +572,7 @@ @drawable/ic_baseline_check_24_listview + + + - \ No newline at end of file + From 3ac462ae9625f8a546e0c95f947da00c6283eba3 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:20:51 +0200 Subject: [PATCH 478/888] changed UI a bit for flashbang + fixed crash inf loading bug --- app/build.gradle.kts | 2 +- .../lagradost/cloudstream3/MainActivity.kt | 30 ++-- .../cloudstream3/ui/home/HomeFragment.kt | 23 ++- .../ui/home/HomeParentItemAdapterPreview.kt | 55 +++---- .../cloudstream3/ui/home/HomeViewModel.kt | 3 +- .../ui/settings/SettingsUpdates.kt | 4 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 7 +- .../res/color/player_on_button_tv_attr.xml | 5 + app/src/main/res/color/white_attr_20.xml | 4 + .../res/drawable/player_button_tv_attr.xml | 15 ++ .../drawable/player_button_tv_attr_no_bg.xml | 9 ++ app/src/main/res/layout/fragment_home.xml | 47 ++++-- .../main/res/layout/fragment_home_head.xml | 24 ++-- .../main/res/layout/fragment_home_head_tv.xml | 135 +++++++++++------- app/src/main/res/layout/fragment_home_tv.xml | 52 ++++--- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/colors.xml | 1 - app/src/main/res/values/strings.xml | 1 - app/src/main/res/values/styles.xml | 19 ++- 19 files changed, 252 insertions(+), 185 deletions(-) create mode 100644 app/src/main/res/color/player_on_button_tv_attr.xml create mode 100644 app/src/main/res/color/white_attr_20.xml create mode 100644 app/src/main/res/drawable/player_button_tv_attr.xml create mode 100644 app/src/main/res/drawable/player_button_tv_attr_no_bg.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9300775c..cfe89c05 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -51,7 +51,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.1.2" + versionName = "4.1.3" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index d6e275ed..a8160d33 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -278,7 +278,7 @@ var app = Requests(responseParser = object : ResponseParser { class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" - + var lastError: String? = null /** * Setting this will automatically enter the query in the search * next time the search fragment is opened. @@ -599,22 +599,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } override fun dispatchKeyEvent(event: KeyEvent?): Boolean { - val start = System.currentTimeMillis() - try { - val response = CommonActivity.dispatchKeyEvent(this, event) - - if (response != null) - return response - } finally { - debugAssert({ - val end = System.currentTimeMillis() - val delta = end - start - delta > 100 - }) { - "Took over 100ms to navigate, smth is VERY wrong" - } - } - + val response = CommonActivity.dispatchKeyEvent(this, event) + if (response != null) + return response return super.dispatchKeyEvent(event) } @@ -1054,10 +1041,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) val errorFile = filesDir.resolve("last_error") - var lastError: String? = null if (errorFile.exists() && errorFile.isFile) { lastError = errorFile.readText(Charset.defaultCharset()) errorFile.delete() + } else { + lastError = null } val settingsForProvider = SettingsJson() @@ -1167,16 +1155,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } //Automatically download not existing plugins, using mode specified. - val auto_download_plugin = AutoDownloadMode.getEnum( + val autoDownloadPlugin = AutoDownloadMode.getEnum( settingsManager.getInt( getString(R.string.auto_download_plugins_key), 0 ) ) ?: AutoDownloadMode.Disable - if (auto_download_plugin != AutoDownloadMode.Disable) { + if (autoDownloadPlugin != AutoDownloadMode.Disable) { PluginManager.downloadNotExistingPluginsAndLoad( this@MainActivity, - auto_download_plugin + autoDownloadPlugin ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 6f9a1654..fa0b6dfb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -513,9 +513,13 @@ class HomeFragment : Fragment() { fixGrid() binding?.apply { - homeChangeApiLoading.setOnClickListener(apiChangeClickListener) + //homeChangeApiLoading.setOnClickListener(apiChangeClickListener) //homeChangeApiLoading.setOnClickListener(apiChangeClickListener) homeApiFab.setOnClickListener(apiChangeClickListener) + homeChangeApi.setOnClickListener(apiChangeClickListener) + homeSwitchAccount.setOnClickListener { v -> + DataStoreHelper.showWhoIsWatching(v?.context ?: return@setOnClickListener) + } homeRandom.setOnClickListener { if (listHomepageItems.isNotEmpty()) { activity.loadSearchResult(listHomepageItems.random()) @@ -527,21 +531,9 @@ class HomeFragment : Fragment() { mutableListOf(), homeViewModel ) - fixPaddingStatusbar(homeLoadingStatusbar) + //fixPaddingStatusbar(homeLoadingStatusbar) - if (isTvSettings()) { - homeApiFab.isVisible = false - if (isTrueTvSettings()) { - homeChangeApiLoading.isVisible = true - homeChangeApiLoading.isFocusable = true - homeChangeApiLoading.isFocusableInTouchMode = true - } - // home_bookmark_select?.isFocusable = true - // home_bookmark_select?.isFocusableInTouchMode = true - } else { - homeApiFab.isVisible = true - homeChangeApiLoading.isVisible = false - } + homeApiFab.isVisible = !isTvSettings() homeMasterRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { @@ -574,6 +566,7 @@ class HomeFragment : Fragment() { observe(homeViewModel.apiName) { apiName -> currentApiName = apiName binding?.homeApiFab?.text = apiName + binding?.homeChangeApi?.text = apiName } observe(homeViewModel.page) { data -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 1684dfe5..943f784a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.ui.home import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.core.view.isGone @@ -13,7 +12,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.chip.Chip -import com.google.android.material.chip.ChipDrawable import com.google.android.material.chip.ChipGroup import com.lagradost.cloudstream3.APIHolder.getId import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity @@ -41,10 +39,9 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSet import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectStringRes -import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarMargin import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView -import com.lagradost.cloudstream3.utils.UIHelper.setImage +import com.lagradost.cloudstream3.utils.UIHelper.populateChips class HomeParentItemAdapterPreview( items: MutableList, @@ -245,7 +242,11 @@ class HomeParentItemAdapterPreview( private val previewViewpager: ViewPager2 = itemView.findViewById(R.id.home_preview_viewpager) - private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview) + + private val previewViewpagerText: ViewGroup = + itemView.findViewById(R.id.home_preview_viewpager_text) + + // private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview) private var resumeHolder: View = itemView.findViewById(R.id.home_watch_holder) private var resumeRecyclerView: RecyclerView = itemView.findViewById(R.id.home_watch_child_recyclerview) @@ -254,7 +255,7 @@ class HomeParentItemAdapterPreview( itemView.findViewById(R.id.home_bookmarked_child_recyclerview) private var homeAccount: View? = - itemView.findViewById(R.id.home_switch_account) + itemView.findViewById(R.id.home_preview_switch_account) private var topPadding : View? = itemView.findViewById(R.id.home_padding) @@ -282,26 +283,8 @@ class HomeParentItemAdapterPreview( item.plot ?: "" homePreviewText.text = item.name - homePreviewTags.apply { - removeAllViews() - item.tags?.forEach { tag -> - val chip = Chip(context) - val chipDrawable = - ChipDrawable.createFromAttributes( - context, - null, - 0, - R.style.ChipFilledSemiTransparent - ) - chip.setChipDrawable(chipDrawable) - chip.text = tag - chip.isChecked = false - chip.isCheckable = false - chip.isFocusable = false - chip.isClickable = false - addView(chip) - } - } + populateChips(homePreviewTags,item.tags ?: emptyList(), R.style.ChipFilledSemiTransparent) + homePreviewTags.isGone = item.tags.isNullOrEmpty() @@ -324,7 +307,7 @@ class HomeParentItemAdapterPreview( } (binding as? FragmentHomeHeadBinding)?.apply { - homePreviewImage.setImage(item.posterUrl, item.posterHeaders) + //homePreviewImage.setImage(item.posterUrl, item.posterHeaders) homePreviewPlay.setOnClickListener { view -> viewModel.click( @@ -402,7 +385,6 @@ class HomeParentItemAdapterPreview( if (binding is FragmentHomeHeadTvBinding) { observe(viewModel.apiName) { name -> binding.homePreviewChangeApi.text = name - binding.homePreviewChangeApi2.text = name } } observe(viewModel.resumeWatching) { @@ -468,11 +450,6 @@ class HomeParentItemAdapterPreview( viewModel.loadAndCancel(api, forceReload = true, fromUI = true) } } - homePreviewChangeApi2.setOnClickListener { view -> - view.context.selectHomepage(viewModel.repo?.name) { api -> - viewModel.loadAndCancel(api, forceReload = true, fromUI = true) - } - } // This makes the hidden next buttons only available when on the info button // Otherwise you might be able to go to the next item without being at the info button @@ -517,10 +494,6 @@ class HomeParentItemAdapterPreview( } private fun updatePreview(preview: Resource>>) { - if (binding is FragmentHomeHeadTvBinding) { - binding.homePreviewChangeApi2.isGone = preview is Resource.Success - } - if (preview is Resource.Success) { homeNonePadding.apply { val params = layoutParams @@ -545,14 +518,18 @@ class HomeParentItemAdapterPreview( previewViewpager.fakeDragBy(1f) previewViewpager.endFakeDrag() previewCallback.onPageSelected(0) - previewHeader.isVisible = true + previewViewpager.isVisible = true + previewViewpagerText.isVisible = true + //previewHeader.isVisible = true } } else -> { previewAdapter.setItems(listOf(), false) previewViewpager.setCurrentItem(0, false) - previewHeader.isVisible = false + previewViewpager.isVisible = false + previewViewpagerText.isVisible = false + //previewHeader.isVisible = false } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index a2dc9821..b1ced59e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -18,6 +18,7 @@ import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.MainActivity +import com.lagradost.cloudstream3.MainActivity.Companion.lastError import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.mvvm.Resource @@ -484,7 +485,7 @@ class HomeViewModel : ViewModel() { } else if (api == null) { // API is not found aka not loaded or removed, post the loading // progress if waiting for plugins, otherwise nothing - if(PluginManager.loadedLocalPlugins) { + if(PluginManager.loadedLocalPlugins || PluginManager.checkSafeModeFile() || lastError != null) { loadAndCancel(noneApi) } else { _page.postValue(Resource.Loading()) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 9227409d..c304629a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -177,7 +177,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { val prefNames = resources.getStringArray(R.array.auto_download_plugin) val prefValues = enumValues().sortedBy { x -> x.value }.map { x -> x.value } - val current = settingsManager.getInt(getString(R.string.auto_download_plugins_pref), 0) + val current = settingsManager.getInt(getString(R.string.auto_download_plugins_key), 0) activity?.showBottomDialog( prefNames.toList(), @@ -185,7 +185,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { getString(R.string.automatic_plugin_download_mode_title), true, {}) { - settingsManager.edit().putInt(getString(R.string.auto_download_plugins_pref), prefValues[it]).apply() + settingsManager.edit().putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } return@setOnPreferenceClickListener true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 5a393ed5..038a2f11 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -24,6 +24,7 @@ import androidx.annotation.AttrRes import androidx.annotation.ColorInt import androidx.annotation.DrawableRes import androidx.annotation.IdRes +import androidx.annotation.StyleRes import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.widget.PopupMenu @@ -81,7 +82,7 @@ object UIHelper { || Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) } - fun populateChips(view: ChipGroup?, tags: List) { + fun populateChips(view: ChipGroup?, tags: List, @StyleRes style : Int = R.style.ChipFilled) { if (view == null) return view.removeAllViews() val context = view.context ?: return @@ -92,7 +93,7 @@ object UIHelper { context, null, 0, - R.style.ChipFilled + style ) chip.setChipDrawable(chipDrawable) chip.text = tag @@ -100,7 +101,7 @@ object UIHelper { chip.isCheckable = false chip.isFocusable = false chip.isClickable = false - chip.setTextColor(context.colorFromAttribute(R.attr.textColor)) + chip.setTextColor(context.colorFromAttribute(R.attr.white)) view.addView(chip) } } diff --git a/app/src/main/res/color/player_on_button_tv_attr.xml b/app/src/main/res/color/player_on_button_tv_attr.xml new file mode 100644 index 00000000..feb1eeb0 --- /dev/null +++ b/app/src/main/res/color/player_on_button_tv_attr.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/color/white_attr_20.xml b/app/src/main/res/color/white_attr_20.xml new file mode 100644 index 00000000..e0237df0 --- /dev/null +++ b/app/src/main/res/color/white_attr_20.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/player_button_tv_attr.xml b/app/src/main/res/drawable/player_button_tv_attr.xml new file mode 100644 index 00000000..4c90a64e --- /dev/null +++ b/app/src/main/res/drawable/player_button_tv_attr.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/player_button_tv_attr_no_bg.xml b/app/src/main/res/drawable/player_button_tv_attr_no_bg.xml new file mode 100644 index 00000000..b9b927da --- /dev/null +++ b/app/src/main/res/drawable/player_button_tv_attr_no_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index eb38e262..672a6d21 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -13,7 +13,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" - tools:visibility="gone"> + tools:visibility="visible"> - + + + - + android:contentDescription="@string/account" + android:nextFocusLeft="@id/home_search" + android:padding="10dp" + android:src="@drawable/ic_outline_account_circle_24" /> + + tools:listitem="@layout/homepage_parent" + tools:visibility="gone" /> @@ -26,15 +26,6 @@ - - @@ -150,6 +141,7 @@ app:tint="?attr/white" /> + diff --git a/app/src/main/res/layout/fragment_home_head_tv.xml b/app/src/main/res/layout/fragment_home_head_tv.xml index d2c20bc4..03766d79 100644 --- a/app/src/main/res/layout/fragment_home_head_tv.xml +++ b/app/src/main/res/layout/fragment_home_head_tv.xml @@ -15,7 +15,6 @@ android:layout_height="0dp" /> @@ -28,7 +27,44 @@ - + + + + + + + + + - - - + + + tools:visibility="visible"> - + + + + - + android:padding="10dp" + android:src="@drawable/ic_outline_account_circle_24" + android:tag="@string/tv_no_focus_tag" + app:tint="@color/player_on_button_tv_attr" /> + - + tools:listitem="@layout/homepage_parent_tv" + tools:visibility="gone" /> + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7dd4c989..d9258c40 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -13,7 +13,6 @@ #161616 #e9eaee - #1AFFFFFF #9ba0a4 #DCDCDC diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 74515fbf..c80e0e76 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,7 +7,6 @@ auto_update auto_update_plugins auto_download_plugins_key - auto_download_plugins_pref skip_update_key prerelease_update manual_check_update diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3ef56c22..e2f11221 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -62,7 +62,8 @@ @color/iconGrayBackground @color/boxItemBackground @color/iconColor - #FFF + @color/white + @color/black @style/CustomPreferenceThemeOverlay @@ -99,7 +100,7 @@ @@ -117,6 +118,7 @@ @color/textColor @color/grayTextColor @color/white + @color/black @color/whiteText @@ -158,7 +160,9 @@ @color/lightItemBackground @color/lightTextColor @color/lightGrayTextColor - #000 + @color/black + @color/white + @color/blackText @@ -170,6 +174,7 @@ @color/material_dynamic_neutral90 @color/material_dynamic_neutral60 @color/material_dynamic_neutral90 + @color/material_dynamic_neutral10 @color/material_on_primary_emphasis_medium @@ -747,13 +752,13 @@ @null @color/transparent @null - @drawable/player_button_tv + @drawable/player_button_tv_attr @color/white @color/transparent - @color/player_on_button_tv - @color/player_on_button_tv - @color/player_on_button_tv + @color/player_on_button_tv_attr + @color/player_on_button_tv_attr + @color/player_on_button_tv_attr wrap_content 40dp 16dp From e43b4808d1be1dfad1b308f971e54c835ee074b8 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:23:43 +0200 Subject: [PATCH 479/888] phone fix --- app/src/main/res/layout/fragment_home.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 672a6d21..ac660ccd 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -93,6 +93,7 @@ +/> Date: Sat, 12 Aug 2023 21:52:37 +0200 Subject: [PATCH 480/888] should fix an issue with auto_download_plugins_key --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c80e0e76..ded7366b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,7 @@ search_type_list auto_update auto_update_plugins - auto_download_plugins_key + auto_download_plugins_key2 skip_update_key prerelease_update manual_check_update From d2d2e41fb31a7da70adf6ef080540833a7070657 Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Sat, 12 Aug 2023 20:25:30 +0000 Subject: [PATCH 481/888] Added Simkl (#548) --- .github/workflows/build_to_archive.yml | 2 + .github/workflows/prerelease.yml | 2 + app/build.gradle.kts | 25 +- .../com/lagradost/cloudstream3/MainAPI.kt | 29 +- .../syncproviders/AccountManager.kt | 7 +- .../cloudstream3/syncproviders/SyncAPI.kt | 31 +- .../cloudstream3/syncproviders/SyncRepo.kt | 4 +- .../syncproviders/providers/AniListApi.kt | 4 +- .../syncproviders/providers/LocalList.kt | 4 +- .../syncproviders/providers/MALApi.kt | 2 +- .../syncproviders/providers/SimklApi.kt | 848 ++++++++++++++++++ .../cloudstream3/ui/result/SyncViewModel.kt | 38 +- .../ui/settings/SettingsAccount.kt | 2 + app/src/main/res/drawable/simkl_logo.xml | 9 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/settings_account.xml | 43 +- 16 files changed, 988 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt create mode 100644 app/src/main/res/drawable/simkl_logo.xml diff --git a/.github/workflows/build_to_archive.yml b/.github/workflows/build_to_archive.yml index 9cd2c523..3b7aa9ae 100644 --- a/.github/workflows/build_to_archive.yml +++ b/.github/workflows/build_to_archive.yml @@ -56,6 +56,8 @@ jobs: SIGNING_KEY_ALIAS: "key0" SIGNING_KEY_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }} SIGNING_STORE_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }} + SIMKL_CLIENT_ID: ${{ secrets.SIMKL_CLIENT_ID }} + SIMKL_CLIENT_SECRET: ${{ secrets.SIMKL_CLIENT_SECRET }} - uses: actions/checkout@v3 with: repository: "recloudstream/cloudstream-archive" diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 856d267c..58009a7a 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -48,6 +48,8 @@ jobs: SIGNING_KEY_ALIAS: "key0" SIGNING_KEY_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }} SIGNING_STORE_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }} + SIMKL_CLIENT_ID: ${{ secrets.SIMKL_CLIENT_ID }} + SIMKL_CLIENT_SECRET: ${{ secrets.SIMKL_CLIENT_SECRET }} - name: Create pre-release uses: "marvinpinto/action-automatic-releases@latest" with: diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cfe89c05..3c12652a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,4 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties import org.jetbrains.dokka.gradle.DokkaTask import java.io.ByteArrayOutputStream import java.net.URL @@ -54,17 +55,27 @@ android { versionName = "4.1.3" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") - resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") - resValue("bool", "is_prerelease", "false") + // Reads local.properties + val localProperties = gradleLocalProperties(rootDir) + buildConfigField( "String", "BUILDDATE", "new java.text.SimpleDateFormat(\"yyyy-MM-dd HH:mm\").format(new java.util.Date(" + System.currentTimeMillis() + "L));" ) - + buildConfigField( + "String", + "SIMKL_CLIENT_ID", + "\"" + (System.getenv("SIMKL_CLIENT_ID") ?: localProperties["simkl.id"]) + "\"" + ) + buildConfigField( + "String", + "SIMKL_CLIENT_SECRET", + "\"" + (System.getenv("SIMKL_CLIENT_SECRET") ?: localProperties["simkl.secret"]) + "\"" + ) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" kapt { @@ -108,9 +119,9 @@ android { } } //toolchain { - // languageVersion.set(JavaLanguageVersion.of(17)) - // } - // jvmToolchain(17) + // languageVersion.set(JavaLanguageVersion.of(17)) + // } + // jvmToolchain(17) compileOptions { isCoreLibraryDesugaringEnabled = true @@ -211,7 +222,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.4.2") + implementation("com.github.Blatzar:NiceHttp:0.4.3") // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 76abda97..7790f047 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -11,9 +11,12 @@ import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.KotlinModule import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi import com.lagradost.cloudstream3.syncproviders.SyncIdName +import com.lagradost.cloudstream3.syncproviders.providers.SimklApi import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.toJson @@ -821,7 +824,8 @@ public enum class AutoDownloadMode(val value: Int) { ; companion object { - infix fun getEnum(value: Int): AutoDownloadMode? = AutoDownloadMode.values().firstOrNull { it.value == value } + infix fun getEnum(value: Int): AutoDownloadMode? = + AutoDownloadMode.values().firstOrNull { it.value == value } } } @@ -1143,6 +1147,7 @@ interface LoadResponse { companion object { private val malIdPrefix = malApi.idPrefix private val aniListIdPrefix = aniListApi.idPrefix + private val simklIdPrefix = simklApi.idPrefix var isTrailersEnabled = true fun LoadResponse.isMovie(): Boolean { @@ -1164,6 +1169,20 @@ interface LoadResponse { this.actors = actors?.map { (actor, role) -> ActorData(actor, role = role) } } + /** + * Internal helper function to add simkl ids from other databases. + */ + private fun LoadResponse.addSimklId( + database: SimklApi.Companion.SyncServices, + id: String? + ) { + normalSafeApiCall { + this.syncData[simklIdPrefix] = + SimklApi.addIdToString(this.syncData[simklIdPrefix], database, id.toString()) + ?: return@normalSafeApiCall + } + } + @JvmName("addActorsOnly") fun LoadResponse.addActors(actors: List?) { this.actors = actors?.map { actor -> ActorData(actor) } @@ -1179,10 +1198,16 @@ interface LoadResponse { fun LoadResponse.addMalId(id: Int?) { this.syncData[malIdPrefix] = (id ?: return).toString() + this.addSimklId(SimklApi.Companion.SyncServices.Mal, id.toString()) } fun LoadResponse.addAniListId(id: Int?) { this.syncData[aniListIdPrefix] = (id ?: return).toString() + this.addSimklId(SimklApi.Companion.SyncServices.AniList, id.toString()) + } + + fun LoadResponse.addSimklId(id: Int?) { + this.addSimklId(SimklApi.Companion.SyncServices.Simkl, id.toString()) } fun LoadResponse.addImdbUrl(url: String?) { @@ -1264,6 +1289,7 @@ interface LoadResponse { fun LoadResponse.addImdbId(id: String?) { // TODO add imdb sync + this.addSimklId(SimklApi.Companion.SyncServices.Imdb, id) } fun LoadResponse.addTrackId(id: String?) { @@ -1276,6 +1302,7 @@ interface LoadResponse { fun LoadResponse.addTMDbId(id: String?) { // TODO add TMDb sync + this.addSimklId(SimklApi.Companion.SyncServices.Tmdb, id) } fun LoadResponse.addRating(text: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index 8ce6bae2..8bf8dffa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -11,6 +11,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val malApi = MALApi(0) val aniListApi = AniListApi(0) val openSubtitlesApi = OpenSubtitlesApi(0) + val simklApi = SimklApi(0) val indexSubtitlesApi = IndexSubtitleApi() val addic7ed = Addic7ed() val localListApi = LocalList() @@ -18,19 +19,19 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { // used to login via app intent val OAuth2Apis get() = listOf( - malApi, aniListApi + malApi, aniListApi, simklApi ) // this needs init with context and can be accessed in settings val accountManagers get() = listOf( - malApi, aniListApi, openSubtitlesApi, //nginxApi + malApi, aniListApi, openSubtitlesApi, simklApi //nginxApi ) // used for active syncing val SyncApis get() = listOf( - SyncRepo(malApi), SyncRepo(aniListApi), SyncRepo(localListApi) + SyncRepo(malApi), SyncRepo(aniListApi), SyncRepo(localListApi), SyncRepo(simklApi) ) val inAppAuths diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt index 8c76c5bf..ed496326 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt @@ -10,7 +10,8 @@ enum class SyncIdName { MyAnimeList, Trakt, Imdb, - LocalList + Simkl, + LocalList, } interface SyncAPI : OAuth2API { @@ -35,9 +36,9 @@ interface SyncAPI : OAuth2API { 4 -> PlanToWatch 5 -> ReWatching */ - suspend fun score(id: String, status: SyncStatus): Boolean + suspend fun score(id: String, status: AbstractSyncStatus): Boolean - suspend fun getStatus(id: String): SyncStatus? + suspend fun getStatus(id: String): AbstractSyncStatus? suspend fun getResult(id: String): SyncResult? @@ -59,14 +60,24 @@ interface SyncAPI : OAuth2API { override var id: Int? = null, ) : SearchResponse - data class SyncStatus( - val status: Int, + abstract class AbstractSyncStatus { + abstract var status: Int + /** 1-10 */ - val score: Int?, - val watchedEpisodes: Int?, - var isFavorite: Boolean? = null, - var maxEpisodes: Int? = null, - ) + abstract var score: Int? + abstract var watchedEpisodes: Int? + abstract var isFavorite: Boolean? + abstract var maxEpisodes: Int? + } + + data class SyncStatus( + override var status: Int, + /** 1-10 */ + override var score: Int?, + override var watchedEpisodes: Int?, + override var isFavorite: Boolean? = null, + override var maxEpisodes: Int? = null, + ) : AbstractSyncStatus() data class SyncResult( /**Used to verify*/ diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncRepo.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncRepo.kt index 85b877e0..9363cb6f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncRepo.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncRepo.kt @@ -18,11 +18,11 @@ class SyncRepo(private val repo: SyncAPI) { repo.requireLibraryRefresh = value } - suspend fun score(id: String, status: SyncAPI.SyncStatus): Resource { + suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Resource { return safeApiCall { repo.score(id, status) } } - suspend fun getStatus(id: String): Resource { + suspend fun getStatus(id: String): Resource { return safeApiCall { repo.getStatus(id) ?: throw ErrorLoadingException("No data") } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 0010ce25..d0c88901 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -158,7 +158,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) } - override suspend fun getStatus(id: String): SyncAPI.SyncStatus? { + override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? { val internalId = id.toIntOrNull() ?: return null val data = getDataAboutId(internalId) ?: return null @@ -171,7 +171,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) } - override suspend fun score(id: String, status: SyncAPI.SyncStatus): Boolean { + override suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Boolean { return postDataAboutId( id.toIntOrNull() ?: return false, fromIntToAnimeStatus(status.status), diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt index 7dd43fe7..e6ca9711 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt @@ -45,11 +45,11 @@ class LocalList : SyncAPI { override val mainUrl = "" override val syncIdName = SyncIdName.LocalList - override suspend fun score(id: String, status: SyncAPI.SyncStatus): Boolean { + override suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Boolean { return true } - override suspend fun getStatus(id: String): SyncAPI.SyncStatus? { + override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? { return null } 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 5164b606..02826401 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 @@ -91,7 +91,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { return Regex("""/anime/((.*)/|(.*))""").find(url)!!.groupValues.first() } - override suspend fun score(id: String, status: SyncAPI.SyncStatus): Boolean { + override suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Boolean { return setScoreRequest( id.toIntOrNull() ?: return false, fromIntToAnimeStatus(status.status), diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt new file mode 100644 index 00000000..64afb0e2 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -0,0 +1,848 @@ +package com.lagradost.cloudstream3.syncproviders.providers + +import androidx.annotation.StringRes +import androidx.core.net.toUri +import androidx.fragment.app.FragmentActivity +import com.fasterxml.jackson.annotation.JsonInclude +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey +import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mvvm.debugAssert +import com.lagradost.cloudstream3.mvvm.debugPrint +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall +import com.lagradost.cloudstream3.syncproviders.AccountManager +import com.lagradost.cloudstream3.syncproviders.AuthAPI +import com.lagradost.cloudstream3.syncproviders.SyncAPI +import com.lagradost.cloudstream3.syncproviders.SyncIdName +import com.lagradost.cloudstream3.ui.library.ListSorting +import com.lagradost.cloudstream3.ui.result.txt +import com.lagradost.cloudstream3.utils.AppUtils.toJson +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import okhttp3.Interceptor +import okhttp3.Response +import java.math.BigInteger +import java.security.SecureRandom +import java.text.SimpleDateFormat +import java.time.Instant +import java.util.Date +import java.util.TimeZone + +class SimklApi(index: Int) : AccountManager(index), SyncAPI { + override var name = "Simkl" + override val key = "simkl-key" + override val redirectUrl = "simkl" + override val idPrefix = "simkl" + override var requireLibraryRefresh = true + override var mainUrl = "https://api.simkl.com" + override val icon = R.drawable.simkl_logo + override val requiresLogin = false + override val createAccountUrl = "$mainUrl/signup" + override val syncIdName = SyncIdName.Simkl + private val token: String? + get() = getKey(accountId, SIMKL_TOKEN_KEY).also { + debugAssert({ it == null }) { "No ${this.name} token!" } + } + + /** Automatically adds simkl auth headers */ + private val interceptor = HeaderInterceptor() + + /** + * This is required to override the reported last activity as simkl activites + * may not always update based on testing. + */ + private var lastScoreTime = -1L + + companion object { + private const val clientId = BuildConfig.SIMKL_CLIENT_ID + private const val clientSecret = BuildConfig.SIMKL_CLIENT_SECRET + private var lastLoginState = "" + + const val SIMKL_TOKEN_KEY: String = "simkl_token" + const val SIMKL_USER_KEY: String = "simkl_user" + const val SIMKL_CACHED_LIST: String = "simkl_cached_list" + const val SIMKL_CACHED_LIST_TIME: String = "simkl_cached_time" + + /** 2014-09-01T09:10:11Z -> 1409562611 */ + private const val simklDateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + fun getUnixTime(string: String?): Long? { + return try { + SimpleDateFormat(simklDateFormat).apply { + this.timeZone = TimeZone.getTimeZone("UTC") + }.parse( + string ?: return null + )?.toInstant()?.epochSecond + } catch (e: Exception) { + logError(e) + return null + } + } + + /** 1409562611 -> 2014-09-01T09:10:11Z */ + fun getDateTime(unixTime: Long?): String? { + return try { + SimpleDateFormat(simklDateFormat).apply { + this.timeZone = TimeZone.getTimeZone("UTC") + }.format( + Date.from( + Instant.ofEpochSecond( + unixTime ?: return null + ) + ) + ) + } catch (e: Exception) { + null + } + } + + /** + * Set of sync services simkl is compatible with. + * Add more as required: https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id + */ + enum class SyncServices(val originalName: String) { + Simkl("simkl"), + Imdb("imdb"), + Tmdb("tmdb"), + AniList("anilist"), + Mal("mal"), + } + + /** + * The ID string is a way to keep a collection of services in one single ID using a map + * This adds a database service (like imdb) to the string and returns the new string. + */ + fun addIdToString(idString: String?, database: SyncServices, id: String?): String? { + if (id == null) return idString + return (readIdFromString(idString) + mapOf(database to id)).toJson() + } + + /** Read the id string to get all other ids */ + private fun readIdFromString(idString: String?): Map { + return tryParseJson(idString) ?: return emptyMap() + } + + fun getPosterUrl(poster: String): String { + return "https://wsrv.nl/?url=https://simkl.in/posters/${poster}_m.webp" + } + + private fun getUrlFromId(id: Int): String { + return "https://simkl.com/shows/$id" + } + + enum class SimklListStatusType( + var value: Int, + @StringRes val stringRes: Int, + val originalName: String? + ) { + Watching(0, R.string.type_watching, "watching"), + Completed(1, R.string.type_completed, "completed"), + Paused(2, R.string.type_on_hold, "hold"), + Dropped(3, R.string.type_dropped, "dropped"), + Planning(4, R.string.type_plan_to_watch, "plantowatch"), + ReWatching(5, R.string.type_re_watching, "watching"), + None(-1, R.string.none, null); + + companion object { + fun fromString(string: String): SimklListStatusType? { + return SimklListStatusType.values().firstOrNull { + it.originalName == string + } + } + } + } + + // ------------------- + @JsonInclude(JsonInclude.Include.NON_EMPTY) + data class TokenRequest( + @JsonProperty("code") val code: String, + @JsonProperty("client_id") val client_id: String = clientId, + @JsonProperty("client_secret") val client_secret: String = clientSecret, + @JsonProperty("redirect_uri") val redirect_uri: String = "$appString://simkl", + @JsonProperty("grant_type") val grant_type: String = "authorization_code" + ) + + data class TokenResponse( + /** No expiration date */ + val access_token: String, + val token_type: String, + val scope: String + ) + // ------------------- + + /** https://simkl.docs.apiary.io/#reference/users/settings/receive-settings */ + data class SettingsResponse( + val user: User + ) { + data class User( + val name: String, + /** Url */ + val avatar: String + ) + } + + // ------------------- + data class ActivitiesResponse( + val all: String?, + val tv_shows: UpdatedAt, + val anime: UpdatedAt, + val movies: UpdatedAt, + ) { + data class UpdatedAt( + val all: String?, + val removed_from_list: String?, + val rated_at: String?, + ) + } + + /** https://simkl.docs.apiary.io/#reference/tv/episodes/get-tv-show-episodes */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + data class EpisodeMetadata( + @JsonProperty("title") val title: String?, + @JsonProperty("description") val description: String?, + @JsonProperty("season") val season: Int?, + @JsonProperty("episode") val episode: Int, + @JsonProperty("img") val img: String? + ) { + companion object { + fun convertToEpisodes(list: List?): List { + return list?.map { + MediaObject.Season.Episode(it.episode) + } ?: emptyList() + } + + fun convertToSeasons(list: List?): List { + return list?.filter { it.season != null }?.groupBy { + it.season + }?.map { (season, episodes) -> + MediaObject.Season(season!!, convertToEpisodes(episodes)) + } ?: emptyList() + } + } + } + + /** + * https://simkl.docs.apiary.io/#introduction/about-simkl-api/standard-media-objects + * Useful for finding shows from metadata + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + open class MediaObject( + @JsonProperty("title") val title: String?, + @JsonProperty("year") val year: Int?, + @JsonProperty("ids") val ids: Ids?, + @JsonProperty("poster") val poster: String? = null, + @JsonProperty("type") val type: String? = null, + @JsonProperty("seasons") val seasons: List? = null, + @JsonProperty("episodes") val episodes: List? = null + ) { + @JsonInclude(JsonInclude.Include.NON_EMPTY) + data class Season( + @JsonProperty("number") val number: Int, + @JsonProperty("episodes") val episodes: List + ) { + data class Episode(@JsonProperty("number") val number: Int) + } + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + data class Ids( + @JsonProperty("simkl") val simkl: Int?, + @JsonProperty("imdb") val imdb: String? = null, + @JsonProperty("tmdb") val tmdb: String? = null, + @JsonProperty("mal") val mal: String? = null, + @JsonProperty("anilist") val anilist: String? = null, + ) { + companion object { + fun fromMap(map: Map): Ids { + return Ids( + simkl = map[SyncServices.Simkl]?.toIntOrNull(), + imdb = map[SyncServices.Imdb], + tmdb = map[SyncServices.Tmdb], + mal = map[SyncServices.Mal], + anilist = map[SyncServices.AniList] + ) + } + } + } + + fun toSyncSearchResult(): SyncAPI.SyncSearchResult? { + return SyncAPI.SyncSearchResult( + this.title ?: return null, + "Simkl", + this.ids?.simkl?.toString() ?: return null, + getUrlFromId(this.ids.simkl), + this.poster?.let { getPosterUrl(it) }, + if (this.type == "movie") TvType.Movie else TvType.TvSeries + ) + } + } + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + class RatingMediaObject( + @JsonProperty("title") title: String?, + @JsonProperty("year") year: Int?, + @JsonProperty("ids") ids: Ids?, + @JsonProperty("rating") val rating: Int, + @JsonProperty("rated_at") val rated_at: String? = getDateTime(unixTime) + ) : MediaObject(title, year, ids) + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + class StatusMediaObject( + @JsonProperty("title") title: String?, + @JsonProperty("year") year: Int?, + @JsonProperty("ids") ids: Ids?, + @JsonProperty("to") val to: String, + @JsonProperty("watched_at") val watched_at: String? = getDateTime(unixTime) + ) : MediaObject(title, year, ids) + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + class HistoryMediaObject( + @JsonProperty("title") title: String?, + @JsonProperty("year") year: Int?, + @JsonProperty("ids") ids: Ids?, + @JsonProperty("seasons") seasons: List?, + @JsonProperty("episodes") episodes: List?, + ) : MediaObject(title, year, ids, seasons = seasons, episodes = episodes) + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + data class StatusRequest( + @JsonProperty("movies") val movies: List, + @JsonProperty("shows") val shows: List + ) + + /** https://simkl.docs.apiary.io/#reference/sync/get-all-items/get-all-items-in-the-user's-watchlist */ + data class AllItemsResponse( + val shows: List, + val anime: List, + val movies: List, + ) { + companion object { + fun merge(first: AllItemsResponse?, second: AllItemsResponse?): AllItemsResponse { + + // Replace the first item with the same id, or add the new item + fun MutableList.replaceOrAddItem(newItem: T, predicate: (T) -> Boolean) { + for (i in this.indices) { + if (predicate(this[i])) { + this[i] = newItem + return + } + } + this.add(newItem) + } + + // + fun merge( + first: List?, + second: List? + ): List { + return (first?.toMutableList() ?: mutableListOf()).apply { + second?.forEach { secondShow -> + this.replaceOrAddItem(secondShow) { + it.getIds().simkl == secondShow.getIds().simkl + } + } + } + } + + return AllItemsResponse( + merge(first?.shows, second?.shows), + merge(first?.anime, second?.anime), + merge(first?.movies, second?.movies), + ) + } + } + + interface Metadata { + val last_watched_at: String? + val status: String? + val user_rating: Int? + val last_watched: String? + val watched_episodes_count: Int? + val total_episodes_count: Int? + + fun getIds(): ShowMetadata.Show.Ids + fun toLibraryItem(): SyncAPI.LibraryItem + } + + data class MovieMetadata( + override val last_watched_at: String?, + override val status: String, + override val user_rating: Int?, + override val last_watched: String?, + override val watched_episodes_count: Int?, + override val total_episodes_count: Int?, + val movie: ShowMetadata.Show + ) : Metadata { + override fun getIds(): ShowMetadata.Show.Ids { + return this.movie.ids + } + + override fun toLibraryItem(): SyncAPI.LibraryItem { + return SyncAPI.LibraryItem( + this.movie.title, + "https://simkl.com/tv/${movie.ids.simkl}", + movie.ids.simkl.toString(), + this.watched_episodes_count, + this.total_episodes_count, + this.user_rating?.times(10), + getUnixTime(last_watched_at) ?: 0, + "Simkl", + TvType.Movie, + this.movie.poster?.let { getPosterUrl(it) }, + null, + null, + movie.ids.simkl + ) + } + } + + data class ShowMetadata( + override val last_watched_at: String?, + override val status: String, + override val user_rating: Int?, + override val last_watched: String?, + override val watched_episodes_count: Int?, + override val total_episodes_count: Int?, + val show: Show + ) : Metadata { + override fun getIds(): Show.Ids { + return this.show.ids + } + + override fun toLibraryItem(): SyncAPI.LibraryItem { + return SyncAPI.LibraryItem( + this.show.title, + "https://simkl.com/tv/${show.ids.simkl}", + show.ids.simkl.toString(), + this.watched_episodes_count, + this.total_episodes_count, + this.user_rating?.times(10), + getUnixTime(last_watched_at) ?: 0, + "Simkl", + TvType.Anime, + this.show.poster?.let { getPosterUrl(it) }, + null, + null, + show.ids.simkl + ) + } + + data class Show( + val title: String, + val poster: String?, + val year: Int?, + val ids: Ids, + ) { + data class Ids( + val simkl: Int, + val slug: String?, + val imdb: String?, + val zap2it: String?, + val tmdb: String?, + val offen: String?, + val tvdb: String?, + val mal: String?, + val anidb: String?, + val anilist: String?, + val traktslug: String? + ) { + fun matchesId(database: SyncServices, id: String): Boolean { + return when (database) { + SyncServices.Simkl -> this.simkl == id.toIntOrNull() + SyncServices.AniList -> this.anilist == id + SyncServices.Mal -> this.mal == id + SyncServices.Tmdb -> this.tmdb == id + SyncServices.Imdb -> this.imdb == id + } + } + } + } + } + } + } + + /** + * Appends api keys to the requests + **/ + private inner class HeaderInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + debugPrint { "${this@SimklApi.name} made request to ${chain.request().url}" } + return chain.proceed( + chain.request() + .newBuilder() + .addHeader("Authorization", "Bearer $token") + .addHeader("simkl-api-key", clientId) + .build() + ) + } + } + + private suspend fun getUser(): SettingsResponse.User? { + return suspendSafeApiCall { + app.post("$mainUrl/users/settings", interceptor = interceptor) + .parsedSafe()?.user + } + } + + class SimklSyncStatus( + override var status: Int, + override var score: Int?, + override var watchedEpisodes: Int?, + val episodes: Array?, + override var isFavorite: Boolean? = null, + override var maxEpisodes: Int? = null, + ) : SyncAPI.AbstractSyncStatus() + + override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? { + val realIds = readIdFromString(id) + val foundItem = getSyncListSmart()?.let { list -> + listOf(list.shows, list.anime, list.movies).flatten().firstOrNull { show -> + realIds.any { (database, id) -> + show.getIds().matchesId(database, id) + } + } + } + + // Search to get episodes + val searchResult = searchByIds(realIds)?.firstOrNull() + val episodes = getEpisodes(searchResult?.ids?.simkl, searchResult?.type) + + if (foundItem != null) { + return SimklSyncStatus( + status = foundItem.status?.let { SimklListStatusType.fromString(it)?.value } + ?: return null, + score = foundItem.user_rating, + watchedEpisodes = foundItem.watched_episodes_count, + maxEpisodes = foundItem.total_episodes_count, + episodes = episodes + ) + } else { + return if (searchResult != null) { + SimklSyncStatus( + status = SimklListStatusType.None.value, + score = 0, + watchedEpisodes = 0, + maxEpisodes = if (searchResult.type == "movie") 0 else null, + episodes = episodes + ) + } else { + null + } + } + } + + override suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Boolean { + val parsedId = readIdFromString(id) + lastScoreTime = unixTime + + if (status.status == SimklListStatusType.None.value) { + return app.post( + "$mainUrl/sync/history/remove", + json = StatusRequest( + shows = listOf( + HistoryMediaObject( + null, + null, + MediaObject.Ids.fromMap(parsedId), + emptyList(), + emptyList() + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } + + val realScore = status.score + val ratingResponseSuccess = if (realScore != null) { + // Remove rating if score is 0 + val ratingsSuffix = if (realScore == 0) "/remove" else "" + debugPrint { "Rate ${this.name} item: rating=$realScore" } + app.post( + "$mainUrl/sync/ratings$ratingsSuffix", + json = StatusRequest( + // Not possible to know if TV or Movie + shows = listOf( + RatingMediaObject( + null, + null, + MediaObject.Ids.fromMap(parsedId), + realScore + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } else { + true + } + + val simklStatus = status as? SimklSyncStatus + // All episodes if marked as completed + val watchedEpisodes = if (status.status == SimklListStatusType.Completed.value) { + simklStatus?.episodes?.size + } else { + status.watchedEpisodes + } + + // Only post episodes if available episodes and the status is correct + val episodeResponseSuccess = + if (simklStatus != null && watchedEpisodes != null && !simklStatus.episodes.isNullOrEmpty() && listOf( + SimklListStatusType.Paused.value, + SimklListStatusType.Dropped.value, + SimklListStatusType.Watching.value, + SimklListStatusType.Completed.value, + SimklListStatusType.ReWatching.value + ).contains(status.status) + ) { + val cutEpisodes = simklStatus.episodes.take(watchedEpisodes) + + val (seasons, episodes) = if (cutEpisodes.any { it.season != null }) { + EpisodeMetadata.convertToSeasons(cutEpisodes) to null + } else { + null to EpisodeMetadata.convertToEpisodes(cutEpisodes) + } + + debugPrint { "Synced history for ${status.watchedEpisodes} given size of ${simklStatus.episodes.size}: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" } + val episodeResponse = app.post( + "$mainUrl/sync/history", + json = StatusRequest( + shows = listOf( + HistoryMediaObject( + null, + null, + MediaObject.Ids.fromMap(parsedId), + seasons, + episodes + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ) + episodeResponse.isSuccessful + } else true + + val newStatus = + SimklListStatusType.values().firstOrNull { it.value == status.status }?.originalName + ?: SimklListStatusType.Watching.originalName + + val statusResponseSuccess = if (newStatus != null) { + debugPrint { "Add to ${this.name} list: status=$newStatus" } + app.post( + "$mainUrl/sync/add-to-list", + json = StatusRequest( + shows = listOf( + StatusMediaObject( + null, + null, + MediaObject.Ids.fromMap(parsedId), + newStatus + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } else { + true + } + + debugPrint { "All scoring complete: rating=$ratingResponseSuccess, status=$statusResponseSuccess, episode=$episodeResponseSuccess" } + requireLibraryRefresh = true + return ratingResponseSuccess && statusResponseSuccess && episodeResponseSuccess + } + + + /** See https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id */ + suspend fun searchByIds(serviceMap: Map): Array? { + if (serviceMap.isEmpty()) return emptyArray() + + return app.get( + "$mainUrl/search/id", + params = mapOf("client_id" to clientId) + serviceMap.map { (service, id) -> + service.originalName to id + } + ).parsedSafe() + } + + suspend fun getEpisodes(simklId: Int?, type: String?): Array? { + if (simklId == null) return null + val url = when (type) { + "anime" -> "https://api.simkl.com/anime/episodes/$simklId" + "tv" -> "https://api.simkl.com/tv/episodes/$simklId" + "movie" -> return null + else -> return null + } + return app.get(url, params = mapOf("client_id" to clientId)).parsedSafe() + } + + override suspend fun search(name: String): List? { + return app.get( + "$mainUrl/search/", params = mapOf("client_id" to clientId, "q" to name) + ).parsedSafe>()?.mapNotNull { it.toSyncSearchResult() } + } + + override fun authenticate(activity: FragmentActivity?) { + lastLoginState = BigInteger(130, SecureRandom()).toString(32) + val url = + "https://simkl.com/oauth/authorize?response_type=code&client_id=$clientId&redirect_uri=$appString://${redirectUrl}&state=$lastLoginState" + openBrowser(url, activity) + } + + override fun loginInfo(): AuthAPI.LoginInfo? { + return getKey(accountId, SIMKL_USER_KEY)?.let { user -> + AuthAPI.LoginInfo( + name = user.name, + profilePicture = user.avatar, + accountIndex = accountIndex + ) + } + } + + override fun logOut() { + requireLibraryRefresh = true + removeAccountKeys() + } + + override suspend fun getResult(id: String): SyncAPI.SyncResult? { + return null + } + + private suspend fun getSyncListSince(since: Long?): AllItemsResponse { + val params = getDateTime(since)?.let { + mapOf("date_from" to it) + } ?: emptyMap() + + return app.get( + "$mainUrl/sync/all-items/", + params = params, + interceptor = interceptor + ).parsed() + } + + private suspend fun getActivities(): ActivitiesResponse? { + return app.post("$mainUrl/sync/activities", interceptor = interceptor).parsedSafe() + } + + private fun getSyncListCached(): AllItemsResponse? { + return getKey(accountId, SIMKL_CACHED_LIST) + } + + private suspend fun getSyncListSmart(): AllItemsResponse? { + if (token == null) return null + + val activities = getActivities() + val lastCacheUpdate = getKey(accountId, SIMKL_CACHED_LIST_TIME) + val lastRemoval = listOf( + activities?.tv_shows?.removed_from_list, + activities?.anime?.removed_from_list, + activities?.movies?.removed_from_list + ).maxOf { + getUnixTime(it) ?: -1 + } + val lastRealUpdate = + listOf( + activities?.tv_shows?.all, + activities?.anime?.all, + activities?.movies?.all, + ).maxOf { + getUnixTime(it) ?: -1 + } + + debugPrint { "Cache times: lastCacheUpdate=$lastCacheUpdate, lastRemoval=$lastRemoval, lastRealUpdate=$lastRealUpdate" } + val list = if (lastCacheUpdate == null || lastCacheUpdate < lastRemoval) { + debugPrint { "Full list update in ${this.name}." } + setKey(accountId, SIMKL_CACHED_LIST_TIME, lastRemoval) + getSyncListSince(null) + } else if (lastCacheUpdate < lastRealUpdate || lastCacheUpdate < lastScoreTime) { + debugPrint { "Partial list update in ${this.name}." } + setKey(accountId, SIMKL_CACHED_LIST_TIME, lastCacheUpdate) + AllItemsResponse.merge(getSyncListCached(), getSyncListSince(lastCacheUpdate)) + } else { + debugPrint { "Cached list update in ${this.name}." } + getSyncListCached() + } + debugPrint { "List sizes: movies=${list?.movies?.size}, shows=${list?.shows?.size}, anime=${list?.anime?.size}" } + + setKey(accountId, SIMKL_CACHED_LIST, list) + + return list + } + + + override suspend fun getPersonalLibrary(): SyncAPI.LibraryMetadata? { + val list = getSyncListSmart() ?: return null + + val baseMap = + SimklListStatusType.values() + .filter { it.value >= 0 && it.value != SimklListStatusType.ReWatching.value } + .associate { + it.stringRes to emptyList() + } + + val syncMap = listOf(list.anime, list.movies, list.shows) + .flatten() + .groupBy { + it.status + } + .mapNotNull { (status, list) -> + val stringRes = + status?.let { SimklListStatusType.fromString(it)?.stringRes } + ?: return@mapNotNull null + val libraryList = list.map { it.toLibraryItem() } + stringRes to libraryList + }.toMap() + + return SyncAPI.LibraryMetadata( + (baseMap + syncMap).map { SyncAPI.LibraryList(txt(it.key), it.value) }, setOf( + ListSorting.AlphabeticalA, + ListSorting.AlphabeticalZ, + ListSorting.UpdatedNew, + ListSorting.UpdatedOld, + ListSorting.RatingHigh, + ListSorting.RatingLow, + ) + ) + } + + override fun getIdFromUrl(url: String): String { + val simklUrlRegex = Regex("""https://simkl\.com/[^/]*/(\d+).*""") + return simklUrlRegex.find(url)?.groupValues?.get(1) ?: "" + } + + override suspend fun handleRedirect(url: String): Boolean { + val uri = url.toUri() + val state = uri.getQueryParameter("state") + // Ensure consistent state + if (state != lastLoginState) return false + lastLoginState = "" + + val code = uri.getQueryParameter("code") ?: return false + val token = app.post( + "$mainUrl/oauth/token", json = TokenRequest(code) + ).parsedSafe() ?: return false + + switchToNewAccount() + setKey(accountId, SIMKL_TOKEN_KEY, token.access_token) + + val user = getUser() + if (user == null) { + removeKey(accountId, SIMKL_TOKEN_KEY) + switchToOldAccount() + return false + } + + setKey(accountId, SIMKL_USER_KEY, user) + registerAccount() + requireLibraryRefresh = true + + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt index 91415d26..a3e2ed87 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SyncViewModel.kt @@ -36,18 +36,18 @@ class SyncViewModel : ViewModel() { val metadata: LiveData> get() = _metaResponse - private val _userDataResponse: MutableLiveData?> = + private val _userDataResponse: MutableLiveData?> = MutableLiveData(null) - val userData: LiveData?> get() = _userDataResponse + val userData: LiveData?> get() = _userDataResponse // prefix, id - private var syncs = mutableMapOf() + private val syncs = mutableMapOf() //private val _syncIds: MutableLiveData> = // MutableLiveData(mutableMapOf()) //val syncIds: LiveData> get() = _syncIds - fun getSyncs() : Map { + fun getSyncs(): Map { return syncs } @@ -106,7 +106,7 @@ class SyncViewModel : ViewModel() { Log.i(TAG, "addFromUrl = $url") if (url == null || hasAddedFromUrl.contains(url)) return@ioSafe - if(!url.startsWith("http")) return@ioSafe + if (!url.startsWith("http")) return@ioSafe SyncUtil.getIdsFromUrl(url)?.let { (malId, aniListId) -> hasAddedFromUrl.add(url) @@ -150,7 +150,8 @@ class SyncViewModel : ViewModel() { val user = userData.value if (user is Resource.Success) { - _userDataResponse.postValue(Resource.Success(user.value.copy(watchedEpisodes = episodes))) + user.value.watchedEpisodes = episodes + _userDataResponse.postValue(Resource.Success(user.value)) } } @@ -158,7 +159,8 @@ class SyncViewModel : ViewModel() { Log.i(TAG, "setScore = $score") val user = userData.value if (user is Resource.Success) { - _userDataResponse.postValue(Resource.Success(user.value.copy(score = score))) + user.value.score = score + _userDataResponse.postValue(Resource.Success(user.value)) } } @@ -167,7 +169,8 @@ class SyncViewModel : ViewModel() { if (which < -1 || which > 5) return // validate input val user = userData.value if (user is Resource.Success) { - _userDataResponse.postValue(Resource.Success(user.value.copy(status = which))) + user.value.status = which + _userDataResponse.postValue(Resource.Success(user.value)) } } @@ -185,17 +188,16 @@ class SyncViewModel : ViewModel() { fun modifyMaxEpisode(episodeNum: Int) { Log.i(TAG, "modifyMaxEpisode = $episodeNum") modifyData { status -> - status.copy( - watchedEpisodes = maxOf( - episodeNum, - status.watchedEpisodes ?: return@modifyData null - ) + status.watchedEpisodes = maxOf( + episodeNum, + status.watchedEpisodes ?: return@modifyData null ) + status } } /// modifies the current sync data, return null if you don't want to change it - private fun modifyData(update: ((SyncAPI.SyncStatus) -> (SyncAPI.SyncStatus?))) = + private fun modifyData(update: ((SyncAPI.AbstractSyncStatus) -> (SyncAPI.AbstractSyncStatus?))) = ioSafe { syncs.amap { (prefix, id) -> repos.firstOrNull { it.idPrefix == prefix }?.let { repo -> @@ -245,8 +247,12 @@ class SyncViewModel : ViewModel() { // shitty way to sort anilist first, as it has trailers while mal does not if (syncs.containsKey(aniListApi.idPrefix)) { try { // swap can throw error - Collections.swap(current, current.indexOfFirst { it.first == aniListApi.idPrefix }, 0) - } catch (t : Throwable) { + Collections.swap( + current, + current.indexOfFirst { it.first == aniListApi.idPrefix }, + 0 + ) + } catch (t: Throwable) { logError(t) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 33316020..b3225d5c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.openSubtitlesApi +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API @@ -257,6 +258,7 @@ class SettingsAccount : PreferenceFragmentCompat() { listOf( R.string.mal_key to malApi, R.string.anilist_key to aniListApi, + R.string.simkl_key to simklApi, R.string.opensubtitles_key to openSubtitlesApi, ) diff --git a/app/src/main/res/drawable/simkl_logo.xml b/app/src/main/res/drawable/simkl_logo.xml new file mode 100644 index 00000000..eb29fb5b --- /dev/null +++ b/app/src/main/res/drawable/simkl_logo.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ded7366b..13251c7c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -449,6 +449,7 @@ Put the title under the poster anilist_key + simkl_key mal_key opensubtitles_key nginx_key diff --git a/app/src/main/res/xml/settings_account.xml b/app/src/main/res/xml/settings_account.xml index d4bae8c4..d3dbcb31 100644 --- a/app/src/main/res/xml/settings_account.xml +++ b/app/src/main/res/xml/settings_account.xml @@ -1,27 +1,32 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:icon="@drawable/mal_logo" + android:key="@string/mal_key" /> - - - - + android:icon="@drawable/ic_anilist_icon" + android:key="@string/anilist_key" /> - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file From 3ab9e11350aab59c4ada14ec33e6f72fa324f2e9 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 12 Aug 2023 23:41:53 +0200 Subject: [PATCH 482/888] fixed SimklApi subscription --- .../cloudstream3/syncproviders/providers/SimklApi.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index 64afb0e2..64cebfc6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -316,9 +316,12 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { /** https://simkl.docs.apiary.io/#reference/sync/get-all-items/get-all-items-in-the-user's-watchlist */ data class AllItemsResponse( - val shows: List, - val anime: List, - val movies: List, + @JsonProperty("shows") + val shows: List = emptyList(), + @JsonProperty("anime") + val anime: List = emptyList(), + @JsonProperty("movies") + val movies: List = emptyList(), ) { companion object { fun merge(first: AllItemsResponse?, second: AllItemsResponse?): AllItemsResponse { From 0eb241e6cb4a6d2f5bff7728f7ea0ac7b0a0e904 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 12 Aug 2023 23:54:37 +0200 Subject: [PATCH 483/888] fixed fab expand --- .../com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 3ddaee61..633ee762 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -905,6 +905,7 @@ open class ResultFragmentPhone : FullScreenPlayer(), observe(viewModel.watchStatus) { watchType -> binding?.resultBookmarkFab?.apply { + setText(watchType.stringRes) if (watchType == WatchType.NONE) { context?.colorFromAttribute(R.attr.white) } else { From 74867bed1cc96b3a494fb107a6ff9c251579b525 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Sun, 13 Aug 2023 21:07:36 +0530 Subject: [PATCH 484/888] Update SpeedoStream.kt (#552) Fixes YoMovies Provider. --- .../java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt index 90104ace..3f6fff2f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt @@ -13,7 +13,7 @@ class SpeedoStream1 : SpeedoStream() { open class SpeedoStream : ExtractorApi() { override val name = "SpeedoStream" - override val mainUrl = "https://speedostream.com" + override val mainUrl = "https://speedostream.mom" override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?): List { From 4d98690adbc8a903b3545e094d5b9ca7099e408a Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Tue, 15 Aug 2023 02:05:07 +0200 Subject: [PATCH 485/888] small fix to home load --- .../cloudstream3/plugins/PluginManager.kt | 4 + .../cloudstream3/ui/home/HomeViewModel.kt | 14 ++- .../settings/extensions/ExtensionsFragment.kt | 107 +++++++++++------- .../main/res/layout/fragment_extensions.xml | 1 + 4 files changed, 81 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 4c32088a..87b0ba3b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -165,6 +165,9 @@ object PluginManager { var loadedLocalPlugins = false private set + + var loadedOnlinePlugins = false + private set private val gson = Gson() private suspend fun maybeLoadPlugin(context: Context, file: File) { @@ -278,6 +281,7 @@ object PluginManager { } // ioSafe { + loadedOnlinePlugins = true afterPluginsLoadedEvent.invoke(false) // } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index b1ced59e..e8cf8863 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -103,7 +103,7 @@ class HomeViewModel : ViewModel() { private var currentShuffledList: List = listOf() private fun autoloadRepo(): APIRepository { - return APIRepository(synchronized(apis) { apis.first { it.hasMainPage }}) + return APIRepository(synchronized(apis) { apis.first { it.hasMainPage } }) } private val _availableWatchStatusTypes = @@ -185,8 +185,9 @@ class HomeViewModel : ViewModel() { } private var onGoingLoad: Job? = null - private var isCurrentlyLoadingName : String? = null + private var isCurrentlyLoadingName: String? = null private fun loadAndCancel(api: MainAPI) { + //println("loaded ${api.name}") onGoingLoad?.cancel() isCurrentlyLoadingName = api.name onGoingLoad = load(api) @@ -290,7 +291,7 @@ class HomeViewModel : ViewModel() { } } - private fun load(api: MainAPI) : Job = ioSafe { + private fun load(api: MainAPI): Job = ioSafe { repo = //if (api != null) { APIRepository(api) //} else { @@ -455,9 +456,9 @@ class HomeViewModel : ViewModel() { fromUI: Boolean = false ) = ioSafe { + //println("trying to load $preferredApiName") // Since plugins are loaded in stages this function can get called multiple times. // The issue with this is that the homepage may be fetched multiple times while the first request is loading - val api = getApiFromNameNull(preferredApiName) // api?.let { expandable[it.name]?.list?.list?.isNotEmpty() } == true val currentPage = page.value @@ -467,6 +468,7 @@ class HomeViewModel : ViewModel() { return@ioSafe } + val api = getApiFromNameNull(preferredApiName) if (preferredApiName == noneApi.name) { // just set to random if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) @@ -485,10 +487,12 @@ class HomeViewModel : ViewModel() { } else if (api == null) { // API is not found aka not loaded or removed, post the loading // progress if waiting for plugins, otherwise nothing - if(PluginManager.loadedLocalPlugins || PluginManager.checkSafeModeFile() || lastError != null) { + if (PluginManager.loadedOnlinePlugins || PluginManager.checkSafeModeFile() || lastError != null) { loadAndCancel(noneApi) } else { _page.postValue(Resource.Loading()) + if (preferredApiName != null) + _apiName.postValue(preferredApiName) } } else { // if the api is found, then set it to it and save key diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 8bc947c5..553e7675 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.settings.extensions import android.content.ClipboardManager import android.content.Context import android.content.DialogInterface +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -12,6 +13,8 @@ import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.view.isGone import androidx.core.view.isVisible +import androidx.core.view.marginBottom +import androidx.core.view.marginTop import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -33,7 +36,6 @@ import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe -import com.lagradost.cloudstream3.widget.LinearRecycleViewLayoutManager class ExtensionsFragment : Fragment() { var binding: FragmentExtensionsBinding? = null @@ -84,51 +86,76 @@ class ExtensionsFragment : Fragment() { setUpToolbar(R.string.extensions) - binding?.repoRecyclerView?.setLinearListLayout( - isHorizontal = false, - nextUp = R.id.settings_toolbar, //FOCUS_SELF, // back has no id so we cant :pensive: - nextDown = R.id.plugin_storage_appbar, - nextRight = FOCUS_SELF, - nextLeft = R.id.nav_rail_view - ) - binding?.repoRecyclerView?.adapter = RepoAdapter(false, { - findNavController().navigate( - R.id.navigation_settings_extensions_to_navigation_settings_plugins, - PluginsFragment.newInstance( - it.name, - it.url, - false - ) + binding?.repoRecyclerView?.apply { + setLinearListLayout( + isHorizontal = false, + nextUp = R.id.settings_toolbar, //FOCUS_SELF, // back has no id so we cant :pensive: + nextDown = R.id.plugin_storage_appbar, + nextRight = FOCUS_SELF, + nextLeft = R.id.nav_rail_view ) - }, { repo -> - // Prompt user before deleting repo - main { - val builder = AlertDialog.Builder(context ?: view.context) - val dialogClickListener = - DialogInterface.OnClickListener { _, which -> - when (which) { - DialogInterface.BUTTON_POSITIVE -> { - ioSafe { - RepositoryManager.removeRepository(view.context, repo) - extensionViewModel.loadStats() - extensionViewModel.loadRepositories() - } - } - DialogInterface.BUTTON_NEGATIVE -> {} - } + if (!isTrueTvSettings()) + binding?.addRepoButton?.let { button -> + button.post { + setPadding( + paddingLeft, + paddingTop, + paddingRight, + button.measuredHeight + button.marginTop + button.marginBottom + ) } + } - builder.setTitle(R.string.delete_repository) - .setMessage( - context?.getString(R.string.delete_repository_plugins) - ) - .setPositiveButton(R.string.delete, dialogClickListener) - .setNegativeButton(R.string.cancel, dialogClickListener) - .show().setDefaultFocus() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> + val dy = scrollY - oldScrollY + if (dy > 0) { //check for scroll down + binding?.addRepoButton?.shrink() // hide + } else if (dy < -5) { + binding?.addRepoButton?.extend() // show + } + } } - }) + adapter = RepoAdapter(false, { + findNavController().navigate( + R.id.navigation_settings_extensions_to_navigation_settings_plugins, + PluginsFragment.newInstance( + it.name, + it.url, + false + ) + ) + }, { repo -> + // Prompt user before deleting repo + main { + val builder = AlertDialog.Builder(context ?: view.context) + val dialogClickListener = + DialogInterface.OnClickListener { _, which -> + when (which) { + DialogInterface.BUTTON_POSITIVE -> { + ioSafe { + RepositoryManager.removeRepository(view.context, repo) + extensionViewModel.loadStats() + extensionViewModel.loadRepositories() + } + } + + DialogInterface.BUTTON_NEGATIVE -> {} + } + } + + builder.setTitle(R.string.delete_repository) + .setMessage( + context?.getString(R.string.delete_repository_plugins) + ) + .setPositiveButton(R.string.delete, dialogClickListener) + .setNegativeButton(R.string.cancel, dialogClickListener) + .show().setDefaultFocus() + } + }) + } observe(extensionViewModel.repositories) { binding?.repoRecyclerView?.isVisible = it.isNotEmpty() diff --git a/app/src/main/res/layout/fragment_extensions.xml b/app/src/main/res/layout/fragment_extensions.xml index b3583539..71dd372b 100644 --- a/app/src/main/res/layout/fragment_extensions.xml +++ b/app/src/main/res/layout/fragment_extensions.xml @@ -11,6 +11,7 @@ Date: Tue, 15 Aug 2023 18:37:33 +0000 Subject: [PATCH 486/888] Fix episode removal in simkl (#555) --- .../syncproviders/providers/SimklApi.kt | 75 ++++++++++++------- 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index 64cebfc6..b4a9d789 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -60,8 +60,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { private var lastScoreTime = -1L companion object { - private const val clientId = BuildConfig.SIMKL_CLIENT_ID - private const val clientSecret = BuildConfig.SIMKL_CLIENT_SECRET + private const val clientId: String = BuildConfig.SIMKL_CLIENT_ID + private const val clientSecret: String = BuildConfig.SIMKL_CLIENT_SECRET private var lastLoginState = "" const val SIMKL_TOKEN_KEY: String = "simkl_token" @@ -498,6 +498,9 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { val episodes: Array?, override var isFavorite: Boolean? = null, override var maxEpisodes: Int? = null, + /** Save seen episodes separately to know the change from old to new. + * Required to remove seen episodes if count decreases */ + val oldEpisodes: Int, ) : SyncAPI.AbstractSyncStatus() override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? { @@ -521,7 +524,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { score = foundItem.user_rating, watchedEpisodes = foundItem.watched_episodes_count, maxEpisodes = foundItem.total_episodes_count, - episodes = episodes + episodes = episodes, + oldEpisodes = foundItem.watched_episodes_count ?: 0, ) } else { return if (searchResult != null) { @@ -530,7 +534,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { score = 0, watchedEpisodes = 0, maxEpisodes = if (searchResult.type == "movie") 0 else null, - episodes = episodes + episodes = episodes, + oldEpisodes = 0, ) } else { null @@ -604,32 +609,46 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { SimklListStatusType.ReWatching.value ).contains(status.status) ) { - val cutEpisodes = simklStatus.episodes.take(watchedEpisodes) - - val (seasons, episodes) = if (cutEpisodes.any { it.season != null }) { - EpisodeMetadata.convertToSeasons(cutEpisodes) to null - } else { - null to EpisodeMetadata.convertToEpisodes(cutEpisodes) + suspend fun postEpisodes( + url: String, + rawEpisodes: List + ): Boolean { + val (seasons, episodes) = if (rawEpisodes.any { it.season != null }) { + EpisodeMetadata.convertToSeasons(rawEpisodes) to null + } else { + null to EpisodeMetadata.convertToEpisodes(rawEpisodes) + } + debugPrint { "Synced history using $url: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" } + return app.post( + url, + json = StatusRequest( + shows = listOf( + HistoryMediaObject( + null, + null, + MediaObject.Ids.fromMap(parsedId), + seasons, + episodes + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful } - debugPrint { "Synced history for ${status.watchedEpisodes} given size of ${simklStatus.episodes.size}: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" } - val episodeResponse = app.post( - "$mainUrl/sync/history", - json = StatusRequest( - shows = listOf( - HistoryMediaObject( - null, - null, - MediaObject.Ids.fromMap(parsedId), - seasons, - episodes - ) - ), - movies = emptyList() - ), - interceptor = interceptor - ) - episodeResponse.isSuccessful + // If episodes decrease: remove all episodes beyond watched episodes. + val removeResponse = if (simklStatus.oldEpisodes > watchedEpisodes) { + val removeEpisodes = simklStatus.episodes + .drop(watchedEpisodes) + postEpisodes("$mainUrl/sync/history/remove", removeEpisodes) + } else { + true + } + val cutEpisodes = simklStatus.episodes.take(watchedEpisodes) + val addResponse = postEpisodes("$mainUrl/sync/history/", cutEpisodes) + + removeResponse && addResponse } else true val newStatus = From d536dffaf559425bdb7b02232c3bfac8a951133d Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:45:39 +0530 Subject: [PATCH 487/888] Fix Trailers not Working (#559) * Fix Trailers not Working * smol tip --- app/build.gradle.kts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3c12652a..b228fea0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -165,7 +165,7 @@ dependencies { androidTestImplementation("androidx.test:core") //implementation("io.karn:khttp-android:0.1.2") //okhttp instead -// implementation("org.jsoup:jsoup:1.13.1") + // implementation("org.jsoup:jsoup:1.13.1") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") implementation("androidx.preference:preference-ktx:1.2.0") @@ -220,8 +220,8 @@ dependencies { implementation("androidx.work:work-runtime-ktx:2.8.1") // Networking -// implementation("com.squareup.okhttp3:okhttp:4.9.2") -// implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1") + // implementation("com.squareup.okhttp3:okhttp:4.9.2") + // implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1") implementation("com.github.Blatzar:NiceHttp:0.4.3") // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") @@ -243,11 +243,9 @@ dependencies { // used for subtitle decoding https://github.com/albfernandez/juniversalchardet implementation("com.github.albfernandez:juniversalchardet:2.4.0") - // slow af yt - //implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT") - // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204 - implementation("com.github.TeamNewPipe:NewPipeExtractor:8495ad619e") + // this should be updated frequently to avoid trailer fu*kery + implementation("com.github.TeamNewPipe:NewPipeExtractor:1f08d28") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance From d247640dcf2a3985390cb0e3d5fd4c8d82e7d4ad Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:48:15 +0530 Subject: [PATCH 488/888] Play n Dowload button fix for NS*W results. (#557) * Play n Dowload button fix for NS*W results. * Revert MainAPI Changes * Tweaked ResultViewModel --- .../com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 011d133d..2fe3b012 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1707,7 +1707,7 @@ class ResultViewModel2 : ViewModel() { else -> { if (response.type.isLiveStream()) R.string.play_livestream_button - else if (response.type.isMovieType()) // this wont break compatibility as you only need to override isMovieType + else if (response.isMovie()) // this wont break compatibility as you only need to override isMovieType R.string.play_movie_button else null } @@ -2340,4 +2340,4 @@ class ResultViewModel2 : ViewModel() { } } } -} \ No newline at end of file +} From 20da3807a2cb98b60b22e4ad65a96c037c254c58 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 17 Aug 2023 01:00:43 +0200 Subject: [PATCH 489/888] fixed search query for intent --- .../com/lagradost/cloudstream3/MainActivity.kt | 12 ++++++++---- .../cloudstream3/ui/search/SearchFragment.kt | 15 +++++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a8160d33..15b16078 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -286,7 +286,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { * * This is a very bad solution but I was unable to find a better one. **/ - private var nextSearchQuery: String? = null + var nextSearchQuery: String? = null /** * Fires every time a new batch of plugins have been loaded, no guarantee about how often this is run and on which thread @@ -362,9 +362,14 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { loadRepository(url) return true } else if (safeURI(str)?.scheme == appStringSearch) { + val query = str.substringAfter("$appStringSearch://") nextSearchQuery = - URLDecoder.decode(str.substringAfter("$appStringSearch://"), "UTF-8") - + try { + URLDecoder.decode(query, "UTF-8") + } catch (t : Throwable) { + logError(t) + query + } // Use both navigation views to support both layouts. // It might be better to use the QuickSearch. activity?.findViewById(R.id.nav_view)?.selectedItemId = @@ -1315,7 +1320,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (navDestination.matchDestination(R.id.navigation_search) && !nextSearchQuery.isNullOrBlank()) { bundle?.apply { this.putString(SearchFragment.SEARCH_QUERY, nextSearchQuery) - nextSearchQuery = null } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 63213eb9..bdf82377 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -84,7 +84,7 @@ class SearchFragment : Fragment() { fun newInstance(query: String): Bundle { return Bundle().apply { - putString(SEARCH_QUERY, query) + if(query.isNotBlank()) putString(SEARCH_QUERY, query) } } } @@ -211,7 +211,7 @@ class SearchFragment : Fragment() { reloadRepos() binding?.apply { - val adapter: RecyclerView.Adapter? = + val adapter: RecyclerView.Adapter = SearchAdapter( ArrayList(), searchAutofitResults, @@ -530,11 +530,18 @@ class SearchFragment : Fragment() { searchMasterRecycler.layoutManager = GridLayoutManager(context, 1) // Automatically search the specified query, this allows the app search to launch from intent - arguments?.getString(SEARCH_QUERY)?.let { query -> + var sq = arguments?.getString(SEARCH_QUERY) ?: savedInstanceState?.getString(SEARCH_QUERY) + if(sq.isNullOrBlank()) { + sq = MainActivity.nextSearchQuery + } + + sq?.let { query -> if (query.isBlank()) return@let mainSearch.setQuery(query, true) // Clear the query as to not make it request the same query every time the page is opened - arguments?.putString(SEARCH_QUERY, null) + arguments?.remove(SEARCH_QUERY) + savedInstanceState?.remove(SEARCH_QUERY) + MainActivity.nextSearchQuery = null } } From c2b951a07866077e05d15e385111d2d74fe7e542 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 17 Aug 2023 01:19:24 +0200 Subject: [PATCH 490/888] fixed #560 lock locks orientation --- .../ui/player/FullScreenPlayer.kt | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) 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 9739b627..0f3c189d 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 @@ -2,9 +2,11 @@ package com.lagradost.cloudstream3.ui.player import android.animation.ObjectAnimator import android.annotation.SuppressLint +import android.app.Activity import android.content.Context import android.content.pm.ActivityInfo import android.content.res.ColorStateList +import android.content.res.Configuration import android.content.res.Resources import android.graphics.Color import android.media.AudioManager @@ -16,6 +18,7 @@ import android.util.DisplayMetrics import android.view.KeyEvent import android.view.LayoutInflater import android.view.MotionEvent +import android.view.Surface import android.view.View import android.view.ViewGroup import android.view.WindowManager @@ -56,6 +59,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.Vector2 import kotlin.math.* + const val MINIMUM_SEEK_TIME = 7000L // when swipe seeking const val MINIMUM_VERTICAL_SWIPE = 2.0f // in percentage const val MINIMUM_HORIZONTAL_SWIPE = 2.0f // in percentage @@ -292,6 +296,36 @@ open class FullScreenPlayer : AbstractPlayerFragment() { player.getCurrentPreferredSubtitle() == null } + open fun lockOrientation(activity: Activity) { + val display = + (activity.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay + val rotation = display.rotation + val currentOrientation = activity.resources.configuration.orientation + var orientation = 0 + when (currentOrientation) { + Configuration.ORIENTATION_LANDSCAPE -> orientation = + if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE else ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE + + Configuration.ORIENTATION_SQUARE, Configuration.ORIENTATION_UNDEFINED, Configuration.ORIENTATION_PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + //Configuration.ORIENTATION_PORTRAIT -> orientation = + // if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT + } + activity.requestedOrientation = orientation + } + + private fun updateOrientation() { + activity?.apply { + if(lockRotation) { + if(isLocked) { + lockOrientation(this) + } + else { + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + } + } + } + } + protected fun enterFullscreen() { if (isFullScreenPlayer) { activity?.hideSystemUI() @@ -301,8 +335,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { activity?.window?.attributes = params } } - if (lockRotation) - activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + updateOrientation() } protected fun exitFullscreen() { @@ -561,6 +594,8 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } isLocked = !isLocked + updateOrientation() + if (isLocked && isShowing) { playerBinding?.playerHolder?.postDelayed({ if (isLocked && isShowing) { From 590c74111cb945366ebd6a11278f2f9f827043c5 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 17 Aug 2023 23:10:21 +0200 Subject: [PATCH 491/888] fuck it we ball, m3u8 download is now fixed --- .../lagradost/cloudstream3/extractors/Cda.kt | 10 +- .../cloudstream3/utils/M3u8Helper.kt | 282 +++++++++--------- .../utils/VideoDownloadManager.kt | 221 ++++++-------- 3 files changed, 237 insertions(+), 276 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt index 6a2f399d..42f6eddb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt @@ -1,13 +1,11 @@ package com.lagradost.cloudstream3.extractors -import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.USER_AGENT +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson -import android.util.Log +import com.lagradost.cloudstream3.utils.Qualities import java.net.URLDecoder open class Cda: ExtractorApi() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 6c5117b4..6770e303 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -1,17 +1,16 @@ package com.lagradost.cloudstream3.utils +import com.lagradost.cloudstream3.ErrorLoadingException import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.mvvm.logError -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.delay import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec import kotlin.math.pow - +/** backwards api surface */ class M3u8Helper { companion object { - private val generator = M3u8Helper() suspend fun generateM3u8( source: String, streamUrl: String, @@ -20,34 +19,59 @@ class M3u8Helper { headers: Map = mapOf(), name: String = source ): List { - return generator.m3u8Generation( - M3u8Stream( - streamUrl = streamUrl, - quality = quality, - headers = headers, - ), null - ) - .map { stream -> - ExtractorLink( - source, - name = name, - stream.streamUrl, - referer, - stream.quality ?: Qualities.Unknown.value, - true, - stream.headers, - ) - } + return M3u8Helper2.generateM3u8(source, streamUrl, referer, quality, headers, name) } } + + data class M3u8Stream( + val streamUrl: String, + val quality: Int? = null, + val headers: Map = mapOf() + ) + + suspend fun m3u8Generation(m3u8: M3u8Stream, returnThis: Boolean? = true): List { + return M3u8Helper2.m3u8Generation(m3u8, returnThis) + } +} + +object M3u8Helper2 { + suspend fun generateM3u8( + source: String, + streamUrl: String, + referer: String, + quality: Int? = null, + headers: Map = mapOf(), + name: String = source + ): List { + return m3u8Generation( + M3u8Helper.M3u8Stream( + streamUrl = streamUrl, + quality = quality, + headers = headers, + ), null + ) + .map { stream -> + ExtractorLink( + source, + name = name, + stream.streamUrl, + referer, + stream.quality ?: Qualities.Unknown.value, + true, + stream.headers, + ) + } + } + private val ENCRYPTION_DETECTION_REGEX = Regex("#EXT-X-KEY:METHOD=([^,]+),") private val ENCRYPTION_URL_IV_REGEX = Regex("#EXT-X-KEY:METHOD=([^,]+),URI=\"([^\"]+)\"(?:,IV=(.*))?") private val QUALITY_REGEX = Regex("""#EXT-X-STREAM-INF:(?:(?:.*?(?:RESOLUTION=\d+x(\d+)).*?\s+(.*))|(?:.*?\s+(.*)))""") private val TS_EXTENSION_REGEX = - Regex("""(.*\.ts.*|.*\.jpg.*)""") //.jpg here 'case vizcloud uses .jpg instead of .ts + Regex("""#EXTINF:.*\n(.+?\n)""") // fuck it we ball, who cares about the type anyways + //Regex("""(.*\.(ts|jpg|html).*)""") //.jpg here 'case vizcloud uses .jpg instead of .ts private fun absoluteExtensionDetermination(url: String): String? { val split = url.split("/") @@ -73,7 +97,7 @@ class M3u8Helper { } }.iterator() - private fun getDecrypter( + fun getDecrypter( secretKey: ByteArray, data: ByteArray, iv: ByteArray = "".toByteArray() @@ -91,13 +115,8 @@ class M3u8Helper { return st != null && (st.value.isNotEmpty() || st.destructured.component1() != "NONE") } - data class M3u8Stream( - val streamUrl: String, - val quality: Int? = null, - val headers: Map = mapOf() - ) - private fun selectBest(qualities: List): M3u8Stream? { + private fun selectBest(qualities: List): M3u8Helper.M3u8Stream? { val result = qualities.sortedBy { if (it.quality != null && it.quality <= 1080) it.quality else 0 }.filter { @@ -113,19 +132,16 @@ class M3u8Helper { } private fun isNotCompleteUrl(url: String): Boolean { - return !url.contains("https://") && !url.contains("http://") + return !url.startsWith("https://") && !url.startsWith("http://") } - suspend fun m3u8Generation(m3u8: M3u8Stream, returnThis: Boolean? = true): List { -// return listOf(m3u8) - val list = mutableListOf() + suspend fun m3u8Generation(m3u8: M3u8Helper.M3u8Stream, returnThis: Boolean? = true): List { + val list = mutableListOf() val m3u8Parent = getParentLink(m3u8.streamUrl) val response = app.get(m3u8.streamUrl, headers = m3u8.headers, verify = false).text -// var hasAnyContent = false for (match in QUALITY_REGEX.findAll(response)) { -// hasAnyContent = true var (quality, m3u8Link, m3u8Link2) = match.destructured if (m3u8Link.isEmpty()) m3u8Link = m3u8Link2 if (absoluteExtensionDetermination(m3u8Link) == "m3u8") { @@ -136,21 +152,21 @@ class M3u8Helper { println(m3u8.streamUrl) } list += m3u8Generation( - M3u8Stream( + M3u8Helper.M3u8Stream( m3u8Link, quality.toIntOrNull(), m3u8.headers ), false ) } - list += M3u8Stream( + list += M3u8Helper.M3u8Stream( m3u8Link, quality.toIntOrNull(), m3u8.headers ) } if (returnThis != false) { - list += M3u8Stream( + list += M3u8Helper.M3u8Stream( m3u8.streamUrl, Qualities.Unknown.value, m3u8.headers @@ -160,113 +176,111 @@ class M3u8Helper { return list } + data class LazyHlsDownloadData( + private val encryptionData: ByteArray, + private val encryptionIv: ByteArray, + private val isEncrypted: Boolean, + private val allTsLinks: List, + private val relativeUrl: String, + private val headers: Map, + ) { + val size get() = allTsLinks.size - data class HlsDownloadData( - val bytes: ByteArray, - val currentIndex: Int, - val totalTs: Int, - val errored: Boolean = false - ) - - suspend fun hlsYield( - qualities: List, - startIndex: Int = 0 - ): Iterator { - if (qualities.isEmpty()) return listOf( - HlsDownloadData( - byteArrayOf(), - 1, - 1, - true - ) - ).iterator() - - var selected = selectBest(qualities) - if (selected == null) { - selected = qualities[0] + suspend fun resolveLinkSafe( + index: Int, + tries: Int = 3, + failDelay: Long = 3000 + ): ByteArray? { + for (i in 0 until tries) { + try { + return resolveLink(index) + } catch (e: IllegalArgumentException) { + return null + } catch (t: Throwable) { + delay(failDelay) + } + } + return null } + + @Throws + suspend fun resolveLink(index: Int): ByteArray { + if (index < 0 || index >= size) throw IllegalArgumentException("index must be in the bounds of the ts") + val url = allTsLinks[index] + + val tsResponse = app.get(url, headers = headers, verify = false) + val tsData = tsResponse.body.bytes() + if (tsData.isEmpty()) throw ErrorLoadingException("no data") + + return if (isEncrypted) { + getDecrypter(encryptionData, tsData, encryptionIv) + } else { + tsData + } + } + } + + @Throws + suspend fun hslLazy( + qualities: List + ): LazyHlsDownloadData { + if (qualities.isEmpty()) throw IllegalArgumentException("qualities must be non empty") + val selected = selectBest(qualities) ?: qualities.first() val headers = selected.headers - val streams = qualities.map { m3u8Generation(it, false) }.flatten() - //val sslVerification = if (headers.containsKey("ssl_verification")) headers["ssl_verification"].toBoolean() else true - + // this selects the best quality of the qualities offered, + // due to the recursive nature of m3u8, we only go 2 depth val secondSelection = selectBest(streams.ifEmpty { listOf(selected) }) - if (secondSelection != null) { - val m3u8Response = - runBlocking { - app.get( - secondSelection.streamUrl, - headers = headers, - verify = false - ).text - } + ?: throw IllegalArgumentException("qualities has no streams") - var encryptionUri: String? - var encryptionIv = byteArrayOf() - var encryptionData = byteArrayOf() + val m3u8Response = + app.get( + secondSelection.streamUrl, + headers = headers, + verify = false + ).text - val encryptionState = isEncrypted(m3u8Response) + println("m3u8Response=$m3u8Response") - if (encryptionState) { - val match = - ENCRYPTION_URL_IV_REGEX.find(m3u8Response)!!.destructured // its safe to assume that its not going to be null - encryptionUri = match.component2() + // encryption, this is because crunchy uses it + var encryptionIv = byteArrayOf() + var encryptionData = byteArrayOf() - if (isNotCompleteUrl(encryptionUri)) { - encryptionUri = "${getParentLink(secondSelection.streamUrl)}/$encryptionUri" - } + val encryptionState = isEncrypted(m3u8Response) - encryptionIv = match.component3().toByteArray() - val encryptionKeyResponse = - runBlocking { app.get(encryptionUri, headers = headers, verify = false) } - encryptionData = encryptionKeyResponse.body?.bytes() ?: byteArrayOf() + if (encryptionState) { + // its safe to assume that its not going to be null + val match = + ENCRYPTION_URL_IV_REGEX.find(m3u8Response)!!.groupValues + + var encryptionUri = match[1] + + if (isNotCompleteUrl(encryptionUri)) { + encryptionUri = "${getParentLink(secondSelection.streamUrl)}/$encryptionUri" } - val allTs = TS_EXTENSION_REGEX.findAll(m3u8Response) - val allTsList = allTs.toList() - val totalTs = allTsList.size - if (totalTs == 0) { - return listOf(HlsDownloadData(byteArrayOf(), 1, 1, true)).iterator() - } - var lastYield = 0 - - val relativeUrl = getParentLink(secondSelection.streamUrl) - var retries = 0 - val tsByteGen = sequence { - loop@ for ((index, ts) in allTs.withIndex()) { - val url = if ( - isNotCompleteUrl(ts.destructured.component1()) - ) "$relativeUrl/${ts.destructured.component1()}" else ts.destructured.component1() - val c = index + 1 + startIndex - - while (lastYield != c) { - try { - val tsResponse = - runBlocking { app.get(url, headers = headers, verify = false) } - var tsData = tsResponse.body?.bytes() ?: byteArrayOf() - - if (encryptionState) { - tsData = getDecrypter(encryptionData, tsData, encryptionIv) - yield(HlsDownloadData(tsData, c, totalTs)) - lastYield = c - break - } - yield(HlsDownloadData(tsData, c, totalTs)) - lastYield = c - } catch (e: Exception) { - logError(e) - if (retries == 3) { - yield(HlsDownloadData(byteArrayOf(), c, totalTs, true)) - break@loop - } - ++retries - Thread.sleep(2_000) - } - } - } - } - return tsByteGen.iterator() + encryptionIv = match[2].toByteArray() + val encryptionKeyResponse = app.get(encryptionUri, headers = headers, verify = false) + encryptionData = encryptionKeyResponse.body.bytes() } - return listOf(HlsDownloadData(byteArrayOf(), 1, 1, true)).iterator() + val relativeUrl = getParentLink(secondSelection.streamUrl) + val allTsList = TS_EXTENSION_REGEX.findAll(m3u8Response + "\n").map { ts -> + val value = ts.groupValues[1] + if (isNotCompleteUrl(value)) { + "$relativeUrl/${value}" + } else { + value + } + }.toList() + if (allTsList.isEmpty()) throw IllegalArgumentException("ts must be non empty") + + return LazyHlsDownloadData( + encryptionData = encryptionData, + encryptionIv = encryptionIv, + isEncrypted = encryptionState, + allTsLinks = allTsList, + relativeUrl = relativeUrl, + headers = headers + ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index c138ea75..f4eb37b7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -15,7 +15,6 @@ import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.net.toUri -import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData import androidx.preference.PreferenceManager import androidx.work.Data @@ -32,18 +31,15 @@ import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.services.VideoDownloadService 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.removeKey import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import okhttp3.internal.closeQuietly import java.io.BufferedInputStream @@ -51,11 +47,9 @@ import java.io.File import java.io.InputStream import java.io.OutputStream import java.lang.Thread.sleep -import java.net.URI import java.net.URL import java.net.URLConnection import java.util.* -import kotlin.math.roundToInt const val DOWNLOAD_CHANNEL_ID = "cloudstream3.general" const val DOWNLOAD_CHANNEL_NAME = "Downloads" @@ -92,7 +86,7 @@ object VideoDownloadManager { @DrawableRes const val pressToStopIcon = R.drawable.exo_icon_stop - private var updateCount : Int = 0 + private var updateCount: Int = 0 private val downloadDataUpdateCount = MutableLiveData() enum class DownloadType { @@ -687,7 +681,8 @@ object VideoDownloadManager { return StreamData(SUCCESS_STREAM, resume, fileLength, fileStream) } - fun downloadThing( + @Throws + suspend fun downloadThing( context: Context, link: IDownloadableMinimum, name: String, @@ -696,9 +691,9 @@ object VideoDownloadManager { tryResume: Boolean, parentId: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, - ): Int { + ): Int = withContext(Dispatchers.IO) { if (link.url.startsWith("magnet") || link.url.endsWith(".torrent")) { - return ERROR_UNKNOWN + return@withContext ERROR_UNKNOWN } val basePath = context.getBasePath() @@ -714,7 +709,7 @@ object VideoDownloadManager { } val stream = setupStream(context, name, relativePath, extension, tryResume) - if (stream.errorCode != SUCCESS_STREAM) return stream.errorCode + if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode val resume = stream.resume!! val fileStream = stream.fileStream!! @@ -766,7 +761,7 @@ object VideoDownloadManager { } val bytesTotal = contentLength + resumeLength - if (extension == "mp4" && bytesTotal < 5000000) return ERROR_TOO_SMALL_CONNECTION // DATA IS LESS THAN 5MB, SOMETHING IS WRONG + if (extension == "mp4" && bytesTotal < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION // DATA IS LESS THAN 5MB, SOMETHING IS WRONG parentId?.let { setKey( @@ -845,11 +840,13 @@ object VideoDownloadManager { DownloadActionType.Pause -> { isPaused = true; updateNotification() } + DownloadActionType.Stop -> { isStopped = true; updateNotification() removeKey(KEY_RESUME_PACKAGES, event.first.toString()) saveQueue() } + DownloadActionType.Resume -> { isPaused = false; updateNotification() } @@ -917,15 +914,17 @@ object VideoDownloadManager { } // RETURN MESSAGE - return when { + return@withContext when { isFailed -> { parentId?.let { id -> downloadProgressEvent.invoke(Triple(id, 0, 0)) } ERROR_CONNECTION_ERROR } + isStopped -> { parentId?.let { id -> downloadProgressEvent.invoke(Triple(id, 0, 0)) } deleteFile() } + else -> { parentId?.let { id -> downloadProgressEvent.invoke( @@ -989,6 +988,7 @@ object VideoDownloadManager { found.delete() this.createDirectory(directoryName) } + this.isDirectory -> this.createDirectory(directoryName) else -> this.parentFile?.createDirectory(directoryName) } @@ -1107,7 +1107,8 @@ object VideoDownloadManager { return SUCCESS_STOPPED } - private fun downloadHLS( + @Throws + private suspend fun downloadHLS( context: Context, link: ExtractorLink, name: String, @@ -1115,16 +1116,8 @@ object VideoDownloadManager { parentId: Int?, startIndex: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit - ): Int { + ): Int = withContext(Dispatchers.IO) { val extension = "mp4" - fun logcatPrint(vararg items: Any?) { - items.forEach { - println("[HLS]: $it") - } - } - - val m3u8Helper = M3u8Helper() - logcatPrint("initialised the HLS downloader.") val m3u8 = M3u8Helper.M3u8Stream( link.url, link.quality, mapOf("referer" to link.referer) @@ -1139,54 +1132,40 @@ object VideoDownloadManager { ) else folder val stream = setupStream(context, name, relativePath, extension, realIndex > 0) - if (stream.errorCode != SUCCESS_STREAM) return stream.errorCode + if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode - if (!stream.resume!!) realIndex = 0 - val fileLengthAdd = stream.fileLength!! - val tsIterator = runBlocking { - m3u8Helper.hlsYield(listOf(m3u8), realIndex) - } + if (stream.resume != true) realIndex = 0 + val fileLengthAdd = stream.fileLength ?: 0 + val items = M3u8Helper2.hslLazy(listOf(m3u8)) val displayName = getDisplayName(name, extension) val fileStream = stream.fileStream!! - val firstTs = tsIterator.next() - var isDone = false var isFailed = false var isPaused = false - var bytesDownloaded = firstTs.bytes.size.toLong() + fileLengthAdd - var tsProgress = 1L + realIndex - val totalTs = firstTs.totalTs.toLong() + var bytesDownloaded = fileLengthAdd + var tsProgress: Long = realIndex.toLong() + 1 // we don't want div by zero + val totalTs: Long = items.size.toLong() fun deleteFile(): Int { return delete(context, name, relativePath, extension, parentId, basePath.first) } - /* - Most of the auto generated m3u8 out there have TS of the same size. - And only the last TS might have a different size. - - But oh well, in cases of handmade m3u8 streams this will go all over the place ¯\_(ツ)_/¯ - So ya, this calculates an estimate of how many bytes the file is going to be. - - > (bytesDownloaded/tsProgress)*totalTs - */ fun updateInfo() { - parentId?.let { - setKey( - KEY_DOWNLOAD_INFO, - it.toString(), - DownloadedFileInfo( - (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), - relativePath ?: "", - displayName, - tsProgress.toString(), - basePath = basePath.second - ) + setKey( + KEY_DOWNLOAD_INFO, + (parentId ?: return).toString(), + DownloadedFileInfo( + // approx bytes + totalBytes = (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), + relativePath = relativePath ?: "", + displayName = displayName, + extraInfo = tsProgress.toString(), + basePath = basePath.second ) - } + ) } updateInfo() @@ -1210,9 +1189,7 @@ object VideoDownloadManager { (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), ) ) - } catch (e: Exception) { - // IDK MIGHT ERROR - } + } catch (_: Throwable) {} } createNotificationCallback.invoke( @@ -1226,24 +1203,6 @@ object VideoDownloadManager { ) } - fun stopIfError(ts: M3u8Helper.HlsDownloadData): Int? { - if (ts.errored || ts.bytes.isEmpty()) { - val error: Int = if (!ts.errored) { - logcatPrint("Error: No stream was found.") - ERROR_UNKNOWN - } else { - logcatPrint("Error: Failed to fetch data.") - ERROR_CONNECTION_ERROR - } - isFailed = true - fileStream.close() - deleteFile() - updateNotification() - return error - } - return null - } - val notificationCoroutine = main { while (true) { if (!isDone) { @@ -1261,11 +1220,11 @@ object VideoDownloadManager { DownloadActionType.Stop -> { isFailed = true } + DownloadActionType.Pause -> { - isPaused = - true // Pausing is not supported since well...I need to know the index of the ts it was paused at - // it may be possible to store it in a variable, but when the app restarts it will be lost + isPaused = true } + DownloadActionType.Resume -> { isPaused = false } @@ -1278,32 +1237,22 @@ object VideoDownloadManager { try { if (parentId != null) downloadEvent -= downloadEventListener - } catch (e: Exception) { - logError(e) + } catch (t: Throwable) { + logError(t) } try { parentId?.let { downloadStatus.remove(it) } - } catch (e: Exception) { - logError(e) - // IDK MIGHT ERROR + } catch (t: Throwable) { + logError(t) } notificationCoroutine.cancel() } - stopIfError(firstTs).let { - if (it != null) { - closeAll() - return it - } - } - if (parentId != null) downloadEvent += downloadEventListener - fileStream.write(firstTs.bytes) - fun onFailed() { fileStream.close() deleteFile() @@ -1311,31 +1260,29 @@ object VideoDownloadManager { closeAll() } - for (ts in tsIterator) { + for (idx in realIndex until items.size) { while (isPaused) { if (isFailed) { onFailed() - return SUCCESS_STOPPED + return@withContext SUCCESS_STOPPED } - sleep(100) + delay(100) } if (isFailed) { onFailed() - return SUCCESS_STOPPED + return@withContext SUCCESS_STOPPED } - stopIfError(ts).let { - if (it != null) { - closeAll() - return it - } + val bytes = items.resolveLinkSafe(idx) ?: run { + isFailed = true + onFailed() + return@withContext ERROR_CONNECTION_ERROR } - fileStream.write(ts.bytes) - tsProgress = ts.currentIndex.toLong() - bytesDownloaded += ts.bytes.size.toLong() - logcatPrint("Download progress ${((tsProgress.toFloat() / totalTs.toFloat()) * 100).roundToInt()}%") + fileStream.write(bytes) + tsProgress = idx.toLong() + 1 + bytesDownloaded += bytes.size.toLong() updateInfo() } isDone = true @@ -1344,7 +1291,7 @@ object VideoDownloadManager { closeAll() updateInfo() - return SUCCESS_DOWNLOAD_DONE + return@withContext SUCCESS_DOWNLOAD_DONE } fun getFileName(context: Context, metadata: DownloadEpisodeMetadata): String { @@ -1379,7 +1326,7 @@ object VideoDownloadManager { ) } - private fun downloadSingleEpisode( + private suspend fun downloadSingleEpisode( context: Context, source: String?, folder: String?, @@ -1405,25 +1352,29 @@ object VideoDownloadManager { null )?.extraInfo?.toIntOrNull() } else null - return downloadHLS(context, link, name, folder, ep.id, startIndex) { meta -> - main { - createNotification( - context, - source, - link.name, - ep, - meta.type, - meta.bytesDownloaded, - meta.bytesTotal, - notificationCallback, - meta.hlsProgress, - meta.hlsTotal - ) + return suspendSafeApiCall { + downloadHLS(context, link, name, folder, ep.id, startIndex) { meta -> + main { + createNotification( + context, + source, + link.name, + ep, + meta.type, + meta.bytesDownloaded, + meta.bytesTotal, + notificationCallback, + meta.hlsProgress, + meta.hlsTotal + ) + } } - }.also { extractorJob.cancel() } + }.also { + extractorJob.cancel() + } ?: ERROR_UNKNOWN } - return normalSafeApiCall { + return suspendSafeApiCall { downloadThing(context, link, name, folder, "mp4", tryResume, ep.id) { meta -> main { createNotification( @@ -1468,17 +1419,15 @@ object VideoDownloadManager { DownloadResumePackage(item, index) ) val connectionResult = withContext(Dispatchers.IO) { - normalSafeApiCall { - downloadSingleEpisode( - context, - item.source, - item.folder, - item.ep, - link, - notificationCallback, - resume - ).also { println("Single episode finished with return code: $it") } - } + downloadSingleEpisode( + context, + item.source, + item.folder, + item.ep, + link, + notificationCallback, + resume + ).also { println("Single episode finished with return code: $it") } } if (connectionResult != null && connectionResult > 0) { // SUCCESS removeKey(KEY_RESUME_PACKAGES, id.toString()) From 61d63b17d819d7899e04314293d8f01b651ef22a Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 18 Aug 2023 02:41:59 +0530 Subject: [PATCH 492/888] chore: acra improvements and media3 bump (#562) * Acra Bump * Media3 bump --- app/build.gradle.kts | 20 +++++++++---------- .../lagradost/cloudstream3/AcraApplication.kt | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b228fea0..3b215dbc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -181,22 +181,22 @@ dependencies { // implementation("androidx.leanback:leanback-paging:1.1.0-alpha09") // Media 3 - implementation("androidx.media3:media3-common:1.1.0") - implementation("androidx.media3:media3-exoplayer:1.1.0") - implementation("androidx.media3:media3-datasource-okhttp:1.1.0") - implementation("androidx.media3:media3-ui:1.1.0") - implementation("androidx.media3:media3-session:1.1.0") - implementation("androidx.media3:media3-cast:1.1.0") - implementation("androidx.media3:media3-exoplayer-hls:1.1.0") - implementation("androidx.media3:media3-exoplayer-dash:1.1.0") + implementation("androidx.media3:media3-common:1.1.1") + implementation("androidx.media3:media3-exoplayer:1.1.1") + implementation("androidx.media3:media3-datasource-okhttp:1.1.1") + implementation("androidx.media3:media3-ui:1.1.1") + implementation("androidx.media3:media3-session:1.1.1") + implementation("androidx.media3:media3-cast:1.1.1") + implementation("androidx.media3:media3-exoplayer-hls:1.1.1") + implementation("androidx.media3:media3-exoplayer-dash:1.1.1") // Custom ffmpeg extension for audio codecs implementation("com.github.recloudstream:media-ffmpeg:1.1.0") //implementation("com.google.android.exoplayer:extension-leanback:2.14.0") // Bug reports - implementation("ch.acra:acra-core:5.8.4") - implementation("ch.acra:acra-toast:5.8.4") + implementation("ch.acra:acra-core:5.11.0") + implementation("ch.acra:acra-toast:5.11.0") compileOnly("com.google.auto.service:auto-service-annotations:1.0") //either for java sources: diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 069287b0..61d467c4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -121,10 +121,10 @@ class AcraApplication : Application() { buildConfigClass = BuildConfig::class.java reportFormat = StringFormat.JSON - reportContent = arrayOf( + reportContent = listOf( ReportField.BUILD_CONFIG, ReportField.USER_CRASH_DATE, ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL, - ReportField.STACK_TRACE + ReportField.STACK_TRACE, ) // removed this due to bug when starting the app, moved it to when it actually crashes @@ -213,4 +213,4 @@ class AcraApplication : Application() { } } -} \ No newline at end of file +} From 8f6e8a8e99c349489f05294e2d46a9ce58afc1ae Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 18 Aug 2023 01:46:29 +0200 Subject: [PATCH 493/888] fixed #547 fuck inheritance --- app/build.gradle.kts | 2 +- .../ui/result/ResultFragmentPhone.kt | 53 ++++++++++++------- .../ui/result/ResultTrailerPlayer.kt | 3 -- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3b215dbc..f72ec0b0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -231,7 +231,7 @@ dependencies { // API because cba maintaining it myself implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0") - implementation("com.github.discord:OverlappingPanels:0.1.3") + implementation("com.github.discord:OverlappingPanels:0.1.5") // debugImplementation because LeakCanary should only run in debug builds. //debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 633ee762..ae0b7419 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -23,7 +23,6 @@ import androidx.core.view.isVisible import androidx.core.widget.NestedScrollView import androidx.core.widget.doOnTextChanged import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.RecyclerView import com.discord.panels.OverlappingPanelsLayout import com.discord.panels.PanelsChildGestureRegionObserver import com.google.android.gms.cast.framework.CastButtonFactory @@ -62,8 +61,6 @@ import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable -import com.lagradost.cloudstream3.utils.AppUtils.isLtr -import com.lagradost.cloudstream3.utils.AppUtils.isRtl import com.lagradost.cloudstream3.utils.AppUtils.loadCache import com.lagradost.cloudstream3.utils.AppUtils.openBrowser import com.lagradost.cloudstream3.utils.ExtractorLink @@ -81,8 +78,13 @@ import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.VideoDownloadHelper -open class ResultFragmentPhone : FullScreenPlayer(), - PanelsChildGestureRegionObserver.GestureRegionsListener { +open class ResultFragmentPhone : FullScreenPlayer() { + private val gestureRegionsListener = object : PanelsChildGestureRegionObserver.GestureRegionsListener { + override fun onGestureRegionsUpdate(gestureRegions: List) { + binding?.resultOverlappingPanels?.setChildGestureRegions(gestureRegions) + } + } + protected lateinit var viewModel: ResultViewModel2 protected lateinit var syncModel: SyncViewModel @@ -210,15 +212,20 @@ open class ResultFragmentPhone : FullScreenPlayer(), loadTrailer() } + override fun onDestroy() { + super.onDestroy() + PanelsChildGestureRegionObserver.Provider.get().apply { + resultBinding?.resultCastItems?.let { + unregister(it) + } + removeGestureRegionsUpdateListener(gestureRegionsListener) + } + } + override fun onDestroyView() { //somehow this still leaks and I dont know why???? // todo look at https://github.com/discord/OverlappingPanels/blob/70b4a7cf43c6771873b1e091029d332896d41a1a/sample_app/src/main/java/com/discord/sampleapp/MainActivity.kt - PanelsChildGestureRegionObserver.Provider.get().let { obs -> - resultBinding?.resultCastItems?.let { - obs.unregister(it) - } - obs.removeGestureRegionsUpdateListener(this) - } + updateUIEvent -= ::updateUI binding = null resultBinding = null @@ -287,6 +294,8 @@ open class ResultFragmentPhone : FullScreenPlayer(), it.colorFromAttribute(R.attr.primaryBlackBackground) } super.onResume() + PanelsChildGestureRegionObserver.Provider.get() + .addGestureRegionsUpdateListener(gestureRegionsListener) } override fun onStop() { @@ -323,7 +332,16 @@ open class ResultFragmentPhone : FullScreenPlayer(), setUrl(storedData.url) syncModel.addFromUrl(storedData.url) val api = APIHolder.getApiFromNameNull(storedData.apiName) - PanelsChildGestureRegionObserver.Provider.get().addGestureRegionsUpdateListener(this) + + PanelsChildGestureRegionObserver.Provider.get().apply { + resultBinding?.resultCastItems?.let { + register(it) + } + addGestureRegionsUpdateListener(gestureRegionsListener) + } + + + // ===== ===== ===== resultBinding?.apply { @@ -374,9 +392,8 @@ open class ResultFragmentPhone : FullScreenPlayer(), DownloadButtonSetup.handleDownloadClick(downloadClickEvent) } ) - resultCastItems.let { - PanelsChildGestureRegionObserver.Provider.get().register(it) - } + + resultScroll.setOnScrollChangeListener(NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY -> val dy = scrollY - oldScrollY if (dy > 0) { //check for scroll down @@ -1055,11 +1072,7 @@ open class ResultFragmentPhone : FullScreenPlayer(), override fun onPause() { super.onPause() - PanelsChildGestureRegionObserver.Provider.get().addGestureRegionsUpdateListener(this) - } - - override fun onGestureRegionsUpdate(gestureRegions: List) { - binding?.resultOverlappingPanels?.setChildGestureRegions(gestureRegions) + PanelsChildGestureRegionObserver.Provider.get().addGestureRegionsUpdateListener(gestureRegionsListener) } private fun setRecommendations(rec: List?, validApiName: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index 1f663e31..eb8cb9b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -118,9 +118,6 @@ open class ResultTrailerPlayer : ResultFragmentPhone(), IOnBackPressed { override fun onTracksInfoChanged() {} override fun exitedPipMode() {} - - override fun onGestureRegionsUpdate(gestureRegions: List) {} - private fun updateFullscreen(fullscreen: Boolean) { isFullScreenPlayer = fullscreen lockRotation = fullscreen From e95dc1db2a94a4f3f5583bc626e331129be77a38 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:16:03 +0530 Subject: [PATCH 494/888] fix: cast items recycler (finally) (#564) * turn cast items visible(tools) * prevent cast gesture listener from permanent RIP in one lifecycle --- .../ui/result/ResultFragmentPhone.kt | 20 +++++++++---------- app/src/main/res/layout/fragment_result.xml | 4 ++-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index ae0b7419..a932a57c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -212,19 +212,17 @@ open class ResultFragmentPhone : FullScreenPlayer() { loadTrailer() } - override fun onDestroy() { - super.onDestroy() - PanelsChildGestureRegionObserver.Provider.get().apply { - resultBinding?.resultCastItems?.let { - unregister(it) - } - removeGestureRegionsUpdateListener(gestureRegionsListener) - } - } - override fun onDestroyView() { + //somehow this still leaks and I dont know why???? // todo look at https://github.com/discord/OverlappingPanels/blob/70b4a7cf43c6771873b1e091029d332896d41a1a/sample_app/src/main/java/com/discord/sampleapp/MainActivity.kt + PanelsChildGestureRegionObserver.Provider.get().let { obs -> + resultBinding?.resultCastItems?.let { + obs.unregister(it) + } + + obs.removeGestureRegionsUpdateListener(gestureRegionsListener) + } updateUIEvent -= ::updateUI binding = null @@ -1127,4 +1125,4 @@ open class ResultFragmentPhone : FullScreenPlayer() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index ee3477b0..87de7186 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -476,7 +476,7 @@ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:itemCount="2" tools:listitem="@layout/cast_item" - tools:visibility="gone" /> + tools:visibility="visible" /> --> - \ No newline at end of file + From 56cb3d718188bf95e16cc062280bc5a16e42ea24 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 00:48:00 +0200 Subject: [PATCH 495/888] refactored download system for better preference + bugfixes --- .../cloudstream3/DownloaderTestImpl.kt | 2 +- .../com/lagradost/cloudstream3/MainAPI.kt | 2 +- .../ui/download/DownloadChildAdapter.kt | 2 +- .../ui/download/EasyDownloadButton.kt | 264 ----- .../ui/download/button/BaseFetchButton.kt | 61 +- .../ui/download/button/DownloadButton.kt | 17 +- .../ui/download/button/PieFetchButton.kt | 53 +- .../cloudstream3/utils/M3u8Helper.kt | 23 +- .../cloudstream3/utils/VideoDownloadHelper.kt | 6 +- .../utils/VideoDownloadManager.kt | 1016 ++++++++--------- .../main/res/drawable/baseline_stop_24.xml | 10 + 11 files changed, 604 insertions(+), 852 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt create mode 100644 app/src/main/res/drawable/baseline_stop_24.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt b/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt index 379a91e4..0a2db2bd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt @@ -50,7 +50,7 @@ class DownloaderTestImpl private constructor(builder: OkHttpClient.Builder) : Do companion object { private const val USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" private var instance: DownloaderTestImpl? = null /** diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 7790f047..80332445 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -29,7 +29,7 @@ import java.util.* import kotlin.math.absoluteValue const val USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" //val baseHeader = mapOf("User-Agent" to USER_AGENT) val mapper = JsonMapper.builder().addModule(KotlinModule()) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt index b4774cf8..1d7b5a83 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt @@ -23,7 +23,7 @@ data class VisualDownloadChildCached( val data: VideoDownloadHelper.DownloadEpisodeCached, ) -data class DownloadClickEvent(val action: Int, val data: EasyDownloadButton.IMinimumData) +data class DownloadClickEvent(val action: Int, val data: VideoDownloadHelper.DownloadEpisodeCached) class DownloadChildAdapter( var cardList: List, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt deleted file mode 100644 index 77878432..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt +++ /dev/null @@ -1,264 +0,0 @@ -package com.lagradost.cloudstream3.ui.download - -import android.animation.ObjectAnimator -import android.text.format.Formatter.formatShortFileSize -import android.view.View -import android.view.animation.DecelerateInterpolator -import android.widget.ImageView -import android.widget.TextView -import androidx.core.view.isGone -import androidx.core.view.isVisible -import androidx.core.widget.ContentLoadingProgressBar -import com.google.android.material.button.MaterialButton -import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.Coroutines -import com.lagradost.cloudstream3.utils.IDisposable -import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons -import com.lagradost.cloudstream3.utils.VideoDownloadManager - -class EasyDownloadButton : IDisposable { - interface IMinimumData { - val id: Int - } - - private var _clickCallback: ((DownloadClickEvent) -> Unit)? = null - private var _imageChangeCallback: ((Pair) -> Unit)? = null - - override fun dispose() { - try { - _clickCallback = null - _imageChangeCallback = null - downloadProgressEventListener?.let { VideoDownloadManager.downloadProgressEvent -= it } - downloadStatusEventListener?.let { VideoDownloadManager.downloadStatusEvent -= it } - } catch (e: Exception) { - e.printStackTrace() - } - } - - private var downloadProgressEventListener: ((Triple) -> Unit)? = null - private var downloadStatusEventListener: ((Pair) -> Unit)? = - null - - fun setUpMaterialButton( - setupCurrentBytes: Long?, - setupTotalBytes: Long?, - progressBar: ContentLoadingProgressBar, - downloadButton: MaterialButton, - textView: TextView?, - data: IMinimumData, - clickCallback: (DownloadClickEvent) -> Unit, - ) { - setUpDownloadButton( - setupCurrentBytes, - setupTotalBytes, - progressBar, - textView, - data, - downloadButton, - { - downloadButton.setIconResource(it.first) - downloadButton.text = it.second - }, - clickCallback - ) - } - - fun setUpMoreButton( - setupCurrentBytes: Long?, - setupTotalBytes: Long?, - progressBar: ContentLoadingProgressBar, - downloadImage: ImageView, - textView: TextView?, - textViewProgress: TextView?, - clickableView: View, - isTextPercentage: Boolean, - data: IMinimumData, - clickCallback: (DownloadClickEvent) -> Unit, - ) { - setUpDownloadButton( - setupCurrentBytes, - setupTotalBytes, - progressBar, - textViewProgress, - data, - clickableView, - { (image, text) -> - downloadImage.isVisible = textViewProgress?.isGone ?: true - downloadImage.setImageResource(image) - textView?.text = text - }, - clickCallback, isTextPercentage - ) - } - - fun setUpButton( - setupCurrentBytes: Long?, - setupTotalBytes: Long?, - progressBar: ContentLoadingProgressBar, - downloadImage: ImageView, - textView: TextView?, - data: IMinimumData, - clickCallback: (DownloadClickEvent) -> Unit, - ) { - setUpDownloadButton( - setupCurrentBytes, - setupTotalBytes, - progressBar, - textView, - data, - downloadImage, - { - downloadImage.setImageResource(it.first) - }, - clickCallback - ) - } - - private fun setUpDownloadButton( - setupCurrentBytes: Long?, - setupTotalBytes: Long?, - progressBar: ContentLoadingProgressBar, - textView: TextView?, - data: IMinimumData, - downloadView: View, - downloadImageChangeCallback: (Pair) -> Unit, - clickCallback: (DownloadClickEvent) -> Unit, - isTextPercentage: Boolean = false - ) { - _clickCallback = clickCallback - _imageChangeCallback = downloadImageChangeCallback - var lastState: VideoDownloadManager.DownloadType? = null - var currentBytes = setupCurrentBytes ?: 0 - var totalBytes = setupTotalBytes ?: 0 - var needImageUpdate = true - - fun changeDownloadImage(state: VideoDownloadManager.DownloadType) { - lastState = state - if (currentBytes <= 0) needImageUpdate = true - val img = if (currentBytes > 0) { - when (state) { - VideoDownloadManager.DownloadType.IsPaused -> Pair( - R.drawable.ic_baseline_play_arrow_24, - R.string.download_paused - ) - VideoDownloadManager.DownloadType.IsDownloading -> Pair( - R.drawable.netflix_pause, - R.string.downloading - ) - else -> Pair(R.drawable.ic_baseline_delete_outline_24, R.string.downloaded) - } - } else { - Pair(R.drawable.netflix_download, R.string.download) - } - _imageChangeCallback?.invoke( - Pair( - img.first, - downloadView.context.getString(img.second) - ) - ) - } - - fun fixDownloadedBytes(setCurrentBytes: Long, setTotalBytes: Long, animate: Boolean) { - currentBytes = setCurrentBytes - totalBytes = setTotalBytes - - if (currentBytes == 0L) { - changeDownloadImage(VideoDownloadManager.DownloadType.IsStopped) - textView?.visibility = View.GONE - progressBar.visibility = View.GONE - } else { - if (lastState == VideoDownloadManager.DownloadType.IsStopped) { - changeDownloadImage(VideoDownloadManager.getDownloadState(data.id)) - } - textView?.visibility = View.VISIBLE - progressBar.visibility = View.VISIBLE - val currentMbString = formatShortFileSize(textView?.context, setCurrentBytes) - val totalMbString = formatShortFileSize(textView?.context, setTotalBytes) - - textView?.text = - if (isTextPercentage) "%d%%".format(setCurrentBytes * 100L / setTotalBytes) else - textView?.context?.getString(R.string.download_size_format) - ?.format(currentMbString, totalMbString) - - progressBar.let { bar -> - bar.max = (setTotalBytes / 1000).toInt() - - if (animate) { - val animation: ObjectAnimator = ObjectAnimator.ofInt( - bar, - "progress", - bar.progress, - (setCurrentBytes / 1000).toInt() - ) - animation.duration = 500 - animation.setAutoCancel(true) - animation.interpolator = DecelerateInterpolator() - animation.start() - } else { - bar.progress = (setCurrentBytes / 1000).toInt() - } - } - } - } - - fixDownloadedBytes(currentBytes, totalBytes, false) - changeDownloadImage(VideoDownloadManager.getDownloadState(data.id)) - - downloadProgressEventListener = { downloadData: Triple -> - if (data.id == downloadData.first) { - if (downloadData.second != currentBytes || downloadData.third != totalBytes) { // TO PREVENT WASTING UI TIME - Coroutines.runOnMainThread { - fixDownloadedBytes(downloadData.second, downloadData.third, true) - changeDownloadImage(VideoDownloadManager.getDownloadState(data.id)) - } - } - } - } - - downloadStatusEventListener = - { downloadData: Pair -> - if (data.id == downloadData.first) { - if (lastState != downloadData.second || needImageUpdate) { // TO PREVENT WASTING UI TIME - Coroutines.runOnMainThread { - changeDownloadImage(downloadData.second) - } - } - } - } - - downloadProgressEventListener?.let { VideoDownloadManager.downloadProgressEvent += it } - downloadStatusEventListener?.let { VideoDownloadManager.downloadStatusEvent += it } - - downloadView.setOnClickListener { - if (currentBytes <= 0 || totalBytes <= 0) { - _clickCallback?.invoke(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, data)) - } else { - val list = arrayListOf( - Pair(DOWNLOAD_ACTION_PLAY_FILE, R.string.popup_play_file), - Pair(DOWNLOAD_ACTION_DELETE_FILE, R.string.popup_delete_file), - ) - - // DON'T RESUME A DOWNLOADED FILE lastState != VideoDownloadManager.DownloadType.IsDone && - if ((currentBytes * 100 / totalBytes) < 98) { - list.add( - if (lastState == VideoDownloadManager.DownloadType.IsDownloading) - Pair(DOWNLOAD_ACTION_PAUSE_DOWNLOAD, R.string.popup_pause_download) - else - Pair(DOWNLOAD_ACTION_RESUME_DOWNLOAD, R.string.popup_resume_download) - ) - } - - it.popupMenuNoIcons( - list - ) { - _clickCallback?.invoke(DownloadClickEvent(itemId, data)) - } - } - } - - downloadView.setOnLongClickListener { - clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_LONG_CLICK, data)) - return@setOnLongClickListener true - } - } -} diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt index 05f630a0..b43f1aac 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt @@ -22,7 +22,7 @@ data class DownloadMetadata( val progressPercentage: Long get() = if (downloadedLength < 1024) 0 else maxOf( 0, - minOf(100, (downloadedLength * 100L) / totalLength) + minOf(100, (downloadedLength * 100L) / (totalLength + 1)) ) } @@ -101,38 +101,41 @@ abstract class BaseFetchButton(context: Context, attributeSet: AttributeSet) : open fun setProgress(downloadedBytes: Long, totalBytes: Long) { isZeroBytes = downloadedBytes == 0L - val steps = 10000L - progressBar.max = steps.toInt() - // div by zero error and 1 byte off is ok impo - val progress = (downloadedBytes * steps / (totalBytes + 1L)).toInt() + progressBar.post { + val steps = 10000L + progressBar.max = steps.toInt() + // div by zero error and 1 byte off is ok impo - val animation = ProgressBarAnimation( - progressBar, - progressBar.progress.toFloat(), - progress.toFloat() - ).apply { - fillAfter = true - duration = - if (progress > progressBar.progress) // we don't want to animate backward changes in progress - 100 - else - 0L - } + val progress = (downloadedBytes * steps / (totalBytes + 1L)).toInt() - if (isZeroBytes) { - progressText?.isVisible = false - } else { - progressText?.apply { - val currentMbString = Formatter.formatShortFileSize(context, downloadedBytes) - val totalMbString = Formatter.formatShortFileSize(context, totalBytes) - text = - //if (isTextPercentage) "%d%%".format(setCurrentBytes * 100L / setTotalBytes) else - context?.getString(R.string.download_size_format) - ?.format(currentMbString, totalMbString) + val animation = ProgressBarAnimation( + progressBar, + progressBar.progress.toFloat(), + progress.toFloat() + ).apply { + fillAfter = true + duration = + if (progress > progressBar.progress) // we don't want to animate backward changes in progress + 100 + else + 0L } - } - progressBar.startAnimation(animation) + if (isZeroBytes) { + progressText?.isVisible = false + } else { + progressText?.apply { + val currentMbString = Formatter.formatShortFileSize(context, downloadedBytes) + val totalMbString = Formatter.formatShortFileSize(context, totalBytes) + text = + //if (isTextPercentage) "%d%%".format(setCurrentBytes * 100L / setTotalBytes) else + context?.getString(R.string.download_size_format) + ?.format(currentMbString, totalMbString) + } + } + + progressBar.startAnimation(animation) + } } fun downloadStatusEvent(data: Pair) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt index bb2ba7b1..d97a4b88 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt @@ -21,14 +21,17 @@ class DownloadButton(context: Context, attributeSet: AttributeSet) : } override fun setStatus(status: DownloadStatusTell?) { - super.setStatus(status) - val txt = when (status) { - DownloadStatusTell.IsPaused -> R.string.download_paused - DownloadStatusTell.IsDownloading -> R.string.downloading - DownloadStatusTell.IsDone -> R.string.downloaded - else -> R.string.download + mainText?.post { + val txt = when (status) { + DownloadStatusTell.IsPaused -> R.string.download_paused + DownloadStatusTell.IsDownloading -> R.string.downloading + DownloadStatusTell.IsDone -> R.string.downloaded + else -> R.string.download + } + mainText?.setText(txt) } - mainText?.setText(txt) + super.setStatus(status) + } override fun setDefaultClickListener( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt index 0b7a7fea..d20fcf93 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt @@ -174,7 +174,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : currentMetaData.apply { // DON'T RESUME A DOWNLOADED FILE lastState != VideoDownloadManager.DownloadType.IsDone && - if ((downloadedLength * 100 / totalLength) < 98) { + if (progressPercentage < 98) { list.add( if (status == VideoDownloadManager.DownloadType.IsDownloading) Pair(DOWNLOAD_ACTION_PAUSE_DOWNLOAD, R.string.popup_pause_download) @@ -248,33 +248,34 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : //progressBar.isVisible = // status != null && status != DownloadStatusTell.Complete && status != DownloadStatusTell.Error //progressBarBackground.isVisible = status != null && status != DownloadStatusTell.Complete - val isPreActive = isZeroBytes && status == DownloadStatusTell.IsDownloading + progressBarBackground.post { + val isPreActive = isZeroBytes && status == DownloadStatusTell.IsDownloading + if (animateWaiting && (status == DownloadStatusTell.IsPending || isPreActive)) { + val animation = AnimationUtils.loadAnimation(context, waitingAnimation) + progressBarBackground.startAnimation(animation) + } else { + progressBarBackground.clearAnimation() + } - if (animateWaiting && (status == DownloadStatusTell.IsPending || isPreActive)) { - val animation = AnimationUtils.loadAnimation(context, waitingAnimation) - progressBarBackground.startAnimation(animation) - } else { - progressBarBackground.clearAnimation() + val progressDrawable = + if (status == DownloadStatusTell.IsDownloading && !isPreActive) activeOutline else nonActiveOutline + + progressBarBackground.background = + ContextCompat.getDrawable(context, progressDrawable) + + val drawable = getDrawableFromStatus(status) + statusView.setImageDrawable(drawable) + val isDrawable = drawable != null + + statusView.isVisible = isDrawable + val hide = hideWhenIcon && isDrawable + if (hide) { + progressBar.clearAnimation() + progressBarBackground.clearAnimation() + } + progressBarBackground.isGone = hide + progressBar.isGone = hide } - - val progressDrawable = - if (status == DownloadStatusTell.IsDownloading && !isPreActive) activeOutline else nonActiveOutline - - progressBarBackground.background = - ContextCompat.getDrawable(context, progressDrawable) - - val drawable = getDrawableFromStatus(status) - statusView.setImageDrawable(drawable) - val isDrawable = drawable != null - - statusView.isVisible = isDrawable - val hide = hideWhenIcon && isDrawable - if (hide) { - progressBar.clearAnimation() - progressBarBackground.clearAnimation() - } - progressBarBackground.isGone = hide - progressBar.isGone = hide } override fun resetView() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 6770e303..1fb3a72d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -186,6 +186,27 @@ object M3u8Helper2 { ) { val size get() = allTsLinks.size + suspend fun resolveLinkWhileSafe( + index: Int, + tries: Int = 3, + failDelay: Long = 3000, + condition : (() -> Boolean) + ): ByteArray? { + for (i in 0 until tries) { + if(!condition()) return null + + try { + val out = resolveLink(index) + return if(condition()) out else null + } catch (e: IllegalArgumentException) { + return null + } catch (t: Throwable) { + delay(failDelay) + } + } + return null + } + suspend fun resolveLinkSafe( index: Int, tries: Int = 3, @@ -240,8 +261,6 @@ object M3u8Helper2 { verify = false ).text - println("m3u8Response=$m3u8Response") - // encryption, this is because crunchy uses it var encryptionIv = byteArrayOf() var encryptionData = byteArrayOf() diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt index a76cc115..d1614bc1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt @@ -2,20 +2,18 @@ package com.lagradost.cloudstream3.utils import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.ui.download.EasyDownloadButton - object VideoDownloadHelper { data class DownloadEpisodeCached( @JsonProperty("name") val name: String?, @JsonProperty("poster") val poster: String?, @JsonProperty("episode") val episode: Int, @JsonProperty("season") val season: Int?, - @JsonProperty("id") override val id: Int, + @JsonProperty("id") val id: Int, @JsonProperty("parentId") val parentId: Int, @JsonProperty("rating") val rating: Int?, @JsonProperty("description") val description: String?, @JsonProperty("cacheTime") val cacheTime: Long, - ) : EasyDownloadButton.IMinimumData + ) data class DownloadHeaderCached( @JsonProperty("apiName") val apiName: String, diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index f4eb37b7..0334103f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -15,7 +15,6 @@ import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.net.toUri -import androidx.lifecycle.MutableLiveData import androidx.preference.PreferenceManager import androidx.work.Data import androidx.work.ExistingWorkPolicy @@ -30,6 +29,8 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.amap +import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.services.VideoDownloadService @@ -42,13 +43,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import okhttp3.internal.closeQuietly -import java.io.BufferedInputStream +import java.io.Closeable import java.io.File +import java.io.IOException import java.io.InputStream import java.io.OutputStream -import java.lang.Thread.sleep import java.net.URL -import java.net.URLConnection import java.util.* const val DOWNLOAD_CHANNEL_ID = "cloudstream3.general" @@ -60,34 +60,31 @@ object VideoDownloadManager { private var currentDownloads = mutableListOf() private const val USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" - @DrawableRes - const val imgDone = R.drawable.rddone + @get:DrawableRes + val imgDone get() = R.drawable.rddone - @DrawableRes - const val imgDownloading = R.drawable.rdload + @get:DrawableRes + val imgDownloading get() = R.drawable.rdload - @DrawableRes - const val imgPaused = R.drawable.rdpause + @get:DrawableRes + val imgPaused get() = R.drawable.rdpause - @DrawableRes - const val imgStopped = R.drawable.rderror + @get:DrawableRes + val imgStopped get() = R.drawable.rderror - @DrawableRes - const val imgError = R.drawable.rderror + @get:DrawableRes + val imgError get() = R.drawable.rderror - @DrawableRes - const val pressToPauseIcon = R.drawable.ic_baseline_pause_24 + @get:DrawableRes + val pressToPauseIcon get() = R.drawable.ic_baseline_pause_24 - @DrawableRes - const val pressToResumeIcon = R.drawable.ic_baseline_play_arrow_24 + @get:DrawableRes + val pressToResumeIcon get() = R.drawable.ic_baseline_play_arrow_24 - @DrawableRes - const val pressToStopIcon = R.drawable.exo_icon_stop - - private var updateCount: Int = 0 - private val downloadDataUpdateCount = MutableLiveData() + @get:DrawableRes + val pressToStopIcon get() = R.drawable.baseline_stop_24 enum class DownloadType { IsPaused, @@ -251,9 +248,8 @@ object VideoDownloadManager { total: Long, notificationCallback: (Int, Notification) -> Unit, hlsProgress: Long? = null, - hlsTotal: Long? = null, - - ): Notification? { + hlsTotal: Long? = null + ): Notification? { try { if (total <= 0) return null// crash, invalid data @@ -336,14 +332,28 @@ object VideoDownloadManager { } val bigText = - if (state == DownloadType.IsDownloading || state == DownloadType.IsPaused) { - (if (linkName == null) "" else "$linkName\n") + "$rowTwo\n$progressPercentage % ($progressMbString/$totalMbString)$suffix" - } else if (state == DownloadType.IsFailed) { - downloadFormat.format(context.getString(R.string.download_failed), rowTwo) - } else if (state == DownloadType.IsDone) { - downloadFormat.format(context.getString(R.string.download_done), rowTwo) - } else { - downloadFormat.format(context.getString(R.string.download_canceled), rowTwo) + when (state) { + DownloadType.IsDownloading, DownloadType.IsPaused -> { + (if (linkName == null) "" else "$linkName\n") + "$rowTwo\n$progressPercentage % ($progressMbString/$totalMbString)$suffix" + } + + DownloadType.IsFailed -> { + downloadFormat.format( + context.getString(R.string.download_failed), + rowTwo + ) + } + + DownloadType.IsDone -> { + downloadFormat.format(context.getString(R.string.download_done), rowTwo) + } + + else -> { + downloadFormat.format( + context.getString(R.string.download_canceled), + rowTwo + ) + } } val bodyStyle = NotificationCompat.BigTextStyle() @@ -351,14 +361,28 @@ object VideoDownloadManager { builder.setStyle(bodyStyle) } else { val txt = - if (state == DownloadType.IsDownloading || state == DownloadType.IsPaused) { - rowTwo - } else if (state == DownloadType.IsFailed) { - downloadFormat.format(context.getString(R.string.download_failed), rowTwo) - } else if (state == DownloadType.IsDone) { - downloadFormat.format(context.getString(R.string.download_done), rowTwo) - } else { - downloadFormat.format(context.getString(R.string.download_canceled), rowTwo) + when (state) { + DownloadType.IsDownloading, DownloadType.IsPaused -> { + rowTwo + } + + DownloadType.IsFailed -> { + downloadFormat.format( + context.getString(R.string.download_failed), + rowTwo + ) + } + + DownloadType.IsDone -> { + downloadFormat.format(context.getString(R.string.download_done), rowTwo) + } + + else -> { + downloadFormat.format( + context.getString(R.string.download_canceled), + rowTwo + ) + } } builder.setContentText(txt) @@ -681,6 +705,171 @@ object VideoDownloadManager { return StreamData(SUCCESS_STREAM, resume, fileLength, fileStream) } + /** This class handles the notifications, as well as the relevant key */ + data class DownloadMetaData( + private val id: Int?, + var bytesDownloaded: Long = 0, + var totalBytes: Long? = null, + + // notification metadata + private var lastUpdatedMs: Long = 0, + private val createNotificationCallback: (CreateNotificationMetadata) -> Unit, + + private var internalType: DownloadType = DownloadType.IsPending, + + // how many segments that we have downloaded + var hlsProgress: Int = 0, + // how many segments that exist + var hlsTotal: Int? = null, + // this is how many segments that has been written to the file + // will always be <= hlsProgress as we may keep some in a buffer + var hlsWrittenProgress: Long = 0, + + // this is used for copy with metadata on how much we have downloaded for setKey + private var downloadFileInfoTemplate: DownloadedFileInfo? = null + ) : Closeable { + val approxTotalBytes: Long + get() = totalBytes ?: hlsTotal?.let { total -> + (bytesDownloaded * (total / hlsProgress.toFloat())).toLong() + } ?: 0L + + private val isHLS get() = hlsTotal != null + + private val downloadEventListener = { event: Pair -> + if (event.first == id) { + when (event.second) { + DownloadActionType.Pause -> { + type = DownloadType.IsPaused + } + + DownloadActionType.Stop -> { + type = DownloadType.IsStopped + removeKey(KEY_RESUME_PACKAGES, event.first.toString()) + saveQueue() + } + + DownloadActionType.Resume -> { + type = DownloadType.IsDownloading + } + } + } + } + + private fun updateFileInfo() { + if (id == null) return + downloadFileInfoTemplate?.let { template -> + setKey( + KEY_DOWNLOAD_INFO, + id.toString(), + template.copy( + totalBytes = approxTotalBytes, + extraInfo = if (isHLS) hlsWrittenProgress.toString() else null + ) + ) + } + } + + fun setDownloadFileInfoTemplate(template: DownloadedFileInfo) { + downloadFileInfoTemplate = template + updateFileInfo() + } + + init { + if (id != null) { + downloadEvent += downloadEventListener + } + } + + override fun close() { + // as we may need to resume hls downloads, we save the current written index + if (isHLS) { + updateFileInfo() + } + if (id != null) { + downloadEvent -= downloadEventListener + downloadStatus -= id + } + } + + var type + get() = internalType + set(value) { + internalType = value + notify() + } + + companion object { + const val UPDATE_RATE_MS: Long = 1000L + } + + @JvmName("DownloadMetaDataNotify") + private fun notify() { + lastUpdatedMs = System.currentTimeMillis() + try { + val bytes = approxTotalBytes + + // notification creation + if (isHLS) { + createNotificationCallback( + CreateNotificationMetadata( + internalType, + bytesDownloaded, + bytes, + hlsTotal = hlsTotal?.toLong(), + hlsProgress = hlsProgress.toLong() + ) + ) + } else { + createNotificationCallback( + CreateNotificationMetadata( + internalType, + bytesDownloaded, + bytes, + ) + ) + } + + // as hls has an approx file size we want to update this metadata + if (isHLS) { + updateFileInfo() + } + + // push all events, this *should* not crash, TODO MUTEX? + if (id != null) { + downloadStatus[id] = type + downloadProgressEvent(Triple(id, bytesDownloaded, bytes)) + downloadStatusEvent(id to type) + } + } catch (t: Throwable) { + logError(t) + } + } + + private fun checkNotification() { + if (lastUpdatedMs + UPDATE_RATE_MS > System.currentTimeMillis()) return + notify() + } + + + /** adds the length and pushes a notification if necessary */ + fun addBytes(length: Long) { + bytesDownloaded += length + // we don't want to update the notification after it is paused, + // download progress may not stop directly when we "pause" it + if (type == DownloadType.IsDownloading) checkNotification() + } + + /** adds the length + hsl progress and pushes a notification if necessary */ + fun addSegment(length: Long) { + hlsProgress += 1 + addBytes(length) + } + + fun setWrittenSegment(segmentIndex: Int) { + hlsWrittenProgress = segmentIndex.toLong() + 1L + } + } + @Throws suspend fun downloadThing( context: Context, @@ -692,253 +881,225 @@ object VideoDownloadManager { parentId: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, ): Int = withContext(Dispatchers.IO) { + // we cant download torrents with this implementation, aria2c might be used in the future if (link.url.startsWith("magnet") || link.url.endsWith(".torrent")) { return@withContext ERROR_UNKNOWN } - val basePath = context.getBasePath() - - val displayName = getDisplayName(name, extension) - val relativePath = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && basePath.first.isDownloadDir()) getRelativePath( - folder - ) else folder - - fun deleteFile(): Int { - return delete(context, name, relativePath, extension, parentId, basePath.first) - } - - val stream = setupStream(context, name, relativePath, extension, tryResume) - if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode - - val resume = stream.resume!! - val fileStream = stream.fileStream!! - val fileLength = stream.fileLength!! - - // CONNECT - val connection: URLConnection = - URL(link.url.replace(" ", "%20")).openConnection() // IDK OLD PHONES BE WACK - - // SET CONNECTION SETTINGS - connection.connectTimeout = 10000 - connection.setRequestProperty("Accept-Encoding", "identity") - connection.setRequestProperty("user-agent", USER_AGENT) - if (link.referer.isNotEmpty()) connection.setRequestProperty("referer", link.referer) - - // extra stuff - connection.setRequestProperty( - "sec-ch-ua", - "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"" + var fileStream: OutputStream? = null + var requestStream: InputStream? = null + val metadata = DownloadMetaData( + totalBytes = 0, + bytesDownloaded = 0, + createNotificationCallback = createNotificationCallback, + id = parentId, ) + try { + // get the file path + val (baseFile, basePath) = context.getBasePath() + val displayName = getDisplayName(name, extension) + val relativePath = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && baseFile.isDownloadDir()) getRelativePath( + folder + ) else folder - connection.setRequestProperty("sec-ch-ua-mobile", "?0") - connection.setRequestProperty("accept", "*/*") - // dataSource.setRequestProperty("Sec-Fetch-Site", "none") //same-site - connection.setRequestProperty("sec-fetch-user", "?1") - connection.setRequestProperty("sec-fetch-mode", "navigate") - connection.setRequestProperty("sec-fetch-dest", "video") - link.headers.entries.forEach { - connection.setRequestProperty(it.key, it.value) - } + // set up the download file + val stream = setupStream(context, name, relativePath, extension, tryResume) + if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode + fileStream = stream.fileStream ?: return@withContext ERROR_UNKNOWN + val resume = stream.resume ?: return@withContext ERROR_UNKNOWN + val fileLength = stream.fileLength ?: return@withContext ERROR_UNKNOWN + val resumeAt = (if (resume) fileLength else 0) + metadata.bytesDownloaded = resumeAt + metadata.type = DownloadType.IsPending - if (resume) - connection.setRequestProperty("Range", "bytes=${fileLength}-") - val resumeLength = (if (resume) fileLength else 0) + // set up a connection + val request = app.get( + link.url.replace(" ", "%20"), + headers = link.headers + mapOf( + "Accept-Encoding" to "identity", + "accept" to "*/*", + "user-agent" to USER_AGENT, + "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", + "sec-fetch-mode" to "navigate", + "sec-fetch-dest" to "video", + "sec-fetch-user" to "?1", + "sec-ch-ua-mobile" to "?0", + ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap(), + referer = link.referer, + verify = false + ) - // ON CONNECTION - connection.connect() + // init variables + val contentLength = request.size ?: 0 + metadata.totalBytes = contentLength + resumeAt - val contentLength = try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // fuck android - connection.contentLengthLong - } else { - connection.getHeaderField("content-length").toLongOrNull() - ?: connection.contentLength.toLong() - } - } catch (e: Exception) { - logError(e) - 0L - } - val bytesTotal = contentLength + resumeLength - - if (extension == "mp4" && bytesTotal < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION // DATA IS LESS THAN 5MB, SOMETHING IS WRONG - - parentId?.let { - setKey( - KEY_DOWNLOAD_INFO, - it.toString(), + // save + metadata.setDownloadFileInfoTemplate( DownloadedFileInfo( - bytesTotal, - relativePath ?: "", - displayName, - basePath = basePath.second + totalBytes = metadata.approxTotalBytes, + relativePath = relativePath ?: "", + displayName = displayName, + basePath = basePath ) ) + + // total length is less than 5mb, that is too short and something has gone wrong + if (extension == "mp4" && metadata.approxTotalBytes < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION + + // read the buffer into the filestream, this is equivalent of transferTo + requestStream = request.body.byteStream() + metadata.type = DownloadType.IsDownloading + + val buffer = ByteArray(DEFAULT_BUFFER_SIZE) + var read: Int + while (requestStream.read(buffer, 0, DEFAULT_BUFFER_SIZE).also { read = it } >= 0) { + fileStream.write(buffer, 0, read) + + // wait until not paused + while (metadata.type == DownloadType.IsPaused) delay(100) + // if stopped then break to delete + if (metadata.type == DownloadType.IsStopped) break + metadata.addBytes(read.toLong()) + } + + if (metadata.type == DownloadType.IsStopped) { + return@withContext delete( + context, + name, + relativePath, + extension, + parentId, + baseFile + ) + } + + metadata.type = DownloadType.IsDone + return@withContext SUCCESS_DOWNLOAD_DONE + } catch (e: IOException) { + // some sort of IO error, this should not happened + // we just rethrow it + logError(e) + throw e + } catch (t: Throwable) { + // some sort of network error, will error + + // note that when failing we don't want to delete the file, + // only user interaction has that power + metadata.type = DownloadType.IsFailed + return@withContext ERROR_CONNECTION_ERROR + } finally { + fileStream?.closeQuietly() + requestStream?.closeQuietly() + metadata.close() } + } - // Could use connection.contentType for mime types when creating the file, - // however file is already created and players don't go of file type - // https://stackoverflow.com/questions/23714383/what-are-all-the-possible-values-for-http-content-type-header - // might receive application/octet-stream - /*if (!connection.contentType.isNullOrEmpty() && !connection.contentType.startsWith("video")) { - return ERROR_WRONG_CONTENT // CONTENT IS NOT VIDEO, SHOULD NEVER HAPPENED, BUT JUST IN CASE - }*/ + @Throws + private suspend fun downloadHLS( + context: Context, + link: ExtractorLink, + name: String, + folder: String?, + parentId: Int?, + startIndex: Int?, + createNotificationCallback: (CreateNotificationMetadata) -> Unit, + parallelConnections: Int = 3 + ): Int = withContext(Dispatchers.IO) { + require(parallelConnections >= 1) - // READ DATA FROM CONNECTION - val connectionInputStream: InputStream = BufferedInputStream(connection.inputStream) - val buffer = ByteArray(1024) - var count: Int - var bytesDownloaded = resumeLength + val metadata = DownloadMetaData( + createNotificationCallback = createNotificationCallback, + id = parentId + ) + val extension = "mp4" - var isPaused = false - var isStopped = false - var isDone = false - var isFailed = false + var fileStream: OutputStream? = null + try { + // the start .ts index + var startAt = startIndex ?: 0 - // TO NOT REUSE CODE - fun updateNotification() { - val type = when { - isDone -> DownloadType.IsDone - isStopped -> DownloadType.IsStopped - isFailed -> DownloadType.IsFailed - isPaused -> DownloadType.IsPaused - else -> DownloadType.IsDownloading - } + // set up the file data + val (baseFile, basePath) = context.getBasePath() + val relativePath = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && baseFile.isDownloadDir()) getRelativePath( + folder + ) else folder + val displayName = getDisplayName(name, extension) + val stream = setupStream(context, name, relativePath, extension, startAt > 0) + if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode + if (stream.resume != true) startAt = 0 + fileStream = stream.fileStream ?: return@withContext ERROR_UNKNOWN - parentId?.let { id -> - try { - downloadStatus[id] = type - downloadStatusEvent.invoke(Pair(id, type)) - downloadProgressEvent.invoke(Triple(id, bytesDownloaded, bytesTotal)) - } catch (e: Exception) { - // IDK MIGHT ERROR - } - } - - createNotificationCallback.invoke( - CreateNotificationMetadata( - type, - bytesDownloaded, - bytesTotal + // push the metadata + metadata.bytesDownloaded = stream.fileLength ?: 0 + metadata.hlsProgress = startAt + metadata.type = DownloadType.IsPending + metadata.setDownloadFileInfoTemplate( + DownloadedFileInfo( + totalBytes = 0, + relativePath = relativePath ?: "", + displayName = displayName, + basePath = basePath ) ) - /*createNotification( - context, - source, - link.name, - ep, - type, - bytesDownloaded, - bytesTotal - )*/ - } - val downloadEventListener = { event: Pair -> - if (event.first == parentId) { - when (event.second) { - DownloadActionType.Pause -> { - isPaused = true; updateNotification() + // do the initial get request to fetch the segments + val m3u8 = M3u8Helper.M3u8Stream( + link.url, link.quality, mapOf( + "Accept-Encoding" to "identity", + "accept" to "*/*", + "user-agent" to USER_AGENT, + ) + if (link.referer.isNotBlank()) mapOf("referer" to link.referer) else emptyMap() + ) + val items = M3u8Helper2.hslLazy(listOf(m3u8)) + + metadata.hlsTotal = items.size + metadata.type = DownloadType.IsDownloading + + // does several connections in parallel instead of a regular for loop to improve + // download speed + (startAt until items.size).chunked(parallelConnections).forEach { subset -> + // wait until not paused + while (metadata.type == DownloadType.IsPaused) delay(100) + // if stopped then break to delete + if (metadata.type == DownloadType.IsStopped) return@forEach + + subset.amap { idx -> + idx to items.resolveLinkSafe(idx)?.also { bytes -> + metadata.addSegment(bytes.size.toLong()) } - - DownloadActionType.Stop -> { - isStopped = true; updateNotification() - removeKey(KEY_RESUME_PACKAGES, event.first.toString()) - saveQueue() - } - - DownloadActionType.Resume -> { - isPaused = false; updateNotification() + }.forEach { (idx, bytes) -> + if (bytes == null) { + metadata.type = DownloadType.IsFailed + return@withContext ERROR_CONNECTION_ERROR } + fileStream.write(bytes) + metadata.setWrittenSegment(idx) } } - } - if (parentId != null) - downloadEvent += downloadEventListener - - // UPDATE DOWNLOAD NOTIFICATION - val notificationCoroutine = main { - while (true) { - if (!isPaused) { - updateNotification() - } - for (i in 1..10) { - delay(100) - } - } - } - - // THE REAL READ - try { - while (true) { - count = connectionInputStream.read(buffer) - if (count < 0) break - bytesDownloaded += count - // downloadProgressEvent.invoke(Pair(id, bytesDownloaded)) // Updates too much for any UI to keep up with - while (isPaused) { - sleep(100) - if (isStopped) { - break - } - } - if (isStopped) { - break - } - fileStream.write(buffer, 0, count) - } - } catch (e: Exception) { - logError(e) - isFailed = true - updateNotification() - } - - // REMOVE AND EXIT ALL - fileStream.close() - connectionInputStream.close() - notificationCoroutine.cancel() - - try { - if (parentId != null) - downloadEvent -= downloadEventListener - } catch (e: Exception) { - logError(e) - } - - try { - parentId?.let { - downloadStatus.remove(it) - } - } catch (e: Exception) { - // IDK MIGHT ERROR - } - - // RETURN MESSAGE - return@withContext when { - isFailed -> { - parentId?.let { id -> downloadProgressEvent.invoke(Triple(id, 0, 0)) } - ERROR_CONNECTION_ERROR + if (metadata.type == DownloadType.IsStopped) { + return@withContext delete( + context, + name, + relativePath, + extension, + parentId, + baseFile + ) } - isStopped -> { - parentId?.let { id -> downloadProgressEvent.invoke(Triple(id, 0, 0)) } - deleteFile() - } - - else -> { - parentId?.let { id -> - downloadProgressEvent.invoke( - Triple( - id, - bytesDownloaded, - bytesTotal - ) - ) - } - isDone = true - updateNotification() - SUCCESS_DOWNLOAD_DONE - } + metadata.type = DownloadType.IsDone + return@withContext SUCCESS_DOWNLOAD_DONE + } catch (t: Throwable) { + logError(t) + metadata.type = DownloadType.IsFailed + return@withContext ERROR_UNKNOWN + } finally { + fileStream?.closeQuietly() + metadata.close() } } @@ -1107,192 +1268,6 @@ object VideoDownloadManager { return SUCCESS_STOPPED } - @Throws - private suspend fun downloadHLS( - context: Context, - link: ExtractorLink, - name: String, - folder: String?, - parentId: Int?, - startIndex: Int?, - createNotificationCallback: (CreateNotificationMetadata) -> Unit - ): Int = withContext(Dispatchers.IO) { - val extension = "mp4" - - val m3u8 = M3u8Helper.M3u8Stream( - link.url, link.quality, mapOf("referer" to link.referer) - ) - - var realIndex = startIndex ?: 0 - val basePath = context.getBasePath() - - val relativePath = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && basePath.first.isDownloadDir()) getRelativePath( - folder - ) else folder - - val stream = setupStream(context, name, relativePath, extension, realIndex > 0) - if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode - - if (stream.resume != true) realIndex = 0 - val fileLengthAdd = stream.fileLength ?: 0 - val items = M3u8Helper2.hslLazy(listOf(m3u8)) - - val displayName = getDisplayName(name, extension) - - val fileStream = stream.fileStream!! - - var isDone = false - var isFailed = false - var isPaused = false - var bytesDownloaded = fileLengthAdd - var tsProgress: Long = realIndex.toLong() + 1 // we don't want div by zero - val totalTs: Long = items.size.toLong() - - fun deleteFile(): Int { - return delete(context, name, relativePath, extension, parentId, basePath.first) - } - - fun updateInfo() { - setKey( - KEY_DOWNLOAD_INFO, - (parentId ?: return).toString(), - DownloadedFileInfo( - // approx bytes - totalBytes = (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), - relativePath = relativePath ?: "", - displayName = displayName, - extraInfo = tsProgress.toString(), - basePath = basePath.second - ) - ) - } - - updateInfo() - - fun updateNotification() { - val type = when { - isDone -> DownloadType.IsDone - isFailed -> DownloadType.IsFailed - isPaused -> DownloadType.IsPaused - else -> DownloadType.IsDownloading - } - - parentId?.let { id -> - try { - downloadStatus[id] = type - downloadStatusEvent.invoke(Pair(id, type)) - downloadProgressEvent.invoke( - Triple( - id, - bytesDownloaded, - (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), - ) - ) - } catch (_: Throwable) {} - } - - createNotificationCallback.invoke( - CreateNotificationMetadata( - type, - bytesDownloaded, - (bytesDownloaded * (totalTs / tsProgress.toFloat())).toLong(), - tsProgress, - totalTs - ) - ) - } - - val notificationCoroutine = main { - while (true) { - if (!isDone) { - updateNotification() - } - for (i in 1..10) { - delay(100) - } - } - } - - val downloadEventListener = { event: Pair -> - if (event.first == parentId) { - when (event.second) { - DownloadActionType.Stop -> { - isFailed = true - } - - DownloadActionType.Pause -> { - isPaused = true - } - - DownloadActionType.Resume -> { - isPaused = false - } - } - updateNotification() - } - } - - fun closeAll() { - try { - if (parentId != null) - downloadEvent -= downloadEventListener - } catch (t: Throwable) { - logError(t) - } - try { - parentId?.let { - downloadStatus.remove(it) - } - } catch (t: Throwable) { - logError(t) - } - notificationCoroutine.cancel() - } - - if (parentId != null) - downloadEvent += downloadEventListener - - fun onFailed() { - fileStream.close() - deleteFile() - updateNotification() - closeAll() - } - - for (idx in realIndex until items.size) { - while (isPaused) { - if (isFailed) { - onFailed() - return@withContext SUCCESS_STOPPED - } - delay(100) - } - - if (isFailed) { - onFailed() - return@withContext SUCCESS_STOPPED - } - - val bytes = items.resolveLinkSafe(idx) ?: run { - isFailed = true - onFailed() - return@withContext ERROR_CONNECTION_ERROR - } - - fileStream.write(bytes) - tsProgress = idx.toLong() + 1 - bytesDownloaded += bytes.size.toLong() - updateInfo() - } - isDone = true - fileStream.close() - updateNotification() - - closeAll() - updateInfo() - return@withContext SUCCESS_DOWNLOAD_DONE - } fun getFileName(context: Context, metadata: DownloadEpisodeMetadata): String { return getFileName(context, metadata.name, metadata.episode, metadata.season) @@ -1353,22 +1328,30 @@ object VideoDownloadManager { )?.extraInfo?.toIntOrNull() } else null return suspendSafeApiCall { - downloadHLS(context, link, name, folder, ep.id, startIndex) { meta -> - main { - createNotification( - context, - source, - link.name, - ep, - meta.type, - meta.bytesDownloaded, - meta.bytesTotal, - notificationCallback, - meta.hlsProgress, - meta.hlsTotal - ) + downloadHLS( + context, + link, + name, + folder, + ep.id, + startIndex, + createNotificationCallback = { meta -> + main { + createNotification( + context, + source, + link.name, + ep, + meta.type, + meta.bytesDownloaded, + meta.bytesTotal, + notificationCallback, + meta.hlsProgress, + meta.hlsTotal + ) + } } - } + ) }.also { extractorJob.cancel() } ?: ERROR_UNKNOWN @@ -1392,7 +1375,7 @@ object VideoDownloadManager { }.also { extractorJob.cancel() } ?: ERROR_UNKNOWN } - fun downloadCheck( + suspend fun downloadCheck( context: Context, notificationCallback: (Int, Notification) -> Unit, ): Int? { if (currentDownloads.size < maxConcurrentDownloads && downloadQueue.size > 0) { @@ -1407,42 +1390,55 @@ object VideoDownloadManager { currentDownloads.add(id) - main { - try { - for (index in (pkg.linkIndex ?: 0) until item.links.size) { - val link = item.links[index] - val resume = pkg.linkIndex == index + try { + for (index in (pkg.linkIndex ?: 0) until item.links.size) { + val link = item.links[index] + val resume = pkg.linkIndex == index - setKey( - KEY_RESUME_PACKAGES, - id.toString(), - DownloadResumePackage(item, index) + setKey( + KEY_RESUME_PACKAGES, + id.toString(), + DownloadResumePackage(item, index) + ) + + var connectionResult = + downloadSingleEpisode( + context, + item.source, + item.folder, + item.ep, + link, + notificationCallback, + resume + ) + //.also { println("Single episode finished with return code: $it") } + + // retry every link at least once + if (connectionResult <= 0) { + connectionResult = downloadSingleEpisode( + context, + item.source, + item.folder, + item.ep, + link, + notificationCallback, + true ) - val connectionResult = withContext(Dispatchers.IO) { - downloadSingleEpisode( - context, - item.source, - item.folder, - item.ep, - link, - notificationCallback, - resume - ).also { println("Single episode finished with return code: $it") } - } - if (connectionResult != null && connectionResult > 0) { // SUCCESS - removeKey(KEY_RESUME_PACKAGES, id.toString()) - break - } else if (index == item.links.lastIndex) { - downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) - } } - } catch (e: Exception) { - logError(e) - } finally { - currentDownloads.remove(id) - // Because otherwise notifications will not get caught by the workmanager - downloadCheckUsingWorker(context) + + if (connectionResult > 0) { // SUCCESS + removeKey(KEY_RESUME_PACKAGES, id.toString()) + break + } else if (index == item.links.lastIndex) { + downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) + } } + } catch (e: Exception) { + logError(e) + } finally { + currentDownloads.remove(id) + // Because otherwise notifications will not get caught by the work manager + downloadCheckUsingWorker(context) } } return null @@ -1538,26 +1534,13 @@ object VideoDownloadManager { return context.getKey(KEY_RESUME_PACKAGES, id.toString()) } - fun downloadFromResume( + suspend fun downloadFromResume( context: Context, pkg: DownloadResumePackage, notificationCallback: (Int, Notification) -> Unit, setKey: Boolean = true ) { if (!currentDownloads.any { it == pkg.item.ep.id }) { -// if (currentDownloads.size == maxConcurrentDownloads) { -// main { -//// showToast( // can be replaced with regular Toast -//// context, -//// "${pkg.item.ep.mainName}${pkg.item.ep.episode?.let { " ${context.getString(R.string.episode)} $it " } ?: " "}${ -//// context.getString( -//// R.string.queued -//// ) -//// }", -//// Toast.LENGTH_SHORT -//// ) -// } -// } downloadQueue.addLast(pkg) downloadCheck(context, notificationCallback) if (setKey) saveQueue() @@ -1590,7 +1573,7 @@ object VideoDownloadManager { return false }*/ - fun downloadEpisode( + suspend fun downloadEpisode( context: Context?, source: String?, folder: String?, @@ -1599,13 +1582,12 @@ object VideoDownloadManager { notificationCallback: (Int, Notification) -> Unit, ) { if (context == null) return - if (links.isNotEmpty()) { - downloadFromResume( - context, - DownloadResumePackage(DownloadItem(source, folder, ep, links), null), - notificationCallback - ) - } + if (links.isEmpty()) return + downloadFromResume( + context, + DownloadResumePackage(DownloadItem(source, folder, ep, links), null), + notificationCallback + ) } /** Worker stuff */ diff --git a/app/src/main/res/drawable/baseline_stop_24.xml b/app/src/main/res/drawable/baseline_stop_24.xml new file mode 100644 index 00000000..100cb1fc --- /dev/null +++ b/app/src/main/res/drawable/baseline_stop_24.xml @@ -0,0 +1,10 @@ + + + From a05616e3e8c6c0373f88a7c6dcc022d42ca7188d Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 01:37:48 +0200 Subject: [PATCH 496/888] fix --- .../cloudstream3/extractors/Mp4Upload.kt | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt index 93a280ed..e746b286 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt @@ -10,24 +10,39 @@ open class Mp4Upload : ExtractorApi() { override var name = "Mp4Upload" override var mainUrl = "https://www.mp4upload.com" private val srcRegex = Regex("""player\.src\("(.*?)"""") - override val requiresReferer = true + private val srcRegex2 = Regex("""player\.src\([\w\W]*src: "(.*?)"""") + override val requiresReferer = true + private val idMatch = Regex("""mp4upload\.com/(embed-|)([A-Za-z0-9]*)""") override suspend fun getUrl(url: String, referer: String?): List? { - with(app.get(url)) { - getAndUnpack(this.text).let { unpackedText -> - val quality = unpackedText.lowercase().substringAfter(" height=").substringBefore(" ").toIntOrNull() - srcRegex.find(unpackedText)?.groupValues?.get(1)?.let { link -> - return listOf( - ExtractorLink( - name, - name, - link, - url, - quality ?: Qualities.Unknown.value, - ) - ) - } - } + val realUrl = idMatch.find(url)?.groupValues?.get(2)?.let { id -> + "$mainUrl/embed-$id.html" + } ?: url + val response = app.get(realUrl) + val unpackedText = getAndUnpack(response.text) + val quality = + unpackedText.lowercase().substringAfter(" height=").substringBefore(" ").toIntOrNull() + srcRegex.find(unpackedText)?.groupValues?.get(1)?.let { link -> + return listOf( + ExtractorLink( + name, + name, + link, + url, + quality ?: Qualities.Unknown.value, + ) + ) + } + srcRegex2.find(unpackedText)?.groupValues?.get(1)?.let { link -> + return listOf( + ExtractorLink( + name, + name, + link, + url, + quality ?: Qualities.Unknown.value, + ) + ) } return null } From 35e1b8b4dcbe5172afc8f4cf23a673a84f99c194 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 01:38:40 +0200 Subject: [PATCH 497/888] bump --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f72ec0b0..71015e31 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.1.3" + versionName = "4.1.4" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") From e20e3dcfd3ce450b0efe61d64db4a34413652c72 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 04:46:47 +0200 Subject: [PATCH 498/888] fixed some bugs caused by new download update --- app/build.gradle.kts | 2 +- .../utils/DownloadFileWorkManager.kt | 17 +- .../utils/VideoDownloadManager.kt | 271 ++++++++++-------- 3 files changed, 165 insertions(+), 125 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 71015e31..708a2083 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.1.4" + versionName = "4.1.5" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt index c1eb649b..aa424c08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt @@ -7,6 +7,7 @@ import androidx.work.ForegroundInfo import androidx.work.WorkerParameters import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.mvvm.logError +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.VideoDownloadManager.WORK_KEY_INFO @@ -25,15 +26,16 @@ class DownloadFileWorkManager(val context: Context, private val workerParams: Wo override suspend fun doWork(): Result { val key = workerParams.inputData.getString("key") try { - println("KEY $key") if (key == DOWNLOAD_CHECK) { - downloadCheck(applicationContext, ::handleNotification)?.let { - awaitDownload(it) - } + downloadCheck(applicationContext, ::handleNotification) } else if (key != null) { - val info = applicationContext.getKey(WORK_KEY_INFO, key) + val info = + applicationContext.getKey(WORK_KEY_INFO, key) val pkg = - applicationContext.getKey(WORK_KEY_PACKAGE, key) + applicationContext.getKey( + WORK_KEY_PACKAGE, + key + ) if (info != null) { downloadEpisode( applicationContext, @@ -43,10 +45,8 @@ class DownloadFileWorkManager(val context: Context, private val workerParams: Wo info.links, ::handleNotification ) - awaitDownload(info.ep.id) } else if (pkg != null) { downloadFromResume(applicationContext, pkg, ::handleNotification) - awaitDownload(pkg.item.ep.id) } removeKeys(key) } @@ -73,6 +73,7 @@ class DownloadFileWorkManager(val context: Context, private val workerParams: Wo VideoDownloadManager.DownloadType.IsDone, VideoDownloadManager.DownloadType.IsFailed, VideoDownloadManager.DownloadType.IsStopped -> { isDone = true } + else -> Unit } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 0334103f..ef0d9d8a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -26,6 +26,7 @@ import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType @@ -723,7 +724,7 @@ object VideoDownloadManager { var hlsTotal: Int? = null, // this is how many segments that has been written to the file // will always be <= hlsProgress as we may keep some in a buffer - var hlsWrittenProgress: Long = 0, + var hlsWrittenProgress: Int = 0, // this is used for copy with metadata on how much we have downloaded for setKey private var downloadFileInfoTemplate: DownloadedFileInfo? = null @@ -798,6 +799,15 @@ object VideoDownloadManager { notify() } + fun onDelete() { + bytesDownloaded = 0 + hlsWrittenProgress = 0 + hlsProgress = 0 + + //internalType = DownloadType.IsStopped + notify() + } + companion object { const val UPDATE_RATE_MS: Long = 1000L } @@ -842,6 +852,9 @@ object VideoDownloadManager { } } catch (t: Throwable) { logError(t) + if (BuildConfig.DEBUG) { + throw t + } } } @@ -866,7 +879,7 @@ object VideoDownloadManager { } fun setWrittenSegment(segmentIndex: Int) { - hlsWrittenProgress = segmentIndex.toLong() + 1L + hlsWrittenProgress = segmentIndex + 1 } } @@ -916,16 +929,18 @@ object VideoDownloadManager { // set up a connection val request = app.get( link.url.replace(" ", "%20"), - headers = link.headers + mapOf( - "Accept-Encoding" to "identity", - "accept" to "*/*", - "user-agent" to USER_AGENT, - "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", - "sec-fetch-mode" to "navigate", - "sec-fetch-dest" to "video", - "sec-fetch-user" to "?1", - "sec-ch-ua-mobile" to "?0", - ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap(), + headers = link.headers.appendAndDontOverride( + mapOf( + "Accept-Encoding" to "identity", + "accept" to "*/*", + "user-agent" to USER_AGENT, + "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", + "sec-fetch-mode" to "navigate", + "sec-fetch-dest" to "video", + "sec-fetch-user" to "?1", + "sec-ch-ua-mobile" to "?0", + ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap() + ), referer = link.referer, verify = false ) @@ -964,14 +979,14 @@ object VideoDownloadManager { } if (metadata.type == DownloadType.IsStopped) { - return@withContext delete( - context, - name, - relativePath, - extension, - parentId, - baseFile - ) + // we need to close before delete + fileStream.closeQuietly() + metadata.onDelete() + if (deleteFile(context, baseFile, relativePath ?: "", displayName)) { + return@withContext SUCCESS_STOPPED + } else { + return@withContext ERROR_DELETING_FILE + } } metadata.type = DownloadType.IsDone @@ -995,6 +1010,18 @@ object VideoDownloadManager { } } + /** Helper function to make sure duplicate attributes don't get overriden or inserted without lowercase cmp + * example: map("a" to 1) appendAndDontOverride map("A" to 2, "a" to 3, "c" to 4) = map("a" to 1, "c" to 4) + * */ + private fun Map.appendAndDontOverride(rhs: Map): Map { + val out = this.toMutableMap() + val current = this.keys.map { it.lowercase() } + for ((key, value) in rhs) { + if (current.contains(key.lowercase())) continue + out[key] = value + } + return out + } @Throws private suspend fun downloadHLS( @@ -1047,11 +1074,13 @@ object VideoDownloadManager { // do the initial get request to fetch the segments val m3u8 = M3u8Helper.M3u8Stream( - link.url, link.quality, mapOf( - "Accept-Encoding" to "identity", - "accept" to "*/*", - "user-agent" to USER_AGENT, - ) + if (link.referer.isNotBlank()) mapOf("referer" to link.referer) else emptyMap() + link.url, link.quality, link.headers.appendAndDontOverride( + mapOf( + "Accept-Encoding" to "identity", + "accept" to "*/*", + "user-agent" to USER_AGENT, + ) + if (link.referer.isNotBlank()) mapOf("referer" to link.referer) else emptyMap() + ) ) val items = M3u8Helper2.hslLazy(listOf(m3u8)) @@ -1081,14 +1110,14 @@ object VideoDownloadManager { } if (metadata.type == DownloadType.IsStopped) { - return@withContext delete( - context, - name, - relativePath, - extension, - parentId, - baseFile - ) + // we need to close before delete + fileStream.closeQuietly() + metadata.onDelete() + if (deleteFile(context, baseFile, relativePath ?: "", displayName)) { + return@withContext SUCCESS_STOPPED + } else { + return@withContext ERROR_DELETING_FILE + } } metadata.type = DownloadType.IsDone @@ -1194,7 +1223,7 @@ object VideoDownloadManager { return (Environment.DIRECTORY_DOWNLOADS + '/' + folder + '/').replace( '/', File.separatorChar - ) + ).replace("${File.separatorChar}${File.separatorChar}", File.separatorChar.toString()) } /** @@ -1224,7 +1253,7 @@ object VideoDownloadManager { return this != null && this.filePath == getDownloadDir()?.filePath } - private fun delete( + /*private fun delete( context: Context, name: String, folder: String?, @@ -1235,7 +1264,7 @@ object VideoDownloadManager { val displayName = getDisplayName(name, extension) // delete all subtitle files - if (extension == "mp4") { + if (extension != "vtt" && extension != "srt") { try { delete(context, name, folder, "vtt", parentId, basePath) delete(context, name, folder, "srt", parentId, basePath) @@ -1248,9 +1277,9 @@ object VideoDownloadManager { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && basePath.isDownloadDir()) { val relativePath = getRelativePath(folder) val lastContent = - context.contentResolver.getExistingDownloadUriOrNullQ(relativePath, displayName) - if (lastContent != null) { - context.contentResolver.delete(lastContent, null, null) + context.contentResolver.getExistingDownloadUriOrNullQ(relativePath, displayName) ?: return ERROR_DELETING_FILE + if(context.contentResolver.delete(lastContent, null, null) <= 0) { + return ERROR_DELETING_FILE } } else { val dir = basePath?.gotoDir(folder) @@ -1260,13 +1289,12 @@ object VideoDownloadManager { // Cleans up empty directory if (dir.listFiles()?.isEmpty() == true) dir.delete() } -// } parentId?.let { downloadDeleteEvent.invoke(parentId) } } return SUCCESS_STOPPED - } + }*/ fun getFileName(context: Context, metadata: DownloadEpisodeMetadata): String { @@ -1377,71 +1405,71 @@ object VideoDownloadManager { suspend fun downloadCheck( context: Context, notificationCallback: (Int, Notification) -> Unit, - ): Int? { - if (currentDownloads.size < maxConcurrentDownloads && downloadQueue.size > 0) { - val pkg = downloadQueue.removeFirst() - val item = pkg.item - val id = item.ep.id - if (currentDownloads.contains(id)) { // IF IT IS ALREADY DOWNLOADING, RESUME IT - downloadEvent.invoke(Pair(id, DownloadActionType.Resume)) - /** ID needs to be returned to the work-manager to properly await notification */ - return id - } + ) { + if (!(currentDownloads.size < maxConcurrentDownloads && downloadQueue.size > 0)) return - currentDownloads.add(id) - - try { - for (index in (pkg.linkIndex ?: 0) until item.links.size) { - val link = item.links[index] - val resume = pkg.linkIndex == index - - setKey( - KEY_RESUME_PACKAGES, - id.toString(), - DownloadResumePackage(item, index) - ) - - var connectionResult = - downloadSingleEpisode( - context, - item.source, - item.folder, - item.ep, - link, - notificationCallback, - resume - ) - //.also { println("Single episode finished with return code: $it") } - - // retry every link at least once - if (connectionResult <= 0) { - connectionResult = downloadSingleEpisode( - context, - item.source, - item.folder, - item.ep, - link, - notificationCallback, - true - ) - } - - if (connectionResult > 0) { // SUCCESS - removeKey(KEY_RESUME_PACKAGES, id.toString()) - break - } else if (index == item.links.lastIndex) { - downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) - } - } - } catch (e: Exception) { - logError(e) - } finally { - currentDownloads.remove(id) - // Because otherwise notifications will not get caught by the work manager - downloadCheckUsingWorker(context) - } + val pkg = downloadQueue.removeFirst() + val item = pkg.item + val id = item.ep.id + if (currentDownloads.contains(id)) { // IF IT IS ALREADY DOWNLOADING, RESUME IT + downloadEvent.invoke(Pair(id, DownloadActionType.Resume)) + /** ID needs to be returned to the work-manager to properly await notification */ + // return id } - return null + + currentDownloads.add(id) + try { + for (index in (pkg.linkIndex ?: 0) until item.links.size) { + val link = item.links[index] + val resume = pkg.linkIndex == index + + setKey( + KEY_RESUME_PACKAGES, + id.toString(), + DownloadResumePackage(item, index) + ) + + var connectionResult = + downloadSingleEpisode( + context, + item.source, + item.folder, + item.ep, + link, + notificationCallback, + resume + ) + //.also { println("Single episode finished with return code: $it") } + + // retry every link at least once + if (connectionResult <= 0) { + connectionResult = downloadSingleEpisode( + context, + item.source, + item.folder, + item.ep, + link, + notificationCallback, + true + ) + } + + if (connectionResult > 0) { // SUCCESS + removeKey(KEY_RESUME_PACKAGES, id.toString()) + break + } else if (index == item.links.lastIndex) { + downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) + } + } + } catch (e: Exception) { + logError(e) + } finally { + currentDownloads.remove(id) + // Because otherwise notifications will not get caught by the work manager + downloadCheckUsingWorker(context) + } + + // return id } fun getDownloadFileInfoAndUpdateSettings(context: Context, id: Int): DownloadedFileInfoResult? { @@ -1500,23 +1528,21 @@ object VideoDownloadManager { return success } - private fun deleteFile(context: Context, id: Int): Boolean { - val info = - context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return false - downloadEvent.invoke(Pair(id, DownloadActionType.Stop)) - downloadProgressEvent.invoke(Triple(id, 0, 0)) - downloadStatusEvent.invoke(Pair(id, DownloadType.IsStopped)) - downloadDeleteEvent.invoke(id) - val base = basePathToFile(context, info.basePath) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && base.isDownloadDir()) { + private fun deleteFile( + context: Context, + folder: UniFile?, + relativePath: String, + displayName: String + ): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && folder.isDownloadDir()) { val cr = context.contentResolver ?: return false val fileUri = - cr.getExistingDownloadUriOrNullQ(info.relativePath, info.displayName) + cr.getExistingDownloadUriOrNullQ(relativePath, displayName) ?: return true // FILE NOT FOUND, ALREADY DELETED return cr.delete(fileUri, null, null) > 0 // IF DELETED ROWS IS OVER 0 } else { - val file = base?.gotoDir(info.relativePath)?.findFile(info.displayName) + val file = folder?.gotoDir(relativePath)?.findFile(displayName) // val normalPath = context.getNormalPath(getFile(info.relativePath), info.displayName) // val dFile = File(normalPath) if (file?.exists() != true) return true @@ -1530,6 +1556,17 @@ object VideoDownloadManager { } } + private fun deleteFile(context: Context, id: Int): Boolean { + val info = + context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return false + downloadEvent.invoke(Pair(id, DownloadActionType.Stop)) + downloadProgressEvent.invoke(Triple(id, 0, 0)) + downloadStatusEvent.invoke(id to DownloadType.IsStopped) + downloadDeleteEvent.invoke(id) + val base = basePathToFile(context, info.basePath) + return deleteFile(context, base, info.relativePath, info.displayName) + } + fun getDownloadResumePackage(context: Context, id: Int): DownloadResumePackage? { return context.getKey(KEY_RESUME_PACKAGES, id.toString()) } @@ -1544,10 +1581,12 @@ object VideoDownloadManager { downloadQueue.addLast(pkg) downloadCheck(context, notificationCallback) if (setKey) saveQueue() + //ret } else { - downloadEvent.invoke( + downloadEvent( Pair(pkg.item.ep.id, DownloadActionType.Resume) ) + //null } } From f571596bbc69d1fca24fb99dcef86227f03a4a80 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Sat, 19 Aug 2023 19:34:21 +0530 Subject: [PATCH 499/888] fix: expand resume watching sheet and ft: ripple on profile drawable when pressed (#566) * add ripple to profile icon on home * Update HomeParentItemAdapterPreview.kt --- .../cloudstream3/ui/home/HomeParentItemAdapterPreview.kt | 4 ++-- app/src/main/res/layout/fragment_home_head.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 943f784a..13497a99 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -539,7 +539,7 @@ class HomeParentItemAdapterPreview( resumeAdapter.updateList(resumeWatching) if (binding is FragmentHomeHeadBinding) { - binding.homeBookmarkParentItemTitle.setOnClickListener { + binding.homeWatchParentItemTitle.setOnClickListener { viewModel.popup( HomeViewModel.ExpandableHomepageList( HomePageList( @@ -578,4 +578,4 @@ class HomeParentItemAdapterPreview( } } } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/fragment_home_head.xml b/app/src/main/res/layout/fragment_home_head.xml index e13b96a8..90386ccf 100644 --- a/app/src/main/res/layout/fragment_home_head.xml +++ b/app/src/main/res/layout/fragment_home_head.xml @@ -61,7 +61,7 @@ android:layout_height="match_parent" android:layout_gravity="center" android:layout_marginStart="-50dp" - android:background="?android:attr/selectableItemBackgroundBorderless" + android:foreground="?android:attr/selectableItemBackgroundBorderless" android:contentDescription="@string/account" android:nextFocusLeft="@id/home_search" android:padding="10dp" @@ -288,4 +288,4 @@ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:listitem="@layout/home_result_grid" /> - \ No newline at end of file + From b3abf1e45fbf2a532b551f9d69dbf7c674765ba7 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 17:03:27 +0200 Subject: [PATCH 500/888] fixed decryption --- .../cloudstream3/utils/M3u8Helper.kt | 24 ++++++++----------- .../utils/VideoDownloadManager.kt | 2 ++ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 1fb3a72d..5c0b45de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -88,21 +88,17 @@ object M3u8Helper2 { } } - private val defaultIvGen = sequence { - var initial = 1 + private fun defaultIv(index: Int) : ByteArray { + return toBytes16Big(index+1) + } - while (true) { - yield(toBytes16Big(initial)) - ++initial - } - }.iterator() - - fun getDecrypter( + fun getDecrypted( secretKey: ByteArray, data: ByteArray, - iv: ByteArray = "".toByteArray() + iv: ByteArray = byteArrayOf(), + index : Int, ): ByteArray { - val ivKey = if (iv.isEmpty()) defaultIvGen.next() else iv + val ivKey = if (iv.isEmpty()) defaultIv(index) else iv val c = Cipher.getInstance("AES/CBC/PKCS5Padding") val skSpec = SecretKeySpec(secretKey, "AES") val ivSpec = IvParameterSpec(ivKey) @@ -234,7 +230,7 @@ object M3u8Helper2 { if (tsData.isEmpty()) throw ErrorLoadingException("no data") return if (isEncrypted) { - getDecrypter(encryptionData, tsData, encryptionIv) + getDecrypted(encryptionData, tsData, encryptionIv, index) } else { tsData } @@ -272,13 +268,13 @@ object M3u8Helper2 { val match = ENCRYPTION_URL_IV_REGEX.find(m3u8Response)!!.groupValues - var encryptionUri = match[1] + var encryptionUri = match[2] if (isNotCompleteUrl(encryptionUri)) { encryptionUri = "${getParentLink(secondSelection.streamUrl)}/$encryptionUri" } - encryptionIv = match[2].toByteArray() + encryptionIv = match[3].toByteArray() val encryptionKeyResponse = app.get(encryptionUri, headers = headers, verify = false) encryptionData = encryptionKeyResponse.body.bytes() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index ef0d9d8a..dc3eaa25 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -803,6 +803,8 @@ object VideoDownloadManager { bytesDownloaded = 0 hlsWrittenProgress = 0 hlsProgress = 0 + if (id != null) + downloadDeleteEvent(id) //internalType = DownloadType.IsStopped notify() From 98b641714073e6bb84f74bd9ea3e19a03ed857aa Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 19 Aug 2023 21:37:14 +0200 Subject: [PATCH 501/888] made downloader faster with parallel downloads --- .../ui/result/ResultViewModel2.kt | 6 +- .../utils/VideoDownloadManager.kt | 438 ++++++++++++++++-- 2 files changed, 395 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 2fe3b012..bdd27091 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -593,10 +593,8 @@ class ResultViewModel2 : ViewModel() { folder, if (link.url.contains(".srt")) ".srt" else "vtt", false, - null - ) { - // no notification - } + null, createNotificationCallback = {} + ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index dc3eaa25..d8ef7e85 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -40,14 +40,20 @@ import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.removeKey import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.internal.closeQuietly import java.io.Closeable import java.io.File import java.io.IOException -import java.io.InputStream import java.io.OutputStream import java.net.URL import java.util.* @@ -710,6 +716,8 @@ object VideoDownloadManager { data class DownloadMetaData( private val id: Int?, var bytesDownloaded: Long = 0, + var bytesWritten: Long = 0, + var totalBytes: Long? = null, // notification metadata @@ -732,10 +740,21 @@ object VideoDownloadManager { val approxTotalBytes: Long get() = totalBytes ?: hlsTotal?.let { total -> (bytesDownloaded * (total / hlsProgress.toFloat())).toLong() - } ?: 0L + } ?: bytesDownloaded private val isHLS get() = hlsTotal != null + private var stopListener: (() -> Unit)? = null + + /** on cancel button pressed or failed invoke this once and only once */ + fun setOnStop(callback: (() -> Unit)) { + stopListener = callback + } + + fun removeStopListener() { + stopListener = null + } + private val downloadEventListener = { event: Pair -> if (event.first == id) { when (event.second) { @@ -747,6 +766,8 @@ object VideoDownloadManager { type = DownloadType.IsStopped removeKey(KEY_RESUME_PACKAGES, event.first.toString()) saveQueue() + stopListener?.invoke() + stopListener = null } DownloadActionType.Resume -> { @@ -783,13 +804,14 @@ object VideoDownloadManager { override fun close() { // as we may need to resume hls downloads, we save the current written index - if (isHLS) { + if (isHLS || totalBytes == null) { updateFileInfo() } if (id != null) { downloadEvent -= downloadEventListener downloadStatus -= id } + stopListener = null } var type @@ -846,6 +868,11 @@ object VideoDownloadManager { updateFileInfo() } + if (internalType == DownloadType.IsStopped || internalType == DownloadType.IsFailed) { + stopListener?.invoke() + stopListener = null + } + // push all events, this *should* not crash, TODO MUTEX? if (id != null) { downloadStatus[id] = type @@ -874,6 +901,10 @@ object VideoDownloadManager { if (type == DownloadType.IsDownloading) checkNotification() } + fun addBytesWritten(length: Long) { + bytesWritten += length + } + /** adds the length + hsl progress and pushes a notification if necessary */ fun addSegment(length: Long) { hlsProgress += 1 @@ -885,6 +916,173 @@ object VideoDownloadManager { } } + /** bytes have the size end-start where the byte range is [start,end) + * note that ByteArray is a pointer and therefore cant be stored without cloning it */ + data class LazyStreamDownloadResponse( + val bytes: ByteArray, + val startByte: Long, + val endByte: Long, + ) { + val size get() = endByte - startByte + + override fun toString(): String { + return "$startByte->$endByte" + } + + override fun equals(other: Any?): Boolean { + if (other !is LazyStreamDownloadResponse) return false + return other.startByte == startByte && other.endByte == endByte + } + + override fun hashCode(): Int { + return Objects.hash(startByte, endByte) + } + } + + data class LazyStreamDownloadData( + private val url: String, + private val headers: Map, + private val referer: String, + /** This specifies where chunck i starts and ends, + * bytes=${chuckStartByte[ i ]}-${chuckStartByte[ i+1 ] -1} + * where out of bounds => bytes=${chuckStartByte[ i ]}- */ + private val chuckStartByte: LongArray, + val totalLength: Long?, + val downloadLength: Long?, + val chuckSize: Long, + val bufferSize: Int, + ) { + val size get() = chuckStartByte.size + + /** returns what byte it has downloaded, + * so start at 10 and download 4 bytes = return 14 + * + * the range is [startByte, endByte) to be able to do [a, b) [b, c) ect + * + * [a, null) will return inclusive to eof = [a, eof] + * + * throws an error if initial get request fails, can be specified as return startByte + * */ + @Throws + private suspend fun resolve( + startByte: Long, + endByte: Long?, + callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit) + ): Long = withContext(Dispatchers.IO) { + var currentByte: Long = startByte + val stopAt = endByte ?: Long.MAX_VALUE + if (currentByte >= stopAt) return@withContext currentByte + + val request = app.get( + url, + headers = headers + mapOf( + // range header is inclusive so [startByte, endByte-1] = [startByte, endByte) + // if nothing at end the server will continue until eof + "Range" to "bytes=$startByte-" // ${endByte?.minus(1)?.toString() ?: "" } + ), + referer = referer, + verify = false + ) + val requestStream = request.body.byteStream() + + val buffer = ByteArray(bufferSize) + var read: Int + + try { + while (requestStream.read(buffer, 0, bufferSize).also { read = it } >= 0) { + val start = currentByte + currentByte += read.toLong() + + // this stops overflow + if (currentByte >= stopAt) { + callback(LazyStreamDownloadResponse(buffer, start, stopAt)) + break + } else { + callback(LazyStreamDownloadResponse(buffer, start, currentByte)) + } + } + } catch (e: CancellationException) { + throw e + } catch (t: Throwable) { + logError(t) + } finally { + requestStream.closeQuietly() + } + + return@withContext currentByte + } + + /** retries the resolve n times and returns true if successful */ + suspend fun resolveSafe( + index: Int, + retries: Int = 3, + callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit) + ): Boolean { + var start = chuckStartByte.getOrNull(index) ?: return false + val end = chuckStartByte.getOrNull(index + 1) + + for (i in 0 until retries) { + try { + // in case + start = resolve(start, end, callback) + // no end defined, so we don't care exactly where it ended + if (end == null) return true + // we have download more or exactly what we needed + if (start >= end) return true + } catch (e: IllegalStateException) { + return false + } catch (e: CancellationException) { + return false + } catch (t: Throwable) { + continue + } + } + return false + } + + } + + @Throws + suspend fun streamLazy( + url: String, + headers: Map, + referer: String, + startByte: Long, + /** how many bytes every connection should be, by default it is 10 MiB */ + chuckSize: Long = (1 shl 20) * 10, + /** maximum bytes in the buffer that responds */ + bufferSize: Int = DEFAULT_BUFFER_SIZE + ): LazyStreamDownloadData { + // we don't want to make a separate connection for every 1kb + require(chuckSize > 1000) + + val contentLength = + app.head(url = url, headers = headers, referer = referer, verify = false).size + + var downloadLength: Long? = null + var totalLength: Long? = null + + val ranges = if (contentLength == null) { + LongArray(1) { startByte } + } else { + downloadLength = contentLength - startByte + totalLength = contentLength + LongArray((downloadLength / chuckSize).toInt()) { idx -> + startByte + idx * chuckSize + } + } + return LazyStreamDownloadData( + url = url, + headers = headers, + referer = referer, + chuckStartByte = ranges, + downloadLength = downloadLength, + totalLength = totalLength, + chuckSize = chuckSize, + bufferSize = bufferSize + ) + } + @Throws suspend fun downloadThing( context: Context, @@ -895,6 +1093,7 @@ object VideoDownloadManager { tryResume: Boolean, parentId: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, + parallelConnections: Int = 3 ): Int = withContext(Dispatchers.IO) { // we cant download torrents with this implementation, aria2c might be used in the future if (link.url.startsWith("magnet") || link.url.endsWith(".torrent")) { @@ -902,7 +1101,7 @@ object VideoDownloadManager { } var fileStream: OutputStream? = null - var requestStream: InputStream? = null + //var requestStream: InputStream? = null val metadata = DownloadMetaData( totalBytes = 0, bytesDownloaded = 0, @@ -926,11 +1125,13 @@ object VideoDownloadManager { val fileLength = stream.fileLength ?: return@withContext ERROR_UNKNOWN val resumeAt = (if (resume) fileLength else 0) metadata.bytesDownloaded = resumeAt + metadata.bytesWritten = resumeAt metadata.type = DownloadType.IsPending - // set up a connection - val request = app.get( - link.url.replace(" ", "%20"), + val items = streamLazy( + url = link.url.replace(" ", "%20"), + referer = link.referer, + startByte = resumeAt, headers = link.headers.appendAndDontOverride( mapOf( "Accept-Encoding" to "identity", @@ -941,17 +1142,12 @@ object VideoDownloadManager { "sec-fetch-dest" to "video", "sec-fetch-user" to "?1", "sec-ch-ua-mobile" to "?0", - ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap() - ), - referer = link.referer, - verify = false + ) + ) ) - // init variables - val contentLength = request.size ?: 0 - metadata.totalBytes = contentLength + resumeAt - - // save + metadata.totalBytes = items.totalLength + metadata.type = DownloadType.IsDownloading metadata.setDownloadFileInfoTemplate( DownloadedFileInfo( totalBytes = metadata.approxTotalBytes, @@ -961,23 +1157,166 @@ object VideoDownloadManager { ) ) - // total length is less than 5mb, that is too short and something has gone wrong - if (extension == "mp4" && metadata.approxTotalBytes < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION + val currentMutex = Mutex() + val current = (0 until items.size).iterator() - // read the buffer into the filestream, this is equivalent of transferTo - requestStream = request.body.byteStream() - metadata.type = DownloadType.IsDownloading + val fileMutex = Mutex() + // start to data + val pendingData: HashMap = + hashMapOf() - val buffer = ByteArray(DEFAULT_BUFFER_SIZE) - var read: Int - while (requestStream.read(buffer, 0, DEFAULT_BUFFER_SIZE).also { read = it } >= 0) { - fileStream.write(buffer, 0, read) + val jobs = (0 until parallelConnections).map { + launch { - // wait until not paused - while (metadata.type == DownloadType.IsPaused) delay(100) - // if stopped then break to delete - if (metadata.type == DownloadType.IsStopped) break - metadata.addBytes(read.toLong()) + // this may seem a bit complex but it more or less acts as a queue system + // imagine we do the downloading [0,3] and it response in the order 0,2,3,1 + // file: [_,_,_,_] queue: [_,_,_,_] Initial condition + // file: [X,_,_,_] queue: [_,_,_,_] + added 0 directly to file + // file: [X,_,_,_] queue: [_,_,X,_] + added 2 to queue + // file: [X,_,_,_] queue: [_,_,X,X] + added 3 to queue + // file: [X,X,_,_] queue: [_,_,X,X] + added 1 directly to file + // file: [X,X,X,X] queue: [_,_,_,_] write the queue and remove from it + + val callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit) = + callback@{ response -> + if (!isActive) return@callback + fileMutex.withLock { + // wait until not paused + while (metadata.type == DownloadType.IsPaused) delay(100) + // if stopped then throw + if (metadata.type == DownloadType.IsStopped || metadata.type == DownloadType.IsFailed) { + this.cancel() + return@callback + } + + val responseSize = response.size + metadata.addBytes(response.size) + + if (response.startByte == metadata.bytesWritten) { + // if we are first in the queue then write it directly + fileStream.write( + response.bytes, + 0, + responseSize.toInt() + ) + metadata.addBytesWritten(responseSize) + } else { + // otherwise append to queue, we need to clone the bytes as they will be overridden otherwise + pendingData[response.startByte] = + response.copy(bytes = response.bytes.clone()) + } + + while (true) { + // remove the current queue start, so no possibility of + // while(true) { continue } in case size = 0, and removed extra + // garbage + val pending = pendingData.remove(metadata.bytesWritten) ?: break + + val size = pending.size + + fileStream.write( + pending.bytes, + 0, + size.toInt() + ) + metadata.addBytesWritten(size) + } + } + } + + // this will take up the first available job and resolve + while (true) { + if (!isActive) return@launch + fileMutex.withLock { + if (metadata.type == DownloadType.IsStopped) return@launch + } + + // just in case, we never want this to fail due to multithreading + val index = currentMutex.withLock { + if (!current.hasNext()) return@launch + current.nextInt() + } + + // in case something has gone wrong set to failed if the fail is not caused by + // user cancellation + if (!items.resolveSafe(index, callback = callback)) { + fileMutex.withLock { + if (metadata.type != DownloadType.IsStopped) { + metadata.type = DownloadType.IsFailed + } + } + return@launch + } + } + } + } + + // fast stop as the jobs may be in a slow request + metadata.setOnStop { + jobs.forEach { job -> + try { + job.cancel() + } catch (t: Throwable) { + logError(t) + } + } + } + + jobs.forEach { it.join() } + + // jobs are finished so we don't want to stop them anymore + metadata.removeStopListener() + + // set up a connection + //val request = app.get( + // link.url.replace(" ", "%20"), + // headers = link.headers.appendAndDontOverride( + // mapOf( + // "Accept-Encoding" to "identity", + // "accept" to "*/*", + // "user-agent" to USER_AGENT, + // "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", + // "sec-fetch-mode" to "navigate", + // "sec-fetch-dest" to "video", + // "sec-fetch-user" to "?1", + // "sec-ch-ua-mobile" to "?0", + // ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap() + // ), + // referer = link.referer, + // verify = false + //) + + // init variables + //val contentLength = request.size ?: 0 + //metadata.totalBytes = contentLength + resumeAt + //// save + //metadata.setDownloadFileInfoTemplate( + // DownloadedFileInfo( + // totalBytes = metadata.approxTotalBytes, + // relativePath = relativePath ?: "", + // displayName = displayName, + // basePath = basePath + // ) + //) + //// total length is less than 5mb, that is too short and something has gone wrong + //if (extension == "mp4" && metadata.approxTotalBytes < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION + //// read the buffer into the filestream, this is equivalent of transferTo + //requestStream = request.body.byteStream() + //metadata.type = DownloadType.IsDownloading + //val buffer = ByteArray(DEFAULT_BUFFER_SIZE) + //var read: Int + //while (requestStream.read(buffer, 0, DEFAULT_BUFFER_SIZE).also { read = it } >= 0) { + // fileStream.write(buffer, 0, read) + // // wait until not paused + // while (metadata.type == DownloadType.IsPaused) delay(100) + // // if stopped then break to delete + // if (metadata.type == DownloadType.IsStopped) break + // metadata.addBytes(read.toLong()) + //} + + + if (metadata.type == DownloadType.IsFailed) { + return@withContext ERROR_CONNECTION_ERROR } if (metadata.type == DownloadType.IsStopped) { @@ -1003,11 +1342,12 @@ object VideoDownloadManager { // note that when failing we don't want to delete the file, // only user interaction has that power + metadata.removeStopListener() metadata.type = DownloadType.IsFailed return@withContext ERROR_CONNECTION_ERROR } finally { fileStream?.closeQuietly() - requestStream?.closeQuietly() + //requestStream?.closeQuietly() metadata.close() } } @@ -1388,20 +1728,28 @@ object VideoDownloadManager { } return suspendSafeApiCall { - downloadThing(context, link, name, folder, "mp4", tryResume, ep.id) { meta -> - main { - createNotification( - context, - source, - link.name, - ep, - meta.type, - meta.bytesDownloaded, - meta.bytesTotal, - notificationCallback - ) - } - } + downloadThing( + context, + link, + name, + folder, + "mp4", + tryResume, + ep.id, + createNotificationCallback = { meta -> + main { + createNotification( + context, + source, + link.name, + ep, + meta.type, + meta.bytesDownloaded, + meta.bytesTotal, + notificationCallback + ) + } + }) }.also { extractorJob.cancel() } ?: ERROR_UNKNOWN } From 61ca0a56bea81ef7bd18f943006df56ff4b8e707 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Sat, 19 Aug 2023 21:38:29 +0200 Subject: [PATCH 502/888] Translations update from Hosted Weblate (#546) Co-authored-by: Alexandru Co-authored-by: Alexthegib Co-authored-by: Alexthegib Co-authored-by: Amir Co-authored-by: Astrid Co-authored-by: Carlos Luiz Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> Co-authored-by: Danilo Co-authored-by: Eryk Michalak Co-authored-by: Ettore Atalan Co-authored-by: Fjuro Co-authored-by: Htet Oo Hlaing Co-authored-by: Imprevisible Co-authored-by: Jan Haider Co-authored-by: Jimuel Mallari Co-authored-by: Massimo Pissarello Co-authored-by: Milo Ivir Co-authored-by: PiterDev Co-authored-by: Rex_sa Co-authored-by: Reza Almanda Co-authored-by: Rudy Tantono Co-authored-by: Skrripy Co-authored-by: dabao1955 Co-authored-by: gallegonovato Co-authored-by: george kitsoukakis Co-authored-by: infoekcz Co-authored-by: tuan041 --- app/src/main/res/values-ar/strings.xml | 3 +- app/src/main/res/values-bp/strings.xml | 79 ++- app/src/main/res/values-cs/strings.xml | 3 +- app/src/main/res/values-es/strings.xml | 3 +- app/src/main/res/values-fil/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 24 +- app/src/main/res/values-in/strings.xml | 4 +- app/src/main/res/values-it/strings.xml | 3 +- app/src/main/res/values-my/strings.xml | 556 ++++++++++++++++++ app/src/main/res/values-nl/strings.xml | 5 +- app/src/main/res/values-pl/strings.xml | 5 +- app/src/main/res/values-pt/strings.xml | 3 +- app/src/main/res/values-qt/strings.xml | 3 +- app/src/main/res/values-uk/strings.xml | 37 +- app/src/main/res/values-vi/strings.xml | 15 +- fastlane/metadata/android/pt/changelogs/2.txt | 1 + .../metadata/android/pt/full_description.txt | 10 + .../metadata/android/pt/short_description.txt | 1 + fastlane/metadata/android/pt/title.txt | 1 + fastlane/metadata/android/vi/changelogs/2.txt | 1 + .../metadata/android/vi/full_description.txt | 10 + .../metadata/android/vi/short_description.txt | 1 + fastlane/metadata/android/vi/title.txt | 1 + 23 files changed, 734 insertions(+), 37 deletions(-) create mode 100644 app/src/main/res/values-fil/strings.xml create mode 100644 app/src/main/res/values-my/strings.xml create mode 100644 fastlane/metadata/android/pt/changelogs/2.txt create mode 100644 fastlane/metadata/android/pt/full_description.txt create mode 100644 fastlane/metadata/android/pt/short_description.txt create mode 100644 fastlane/metadata/android/pt/title.txt create mode 100644 fastlane/metadata/android/vi/changelogs/2.txt create mode 100644 fastlane/metadata/android/vi/full_description.txt create mode 100644 fastlane/metadata/android/vi/short_description.txt create mode 100644 fastlane/metadata/android/vi/title.txt diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 9b440e6f..987211a5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -584,4 +584,5 @@ @string/default_subtitles لا توجد اضافة في المستودع المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn) - + لقد صوتت بالفعل + \ No newline at end of file diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 38424e56..2a3bdb27 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -10,7 +10,7 @@ %dm Poster - @string/result_poster_img_des + Pôster Episode Poster Main Poster Next Random @@ -66,7 +66,7 @@ Erro Carregando Links Armazenamento Interno Dub - Leg + Sub Deletar Arquivo Assistir Arquivo Retomar Download @@ -257,7 +257,7 @@ Não mostrar de novo Pular essa Atualização Atualizar - Qualidade preferida + Qualidade preferida de reprodução (Wi-fi) Máximo de caracteres do título de vídeos Resolução do player de vídeo Tamanho do buffer do vídeo @@ -428,4 +428,75 @@ Começa o próximo episódio quando o atual termina Ativar NSFW em fornecedores compatíveis Fornecedores - + Reverter + Ações + votou com sucesso + Baixando atualização do aplicativo… + Referencias + Atualizações do App + Tocar com CloudStream + Automaticamente instale todos os plugins não instalados dos repositórios adicionados. + Reproduzir Trailer + Navegador + Copia de Segurança + A Barra de Progresso pode ser usada quando o player estiver oculto + Inscrever + Essa lista está vazia. Tente mudar para outra. + Reproduzir Livestream + Log do Teste + Baixa plugins automaticamente + Selecione o modo para filtrar os plugins baixados + Teste falhou + A Barra de Progresso pode ser usada quando o player estiver visível + Organizar + Sim + Você tem certeza que deseja sair\? + Instalando atualização do aplicativo… + Editar + Perfis + Exibindo Player - procure na Barra de Progresso + remover dos assitidos + Extensões + Alfabética(A => Z) + Abrir com + Selecionar Biblioteca + Passou + Sua biblioteca está vazia :0 +\nEntre numa conta de biblioteca ou adicione Midias para sua biblioteca local. + Qualidade preferida de reprodução (Dados Móveis) + Legado + Biblioteca + Não + Trilhas Sonoras + Votação(Baixa para Alta) + Atualização iniciada + Conteúdo +18 + Ajuda + Processo de configuração de Redo + Não pudemos instalar a nova versão do App + instalador de pacotes + Organizar por + Votação(Alta para Baixa) + Alfabética(Z => A) + Qualidade + Perfil de plano de fundo + Aqui você pode alterar como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais alta, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte e da prioridade da qualidade é a prioridade do vídeo. +\n +\nFonte A: 3 +\nQualidade B: 7 +\nTerá uma prioridade de vídeo combinada de 10. +\n +\nNOTA: Se a soma for 10 ou mais, o Player pulará automaticamente o carregamento quando o link for carregado! + Arquivo de modo de segurança encontrado! +\nNão carregar nenhuma extensão na inicialização até que o arquivo seja removido. + Inscrevel em %d + Episódio %d Lançado + Selecionar padrão + Disinscrevel em %d + Alguns aparelhos não possuem suporte para este pacote de instalação. Tente a opção legada se a atualização não instalar. + Dados móveis + Perfil %d + Atualizando shows inscritos + Player oculto - Procure na barra de progresso + Conteúdo +18 + \ 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 f304199e..165dbbb4 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -576,4 +576,5 @@ V repozitáři nebyly nalezeny žádné doplňky Repozitář nenalezen, zkontrolujte adresu URL a zkuste použít VPN @string/default_subtitles - + Již jste hlasovali + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 42e07c90..6326211e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -552,4 +552,5 @@ @string/default_subtitles No se encontraron complementos en el repositorio Repositorio no encontrado, comprueba la URL y prueba la VPN - + Ya has votado + \ No newline at end of file diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-fil/strings.xml @@ -0,0 +1,2 @@ + + \ 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 36c1cf1f..4cc56207 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -530,4 +530,26 @@ Joueur représenté - Montant de la recherche Joueur caché - Montant de la recherche Impossible d\'accéder à GitHub. Activation du proxy jsDelivr… - + Vous avez déjà voté + Désactivé + Ici, vous pouvez modifier la façon dont les sources sont ordonnées. Si une vidéo a une priorité plus élevée, elle apparaîtra plus haut dans la sélection de la source. La somme de la priorité source et de la priorité qualité est la priorité vidéo. +\n +\nSource A : 3 +\nQualité B : 7 +\nLa priorité vidéo combinée sera de 10. +\n +\nREMARQUE : Si la somme est de 10 ou plus, le joueur sautera automatiquement le chargement lorsque ce lien est chargé ! + Aucun plugin trouvé dans ce dossier + Dossier non trouvé, vérifiez l\'url et essayé un VPN + Données mobiles + Définir par défaut + Utiliser + Modifier + Profils + Aide + Profil %d + Wi-Fi + Qualités + L\'interface utilisateur n\'a pas pu être créée correctement. Il s\'agit d\'un bogue majeur qui doit être signalé immédiatement %s + Sélectionnez le mode pour filtrer le téléchargement des plugins + \ 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 2bd86090..87a01ff9 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -574,4 +574,6 @@ Pilih mode untuk memfilter unduhan plugin Tidak ada plugin yang ditemukan di repositori Repositori tidak ditemukan, periksa URL dan coba VPN - + Kamu sudah voting + \@string/default_subtitles + \ 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 dddc57c4..7cca78ca 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -574,4 +574,5 @@ Seleziona la modalità per filtrare il download dei plugin @string/default_subtitles Disabilita - + Hai già votato + \ No newline at end of file diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml new file mode 100644 index 00000000..cde13ba5 --- /dev/null +++ b/app/src/main/res/values-my/strings.xml @@ -0,0 +1,556 @@ + + + သရုပ်ဆောင်များ: %s + %dရက် %ddနာရီ %ddမိနစ် + %ddနာရီ %ddမိနစ် + %ddမိနစ် + ပိုစတာ + အပိုင်း ပိုစတာ + မိန်း ပိုစတာ + နောက် ကျပန်း + နောက်သို့ + နောက်ခံပုံရိပ်ကို အကြိုကြည့်ရန် + အဆင့်: %.1f + အပ်ဒိတ်အသစ်! +\n%s -> %s + စစ်ထုတ်မှု + %d မိနစ် + CloudStream + CloudStream ဖြင့်ကြည့်ရန် + ပင်မ + ရှာရန် + ရှာရန်… + ရှာရန် %s… + အချက်အလက်မရှိပါ + အခြားရွေးစရာများ + နောက်အပိုင်း + ကဏ္ဍများ + မျှဝေမည် + ဘရောက်ဇာတွင်ဖွင့်ရန် + ဘရောက်ဇာ + မစောင့်တော့ပါ + ကြည့်နေသည် + ကြည့်ပြီး + ကြည့်ခြင်းရပ်ထားသော + ဘာမျှ + လင့်များချိတ်ဆက်ရာတွင်အချို့အယွင်း + ဖုန်း သိုလှောင်ရုံ + စာမှတ်များ စစ်ထုတ်မှု + စာမှတ်များ + ဖယ်ရှားရန် + ကြည့်ရှုမှုအခြေအနေသတ်မှတ်ခြင်း + မိတ္တူကူးရန် + ပိတ်ရန် + ရှင်းလင်းရန် + သိမ်းဆည်းရန် + ကြည့်ရှုမှုအရှိန် + နောက်ခံ အရောင် + ဝင်းဒိုး အရောင် + အစွန်းနားပုံစံ + စာတန်းထိုး အမြင့် + ဖောင့် + ဖောင့် အရွယ်အစား + အမျိုးအစားများအသုံးပြု၍ရှာရန် + %d အက်ပ်ဖန်တီးသူတွေကိုကျေးဇူးတင်ကြောင်းပို့မည် + အလိုအလျောက် ဘာသာစကားရွေးချယ်ခြင်း + ဒေါင်းလုဒ် လုပ်ထားသော ဘာသာစကားများ + မူရင်းပုံစံအတိုင်းပြန်ထားရန်ဖိထားပါ + ဆက်လက်ကြည့်ရှုမည် + ဖယ်ရှားရန် + ပိုမို၍ + \@string/home_play + ဒီဟာကတောရပ်တစ်ခုပါ ဗီပီအန်တစ်ခုသုံးဖို့အကြံပြုပါတယ် + ဖော်ပြချက် + ဇာတ်လမ်းသွား မတွေ့ပါ + ဖော်ပြချက် မရိှပါ + Logcat ပြရန် 🐈 + Log + ရုပ်ပုံထပ် + ကြည့်ရှုမှု စခရင်အရွယ်အစားချိန်ညိှမှု + စာတန်းထိုးများ + ကြည့်ရှုမှုစာတန်းထိုးပြုပြင်စရာများ + Eigengravy လုပ်ဆောင်မှု + ရစ်ရန်ဘယ်ညာဆွဲပါ + သင်ရောက်နေတဲ့နေရာပြောင်းရန်ဘယ်ညာဆွဲပါ + ပြုပြင်စရာရိှပါက ပွတ်ဆွဲပါ + နောက်အပိုင်းကို အလိုအလျောက် ဖွင့်ပါ + ကျော်ရန်နှစ်ချက်နှိပ်ပါ + ရပ်ရန်နှစ်ချက်နှိပ်ပါ + ကျော်လိုသောပမာဏ (စက္ကန့်များ) + ရှေ့သို့ကျော်ရန် သို့ နောက်သို့ရစ်ရန် ဘယ် သို့ ညာ ပေါ်မှာနှစ်ချက်နှိပ်ပါ + ရပ်ရန် အလယ်တွင်နှစ်ချက်နှိပ်ပါ + ဖုန်းအလင်းအမှောင်အတိုင်းသုံးမည် + အက်ပ်ကြည့်ရှုမှုထဲမှာ ဖုန်းအလင်းအမှောင်အတိုင်းသုံးမည် + ကြည့်ရှုမှုတိုးတက်ခြင်းကိုအပ်ဒိတ်လုပ်ပါ + အရန်သိမ်းဖိုင်မှပြန်သိုလှောင်မည် + အရန်သိမ်းမည် + အရန်သိမ်းဖိုင်များရယူပြီး + အရန်သိမ်းဖိုင်မှပြန်သိုလှောငးခြင်မအောင်မြင်ပါ %s + သိုလှောင်ပြီး + သိုလှောင်ရုံခွင့်ပြုချက်မရိှပါ။ပြန်ကြိုးစားပါ။ + အရန်သိမ်းနေစဥ်အချို့အယွင်း %s + လိုက်ဘရီ + အပ်ဒိတ်များနှင့်အရန်သိမ်းဆည်းမှု + နက်နက်ရှိုင်းရှိုင်းရှာခြင်း + သင့်ကိုဝန်ဆောင်မှုပေးသူအလိုက်ရှာဖွေမှုရလဒ်များပေးမည် + ချို့ယွင်းမှုအကြီးစားဖြစ်မှသာဒေတာများပေးပို့ပါ + anime များအတွက်ဖြည့်စွက်အပိုင်းကိုပြရန် + ထွေလာများကိုပြရန် + Kitsu မှ ပိုစတာများကိုပြရန် + အလိုအလျောက် ဖြည့်စွက်လုပ်ဆောင်ချက်များကိုအပ်ဒိတ်တင်ခြင်း + အပိုလုပ်ဆောင်ချက်များကိုစစ်ထုတ်ရန်မုဒ်ရွေးပါ + အက်ပ်အပ်ဒိတ်များပြရန် + အစီအစဥ်ချခြင်းကိုပြန်စမည် + အက်ပ်ထည့်သွင်းခြင်း + အချို့ဖုန်းတွေက အက်ပ်ထည့်သွင်းခြင်းလုပ်ဆောင်ချက်အသစ်ကို မပံ့ပိုးပါဘူး။အကယ်၍အလုပ်မဖြစ်ပါကသမားရိုးကျနည်းလမ်းကိုအသုံးပြုပါ။ + Github + ဤဝန်ဆောင်မှုပေးသူသည် Chromecast ကိုမပံ့ပိုးပါ + လင့်များမတွေ့ပါ + ကလစ်ဘုတ်သို့မိတ္တူကူးပြီး + အပိုင်းကြည့်မည် + အတွဲ + အတွဲမရှိပါ + အပိုင်း + အပိုင်းများ + %d-%d + ဒါကအပြီးဖျက်ခြင်းဖြစ်ပါသည် %s +\nသင်သေချာပါသလား။ + %dမိနစ် +\nကျန်ရိှသည် + ထုတ်လွှင့်နေဆဲ + ထုတ်လွှင့်မှုပြီးဆုံး + အခြေအနေ + ခုနစ် + အဆင့်သတ်မှတ်ချက် + ကြာချိန် + ဆိုဒ် + အကျဥ်းချုပ် + နောက်အစီအစဥ် + စာတန်းထိုးမထည့် + ပုံသေ + \@string/default_subtitles + ကျန်ရှိသော + အက်ပ် + ရုပ်ရှင်များ + ဇာတ်လမ်းတွဲများ + ကာတွန်းများ + Anime + ေတာရပ်များ + မှတ်တမ်းရုပ်ရှင်များ + OVA + အာရှ ဒရာမာများ + တိုက်ရိုက်ထုတ်လွှင်မှုများ + အပြာဗီဒီယိုများ + အခြား + ရုပ်ရှင် + ဇာတ်လမ်းတွဲ + OVA + တောရပ် + မှတ်တမ်းရုပ်ရှင် + အာရှ ဒရာမာ + တိုက်ရိုက်ထုတ်လွှင့်မှု + အပြာဗီဒီယို + ဗီဒီယို + ရင်းမြစ်အချို့အယွင်း + အဝေးထိန်းချုပ်မှုအချို့အယွင်း + တင်ဆက်သူ အချို့အယွင်း + မျှော်လင့်မထားသော အချို့အယွင်း + Chromecast အပိုင်း + Chromecast ဖန်သားပြင် + အက်ပ်တွင်းဖွင့် + ဖွင့်ရန် %s + ဘရောက်ဇာထဲမှာ ဖွင့်ရန် + လင့်ကူးယူရန် + အလိုအလျောက်ဒေါင်းလုဒ် + လင့်များကို ပြန်စစ်ရန် + အရည်အသွေး အမှတ်အသား + နောက်ခံအသံ အမှတ်အသား + စာတန်း အမှတ်အသား + ခေါင်းစဥ် + အပ်ဒိတ်မရှိပါ + အပ်ဒိတ်စစ်ရန် + လော့ခ်ခတ်ရန် + ရင်းမြစ် + OPကိုကျော်ရန် + ဒီအပ်ဒိတ်ကိုကျော်ပါ + အပ်ဒိတ် + ခေါင်းစဥ်အတွက်စာလုံးရေပြည့်ခြင်း + ကြည့်ရှုမှု အရည်အသွေး + ဗီဒီယိုရှေ့ပြေးသိမ်းဆည်းမှုပမာဏ + ကြည့်ရှုမှုဘားမြင်တွေ့ရချိန်တွင်ပြသသောပမာဏ + ဝှက်ထားသောကြည့်ရှုပြီးသောပမာဏ + ဝှက်ထားသည့်အခါ အသုံးပြုသည့် ရှာဖွေမှုပမာဏ + Android TV ကဲ့သို့သော မမ်မိုရီနည်းသော စက်ပစ္စည်းများတွင် သတ်မှတ်နှုန်း အလွန်မြင့်မားပါက ပျက်စီးမှုများ ဖြစ်စေသည်။ + DNS over HTTPS + raw.githubusercontent.com ပရောက်စီ + GitHub သို့ မရောက်ရှိနိုင်ပါ။ jsDelivr ပရောက်စီကို ဖွင့်နေသည်… + ကလုန်း ဆိုဒ် + ဆိုဒ်ကိုဖယ်ရှားရန် + မတူညီသော URL တစ်ခုဖြင့် ရှိပြီးသား ဝဘ်ဆိုက်တစ်ခု၏ ပုံတူတစ်ခုကို ထည့်ပါ + ဒေါင်းလုဒ်လမ်းကြောင်း + NGINX ဆာဗာ URL + Dubbed/Subbed Anime ကိုပြသပါ + မျက်နှာပြင်နှင့် အံကိုက် + ဆန့်သည် + ချဲ့သည် + ရှင်းလင်းချက် + ISP ရှောင်လွှဲမှုများ + လင့်များ + အက်ပ်အပ်ဒိတ်များ + Extensions + ဆောင်ရွက်ချက်များ + Cache + Android တီဗွီ + စာတန်းထိုးများ + ပုံသေများ + ပုံပန်းသဏ္ဌာန် + အထွေထွေ + ပင်မစာမျက်နှာမှာကျပန်းခလုတ်ကိုပြပါ + %s အပိုင်း %d + အပိုင်း %d ထုတ်လွှင့်ပြသမည် + ပိုစတာ + ပံ့ပိုးပေးသောဝန်ဆောင်မှုပြောင်းရန် + အရှိန် (%.2fx) + ဒေါင်းလုဒ်များ + ပြင်ဆင်ရန် + ခဏစောင့်ပါ… + ကြည့်ဆဲ + ကြည့်ရန် + ပြန်ကြည့်နေသည် + စာတန်းထိုး + ရုပ်ရှင်ကြည့်မည် + ထွေလာ ကြည့်မည် + လိုက်ခ် ကြည့်မည် + တောရပ် ကြည့်မည် + ရင်းမြစ်များ + ချိတ်ဆက်မှုပြန်ကြိုးစား… + နောက်သို့ + အပိုင်း ကြည့်မည် + ဒေါင်းလုဒ် + ဒေါင်းလုဒ် လုပ်ပြီး + ဒေါင်းလုဒ် လုပ်နေသည် + ဒေါင်းလုဒ် ရပ်ထား + ဒေါင်းလုဒ်စတင် + ဒေါင်းလုဒ် မအောင်မြင် + ဒေါင်းလုဒ် ပယ်ဖျက်ပြီး + ဒေါင်းလုဒ်ပြီးစီး + အပ်ဒိတ်စတင် + တိုက်ရိုက်ကြည့်မည် + နောက်ခံအသံ + ရှာဖွေမှုရလဒ်များတွင်ရွေးချယ်ထားသောဗီဒီယိုအရည်အသွေးကိုဝှက်ထားရန် + စာတန်းထိုး + ဖိုင်ဖျက်ရန် + ဖိုင်ကို ဖွင့်ရန် + ဒေါင်းလုဒ် ဆက်လုပ်ရန် + ဒေါင်းလုဒ် ရပ်ရန် + အလိုအလျောက်အက်ပ်ချို့ယွင်းချက်ပေးပို့ခြင်းကိုပိတ်မည် + ပိုမို၍ + ပ့ံပိုးပေးသောဝန်ဆောင်မှုများအသုံးပြု၍ရှာရန် + ဝုက်ရန် + ကျေးဇူးတင်ကြောင်းမပို့ရသေး + ကြည့်မည် + အချက်အလက် + စာတန်းထိုး ဘာသာစကား + ဒီမှာနေရာချခြင်းဖြင့်ဖောင့်များကိုသွင်းပါ %s + အတည်ပြု + ပယ်ဖျက်ရန် + စာတန်းထိုး ပြုပြင်ခြင်း + စာသား အရောင် + အနားကွပ် အရောင် + ဒီပံ့ပိုးမှုကောင်းမွန်စွာအလုပ်လုပ်ရန်ဗီပီအန်တစ်ခုလိုနိုင်ပါတယ် + အသေးစိတ်အချက်အလက်များပြမထားပါ။ဝဘ်ဆိုဒ်ပေါ်မှာမရှိလျှင်ကြည့်ရှု၍မရနိုင်ပါ။ + ဖြည့်စွက်လုပ်ဆောင်ချက်များကို အလိုအလျောက်ဒေါင်းလုဒ်လုပ်ခြင်း + ရီပိုစစ်ထရီများမှမထည့်သွင်းရသေးသောဖြည့်စွက်လုပ်ဆောင်ချက်များအားလုံးကိုထည့်သွင်းပါ။ + ပြန်ကြည့်ခြင်းကိုအသေးစား ကြည့်ရှုမှုတွင်ဆက်ပြပါ + အနက်ရောင်ဘောင်များကို ဖယ်ရှားရန် + အက်ပ်ထဲဝင်လိုက်သည့်နှင့်အက်ပ်အပ်ဒိတ်ကိုစစ်ဆေးပါ။ + Chromecast စာတန်းထိုးများ + Chromecast စာတန်းထိုး ပြုပြင်ရန် + ကြည့်ရှုမှုပုံစံထဲမှာအရိှန်ရွေးစရာတစ်ခုထည့်ရန် + အသံအတိုးအကျယ်နှင့်အလင်းအမှောင်များကိုချိန်ညိှရန် ဘယ် သို့ ညာ ဘက်တွင် အပေါ်အောက်ဆွဲပါ + ယခုကြည့်နေသောအပိုင်းပြီးပါကနောက်အပိုင်းကိုဖွင့်ပါ + သင့်၏အပိုင်းကြည်ရှုမှုရောက်ရှိနေရာကိုအလိုအလျောက်သိမ်းဆည်းပါ + ရှာရန် + အကောင့်များ + အချက်အလက် + ဒေတာများမပို့ရန် + ကြည့်ရှုပြီးသောအချိန်ပမာဏ + Android TV ကဲ့သို့သော သိုလှောင်မှုနေရာနည်းပါးသော စက်ပစ္စည်းများတွင် အလွန်မြင့်မားစွာ သတ်မှတ်ပါက ပြဿနာများ ဖြစ်လာနိုင်သည်။ + ISP ပိတ်ဆို့ခြင်းကို ကျော်လွှားရန်အတွက် အသုံးဝင်သည် + jsDelivr ကို အသုံးပြု၍ GitHub ပိတ်ဆို့ခြင်းကို ကျော်ဖြတ်သည်။ အပ်ဒိတ်များကို ရက်အနည်းငယ်ကြာအောင် နှောင့်နှေးစေနိုင်သည်။ + အရန်သိမ်းထားသော + လက်ဟန်များ + ကြည့်ရှုမှုလုပ်ဆောင်ချက်များ + အပြင်အဆင် + လုပ်ဆောင်ချက်များ + ကျပန်းခလုတ် + ရှေ့ပြေးအပ်ဒိတ်များကိုထည့်သွင်းပါ + ပုံမှန်အပ်ဒိတ်များအစား ရှေ့ပြေးအက်ဒိတ်များကိုရှာပါ + တူညီသောအက်ပ်ရေးသားသူများ၏ ဝတ္ထုရှည်များဖတ်နိုင်သည့် အက်ပ် + တူညီသောအက်ပ်ရေးသားသူများ၏ Anime အက်ပ် + Discord ကိုဝင်ရန် + အက်ပ်ရေးသားသူများထံ ကျေးဇူးတင်စာပို့မည် + ပေးခဲ့သောစာအရေအတွက် + အက်ပ်ဘာသာစကား + မူလအခြေအနေများကိုပြန်ထားပါ + စိတ်မကောင်းပါ။အက်ပ်ရပ်တန့်သွားပါတယ်။အမည်မဖော်ထားတဲ့တင်ပြချက်ကို အက်ပ်ရေးသားသူများထံ ပို့မှာဖြစ်ပါတယ် + %s %d%s + အတွဲ + %d %s + အပိုင်း + အပိုင်းများမတွေ့ပါ + ဖိုင်ကိုဖျက်ရန် + ဖျက်ရန် + ရပ်ရန် + စရန် + မအောင်မြင်ပါ + ကျော်ဖြတ်ပြီး + ကြည့်လက်စ + -30 + +30 + အသုံးပြုပြီးသော + ကာတွန်း + Anime + ဒေါင်းလုဒ် အချို့အယွင်း၊သိုလှောင်ရုံခွင့်ပြုချက်တွေကိုစစ်ဆေးပါ + ဒေါင်းလုဒ် ကြေးမုံ + စာတန်းထိုးများကို ဒေါင်းလုဒ်လုပ်ရန် + ပိုစတာပေါ်ရှိ UI အစိတ်အပိုင်းများကို ပြောင်းပါ + ပြန်ညိှ + နောက်ထပ်မပြရန် + ဝိုင်ဖိုင်ဖြင့်ကြည့်စဥ်ဗီဒီယိုအရည်အသွေး + မိုဘိုင်းဒေတာဖြင့်ကြည့်စဥ်ဗီဒီယိုအရည်အသွေး + ဗီဒီယိုရှေ့ပြေးသိမ်းဆည်းမှုအကွာအဝေး + ဗီဒီယိုcacheအများ + ဗီဒီယို cache နှင့် ရုပ်ပုံ cache များကိူရှင်းလင်းရန် + ပံ့ပိုးပေးထားသည့် ဝန်ဆောင်မှုများပေါ်တွင် အပြာဗီဒီယို ကို ဖွင့်ပါ + ဝန်ဆောင်မှုပံ့ပိုးသူဘာသာစကား + အက်ပ်အပြင်အဆင် + ဦးစားပေးမီဒီယာ + အက်ပ် အပြင်အဆင် + ပိုစတာခေါင်းစဉ်တည်နေရာ + ခေါင်းစဉ်ကို ပိုစတာအောက်မှာ ထားပါ + ဖုန်းအပြင်အဆင် + အင်မြူလိတ်တာ အပြင်အဆင် + အဓိကအရောင် + အကြံပြုသည် + ဒီဗွီဒီ + 4K + ထုတ်လွှင့်ရန် လင့်ခ် နှင့်ချိတ်ပါ + ရည်ညွှန်းသည် + ရှေ့သို့ + နောက်သို့ + အပ်ဒိတ်လုပ်ပြီး %d ဖြည့်စွက်များ + ဒေါင်းလုဒ်မလုပ်ရသေး: %d + ဝဘ်ဘရောက်ဇာ + အက်ပ်မတွေ့ပါ + ဘာသာစကားအားလုံး + ကျော်ရန် %s + အစမှပြန်စ + ရောထားသောအဆုံးပိုင်း + ရောထားသောအစပိုင်း + ခရက်ဒစ်များ + အစ + သေချာသည် + သမားရိုးကျ + ထည့်သွင်းသူ + ထွက်ချိန်တွင် အက်ပ်ကို အပ်ဒိတ်လုပ်ပါမည် + CloudStream တွင် မူရင်းအတိုင်း ထည့်သွင်းထားသည့်ဆိုက်များ မရှိပါ။ ရီပိုစစ်ထရီများ မှ ဆိုဒ် များကို ထည့်သွင်းရန်လိုအပ်သည်။ +\n +\nSky UK Limited မှ ဦးနှောက်မဲ့ DMCA ကို ဖယ်ရှားလိုက်ခြင်းကြောင့် 🤮 ကျွန်ုပ်တို့သည် ရီပိုစစ်ထရီဆိုဒ်ကို အက်ပ်တွင် ချိတ်ဆက်၍မရပါ။ +\n +\nကျွန်ုပ်တို့၏ Discord တွင်ပါဝင်ပါ သို့မဟုတ် အွန်လိုင်းတွင်ရှာဖွေပါ။ + အခြားသူများ၏ရီပိုစစ်ထရီများကိုရှာဖွေမည် + အသံများ + အသံဖိုင်များ + ဗီဒီယိုအသံဖိုင်များ + ပြန်စတင်ချိန်မှာအသုံးပြုပါ + ရပ်ရန် + လုံခြုံသောမုဖွင့်ရန် + ဖုန်းတွင်းကြည့်ရှုမှု + ဦးစားပေး ဗီဒီယိုဖွင့်စက် + ပြဿနာဖြစ်စေသည့်အရာကို သင်ရှာဖွေရာတွင် အထောက်အကူဖြစ်စေရန်အတွက် ပျက်စီးမှုတစ်ခုကြောင့် အဆက်များအားလုံးကို ပိတ်ထားသည်။ + အဆင့်သတ်မှတ်ချက်များ: %s + ပျက်စီးမှုအချက်အလက်ကို ကြည့်ပါ + ဖော်ပြချက် + ဗားရှင်း + အခြေအနေ + အရွယ်အစား + ရေးသားသူများ + HLS ဖွင့်စဥ် + ကြည့်ရှုခဲ့သည်များ + အက်ပ်၏ ဗားရှင်းအသစ်ကို ထည့်သွင်း၍မရပါ + အစပိုင်း/အဆုံးပိုင်းအတွက် ကျော်နိုင်သော ပေါ့ပ်အပ်များကို ပြပါ + စာသားအလွန်များသဖြင့်ကလစ်ဘုတ်တွင် သိမ်းဆည်း၍မရပါ။ + ပံ့ပိုးပေးသူများ + အပြင်အဆင် + အလိုအလျောက် + တီဗွီအပြင်အဆင် + သင့်စကားဝှက် + သင့်ယူဇာနိမ်း + သင့်အီးမေးလ် လိပ်စာ + 127.0.0.1 + သင့်ဆိုဒ် + example.com + အရိပ် + ထမြောက်မှု + စာတန်းထိုးများ ထပ်တူပြုရန် + စာတန်းထိုးများ အလွန်စောနေပါက %d ms ဒီဟာကိုသုံးပါ + The quick brown fox jumps over the lazy dog + တင်ပြီး %s + ဖိုင်မှတင်သွင်းပြီး + ရုံရိုက် + အကြည် + အကြည် + UHD + HDR + SDR + Web + WP + SD + ကြည့်ရှုမှု + ပိုစတာပုံရိပ် + စာတန်းထိုးများမှ bloat ကိုဖယ်ရှားပါ + နှစ်သက်ရာ မီဒီယာဘာသာစကားဖြင့် စစ်ထုတ်ပါ + အပိုများ + ဒေတာမမှန်ပါ + URL မမှန်ပါ + အချို့အယွင်း + စာတန်းထိုးများမှ ပိတ်ထားသော စာတန်းများကို ဖယ်ရှားပါ + ထွေလာ + ဖြည့်စွက်များ + ရီပိုစစ်ထရီ ဖြည့်စွက်များအားလုံးကိုဖျက်မည်ဖြစ်သည် + ရီပိုစစ်ထရီ ကိုဖျက်ရန် + ဤရီပိုစစ်ထရီမှ ဖြည့်စွက်များအားလုံးကို ဒေါင်းလုဒ်လုပ်မှာလား\? + %s (ပိတ်ပြီး) + ထောက်ပံ့ထားသော + ဘာသာစကား + အဆက်များကိုအရင်သွင်းပါ + VLC + MPV + ဝဘ်ထဲတွင်ဖွင့်ရန် + အစပိုင်း + အဆုံးပိုင်း + ကြည့်ရှုခဲ့သည်များကိုရှင်းရန် + ကြည့်ပြီးသည်မှဖယ်ရှားရန် + သင်ထွက်ရန်သေချာပြီလား + မသေချာပါ + အက်ပ်အပ်ဒိတ်အားဒေါင်းလုဒ်လုပ်နေသည်… + အက်ပ်အပ်ဒိတ်အားသွင်းနေသည်… + အပ်ဒိတ်ဖြစ်မှု (အသစ် မှ အဟောင်း) + သင့်လိုက်ဘရီသည် ဗလာဖြစ်နေသည် :( +\nအကောင့်ဝင်ပါ သို့မဟုတ် သင့်ဖုန်းလိုက်ဘရီတွင် ကြည့်စရာများထည့်ပါ။ + သုံးရန် + တည်းဖြတ်ရန် + အရည်အသွေးများ + စာတန်းထိုး ကုဒ်လုပ်ခြင်း + ပံ့ပိုးပေးသူ စစ်ဆေးမှု + %s %s + အကောင့်ဝင်မည် + အကောင့်ပြောင်းမည် + ချိန်ညိှခြင်း + /%d + အင်တာနက်မှ တင်သွင်းမည် + နောက်ခံ + အကောင့်မဝင်ရောက်နိုင်ပါ %s + ဘာမျှ + အနည်းဆုံး + အနားကွပ် + ကျပန်း + ချုံ့ပြီး + 1000 ms + စာတန်းထိုး ကြန့်ကြာမှု + စာတန်းထိုးများအလွန်နောက်ကျနေပါက %d ms ဒီဟာကိုသုံးပါ + စာတန်းထိုး ကြန့်ကြာမှု သတ်မှတ်ထားခြင်းမရှိ + ရုံရိုက် + ရုံရိုက် + TC + အရည်အသွေး + အစီအစဥ်ချခြင်းကိုကျော်မည် + ချို့ယွင်းမှုသတင်းပေးပို့ခြင်း + ဘာတွေကြည့်ချင်လဲ + ပြီးပြီ + အဆက်များ + မသွင်းနိုင်ပါ %s + သင့်စက်ပစ္စည်းနှင့် ကိုက်ညီစေရန် အက်ပ်၏အသွင်အပြင်ကို ပြောင်းလဲပါ + ရီပိုစစ်ထရီထည့်ရန် + အသက်ပြည့်ပြီးသူများသာ + ရီပိုစစ်ထရီအမည် + ရီပိုစစ်ထရီ URL + ဖြည့်စွက်များ ထည့်ပြီး + ဤဘာသာစကားများဖြင့် ဗီဒီယိုများကို ကြည့်ရှုပါ + ဖြည့်စွက်များ ဒေါင်းလုဒ်လုပ်ပြီး + ဖြည့်စွက်များဖျက်ပြီး + ဒေါင်းလုဒ်လုပ်ခြင်း စတင်သည် %d %s… + ဒေါင်းလုဒ်လုပ်ပြီး %d %s + အားလုံး %s ဒေါင်းလုဒ်လုပ်ပြီးသား + ရီပိုစစ်ထရီထဲတွင်ဖြည့်စွက်များမတွေ့ပါ + ရီပိုစစ်ထရီမတွေ့ပါ၊URLကိုပြန်စစ်ပြီးဗီပီအန်ဖြင့်ကြိုးစားကြည့်ပါ + အသုတ်လိုက် ဒေါင်းလုဒ် + ဖြည့်စွက် + သင်အသုံးပြုလိုသောဆိုက်များစာရင်းကို ဒေါင်းလုဒ်လုပ်ပါ + ဒေါင်းလုဒ်လုပ်ပြီး: %d + ပိတ်ပြီး: %d + ဘာသာစကားကုဒ် (en) + အကောင့် + အကောင့်ထွက်မည် + အကောင့်ထည့်မည် + အကောင့်ဖွင့်မည် + စောင့်ကြည့်ခြင်းထည့်မည် + ထည့်ပြီး %s + အဆင့်သတ်မှတ်ထားပြီး + %d / 10 + /\?\? + %s ချိတ်ဆက်ပြီး + ပိတ်ပါ + ပုံမှန် + အားလုံး + အပြည့် + ဖိုင်ဒေါင်းလုဒ်လုပ်ပြီး + အဓိက + ထောက်ပံ့သည် + ရင်းမြစ် + မကြာမီလာမည်… + TS + Blu-ray + အရည်အသွေးနှင့်ခေါင်းစဥ် + ခေါင်းစဥ် + အိုင်ဒီမမှန်ပါ + အများမြင်နိုင်သော + စာတန်းထိုးအားလုံးကို စာလုံးအကြီးပြောင်းပါ + ပြန်စတင်မည် + ကြည့်ပြီးအဖြစ်မှတ်ရန် + အစီအစဥ်ချမှု + အစီအစဥ် + အဆင့်သတ်မှတ်ချက် (အမြင့်ဆုံးမှအနိမ့်ဆုံးသို့) + အဆင့်သတ်မှတ်ချက် (အနိမ့်ဆုံး မှ အမြင့်ဆုံးသို့) + အပ်ဒိတ်ဖြစ်မှု (အဟောင် မှ အသစ်) + အက္ခရာစဥ်လိုက် (A မှ Z) + အက္ခရာစဥ်လိုက် (Z မှ A) + ပြောင်းပြန် + စာရင်းသွင်းထားသောရှိုးများကိုအပ်ဒိတ်လုပ်နေသည် + စာရင်းသွင်းပြီး + စာရင်းသွင်းပြီး %s + စာရင်းသွင်းမှုပယ်ဖျက်ပြီး %s + ဤစာရင်းသည် ဗလာဖြစ်နေသည်။ အခြားတစ်ခုသို့ ပြောင်းကြည့်ပါ။ + Safe mode ဖိုင်ကို တွေ့ရှိခဲ့သည်။ +\nဖိုင်ကိုမဖယ်ရှားမချင်း စတင်ဖွင့်စတွင် မည်သည့် extension များကိုမျှ မတင်ပါ။ + အပိုင်းသစ် %d ထွက်ပြီ + ပရိုဖိုင် %d + ဝိုင်ဖိုင် + မိုဘိုင်းဒေတာ + ပုံသေထားရန် + ပရိုဖိုင်များ + အကူအညီ + ဤနေရာတွင် သင်သည် အရင်းအမြစ်များကို မည်ကဲ့သို့ အစီအစဥ်ချမည်ကို ပြောင်းလဲနိုင်သည်။ ဗီဒီယိုတစ်ခုတွင် ပိုမိုဦးစားပေးပါက ရင်းမြစ်ရွေးချယ်မှုတွင် ပိုမိုမြင့်မားလာမည်ဖြစ်သည်။ အရင်းအမြစ် ဦးစားပေးနှင့် အရည်အသွေး ဦးစားပေး၏ ပေါင်းစုသည် ဗီဒီယို ဦးစားပေးဖြစ်သည်။ +\n +\nအရင်းအမြစ် A: 3 +\nအရည်အသွေး B: 7 +\nပေါင်းစပ်ဗီဒီယို ဦးစားပေး 10 ခု ရှိပါမည်။ +\n +\nမှတ်ချက်- ပေါင်းလဒ်သည် 10 သို့မဟုတ် ထို့ထက်ပိုပါက ထိုလင့်ခ်ကို တင်သည့်အခါ ဗီဒီယိုဖွင့်စက်သည် အလိုအလျောက် ဒေါင်းလုဒ်ကို ကျော်သွားမည်ဖြစ်သည် + ပရိုဖိုင်နောက်ခံ + UI ကို မှန်ကန်စွာ ဖန်တီး၍မရပါ၊ ၎င်းသည် အဓိက ချို့ယွင်းချက်တစ်ခုဖြစ်ပြီး ချက်ချင်းသတင်းပို့သင့်သည်။ %s + သင်နဂိုတည်းကသတ်မှတ်ပြီး + လိုက်ဘရီရွေးချယ်ရန် + ဖြင့်ဖွင့်မည် + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5f60ac14..c33bf107 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -573,5 +573,6 @@ Selecteer een modus om het downloaden van plug-ins te filteren Uitzetten De gebruikersinterface kon niet correct worden gemaakt, dit is een ERNSTIG PROBLEEM en moet onmiddellijk gerapporteerd worden %s - @string/default_subtitles - + \@string/default_subtitles + Je hebt al gestemd + \ 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 6db36065..38c56f0d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -553,4 +553,7 @@ Wybierz tryb filtrowania pobieranych rozszerzeń Wyłączać @string/default_subtitles - + Nie znaleziono żadnych wtyczek w repozytorium + Już oddano głos + Nie znaleziono tego repozytorium, sprawdź adres URL lub spróbuj połączyć się przez VPN + \ 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 b2504e84..75d1ddbc 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -552,4 +552,5 @@ Desativar Não foram encontrados plugins no repositório Repositório não encontrado, verifique o URL e tente a VPN - + Você já votou + \ 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 f763d795..cce4e7d3 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -248,4 +248,5 @@ aoaaaaaoooghhh oooooh uuaagh @string/home_play - + oouuhhh ahhooo-ahah + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2c5d4197..14b2334f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -80,14 +80,14 @@ Сюжет не знайдено Опис не знайдено Показати Logcat 🐈 - Продовження відтворення в мініатюрному плеєрі поверх інших застосунків + Продовжує відтворення в мініатюрному плеєрі поверх інших застосунків Прибирає чорні рамки Субтитри Субтитри Chromecast Налаштування субтитрів Chromecast Режим Eigengravy Проведіть пальцем, щоб змінити налаштування - Проведіть пальцем вгору або вниз, ліворуч або праворуч, щоб змінити яскравість чи гучність + Проведіть вгору або вниз з лівого або правого боку, щоб змінити яскравість чи гучність Відтворювати наступний епізод після закінчення поточного Головна CloudStream @@ -121,8 +121,8 @@ Колір тексту Колір контуру Автовідтворення наступного епізоду - Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео - %d Бананів для розробників + Проведіть з боку в бік, щоб керувати своїм положенням у відео + %d бананів для розробників Кнопка зміни розміру плеєра @string/home_play Для коректної роботи цього постачальника може знадобитися VPN @@ -133,7 +133,7 @@ Проведіть пальцем, щоб перемотати Двічі торкніться, щоб перемотати Двічі торкніться для паузи - Крок перемотки (Секунди) + Крок перемотки (секунди) Натисніть двічі посередині, щоб призупинити відтворення відео Використовувати яскравість системи Оновити прогрес перегляду @@ -150,8 +150,8 @@ Надає результати пошуку, розділені за постачальниками Надсилає дані лише про збої Не надсилає даних - Показати заповнюючий епізод для аніме - Показати трейлери + Показувати філери до аніме + Показувати трейлери Приховати вибрану якість відео в результатах пошуку Автоматичне завантаження плагінів Показувати оновлення застосунку @@ -214,12 +214,12 @@ Завантажити дзеркало Перевірити наявність оновлень Заблокувати - Пропустити OP + Пропускати OP Не показувати знову Оновити Бажана якість перегляду (WiFi) Заголовок - Перемикання елементів інтерфейсу на плакаті + Перемикання елементів інтерфейсу на постері Оновлення не знайдено Двічі торкніться праворуч або ліворуч, щоб перемотати відео вперед або назад Використовуйте системну яскравість у плеєрі замість темної накладки @@ -227,10 +227,10 @@ Торренти Автоматична синхронізація прогресу поточного епізоду Відсутні дозволи на зберігання. Будь ласка, спробуйте ще раз. - Показати постери від Kitsu + Показувати постери від Kitsu Автоматичне оновлення плагінів Автоматично встановлювати всі ще не встановлені плагіни з доданих репозиторіїв. - Автоматично шукати нові оновлення після запуску застосунку. + Автоматично шукає нові оновлення після запуску застосунку. Оновлення до бета-версій Посилання скопійовано в буфер обміну Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються. @@ -354,7 +354,7 @@ DNS через HTTPS Шлях завантаження Додайте клон існуючого сайту, з іншою URL-адресою - Відображати мітку Дубляж/Субтитри в аніме + Відображати мітку Дубляж/Субтитри до аніме Застереження Розширення Дії @@ -382,7 +382,7 @@ Підтримка Фон Blu-ray - Видалити закриті титри з субтитрів + Видаляти закриті титри з субтитрів DVD Недійсні дані Фільтрувати за бажаною мовою медіа @@ -400,7 +400,7 @@ HD TS TC - Видалити роздуття субтитрів + Видаляти роздуття субтитрів Referer Далі Дивіться відео на цих мовах @@ -451,8 +451,8 @@ Вбудований плеєр VLC MPV - Відтворення веб-відео - Веб-браузер + Web Video Cast + Веббраузер Ендінґ Коротке повторення Пропустити %s @@ -462,7 +462,7 @@ Вступ Очистити історію Історія - Показувати спливаючі вікна для опенінґу/ендінґу + Показує спливаюче вікно для пропуску опенінґу/ендінґу Забагато тексту. Не вдалося зберегти в буфер обміну. Позначити як переглянуте Ви впевнені що хочете вийти\? @@ -552,4 +552,5 @@ @string/default_subtitles Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії - + Ви вже проголосували + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 4b394227..f7abd6db 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -267,7 +267,7 @@ Cập nhật Chất lượng xem ưu tiên (WiFi) Kí tự tối đa trên tiêu đề - Độ phân giải trình phát video + Nội dung trình phát video Kích thước bộ nhớ đệm video Thời lượng bộ nhớ đệm Lưu bộ nhớ đệm video trên ổ cứng @@ -380,8 +380,8 @@ Web Ảnh áp phích Trình phát - Độ phân giải và Tiêu đề - Tiêu đề + Độ phân giải và Tên nguồn + Tên nguồn Độ phân giải Id không hợp lệ Lỗi dữ liệu @@ -561,4 +561,11 @@ \n \nLƯU Ý: Nếu tổng là 10 hoặc nhiều hơn, trình phát sẽ tự động bỏ tải khi liên kết đó được tải! Các phẩm chất - + Bạn đã bình chọn + Vô hiệu hoá + Không tìm thấy tiện ích, hãy kiểm tra URL và thử VPN + Không tìm thấy plugin + Không thể khởi tạo UI, đây là một LỖI LỚN và cần được báo cáo ngay lập tức tới %s + Chọn chế độ để lọc plugin tải xuống + \@string/default_subtitles + \ No newline at end of file diff --git a/fastlane/metadata/android/pt/changelogs/2.txt b/fastlane/metadata/android/pt/changelogs/2.txt new file mode 100644 index 00000000..1153e632 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/2.txt @@ -0,0 +1 @@ +- Adicionado o registo de alterações! diff --git a/fastlane/metadata/android/pt/full_description.txt b/fastlane/metadata/android/pt/full_description.txt new file mode 100644 index 00000000..48bf36ce --- /dev/null +++ b/fastlane/metadata/android/pt/full_description.txt @@ -0,0 +1,10 @@ +O CloudStream-3 permite-lhe transmitir e descarregar filmes, séries de TV e anime. + +A aplicação é fornecida sem quaisquer anúncios e análises e +suporta vários sites de trailers e filmes, e muito mais, por exemplo + +Marcadores + +Downloads de legendas + +Suporte para Chromecast diff --git a/fastlane/metadata/android/pt/short_description.txt b/fastlane/metadata/android/pt/short_description.txt new file mode 100644 index 00000000..d0392f34 --- /dev/null +++ b/fastlane/metadata/android/pt/short_description.txt @@ -0,0 +1 @@ +Transmita e transfira filmes, séries de TV e anime. diff --git a/fastlane/metadata/android/pt/title.txt b/fastlane/metadata/android/pt/title.txt new file mode 100644 index 00000000..dde89d58 --- /dev/null +++ b/fastlane/metadata/android/pt/title.txt @@ -0,0 +1 @@ +CloudStream diff --git a/fastlane/metadata/android/vi/changelogs/2.txt b/fastlane/metadata/android/vi/changelogs/2.txt new file mode 100644 index 00000000..e03e458e --- /dev/null +++ b/fastlane/metadata/android/vi/changelogs/2.txt @@ -0,0 +1 @@ +- Đã thêm Nhật ký thay đổi! diff --git a/fastlane/metadata/android/vi/full_description.txt b/fastlane/metadata/android/vi/full_description.txt new file mode 100644 index 00000000..90ea7ab7 --- /dev/null +++ b/fastlane/metadata/android/vi/full_description.txt @@ -0,0 +1,10 @@ +CloudStream-3 cho phép bạn xem và tải xuống phim lẻ, phim bộ và anime. + +Ứng dụng không có quảng cáo hay và phân tích nào, +đồng thời hỗ trợ nhiều trang web xem phim, v.v. + +Đánh dấu + +Tải phụ đề + +Hỗ trợ Chromecast diff --git a/fastlane/metadata/android/vi/short_description.txt b/fastlane/metadata/android/vi/short_description.txt new file mode 100644 index 00000000..e4e20bd5 --- /dev/null +++ b/fastlane/metadata/android/vi/short_description.txt @@ -0,0 +1 @@ +Xem và tải xuống phim lẻ, phim bộ và anime. diff --git a/fastlane/metadata/android/vi/title.txt b/fastlane/metadata/android/vi/title.txt new file mode 100644 index 00000000..dde89d58 --- /dev/null +++ b/fastlane/metadata/android/vi/title.txt @@ -0,0 +1 @@ +CloudStream From 6948bf807373d349844701c4e2eb7e3a438179e0 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Sat, 19 Aug 2023 19:38:45 +0000 Subject: [PATCH 503/888] chore(locales): fix locale issues --- .../lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 2 ++ app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fil/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 4 ++-- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-my/strings.xml | 6 +++--- app/src/main/res/values-nl/strings.xml | 4 ++-- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-qt/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 4 ++-- 16 files changed, 22 insertions(+), 20 deletions(-) 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 d76eba1e..2c81ad1f 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 @@ -69,6 +69,7 @@ val appLanguages = arrayListOf( Triple("", "Esperanto", "eo"), Triple("", "español", "es"), Triple("", "فارسی", "fa"), + Triple("", "fil", "fil"), Triple("", "français", "fr"), Triple("", "galego", "gl"), Triple("", "हिन्दी", "hi"), @@ -84,6 +85,7 @@ val appLanguages = arrayListOf( Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), Triple("", "bahasa Melayu", "ms"), + Triple("", "ဗမာစာ", "my"), Triple("", "Nederlands", "nl"), Triple("", "norsk nynorsk", "nn"), Triple("", "norsk bokmål", "no"), diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 987211a5..0c11f7e9 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -585,4 +585,4 @@ لا توجد اضافة في المستودع المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn) لقد صوتت بالفعل - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 2a3bdb27..425293e4 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -499,4 +499,4 @@ Atualizando shows inscritos Player oculto - Procure na barra de progresso Conteúdo +18 - \ 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 165dbbb4..46bd860d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -577,4 +577,4 @@ Repozitář nenalezen, zkontrolujte adresu URL a zkuste použít VPN @string/default_subtitles Již jste hlasovali - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6326211e..8e9f9c2c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -553,4 +553,4 @@ No se encontraron complementos en el repositorio Repositorio no encontrado, comprueba la URL y prueba la VPN Ya has votado - \ No newline at end of file + diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index a6b3daec..42eba3cc 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -1,2 +1,2 @@ - \ 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 4cc56207..208e6140 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -552,4 +552,4 @@ Qualités L\'interface utilisateur n\'a pas pu être créée correctement. Il s\'agit d\'un bogue majeur qui doit être signalé immédiatement %s Sélectionnez le mode pour filtrer le téléchargement des plugins - \ 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 87a01ff9..d514bcc4 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -575,5 +575,5 @@ Tidak ada plugin yang ditemukan di repositori Repositori tidak ditemukan, periksa URL dan coba VPN Kamu sudah voting - \@string/default_subtitles - \ No newline at end of file + @string/default_subtitles + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7cca78ca..0c34e89a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -575,4 +575,4 @@ @string/default_subtitles Disabilita Hai già votato - \ No newline at end of file + diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index cde13ba5..0cb44373 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -58,7 +58,7 @@ ဆက်လက်ကြည့်ရှုမည် ဖယ်ရှားရန် ပိုမို၍ - \@string/home_play + @string/home_play ဒီဟာကတောရပ်တစ်ခုပါ ဗီပီအန်တစ်ခုသုံးဖို့အကြံပြုပါတယ် ဖော်ပြချက် ဇာတ်လမ်းသွား မတွေ့ပါ @@ -128,7 +128,7 @@ နောက်အစီအစဥ် စာတန်းထိုးမထည့် ပုံသေ - \@string/default_subtitles + @string/default_subtitles ကျန်ရှိသော အက်ပ် ရုပ်ရှင်များ @@ -553,4 +553,4 @@ သင်နဂိုတည်းကသတ်မှတ်ပြီး လိုက်ဘရီရွေးချယ်ရန် ဖြင့်ဖွင့်မည် - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c33bf107..d19726fd 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -573,6 +573,6 @@ Selecteer een modus om het downloaden van plug-ins te filteren Uitzetten De gebruikersinterface kon niet correct worden gemaakt, dit is een ERNSTIG PROBLEEM en moet onmiddellijk gerapporteerd worden %s - \@string/default_subtitles + @string/default_subtitles Je hebt al gestemd - \ 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 38c56f0d..a170d610 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -556,4 +556,4 @@ Nie znaleziono żadnych wtyczek w repozytorium Już oddano głos Nie znaleziono tego repozytorium, sprawdź adres URL lub spróbuj połączyć się przez VPN - \ 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 75d1ddbc..908ddb0d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -553,4 +553,4 @@ Não foram encontrados plugins no repositório Repositório não encontrado, verifique o URL e tente a VPN Você já votou - \ 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 cce4e7d3..9c68c008 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -249,4 +249,4 @@ oooooh uuaagh @string/home_play oouuhhh ahhooo-ahah - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 14b2334f..e0db1c0e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -553,4 +553,4 @@ Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index f7abd6db..217d2791 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -567,5 +567,5 @@ Không tìm thấy plugin Không thể khởi tạo UI, đây là một LỖI LỚN và cần được báo cáo ngay lập tức tới %s Chọn chế độ để lọc plugin tải xuống - \@string/default_subtitles - \ No newline at end of file + @string/default_subtitles + From a3009af4f585c010cd5018037123fefd644f8921 Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Sat, 19 Aug 2023 19:48:10 +0000 Subject: [PATCH 504/888] Add Native Crash Handler (#565) * Add NativeCrashHandler * Safer init --- app/CMakeLists.txt | 6 +++ app/build.gradle.kts | 6 +++ app/src/main/cpp/native-lib.cpp | 28 ++++++++++++ .../lagradost/cloudstream3/AcraApplication.kt | 1 + .../cloudstream3/NativeCrashHandler.kt | 44 +++++++++++++++++++ 5 files changed, 85 insertions(+) create mode 100644 app/CMakeLists.txt create mode 100644 app/src/main/cpp/native-lib.cpp create mode 100644 app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 00000000..7f7fd14c --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,6 @@ +# Set this to the minimum version your project supports. +cmake_minimum_required(VERSION 3.18) +project(CrashHandler) +find_library(log-lib log) +add_library(native-lib SHARED src/main/cpp/native-lib.cpp) +target_link_libraries(native-lib ${log-lib}) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 708a2083..d6515289 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -32,6 +32,12 @@ android { enable = true } + externalNativeBuild { + cmake { + path("CMakeLists.txt") + } + } + signingConfigs { create("prerelease") { if (prereleaseStoreFile != null) { diff --git a/app/src/main/cpp/native-lib.cpp b/app/src/main/cpp/native-lib.cpp new file mode 100644 index 00000000..f4cb531f --- /dev/null +++ b/app/src/main/cpp/native-lib.cpp @@ -0,0 +1,28 @@ +#include +#include +#include + +#define TAG "CloudStream Crash Handler" +volatile sig_atomic_t gSignalStatus = 0; +void handleNativeCrash(int signal) { + gSignalStatus = signal; +} + +extern "C" JNIEXPORT void JNICALL +Java_com_lagradost_cloudstream3_NativeCrashHandler_initNativeCrashHandler(JNIEnv *env, jobject) { + #define REGISTER_SIGNAL(X) signal(X, handleNativeCrash); + REGISTER_SIGNAL(SIGSEGV) + #undef REGISTER_SIGNAL +} + +//extern "C" JNIEXPORT void JNICALL +//Java_com_lagradost_cloudstream3_NativeCrashHandler_triggerNativeCrash(JNIEnv *env, jobject thiz) { +// int *p = nullptr; +// *p = 0; +//} + +extern "C" JNIEXPORT int JNICALL +Java_com_lagradost_cloudstream3_NativeCrashHandler_getSignalStatus(JNIEnv *env, jobject) { + //__android_log_print(ANDROID_LOG_INFO, TAG, "Got signal status %d", gSignalStatus); + return gSignalStatus; +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 61d467c4..32702657 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -106,6 +106,7 @@ class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)) : class AcraApplication : Application() { override fun onCreate() { super.onCreate() + NativeCrashHandler.initCrashHandler() Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")) { val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) startActivity(Intent.makeRestartActivityTask(intent!!.component)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt new file mode 100644 index 00000000..e5cb2702 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt @@ -0,0 +1,44 @@ +package com.lagradost.cloudstream3 + +import com.lagradost.cloudstream3.MainActivity.Companion.lastError +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.plugins.PluginManager.checkSafeModeFile +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +object NativeCrashHandler { + // external fun triggerNativeCrash() + private external fun initNativeCrashHandler() + private external fun getSignalStatus(): Int + + private fun initSignalPolling() = CoroutineScope(Dispatchers.IO).launch { + while (true) { + delay(10_000) + val signal = getSignalStatus() + // Signal is initialized to zero + if (signal == 0) continue + + // Do not crash in safe mode! + if (lastError != null) continue + if (checkSafeModeFile()) continue + + throw RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n") + } + } + + fun initCrashHandler() { + try { + System.loadLibrary("native-lib") + initNativeCrashHandler() + } catch (t: Throwable) { + // Make debug crash. + if (BuildConfig.DEBUG) throw t + logError(t) + return + } + + initSignalPolling() + } +} \ No newline at end of file From c4852ce440736105d32a18f1774ee65dead98808 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 20 Aug 2023 01:29:50 +0200 Subject: [PATCH 505/888] made HSL downloader even faster --- .../cloudstream3/utils/M3u8Helper.kt | 5 + .../utils/VideoDownloadManager.kt | 215 +++++++++++------- 2 files changed, 132 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 5c0b45de..11dfa441 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.utils import com.lagradost.cloudstream3.ErrorLoadingException import com.lagradost.cloudstream3.app +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.delay import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec @@ -196,6 +197,8 @@ object M3u8Helper2 { return if(condition()) out else null } catch (e: IllegalArgumentException) { return null + } catch (e : CancellationException) { + return null } catch (t: Throwable) { delay(failDelay) } @@ -213,6 +216,8 @@ object M3u8Helper2 { return resolveLink(index) } catch (e: IllegalArgumentException) { return null + } catch (e : CancellationException) { + return null } catch (t: Throwable) { delay(failDelay) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index d8ef7e85..89094f3f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -43,6 +43,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.isActive @@ -1083,6 +1084,39 @@ object VideoDownloadManager { ) } + /** Helper function to make sure duplicate attributes don't get overriden or inserted without lowercase cmp + * example: map("a" to 1) appendAndDontOverride map("A" to 2, "a" to 3, "c" to 4) = map("a" to 1, "c" to 4) + * */ + private fun Map.appendAndDontOverride(rhs: Map): Map { + val out = this.toMutableMap() + val current = this.keys.map { it.lowercase() } + for ((key, value) in rhs) { + if (current.contains(key.lowercase())) continue + out[key] = value + } + return out + } + + private fun List.cancel() { + forEach { job -> + try { + job.cancel() + } catch (t: Throwable) { + logError(t) + } + } + } + + private suspend fun List.join() { + forEach { job -> + try { + job.join() + } catch (t: Throwable) { + logError(t) + } + } + } + @Throws suspend fun downloadThing( context: Context, @@ -1166,8 +1200,9 @@ object VideoDownloadManager { hashMapOf() val jobs = (0 until parallelConnections).map { - launch { + launch(Dispatchers.IO) { + // @downloadexplanation // this may seem a bit complex but it more or less acts as a queue system // imagine we do the downloading [0,3] and it response in the order 0,2,3,1 // file: [_,_,_,_] queue: [_,_,_,_] Initial condition @@ -1177,6 +1212,10 @@ object VideoDownloadManager { // file: [X,X,_,_] queue: [_,_,X,X] + added 1 directly to file // file: [X,X,X,X] queue: [_,_,_,_] write the queue and remove from it + // note that this is a bit more complex compared to hsl as ever segment + // will return several bytearrays, and is therefore chained by the byte + // so every request has a front and back byte instead of an index + // this *requires* that no gap exist due because of resolve val callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit) = callback@{ response -> if (!isActive) return@callback @@ -1228,10 +1267,11 @@ object VideoDownloadManager { while (true) { if (!isActive) return@launch fileMutex.withLock { - if (metadata.type == DownloadType.IsStopped) return@launch + if (metadata.type == DownloadType.IsStopped + || metadata.type == DownloadType.IsFailed) return@launch } - // just in case, we never want this to fail due to multithreading + // mutex just in case, we never want this to fail due to multithreading val index = currentMutex.withLock { if (!current.hasNext()) return@launch current.nextInt() @@ -1253,68 +1293,14 @@ object VideoDownloadManager { // fast stop as the jobs may be in a slow request metadata.setOnStop { - jobs.forEach { job -> - try { - job.cancel() - } catch (t: Throwable) { - logError(t) - } - } + jobs.cancel() } - jobs.forEach { it.join() } + jobs.join() // jobs are finished so we don't want to stop them anymore metadata.removeStopListener() - // set up a connection - //val request = app.get( - // link.url.replace(" ", "%20"), - // headers = link.headers.appendAndDontOverride( - // mapOf( - // "Accept-Encoding" to "identity", - // "accept" to "*/*", - // "user-agent" to USER_AGENT, - // "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", - // "sec-fetch-mode" to "navigate", - // "sec-fetch-dest" to "video", - // "sec-fetch-user" to "?1", - // "sec-ch-ua-mobile" to "?0", - // ) + if (resumeAt > 0) mapOf("Range" to "bytes=${resumeAt}-") else emptyMap() - // ), - // referer = link.referer, - // verify = false - //) - - // init variables - //val contentLength = request.size ?: 0 - //metadata.totalBytes = contentLength + resumeAt - //// save - //metadata.setDownloadFileInfoTemplate( - // DownloadedFileInfo( - // totalBytes = metadata.approxTotalBytes, - // relativePath = relativePath ?: "", - // displayName = displayName, - // basePath = basePath - // ) - //) - //// total length is less than 5mb, that is too short and something has gone wrong - //if (extension == "mp4" && metadata.approxTotalBytes < 5000000) return@withContext ERROR_TOO_SMALL_CONNECTION - //// read the buffer into the filestream, this is equivalent of transferTo - //requestStream = request.body.byteStream() - //metadata.type = DownloadType.IsDownloading - //val buffer = ByteArray(DEFAULT_BUFFER_SIZE) - //var read: Int - //while (requestStream.read(buffer, 0, DEFAULT_BUFFER_SIZE).also { read = it } >= 0) { - // fileStream.write(buffer, 0, read) - // // wait until not paused - // while (metadata.type == DownloadType.IsPaused) delay(100) - // // if stopped then break to delete - // if (metadata.type == DownloadType.IsStopped) break - // metadata.addBytes(read.toLong()) - //} - - if (metadata.type == DownloadType.IsFailed) { return@withContext ERROR_CONNECTION_ERROR } @@ -1342,7 +1328,6 @@ object VideoDownloadManager { // note that when failing we don't want to delete the file, // only user interaction has that power - metadata.removeStopListener() metadata.type = DownloadType.IsFailed return@withContext ERROR_CONNECTION_ERROR } finally { @@ -1352,19 +1337,6 @@ object VideoDownloadManager { } } - /** Helper function to make sure duplicate attributes don't get overriden or inserted without lowercase cmp - * example: map("a" to 1) appendAndDontOverride map("A" to 2, "a" to 3, "c" to 4) = map("a" to 1, "c" to 4) - * */ - private fun Map.appendAndDontOverride(rhs: Map): Map { - val out = this.toMutableMap() - val current = this.keys.map { it.lowercase() } - for ((key, value) in rhs) { - if (current.contains(key.lowercase())) continue - out[key] = value - } - return out - } - @Throws private suspend fun downloadHLS( context: Context, @@ -1429,28 +1401,95 @@ object VideoDownloadManager { metadata.hlsTotal = items.size metadata.type = DownloadType.IsDownloading + + val currentMutex = Mutex() + val current = (0 until items.size).iterator() + + val fileMutex = Mutex() + val pendingData: HashMap = hashMapOf() + + // see @downloadexplanation for explanation of this download strategy, + // this keeps all jobs working at all times, // does several connections in parallel instead of a regular for loop to improve // download speed - (startAt until items.size).chunked(parallelConnections).forEach { subset -> - // wait until not paused - while (metadata.type == DownloadType.IsPaused) delay(100) - // if stopped then break to delete - if (metadata.type == DownloadType.IsStopped) return@forEach + val jobs = (0 until parallelConnections).map { + launch(Dispatchers.IO) { + while (true) { + if (!isActive) return@launch + fileMutex.withLock { + if (metadata.type == DownloadType.IsStopped + || metadata.type == DownloadType.IsFailed + ) return@launch + } - subset.amap { idx -> - idx to items.resolveLinkSafe(idx)?.also { bytes -> - metadata.addSegment(bytes.size.toLong()) + // mutex just in case, we never want this to fail due to multithreading + val index = currentMutex.withLock { + if (!current.hasNext()) return@launch + current.nextInt() + } + + // in case something has gone wrong set to failed if the fail is not caused by + // user cancellation + val bytes = items.resolveLinkSafe(index) ?: run { + fileMutex.withLock { + if (metadata.type != DownloadType.IsStopped) { + metadata.type = DownloadType.IsFailed + } + } + return@launch + } + + try { + fileMutex.lock() + // user pause + while (metadata.type == DownloadType.IsPaused) delay(100) + // if stopped then break to delete + if (metadata.type == DownloadType.IsStopped || !isActive) return@launch + + // send notification, no matter the actual write order + metadata.addSegment(bytes.size.toLong()) + + // directly write the bytes if you are first + if (metadata.hlsWrittenProgress == index) { + fileStream.write(bytes) + metadata.setWrittenSegment(index) + } else { + // no need to clone as there will be no modification of this bytearray + pendingData[index] = bytes + } + + // write the cached bytes submitted by other threads + while (true) { + fileStream.write( + pendingData.remove(metadata.hlsWrittenProgress) ?: break + ) + metadata.setWrittenSegment(metadata.hlsWrittenProgress) + } + } catch (t : Throwable) { + // this is in case of write fail + if (metadata.type != DownloadType.IsStopped) { + metadata.type = DownloadType.IsFailed + } + } finally { + fileMutex.unlock() + } } - }.forEach { (idx, bytes) -> - if (bytes == null) { - metadata.type = DownloadType.IsFailed - return@withContext ERROR_CONNECTION_ERROR - } - fileStream.write(bytes) - metadata.setWrittenSegment(idx) } } + // fast stop as the jobs may be in a slow request + metadata.setOnStop { + jobs.cancel() + } + + jobs.join() + + metadata.removeStopListener() + + if (metadata.type == DownloadType.IsFailed) { + return@withContext ERROR_CONNECTION_ERROR + } + if (metadata.type == DownloadType.IsStopped) { // we need to close before delete fileStream.closeQuietly() From 4e28e5f8cc4d811184799cb3aa024665cc0aee3d Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 20 Aug 2023 03:58:31 +0200 Subject: [PATCH 506/888] fixed not downloading the last 20MiB on mp4 downloader + bump + mb/s notification --- app/build.gradle.kts | 2 +- .../utils/VideoDownloadManager.kt | 79 ++++++++++++++----- 2 files changed, 60 insertions(+), 21 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d6515289..50125aa3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -58,7 +58,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.1.5" + versionName = "4.1.6" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 89094f3f..507abc34 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -30,7 +30,6 @@ import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall @@ -256,7 +255,8 @@ object VideoDownloadManager { total: Long, notificationCallback: (Int, Notification) -> Unit, hlsProgress: Long? = null, - hlsTotal: Long? = null + hlsTotal: Long? = null, + bytesPerSecond: Long ): Notification? { try { if (total <= 0) return null// crash, invalid data @@ -327,22 +327,29 @@ object VideoDownloadManager { val totalMbString: String val suffix: String + val mbFormat = "%.1f MB" + if (hlsProgress != null && hlsTotal != null) { progressPercentage = hlsProgress.toLong() * 100 / hlsTotal progressMbString = hlsProgress.toString() totalMbString = hlsTotal.toString() - suffix = " - %.1f MB".format(progress / 1000000f) + suffix = " - $mbFormat".format(progress / 1000000f) } else { progressPercentage = progress * 100 / total - progressMbString = "%.1f MB".format(progress / 1000000f) - totalMbString = "%.1f MB".format(total / 1000000f) + progressMbString = mbFormat.format(progress / 1000000f) + totalMbString = mbFormat.format(total / 1000000f) suffix = "" } + val mbPerSecondString = + if (state == DownloadType.IsDownloading) { + " ($mbFormat/s)".format(bytesPerSecond.toFloat() / 1000000f) + } else "" + val bigText = when (state) { DownloadType.IsDownloading, DownloadType.IsPaused -> { - (if (linkName == null) "" else "$linkName\n") + "$rowTwo\n$progressPercentage % ($progressMbString/$totalMbString)$suffix" + (if (linkName == null) "" else "$linkName\n") + "$rowTwo\n$progressPercentage % ($progressMbString/$totalMbString)$suffix$mbPerSecondString" } DownloadType.IsFailed -> { @@ -608,6 +615,7 @@ object VideoDownloadManager { val bytesTotal: Long, val hlsProgress: Long? = null, val hlsTotal: Long? = null, + val bytesPerSecond: Long ) data class StreamData( @@ -723,6 +731,7 @@ object VideoDownloadManager { // notification metadata private var lastUpdatedMs: Long = 0, + private var lastDownloadedBytes: Long = 0, private val createNotificationCallback: (CreateNotificationMetadata) -> Unit, private var internalType: DownloadType = DownloadType.IsPending, @@ -738,6 +747,12 @@ object VideoDownloadManager { // this is used for copy with metadata on how much we have downloaded for setKey private var downloadFileInfoTemplate: DownloadedFileInfo? = null ) : Closeable { + fun setResumeLength(length: Long) { + bytesDownloaded = length + bytesWritten = length + lastDownloadedBytes = length + } + val approxTotalBytes: Long get() = totalBytes ?: hlsTotal?.let { total -> (bytesDownloaded * (total / hlsProgress.toFloat())).toLong() @@ -839,6 +854,13 @@ object VideoDownloadManager { @JvmName("DownloadMetaDataNotify") private fun notify() { + // max 10 sec between notifications, min 0.1s, this is to stop div by zero + val dt = (System.currentTimeMillis() - lastUpdatedMs).coerceIn(100, 10000) + + val bytesPerSecond = + ((bytesDownloaded - lastDownloadedBytes) * 1000L) / dt + + lastDownloadedBytes = bytesDownloaded lastUpdatedMs = System.currentTimeMillis() try { val bytes = approxTotalBytes @@ -851,7 +873,8 @@ object VideoDownloadManager { bytesDownloaded, bytes, hlsTotal = hlsTotal?.toLong(), - hlsProgress = hlsProgress.toLong() + hlsProgress = hlsProgress.toLong(), + bytesPerSecond = bytesPerSecond ) ) } else { @@ -860,6 +883,7 @@ object VideoDownloadManager { internalType, bytesDownloaded, bytes, + bytesPerSecond = bytesPerSecond ) ) } @@ -1057,21 +1081,29 @@ object VideoDownloadManager { // we don't want to make a separate connection for every 1kb require(chuckSize > 1000) - val contentLength = + var contentLength = app.head(url = url, headers = headers, referer = referer, verify = false).size + if (contentLength != null && contentLength <= 0) contentLength = null var downloadLength: Long? = null var totalLength: Long? = null val ranges = if (contentLength == null) { + // is the equivalent of [startByte..EOF] as we don't know the size we can only do one + // connection LongArray(1) { startByte } } else { downloadLength = contentLength - startByte totalLength = contentLength - LongArray((downloadLength / chuckSize).toInt()) { idx -> + // div with ceiling as + // this makes the last part "unknown ending" and it will break at EOF + // so eg startByte = 0, downloadLength = 13, chuckSize = 10 + // = LongArray(2) { 0, 10 } = [0,10) + [10..EOF] + LongArray(((downloadLength + chuckSize - 1) / chuckSize).toInt()) { idx -> startByte + idx * chuckSize } } + return LazyStreamDownloadData( url = url, headers = headers, @@ -1158,8 +1190,7 @@ object VideoDownloadManager { val resume = stream.resume ?: return@withContext ERROR_UNKNOWN val fileLength = stream.fileLength ?: return@withContext ERROR_UNKNOWN val resumeAt = (if (resume) fileLength else 0) - metadata.bytesDownloaded = resumeAt - metadata.bytesWritten = resumeAt + metadata.setResumeLength(resumeAt) metadata.type = DownloadType.IsPending val items = streamLazy( @@ -1268,7 +1299,8 @@ object VideoDownloadManager { if (!isActive) return@launch fileMutex.withLock { if (metadata.type == DownloadType.IsStopped - || metadata.type == DownloadType.IsFailed) return@launch + || metadata.type == DownloadType.IsFailed + ) return@launch } // mutex just in case, we never want this to fail due to multithreading @@ -1374,7 +1406,7 @@ object VideoDownloadManager { fileStream = stream.fileStream ?: return@withContext ERROR_UNKNOWN // push the metadata - metadata.bytesDownloaded = stream.fileLength ?: 0 + metadata.setResumeLength(stream.fileLength ?: 0) metadata.hlsProgress = startAt metadata.type = DownloadType.IsPending metadata.setDownloadFileInfoTemplate( @@ -1446,12 +1478,15 @@ object VideoDownloadManager { // if stopped then break to delete if (metadata.type == DownloadType.IsStopped || !isActive) return@launch + val segmentLength = bytes.size.toLong() // send notification, no matter the actual write order - metadata.addSegment(bytes.size.toLong()) + metadata.addSegment(segmentLength) // directly write the bytes if you are first if (metadata.hlsWrittenProgress == index) { fileStream.write(bytes) + + metadata.addBytesWritten(segmentLength) metadata.setWrittenSegment(index) } else { // no need to clone as there will be no modification of this bytearray @@ -1460,12 +1495,14 @@ object VideoDownloadManager { // write the cached bytes submitted by other threads while (true) { - fileStream.write( - pendingData.remove(metadata.hlsWrittenProgress) ?: break - ) + val cache = pendingData.remove(metadata.hlsWrittenProgress) ?: break + val cacheLength = cache.size.toLong() + + fileStream.write(cache) + metadata.addBytesWritten(cacheLength) metadata.setWrittenSegment(metadata.hlsWrittenProgress) } - } catch (t : Throwable) { + } catch (t: Throwable) { // this is in case of write fail if (metadata.type != DownloadType.IsStopped) { metadata.type = DownloadType.IsFailed @@ -1756,7 +1793,8 @@ object VideoDownloadManager { meta.bytesTotal, notificationCallback, meta.hlsProgress, - meta.hlsTotal + meta.hlsTotal, + meta.bytesPerSecond ) } } @@ -1785,7 +1823,8 @@ object VideoDownloadManager { meta.type, meta.bytesDownloaded, meta.bytesTotal, - notificationCallback + notificationCallback, + bytesPerSecond = meta.bytesPerSecond ) } }) From afcbdeecc86151081aa8a135b3c5900bf1ec8c7e Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Tue, 22 Aug 2023 04:00:05 +0200 Subject: [PATCH 507/888] changes to downloader for stable resume --- .../cloudstream3/ui/player/GeneratorPlayer.kt | 6 +- .../ui/settings/SettingsUpdates.kt | 11 +- .../utils/DownloadFileWorkManager.kt | 22 +- .../utils/VideoDownloadManager.kt | 532 ++++++------------ 4 files changed, 191 insertions(+), 380 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e0d50cc3..9e601fc7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -520,10 +520,10 @@ class GeneratorPlayer : FullScreenPlayer() { if (uri == null) return@normalSafeApiCall val ctx = context ?: AcraApplication.context ?: return@normalSafeApiCall // RW perms for the path - val flags = + ctx.contentResolver.takePersistableUriPermission( + uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION - - ctx.contentResolver.takePersistableUriPermission(uri, flags) + ) val file = UniFile.fromUri(ctx, uri) println("Loaded subtitle file. Selected URI path: $uri - Name: ${file.name}") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index c304629a..62e46c08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -116,13 +116,14 @@ class SettingsUpdates : PreferenceFragmentCompat() { null, "txt", false - ).fileStream - fileStream?.writer()?.write(text) - } catch (e: Exception) { - logError(e) + ).openNew() + fileStream.writer().write(text) + dialog.dismissSafe(activity) + } catch (t: Throwable) { + logError(t) + showToast(t.message) } finally { fileStream?.closeQuietly() - dialog.dismissSafe(activity) } } binding.closeBtt.setOnClickListener { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt index aa424c08..421e4420 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt @@ -16,6 +16,7 @@ import com.lagradost.cloudstream3.utils.VideoDownloadManager.downloadCheck import com.lagradost.cloudstream3.utils.VideoDownloadManager.downloadEpisode import com.lagradost.cloudstream3.utils.VideoDownloadManager.downloadFromResume import com.lagradost.cloudstream3.utils.VideoDownloadManager.downloadStatusEvent +import com.lagradost.cloudstream3.utils.VideoDownloadManager.getDownloadResumePackage import kotlinx.coroutines.delay const val DOWNLOAD_CHECK = "DownloadCheck" @@ -36,15 +37,20 @@ class DownloadFileWorkManager(val context: Context, private val workerParams: Wo WORK_KEY_PACKAGE, key ) + if (info != null) { - downloadEpisode( - applicationContext, - info.source, - info.folder, - info.ep, - info.links, - ::handleNotification - ) + getDownloadResumePackage(applicationContext, info.ep.id)?.let { dpkg -> + downloadFromResume(applicationContext, dpkg, ::handleNotification) + } ?: run { + downloadEpisode( + applicationContext, + info.source, + info.folder, + info.ep, + info.links, + ::handleNotification + ) + } } else if (pkg != null) { downloadFromResume(applicationContext, pkg, ::handleNotification) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 507abc34..a81e4b3a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -9,9 +9,7 @@ import android.graphics.Bitmap import android.net.Uri import android.os.Build import android.os.Environment -import android.provider.MediaStore import androidx.annotation.DrawableRes -import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.net.toUri @@ -32,6 +30,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.services.VideoDownloadService import com.lagradost.cloudstream3.utils.Coroutines.ioSafe @@ -44,6 +43,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch @@ -301,6 +301,8 @@ object VideoDownloadManager { if (state == DownloadType.IsDownloading || state == DownloadType.IsPaused) { builder.setProgress((total / 1000).toInt(), (progress / 1000).toInt(), false) + } else if (state == DownloadType.IsPending) { + builder.setProgress(0,0,true) } val rowTwoExtra = if (ep.name != null) " - ${ep.name}\n" else "" @@ -352,6 +354,10 @@ object VideoDownloadManager { (if (linkName == null) "" else "$linkName\n") + "$rowTwo\n$progressPercentage % ($progressMbString/$totalMbString)$suffix$mbPerSecondString" } + DownloadType.IsPending -> { + (if (linkName == null) "" else "$linkName\n") + rowTwo + } + DownloadType.IsFailed -> { downloadFormat.format( context.getString(R.string.download_failed), @@ -363,7 +369,7 @@ object VideoDownloadManager { downloadFormat.format(context.getString(R.string.download_done), rowTwo) } - else -> { + DownloadType.IsStopped -> { downloadFormat.format( context.getString(R.string.download_canceled), rowTwo @@ -377,7 +383,7 @@ object VideoDownloadManager { } else { val txt = when (state) { - DownloadType.IsDownloading, DownloadType.IsPaused -> { + DownloadType.IsDownloading, DownloadType.IsPaused, DownloadType.IsPending -> { rowTwo } @@ -392,7 +398,7 @@ object VideoDownloadManager { downloadFormat.format(context.getString(R.string.download_done), rowTwo) } - else -> { + DownloadType.IsStopped -> { downloadFormat.format( context.getString(R.string.download_canceled), rowTwo @@ -480,54 +486,6 @@ object VideoDownloadManager { return tempName.replace(" ", " ").trim(' ') } - @RequiresApi(Build.VERSION_CODES.Q) - private fun ContentResolver.getExistingFolderStartName(relativePath: String): List>? { - try { - val projection = arrayOf( - MediaStore.MediaColumns._ID, - MediaStore.MediaColumns.DISPLAY_NAME, // unused (for verification use only) - //MediaStore.MediaColumns.RELATIVE_PATH, // unused (for verification use only) - ) - - val selection = - "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath'" - - val result = this.query( - MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), - projection, selection, null, null - ) - val list = ArrayList>() - - result.use { c -> - if (c != null && c.count >= 1) { - c.moveToFirst() - while (true) { - val id = c.getLong(c.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) - val name = - c.getString(c.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)) - val uri = ContentUris.withAppendedId( - MediaStore.Downloads.EXTERNAL_CONTENT_URI, id - ) - list.add(Pair(name, uri)) - if (c.isLast) { - break - } - c.moveToNext() - } - - /* - val cDisplayName = c.getString(c.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)) - val cRelativePath = c.getString(c.getColumnIndexOrThrow(MediaStore.MediaColumns.RELATIVE_PATH))*/ - - } - } - return list - } catch (e: Exception) { - logError(e) - return null - } - } - /** * Used for getting video player subs. * @return List of pairs for the files in this format: @@ -538,76 +496,12 @@ object VideoDownloadManager { basePath: String? ): List>? { val base = basePathToFile(context, basePath) - val folder = base?.gotoDir(relativePath, false) + val folder = base?.gotoDir(relativePath, false) ?: return null + if (!folder.isDirectory) return null - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && base.isDownloadDir()) { - return context.contentResolver?.getExistingFolderStartName(relativePath) - } else { -// val normalPath = -// "${Environment.getExternalStorageDirectory()}${File.separatorChar}${relativePath}".replace( -// '/', -// File.separatorChar -// ) -// val folder = File(normalPath) - if (folder?.isDirectory == true) { - return folder.listFiles()?.map { Pair(it.name ?: "", it.uri) } - } - } - return null -// } + return folder.listFiles()?.map { (it.name ?: "") to it.uri } } - @RequiresApi(Build.VERSION_CODES.Q) - private fun ContentResolver.getExistingDownloadUriOrNullQ( - relativePath: String, - displayName: String - ): Uri? { - try { - val projection = arrayOf( - MediaStore.MediaColumns._ID, - //MediaStore.MediaColumns.DISPLAY_NAME, // unused (for verification use only) - //MediaStore.MediaColumns.RELATIVE_PATH, // unused (for verification use only) - ) - - val selection = - "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath' AND " + "${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'" - - val result = this.query( - MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), - projection, selection, null, null - ) - - result.use { c -> - if (c != null && c.count >= 1) { - c.moveToFirst().let { - val id = c.getLong(c.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) - /* - val cDisplayName = c.getString(c.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)) - val cRelativePath = c.getString(c.getColumnIndexOrThrow(MediaStore.MediaColumns.RELATIVE_PATH))*/ - - return ContentUris.withAppendedId( - MediaStore.Downloads.EXTERNAL_CONTENT_URI, id - ) - } - } - } - return null - } catch (e: Exception) { - logError(e) - return null - } - } - - @RequiresApi(Build.VERSION_CODES.Q) - fun ContentResolver.getFileLength(fileUri: Uri): Long? { - return try { - this.openFileDescriptor(fileUri, "r") - .use { it?.statSize ?: 0 } - } catch (e: Exception) { - logError(e) - null - } - } data class CreateNotificationMetadata( val type: DownloadType, @@ -619,16 +513,39 @@ object VideoDownloadManager { ) data class StreamData( - val errorCode: Int, - val resume: Boolean? = null, - val fileLength: Long? = null, - val fileStream: OutputStream? = null, - ) + private val fileLength: Long, + val file: UniFile, + //val fileStream: OutputStream, + ) { + fun open() : OutputStream { + return file.openOutputStream(resume) + } + + fun openNew() : OutputStream { + return file.openOutputStream(false) + } + + val resume: Boolean get() = fileLength > 0L + val startAt: Long get() = if (resume) fileLength else 0L + val exists: Boolean get() = file.exists() + } + + + //class ADownloadException(val id: Int) : RuntimeException(message = "Download error $id") + + fun UniFile.createFileOrThrow(displayName: String): UniFile { + return this.createFile(displayName) ?: throw IOException("Could not create file") + } + + fun UniFile.deleteOrThrow() { + if (!this.delete()) throw IOException("Could not delete file") + } /** * Sets up the appropriate file and creates a data stream from the file. * Used for initializing downloads. * */ + @Throws(IOException::class) fun setupStream( context: Context, name: String, @@ -637,88 +554,24 @@ object VideoDownloadManager { tryResume: Boolean, ): StreamData { val displayName = getDisplayName(name, extension) - val fileStream: OutputStream - val fileLength: Long - var resume = tryResume - val baseFile = context.getBasePath() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && baseFile.first?.isDownloadDir() == true) { - val cr = context.contentResolver ?: return StreamData(ERROR_CONTENT_RESOLVER_NOT_FOUND) + val (baseFile, _) = context.getBasePath() - val currentExistingFile = - cr.getExistingDownloadUriOrNullQ( - folder ?: "", - displayName - ) // CURRENT FILE WITH THE SAME PATH + val subDir = baseFile?.gotoDir(folder) ?: throw IOException() + val foundFile = subDir.findFile(displayName) - fileLength = - if (currentExistingFile == null || !resume) 0 else (cr.getFileLength( - currentExistingFile - ) - ?: 0)// IF NOT RESUME THEN 0, OTHERWISE THE CURRENT FILE SIZE - - if (!resume && currentExistingFile != null) { // DELETE FILE IF FILE EXITS AND NOT RESUME - val rowsDeleted = context.contentResolver.delete(currentExistingFile, null, null) - if (rowsDeleted < 1) { - println("ERROR DELETING FILE!!!") - } - } - - var appendFile = false - val newFileUri = if (resume && currentExistingFile != null) { - appendFile = true - currentExistingFile - } else { - val contentUri = - MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) // USE INSTEAD OF MediaStore.Downloads.EXTERNAL_CONTENT_URI - //val currentMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) - val currentMimeType = when (extension) { - - // Absolutely ridiculous, if text/vtt is used as mimetype scoped storage prevents - // downloading to /Downloads yet it works with null - - "vtt" -> null // "text/vtt" - "mp4" -> "video/mp4" - "srt" -> null // "application/x-subrip"//"text/plain" - else -> null - } - val newFile = ContentValues().apply { - put(MediaStore.MediaColumns.DISPLAY_NAME, displayName) - put(MediaStore.MediaColumns.TITLE, name) - if (currentMimeType != null) - put(MediaStore.MediaColumns.MIME_TYPE, currentMimeType) - put(MediaStore.MediaColumns.RELATIVE_PATH, folder) - } - - cr.insert( - contentUri, - newFile - ) ?: return StreamData(ERROR_CONTENT_RESOLVER_NOT_FOUND) - } - - fileStream = cr.openOutputStream(newFileUri, "w" + (if (appendFile) "a" else "")) - ?: return StreamData(ERROR_CONTENT_RESOLVER_NOT_FOUND) + val (file, fileLength) = if (foundFile == null || !foundFile.exists()) { + subDir.createFileOrThrow(displayName) to 0L } else { - val subDir = baseFile.first?.gotoDir(folder) - val rFile = subDir?.findFile(displayName) - if (rFile?.exists() != true) { - fileLength = 0 - if (subDir?.createFile(displayName) == null) return StreamData(ERROR_CREATE_FILE) + if (tryResume) { + foundFile to foundFile.size() } else { - if (resume) { - fileLength = rFile.size() - } else { - fileLength = 0 - if (!rFile.delete()) return StreamData(ERROR_DELETING_FILE) - if (subDir.createFile(displayName) == null) return StreamData(ERROR_CREATE_FILE) - } + foundFile.deleteOrThrow() + subDir.createFileOrThrow(displayName) to 0L } - fileStream = (subDir.findFile(displayName) - ?: subDir.createFile(displayName))!!.openOutputStream() -// fileStream = FileOutputStream(rFile, false) - if (fileLength == 0L) resume = false } - return StreamData(SUCCESS_STREAM, resume, fileLength, fileStream) + + return StreamData(fileLength, file) } /** This class handles the notifications, as well as the relevant key */ @@ -938,6 +791,8 @@ object VideoDownloadManager { fun setWrittenSegment(segmentIndex: Int) { hlsWrittenProgress = segmentIndex + 1 + // in case of abort we need to save every written progress + updateFileInfo() } } @@ -1185,18 +1040,16 @@ object VideoDownloadManager { // set up the download file val stream = setupStream(context, name, relativePath, extension, tryResume) - if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode - fileStream = stream.fileStream ?: return@withContext ERROR_UNKNOWN - val resume = stream.resume ?: return@withContext ERROR_UNKNOWN - val fileLength = stream.fileLength ?: return@withContext ERROR_UNKNOWN - val resumeAt = (if (resume) fileLength else 0) - metadata.setResumeLength(resumeAt) + + fileStream = stream.open() + + metadata.setResumeLength(stream.startAt) metadata.type = DownloadType.IsPending val items = streamLazy( url = link.url.replace(" ", "%20"), referer = link.referer, - startByte = resumeAt, + startByte = stream.startAt, headers = link.headers.appendAndDontOverride( mapOf( "Accept-Encoding" to "identity", @@ -1230,6 +1083,19 @@ object VideoDownloadManager { val pendingData: HashMap = hashMapOf() + val fileChecker = launch(Dispatchers.IO) { + while (isActive) { + if (stream.exists) { + delay(5000) + continue + } + fileMutex.withLock { + metadata.type = DownloadType.IsStopped + } + break + } + } + val jobs = (0 until parallelConnections).map { launch(Dispatchers.IO) { @@ -1329,9 +1195,11 @@ object VideoDownloadManager { } jobs.join() + fileChecker.cancel() // jobs are finished so we don't want to stop them anymore metadata.removeStopListener() + if (!stream.exists) metadata.type = DownloadType.IsStopped if (metadata.type == DownloadType.IsFailed) { return@withContext ERROR_CONNECTION_ERROR @@ -1341,11 +1209,8 @@ object VideoDownloadManager { // we need to close before delete fileStream.closeQuietly() metadata.onDelete() - if (deleteFile(context, baseFile, relativePath ?: "", displayName)) { - return@withContext SUCCESS_STOPPED - } else { - return@withContext ERROR_DELETING_FILE - } + deleteFile(context, baseFile, relativePath ?: "", displayName) + return@withContext SUCCESS_STOPPED } metadata.type = DownloadType.IsDone @@ -1400,13 +1265,13 @@ object VideoDownloadManager { folder ) else folder val displayName = getDisplayName(name, extension) - val stream = setupStream(context, name, relativePath, extension, startAt > 0) - if (stream.errorCode != SUCCESS_STREAM) return@withContext stream.errorCode - if (stream.resume != true) startAt = 0 - fileStream = stream.fileStream ?: return@withContext ERROR_UNKNOWN + val stream = + setupStream(context, name, relativePath, extension, startAt > 0) + if (!stream.resume) startAt = 0 + fileStream = stream.open() // push the metadata - metadata.setResumeLength(stream.fileLength ?: 0) + metadata.setResumeLength(stream.startAt) metadata.hlsProgress = startAt metadata.type = DownloadType.IsPending metadata.setDownloadFileInfoTemplate( @@ -1433,13 +1298,25 @@ object VideoDownloadManager { metadata.hlsTotal = items.size metadata.type = DownloadType.IsDownloading - val currentMutex = Mutex() - val current = (0 until items.size).iterator() + val current = (startAt until items.size).iterator() val fileMutex = Mutex() val pendingData: HashMap = hashMapOf() + val fileChecker = launch(Dispatchers.IO) { + while (isActive) { + if (stream.exists) { + delay(5000) + continue + } + fileMutex.withLock { + metadata.type = DownloadType.IsStopped + } + break + } + } + // see @downloadexplanation for explanation of this download strategy, // this keeps all jobs working at all times, // does several connections in parallel instead of a regular for loop to improve @@ -1476,7 +1353,7 @@ object VideoDownloadManager { // user pause while (metadata.type == DownloadType.IsPaused) delay(100) // if stopped then break to delete - if (metadata.type == DownloadType.IsStopped || !isActive) return@launch + if (metadata.type == DownloadType.IsStopped || metadata.type == DownloadType.IsFailed || !isActive) return@launch val segmentLength = bytes.size.toLong() // send notification, no matter the actual write order @@ -1499,11 +1376,13 @@ object VideoDownloadManager { val cacheLength = cache.size.toLong() fileStream.write(cache) + metadata.addBytesWritten(cacheLength) metadata.setWrittenSegment(metadata.hlsWrittenProgress) } } catch (t: Throwable) { // this is in case of write fail + logError(t) if (metadata.type != DownloadType.IsStopped) { metadata.type = DownloadType.IsFailed } @@ -1520,9 +1399,12 @@ object VideoDownloadManager { } jobs.join() + fileChecker.cancel() metadata.removeStopListener() + if (!stream.exists) metadata.type = DownloadType.IsStopped + if (metadata.type == DownloadType.IsFailed) { return@withContext ERROR_CONNECTION_ERROR } @@ -1531,11 +1413,8 @@ object VideoDownloadManager { // we need to close before delete fileStream.closeQuietly() metadata.onDelete() - if (deleteFile(context, baseFile, relativePath ?: "", displayName)) { - return@withContext SUCCESS_STOPPED - } else { - return@withContext ERROR_DELETING_FILE - } + deleteFile(context, baseFile, relativePath ?: "", displayName) + return@withContext SUCCESS_STOPPED } metadata.type = DownloadType.IsDone @@ -1564,6 +1443,11 @@ object VideoDownloadManager { directoryName: String?, createMissingDirectories: Boolean = true ): UniFile? { + if(directoryName == null) return this + + return directoryName.split(File.separatorChar).filter { it.isNotBlank() }.fold(this) { file: UniFile?, directory -> + file?.createDirectory(directory) + } // May give this error on scoped storage. // W/DocumentsContract: Failed to create document @@ -1571,7 +1455,7 @@ object VideoDownloadManager { // Not present in latest testing. -// println("Going to dir $directoryName from ${this.uri} ---- ${this.filePath}") + println("Going to dir $directoryName from ${this.uri} ---- ${this.filePath}") try { // Creates itself from parent if doesn't exist. @@ -1671,49 +1555,6 @@ object VideoDownloadManager { return this != null && this.filePath == getDownloadDir()?.filePath } - /*private fun delete( - context: Context, - name: String, - folder: String?, - extension: String, - parentId: Int?, - basePath: UniFile? - ): Int { - val displayName = getDisplayName(name, extension) - - // delete all subtitle files - if (extension != "vtt" && extension != "srt") { - try { - delete(context, name, folder, "vtt", parentId, basePath) - delete(context, name, folder, "srt", parentId, basePath) - } catch (e: Exception) { - logError(e) - } - } - - // If scoped storage and using download dir (not accessible with UniFile) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && basePath.isDownloadDir()) { - val relativePath = getRelativePath(folder) - val lastContent = - context.contentResolver.getExistingDownloadUriOrNullQ(relativePath, displayName) ?: return ERROR_DELETING_FILE - if(context.contentResolver.delete(lastContent, null, null) <= 0) { - return ERROR_DELETING_FILE - } - } else { - val dir = basePath?.gotoDir(folder) - val file = dir?.findFile(displayName) - val success = file?.delete() - if (success != true) return ERROR_DELETING_FILE else { - // Cleans up empty directory - if (dir.listFiles()?.isEmpty() == true) dir.delete() - } - parentId?.let { - downloadDeleteEvent.invoke(parentId) - } - } - return SUCCESS_STOPPED - }*/ - fun getFileName(context: Context, metadata: DownloadEpisodeMetadata): String { return getFileName(context, metadata.name, metadata.episode, metadata.season) @@ -1765,70 +1606,60 @@ object VideoDownloadManager { } } - if (link.isM3u8 || URL(link.url).path.endsWith(".m3u8")) { - val startIndex = if (tryResume) { - context.getKey( - KEY_DOWNLOAD_INFO, - ep.id.toString(), - null - )?.extraInfo?.toIntOrNull() - } else null - return suspendSafeApiCall { - downloadHLS( + val callback: (CreateNotificationMetadata) -> Unit = { meta -> + main { + createNotification( + context, + source, + link.name, + ep, + meta.type, + meta.bytesDownloaded, + meta.bytesTotal, + notificationCallback, + meta.hlsProgress, + meta.hlsTotal, + meta.bytesPerSecond + ) + } + } + + try { + if (link.isM3u8 || normalSafeApiCall { URL(link.url).path.endsWith(".m3u8") } == true) { + val startIndex = if (tryResume) { + context.getKey( + KEY_DOWNLOAD_INFO, + ep.id.toString(), + null + )?.extraInfo?.toIntOrNull() + } else null + + return downloadHLS( context, link, name, folder, ep.id, startIndex, - createNotificationCallback = { meta -> - main { - createNotification( - context, - source, - link.name, - ep, - meta.type, - meta.bytesDownloaded, - meta.bytesTotal, - notificationCallback, - meta.hlsProgress, - meta.hlsTotal, - meta.bytesPerSecond - ) - } - } + callback ) - }.also { - extractorJob.cancel() - } ?: ERROR_UNKNOWN + } else { + return downloadThing( + context, + link, + name, + folder, + "mp4", + tryResume, + ep.id, + callback + ) + } + } catch (t: Throwable) { + return ERROR_UNKNOWN + } finally { + extractorJob.cancel() } - - return suspendSafeApiCall { - downloadThing( - context, - link, - name, - folder, - "mp4", - tryResume, - ep.id, - createNotificationCallback = { meta -> - main { - createNotification( - context, - source, - link.name, - ep, - meta.type, - meta.bytesDownloaded, - meta.bytesTotal, - notificationCallback, - bytesPerSecond = meta.bytesPerSecond - ) - } - }) - }.also { extractorJob.cancel() } ?: ERROR_UNKNOWN } suspend fun downloadCheck( @@ -1911,26 +1742,10 @@ object VideoDownloadManager { val info = context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return null val base = basePathToFile(context, info.basePath) + val file = base?.gotoDir(info.relativePath, false)?.findFile(info.displayName) + if (file?.exists() != true) return null - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && base.isDownloadDir()) { - val cr = context.contentResolver ?: return null - val fileUri = - cr.getExistingDownloadUriOrNullQ(info.relativePath, info.displayName) - ?: return null - val fileLength = cr.getFileLength(fileUri) ?: return null - if (fileLength == 0L) return null - return DownloadedFileInfoResult(fileLength, info.totalBytes, fileUri) - } else { - - val file = base?.gotoDir(info.relativePath, false)?.findFile(info.displayName) - -// val normalPath = context.getNormalPath(getFile(info.relativePath), info.displayName) -// val dFile = File(normalPath) - - if (file?.exists() != true) return null - - return DownloadedFileInfoResult(file.size(), info.totalBytes, file.uri) - } + return DownloadedFileInfoResult(file.size(), info.totalBytes, file.uri) } catch (e: Exception) { logError(e) return null @@ -1943,6 +1758,7 @@ object VideoDownloadManager { fun UniFile.size(): Long { val len = length() return if (len <= 1) { + println("LEN:::::::>>>>>>>>>>>>>>>>>>>>>>>$len") val inputStream = this.openInputStream() return inputStream.available().toLong().also { inputStream.closeQuietly() } } else { @@ -1962,32 +1778,20 @@ object VideoDownloadManager { relativePath: String, displayName: String ): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && folder.isDownloadDir()) { - val cr = context.contentResolver ?: return false - val fileUri = - cr.getExistingDownloadUriOrNullQ(relativePath, displayName) - ?: return true // FILE NOT FOUND, ALREADY DELETED - - return cr.delete(fileUri, null, null) > 0 // IF DELETED ROWS IS OVER 0 - } else { - val file = folder?.gotoDir(relativePath)?.findFile(displayName) -// val normalPath = context.getNormalPath(getFile(info.relativePath), info.displayName) -// val dFile = File(normalPath) - if (file?.exists() != true) return true - return try { - file.delete() - } catch (e: Exception) { - logError(e) - val cr = context.contentResolver - cr.delete(file.uri, null, null) > 0 - } + val file = folder?.gotoDir(relativePath)?.findFile(displayName) ?: return false + if (!file.exists()) return true + return try { + file.delete() + } catch (e: Exception) { + logError(e) + (context.contentResolver?.delete(file.uri, null, null) ?: return false) > 0 } } private fun deleteFile(context: Context, id: Int): Boolean { val info = context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return false - downloadEvent.invoke(Pair(id, DownloadActionType.Stop)) + downloadEvent.invoke(id to DownloadActionType.Stop) downloadProgressEvent.invoke(Triple(id, 0, 0)) downloadStatusEvent.invoke(id to DownloadType.IsStopped) downloadDeleteEvent.invoke(id) From 3ea6b1a8d507899ae5a9b295e9f29ded7e0e0448 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 23 Aug 2023 06:25:06 +0200 Subject: [PATCH 508/888] fixed resume download + migrated filesystem to SafeFile --- .../ui/player/DownloadedPlayerActivity.kt | 4 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 8 +- .../ui/settings/SettingsGeneral.kt | 42 +- .../cloudstream3/utils/BackupUtils.kt | 23 +- .../utils/VideoDownloadManager.kt | 378 +++++++----------- .../cloudstream3/utils/storage/MediaFile.kt | 369 +++++++++++++++++ .../cloudstream3/utils/storage/SafeFile.kt | 244 +++++++++++ .../utils/storage/UniFileWrapper.kt | 116 ++++++ 8 files changed, 924 insertions(+), 260 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 6f40e145..03405faf 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -6,11 +6,11 @@ import android.os.Bundle import android.util.Log import android.view.KeyEvent import androidx.appcompat.app.AppCompatActivity -import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.UIHelper.navigate +import com.lagradost.cloudstream3.utils.storage.SafeFile const val DTAG = "PlayerActivity" @@ -50,7 +50,7 @@ class DownloadedPlayerActivity : AppCompatActivity() { } private fun playUri(uri: Uri) { - val name = UniFile.fromUri(this, uri).name + val name = SafeFile.fromUri(this, uri)?.name() this.navigate( R.id.global_to_navigation_player, GeneratorPlayer.newInstance( DownloadFileGenerator( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 9e601fc7..341b4ad3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -52,6 +52,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import com.lagradost.cloudstream3.utils.UIHelper.toPx +import com.lagradost.cloudstream3.utils.storage.SafeFile import kotlinx.coroutines.Job import java.util.* import kotlin.math.abs @@ -525,10 +526,11 @@ class GeneratorPlayer : FullScreenPlayer() { Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION ) - val file = UniFile.fromUri(ctx, uri) - println("Loaded subtitle file. Selected URI path: $uri - Name: ${file.name}") + val file = SafeFile.fromUri(ctx, uri) + val fileName = file?.name() + println("Loaded subtitle file. Selected URI path: $uri - Name: $fileName") // DO NOT REMOVE THE FILE EXTENSION FROM NAME, IT'S NEEDED FOR MIME TYPES - val name = file.name ?: uri.toString() + val name = fileName ?: uri.toString() val subtitleData = SubtitleData( name, 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 2c81ad1f..f46aac9b 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 @@ -3,9 +3,7 @@ package com.lagradost.cloudstream3.ui.settings import android.content.Context import android.content.Intent import android.net.Uri -import android.os.Build import android.os.Bundle -import android.os.Environment import android.view.View import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts @@ -13,7 +11,6 @@ import androidx.appcompat.app.AlertDialog import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.fasterxml.jackson.annotation.JsonProperty -import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.AcraApplication import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -41,7 +38,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.USER_PROVIDER_API import com.lagradost.cloudstream3.utils.VideoDownloadManager import com.lagradost.cloudstream3.utils.VideoDownloadManager.getBasePath -import java.io.File +import com.lagradost.cloudstream3.utils.storage.SafeFile fun getCurrentLocale(context: Context): String { val res = context.resources @@ -139,8 +136,9 @@ class SettingsGeneral : PreferenceFragmentCompat() { context.contentResolver.takePersistableUriPermission(uri, flags) - val file = UniFile.fromUri(context, uri) - println("Selected URI path: $uri - Full path: ${file.filePath}") + val file = SafeFile.fromUri(context, uri) + val filePath = file?.filePath() + println("Selected URI path: $uri - Full path: $filePath") // Stores the real URI using download_path_key // Important that the URI is stored instead of filepath due to permissions. @@ -149,7 +147,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { // From URI -> File path // File path here is purely for cosmetic purposes in settings - (file.filePath ?: uri.toString()).let { + (filePath ?: uri.toString()).let { PreferenceManager.getDefaultSharedPreferences(context) .edit().putString(getString(R.string.download_path_pref), it).apply() } @@ -306,25 +304,23 @@ class SettingsGeneral : PreferenceFragmentCompat() { } return@setOnPreferenceClickListener true } + fun getDownloadDirs(): List { return normalSafeApiCall { - val defaultDir = VideoDownloadManager.getDownloadDir()?.filePath + context?.let { ctx -> + val defaultDir = VideoDownloadManager.getDefaultDir(ctx)?.filePath() - // app_name_download_path = Cloudstream and does not change depending on release. - // DOES NOT WORK ON SCOPED STORAGE. - val secondaryDir = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) null else Environment.getExternalStorageDirectory().absolutePath + - File.separator + resources.getString(R.string.app_name_download_path) - val first = listOf(defaultDir, secondaryDir) - (try { - val currentDir = context?.getBasePath()?.let { it.first?.filePath ?: it.second } + val first = listOf(defaultDir) + (try { + val currentDir = ctx.getBasePath().let { it.first?.filePath() ?: it.second } - (first + - requireContext().getExternalFilesDirs("").mapNotNull { it.path } + - currentDir) - } catch (e: Exception) { - first - }).filterNotNull().distinct() + (first + + ctx.getExternalFilesDirs("").mapNotNull { it.path } + + currentDir) + } catch (e: Exception) { + first + }).filterNotNull().distinct() + } } ?: emptyList() } @@ -339,7 +335,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { val currentDir = settingsManager.getString(getString(R.string.download_path_pref), null) - ?: VideoDownloadManager.getDownloadDir().toString() + ?: context?.let { ctx -> VideoDownloadManager.getDefaultDir(ctx).toString() } activity?.showBottomDialog( dirs + listOf("Custom"), diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 5bd0cd15..2da54678 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -1,11 +1,8 @@ package com.lagradost.cloudstream3.utils import android.annotation.SuppressLint -import android.content.ContentValues import android.content.Context import android.net.Uri -import android.os.Build -import android.provider.MediaStore import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts @@ -36,9 +33,9 @@ import com.lagradost.cloudstream3.utils.DataStore.mapper import com.lagradost.cloudstream3.utils.DataStore.setKeyRaw import com.lagradost.cloudstream3.utils.UIHelper.checkWrite import com.lagradost.cloudstream3.utils.UIHelper.requestRW -import com.lagradost.cloudstream3.utils.VideoDownloadManager.getBasePath -import com.lagradost.cloudstream3.utils.VideoDownloadManager.isDownloadDir -import java.io.IOException +import com.lagradost.cloudstream3.utils.VideoDownloadManager.setupStream +import okhttp3.internal.closeQuietly +import java.io.OutputStream import java.io.PrintWriter import java.lang.System.currentTimeMillis import java.text.SimpleDateFormat @@ -147,6 +144,8 @@ object BackupUtils { @SuppressLint("SimpleDateFormat") fun FragmentActivity.backup() { + var fileStream: OutputStream? = null + var printStream: PrintWriter? = null try { if (!checkWrite()) { showToast(getString(R.string.backup_failed), Toast.LENGTH_LONG) @@ -154,13 +153,16 @@ object BackupUtils { return } - val subDir = getBasePath().first val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) val ext = "json" val displayName = "CS3_Backup_${date}" val backupFile = getBackup() + val stream = setupStream(this, displayName, null, ext, false) + fileStream = stream.openNew() + printStream = PrintWriter(fileStream) + printStream.print(mapper.writeValueAsString(backupFile)) - val steam = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q + /*val steam = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && subDir?.isDownloadDir() == true ) { val cr = this.contentResolver @@ -198,7 +200,7 @@ object BackupUtils { val printStream = PrintWriter(steam) printStream.print(mapper.writeValueAsString(backupFile)) - printStream.close() + printStream.close()*/ showToast( R.string.backup_success, @@ -214,6 +216,9 @@ object BackupUtils { } catch (e: Exception) { logError(e) } + } finally { + printStream?.closeQuietly() + fileStream?.closeQuietly() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index a81e4b3a..37c02be4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -8,7 +8,6 @@ import android.content.* import android.graphics.Bitmap import android.net.Uri import android.os.Build -import android.os.Environment import androidx.annotation.DrawableRes import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -20,7 +19,6 @@ import androidx.work.OneTimeWorkRequest import androidx.work.WorkManager import com.bumptech.glide.load.model.GlideUrl import com.fasterxml.jackson.annotation.JsonProperty -import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -31,19 +29,19 @@ import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall -import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.services.VideoDownloadService 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.removeKey import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import com.lagradost.cloudstream3.utils.storage.MediaFileContentType +import com.lagradost.cloudstream3.utils.storage.SafeFile import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.cancel -import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch @@ -160,24 +158,33 @@ object VideoDownloadManager { @JsonProperty("pkg") val pkg: DownloadResumePackage, ) - private const val SUCCESS_DOWNLOAD_DONE = 1 - private const val SUCCESS_STREAM = 3 - private const val SUCCESS_STOPPED = 2 + data class DownloadStatus( + /** if you should retry with the same args and hope for a better result */ + val retrySame: Boolean, + /** if you should try the next mirror */ + val tryNext: Boolean, + /** if the result is what the user intended */ + val success: Boolean, + ) - // will not download the next one, but is still classified as an error - private const val ERROR_DELETING_FILE = 3 - private const val ERROR_CREATE_FILE = -2 - private const val ERROR_UNKNOWN = -10 + /** Invalid input, just skip to the next one as the same args will give the same error */ + private val DOWNLOAD_INVALID_INPUT = + DownloadStatus(retrySame = false, tryNext = true, success = false) - //private const val ERROR_OPEN_FILE = -3 - private const val ERROR_TOO_SMALL_CONNECTION = -4 + /** no need to try any other mirror as we have downloaded the file */ + private val DOWNLOAD_SUCCESS = + DownloadStatus(retrySame = false, tryNext = false, success = true) - //private const val ERROR_WRONG_CONTENT = -5 - private const val ERROR_CONNECTION_ERROR = -6 + /** the user pressed stop, so no need to download anything else */ + private val DOWNLOAD_STOPPED = + DownloadStatus(retrySame = false, tryNext = false, success = true) - //private const val ERROR_MEDIA_STORE_URI_CANT_BE_CREATED = -7 - //private const val ERROR_CONTENT_RESOLVER_CANT_OPEN_STREAM = -8 - private const val ERROR_CONTENT_RESOLVER_NOT_FOUND = -9 + /** the process failed due to some reason, so we retry and also try the next mirror */ + private val DOWNLOAD_FAILED = DownloadStatus(retrySame = true, tryNext = true, success = false) + + /** bad config, skip all mirrors as every call to download will have the same bad config */ + private val DOWNLOAD_BAD_CONFIG = + DownloadStatus(retrySame = false, tryNext = false, success = false) private const val KEY_RESUME_PACKAGES = "download_resume" const val KEY_DOWNLOAD_INFO = "download_info" @@ -209,15 +216,15 @@ object VideoDownloadManager { } } - /** Will return IsDone if not found or error */ - fun getDownloadState(id: Int): DownloadType { - return try { - downloadStatus[id] ?: DownloadType.IsDone - } catch (e: Exception) { - logError(e) - DownloadType.IsDone - } - } + ///** Will return IsDone if not found or error */ + //fun getDownloadState(id: Int): DownloadType { + // return try { + // downloadStatus[id] ?: DownloadType.IsDone + // } catch (e: Exception) { + // logError(e) + // DownloadType.IsDone + // } + //} private val cachedBitmaps = hashMapOf() fun Context.getImageBitmapFromUrl(url: String, headers: Map? = null): Bitmap? { @@ -302,7 +309,7 @@ object VideoDownloadManager { if (state == DownloadType.IsDownloading || state == DownloadType.IsPaused) { builder.setProgress((total / 1000).toInt(), (progress / 1000).toInt(), false) } else if (state == DownloadType.IsPending) { - builder.setProgress(0,0,true) + builder.setProgress(0, 0, true) } val rowTwoExtra = if (ep.name != null) " - ${ep.name}\n" else "" @@ -496,10 +503,11 @@ object VideoDownloadManager { basePath: String? ): List>? { val base = basePathToFile(context, basePath) - val folder = base?.gotoDir(relativePath, false) ?: return null - if (!folder.isDirectory) return null + val folder = base?.gotoDirectory(relativePath, false) ?: return null + if (folder.isDirectory() != false) return null - return folder.listFiles()?.map { (it.name ?: "") to it.uri } + return folder.listFiles() + ?.mapNotNull { (it.name() ?: "") to (it.uri() ?: return@mapNotNull null) } } @@ -514,37 +522,29 @@ object VideoDownloadManager { data class StreamData( private val fileLength: Long, - val file: UniFile, + val file: SafeFile, //val fileStream: OutputStream, ) { - fun open() : OutputStream { - return file.openOutputStream(resume) + @Throws(IOException::class) + fun open(): OutputStream { + return file.openOutputStreamOrThrow(resume) } - fun openNew() : OutputStream { - return file.openOutputStream(false) + @Throws(IOException::class) + fun openNew(): OutputStream { + return file.openOutputStreamOrThrow(false) + } + + fun delete(): Boolean { + return file.delete() } val resume: Boolean get() = fileLength > 0L val startAt: Long get() = if (resume) fileLength else 0L - val exists: Boolean get() = file.exists() + val exists: Boolean get() = file.exists() == true } - //class ADownloadException(val id: Int) : RuntimeException(message = "Download error $id") - - fun UniFile.createFileOrThrow(displayName: String): UniFile { - return this.createFile(displayName) ?: throw IOException("Could not create file") - } - - fun UniFile.deleteOrThrow() { - if (!this.delete()) throw IOException("Could not delete file") - } - - /** - * Sets up the appropriate file and creates a data stream from the file. - * Used for initializing downloads. - * */ @Throws(IOException::class) fun setupStream( context: Context, @@ -552,19 +552,39 @@ object VideoDownloadManager { folder: String?, extension: String, tryResume: Boolean, + ): StreamData { + val (base, _) = context.getBasePath() + return setupStream( + base ?: throw IOException("Bad config"), + name, + folder, + extension, + tryResume + ) + } + + /** + * Sets up the appropriate file and creates a data stream from the file. + * Used for initializing downloads. + * */ + @Throws(IOException::class) + fun setupStream( + baseFile: SafeFile, + name: String, + folder: String?, + extension: String, + tryResume: Boolean, ): StreamData { val displayName = getDisplayName(name, extension) - val (baseFile, _) = context.getBasePath() - - val subDir = baseFile?.gotoDir(folder) ?: throw IOException() + val subDir = baseFile.gotoDirectoryOrThrow(folder) val foundFile = subDir.findFile(displayName) - val (file, fileLength) = if (foundFile == null || !foundFile.exists()) { + val (file, fileLength) = if (foundFile == null || foundFile.exists() != true) { subDir.createFileOrThrow(displayName) to 0L } else { if (tryResume) { - foundFile to foundFile.size() + foundFile to foundFile.lengthOrThrow() } else { foundFile.deleteOrThrow() subDir.createFileOrThrow(displayName) to 0L @@ -1004,21 +1024,20 @@ object VideoDownloadManager { } } - @Throws suspend fun downloadThing( context: Context, link: IDownloadableMinimum, name: String, - folder: String?, + folder: String, extension: String, tryResume: Boolean, parentId: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, parallelConnections: Int = 3 - ): Int = withContext(Dispatchers.IO) { + ): DownloadStatus = withContext(Dispatchers.IO) { // we cant download torrents with this implementation, aria2c might be used in the future - if (link.url.startsWith("magnet") || link.url.endsWith(".torrent")) { - return@withContext ERROR_UNKNOWN + if (link.url.startsWith("magnet") || link.url.endsWith(".torrent") || parallelConnections < 1) { + return@withContext DOWNLOAD_INVALID_INPUT } var fileStream: OutputStream? = null @@ -1033,13 +1052,10 @@ object VideoDownloadManager { // get the file path val (baseFile, basePath) = context.getBasePath() val displayName = getDisplayName(name, extension) - val relativePath = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && baseFile.isDownloadDir()) getRelativePath( - folder - ) else folder + if (baseFile == null) return@withContext DOWNLOAD_BAD_CONFIG // set up the download file - val stream = setupStream(context, name, relativePath, extension, tryResume) + val stream = setupStream(baseFile, name, folder, extension, tryResume) fileStream = stream.open() @@ -1069,7 +1085,7 @@ object VideoDownloadManager { metadata.setDownloadFileInfoTemplate( DownloadedFileInfo( totalBytes = metadata.approxTotalBytes, - relativePath = relativePath ?: "", + relativePath = folder, displayName = displayName, basePath = basePath ) @@ -1202,19 +1218,19 @@ object VideoDownloadManager { if (!stream.exists) metadata.type = DownloadType.IsStopped if (metadata.type == DownloadType.IsFailed) { - return@withContext ERROR_CONNECTION_ERROR + return@withContext DOWNLOAD_FAILED } if (metadata.type == DownloadType.IsStopped) { // we need to close before delete fileStream.closeQuietly() metadata.onDelete() - deleteFile(context, baseFile, relativePath ?: "", displayName) - return@withContext SUCCESS_STOPPED + stream.delete() + return@withContext DOWNLOAD_STOPPED } metadata.type = DownloadType.IsDone - return@withContext SUCCESS_DOWNLOAD_DONE + return@withContext DOWNLOAD_SUCCESS } catch (e: IOException) { // some sort of IO error, this should not happened // we just rethrow it @@ -1226,7 +1242,7 @@ object VideoDownloadManager { // note that when failing we don't want to delete the file, // only user interaction has that power metadata.type = DownloadType.IsFailed - return@withContext ERROR_CONNECTION_ERROR + return@withContext DOWNLOAD_FAILED } finally { fileStream?.closeQuietly() //requestStream?.closeQuietly() @@ -1234,39 +1250,36 @@ object VideoDownloadManager { } } - @Throws private suspend fun downloadHLS( context: Context, link: ExtractorLink, name: String, - folder: String?, + folder: String, parentId: Int?, startIndex: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, parallelConnections: Int = 3 - ): Int = withContext(Dispatchers.IO) { - require(parallelConnections >= 1) + ): DownloadStatus = withContext(Dispatchers.IO) { + if (parallelConnections < 1) return@withContext DOWNLOAD_INVALID_INPUT val metadata = DownloadMetaData( createNotificationCallback = createNotificationCallback, id = parentId ) - val extension = "mp4" - var fileStream: OutputStream? = null try { + val extension = "mp4" + // the start .ts index var startAt = startIndex ?: 0 // set up the file data val (baseFile, basePath) = context.getBasePath() - val relativePath = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && baseFile.isDownloadDir()) getRelativePath( - folder - ) else folder + if (baseFile == null) return@withContext DOWNLOAD_BAD_CONFIG + val displayName = getDisplayName(name, extension) val stream = - setupStream(context, name, relativePath, extension, startAt > 0) + setupStream(baseFile, name, folder, extension, startAt > 0) if (!stream.resume) startAt = 0 fileStream = stream.open() @@ -1277,7 +1290,7 @@ object VideoDownloadManager { metadata.setDownloadFileInfoTemplate( DownloadedFileInfo( totalBytes = 0, - relativePath = relativePath ?: "", + relativePath = folder, displayName = displayName, basePath = basePath ) @@ -1406,99 +1419,29 @@ object VideoDownloadManager { if (!stream.exists) metadata.type = DownloadType.IsStopped if (metadata.type == DownloadType.IsFailed) { - return@withContext ERROR_CONNECTION_ERROR + return@withContext DOWNLOAD_FAILED } if (metadata.type == DownloadType.IsStopped) { // we need to close before delete fileStream.closeQuietly() metadata.onDelete() - deleteFile(context, baseFile, relativePath ?: "", displayName) - return@withContext SUCCESS_STOPPED + stream.delete() + return@withContext DOWNLOAD_STOPPED } metadata.type = DownloadType.IsDone - return@withContext SUCCESS_DOWNLOAD_DONE + return@withContext DOWNLOAD_SUCCESS } catch (t: Throwable) { logError(t) metadata.type = DownloadType.IsFailed - return@withContext ERROR_UNKNOWN + return@withContext DOWNLOAD_FAILED } finally { fileStream?.closeQuietly() metadata.close() } } - - /** - * Guarantees a directory is present with the dir name (if createMissingDirectories is true). - * Works recursively when '/' is present. - * Will remove any file with the dir name if present and add directory. - * Will not work if the parent directory does not exist. - * - * @param directoryName if null will use the current path. - * @return UniFile / null if createMissingDirectories = false and folder is not found. - * */ - private fun UniFile.gotoDir( - directoryName: String?, - createMissingDirectories: Boolean = true - ): UniFile? { - if(directoryName == null) return this - - return directoryName.split(File.separatorChar).filter { it.isNotBlank() }.fold(this) { file: UniFile?, directory -> - file?.createDirectory(directory) - } - - // May give this error on scoped storage. - // W/DocumentsContract: Failed to create document - // java.lang.IllegalArgumentException: Parent document isn't a directory - - // Not present in latest testing. - - println("Going to dir $directoryName from ${this.uri} ---- ${this.filePath}") - - try { - // Creates itself from parent if doesn't exist. - if (!this.exists() && createMissingDirectories && !this.name.isNullOrBlank()) { - if (this.parentFile != null) { - this.parentFile?.createDirectory(this.name) - } else if (this.filePath != null) { - UniFile.fromFile(File(this.filePath!!).parentFile)?.createDirectory(this.name) - } - } - - val allDirectories = directoryName?.split("/") - return if (allDirectories?.size == 1 || allDirectories == null) { - val found = this.findFile(directoryName) - when { - directoryName.isNullOrBlank() -> this - found?.isDirectory == true -> found - - !createMissingDirectories -> null - // Below creates directories - found?.isFile == true -> { - found.delete() - this.createDirectory(directoryName) - } - - this.isDirectory -> this.createDirectory(directoryName) - else -> this.parentFile?.createDirectory(directoryName) - } - } else { - var currentDirectory = this - allDirectories.forEach { - // If the next directory is not found it returns the deepest directory possible. - val nextDir = currentDirectory.gotoDir(it, createMissingDirectories) - currentDirectory = nextDir ?: return null - } - currentDirectory - } - } catch (e: Exception) { - logError(e) - return null - } - } - private fun getDisplayName(name: String, extension: String): String { return "$name.$extension" } @@ -1510,33 +1453,22 @@ object VideoDownloadManager { * As of writing UniFile is used for everything but download directory on scoped storage. * Special ContentResolver fuckery is needed for that as UniFile doesn't work. * */ - fun getDownloadDir(): UniFile? { + fun getDefaultDir(context: Context): SafeFile? { // See https://www.py4u.net/discuss/614761 - return UniFile.fromFile( - File( - Environment.getExternalStorageDirectory().absolutePath + File.separatorChar + - Environment.DIRECTORY_DOWNLOADS - ) + return SafeFile.fromMedia( + context, MediaFileContentType.Downloads ) } - @Deprecated("TODO fix UniFile to work with download directory.") - private fun getRelativePath(folder: String?): String { - return (Environment.DIRECTORY_DOWNLOADS + '/' + folder + '/').replace( - '/', - File.separatorChar - ).replace("${File.separatorChar}${File.separatorChar}", File.separatorChar.toString()) - } - /** * Turns a string to an UniFile. Used for stored string paths such as settings. * Should only be used to get a download path. * */ - private fun basePathToFile(context: Context, path: String?): UniFile? { + private fun basePathToFile(context: Context, path: String?): SafeFile? { return when { - path.isNullOrBlank() -> getDownloadDir() - path.startsWith("content://") -> UniFile.fromUri(context, path.toUri()) - else -> UniFile.fromFile(File(path)) + path.isNullOrBlank() -> getDefaultDir(context) + path.startsWith("content://") -> SafeFile.fromUri(context, path.toUri()) + else -> SafeFile.fromFile(context, File(path)) } } @@ -1545,17 +1477,12 @@ object VideoDownloadManager { * Returns the file and a string to be stored for future file retrieval. * UniFile.filePath is not sufficient for storage. * */ - fun Context.getBasePath(): Pair { + fun Context.getBasePath(): Pair { val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) val basePathSetting = settingsManager.getString(getString(R.string.download_path_key), null) return basePathToFile(this, basePathSetting) to basePathSetting } - fun UniFile?.isDownloadDir(): Boolean { - return this != null && this.filePath == getDownloadDir()?.filePath - } - - fun getFileName(context: Context, metadata: DownloadEpisodeMetadata): String { return getFileName(context, metadata.name, metadata.episode, metadata.season) } @@ -1596,7 +1523,7 @@ object VideoDownloadManager { link: ExtractorLink, notificationCallback: (Int, Notification) -> Unit, tryResume: Boolean = false, - ): Int { + ): DownloadStatus { val name = getFileName(context, ep) // Make sure this is cancelled when download is done or cancelled. @@ -1638,7 +1565,7 @@ object VideoDownloadManager { context, link, name, - folder, + folder ?: "", ep.id, startIndex, callback @@ -1648,7 +1575,7 @@ object VideoDownloadManager { context, link, name, - folder, + folder ?: "", "mp4", tryResume, ep.id, @@ -1656,7 +1583,7 @@ object VideoDownloadManager { ) } } catch (t: Throwable) { - return ERROR_UNKNOWN + return DOWNLOAD_FAILED } finally { extractorJob.cancel() } @@ -1698,10 +1625,8 @@ object VideoDownloadManager { notificationCallback, resume ) - //.also { println("Single episode finished with return code: $it") } - // retry every link at least once - if (connectionResult <= 0) { + if (connectionResult.retrySame) { connectionResult = downloadSingleEpisode( context, item.source, @@ -1713,11 +1638,12 @@ object VideoDownloadManager { ) } - if (connectionResult > 0) { // SUCCESS + if (connectionResult.success) { // SUCCESS removeKey(KEY_RESUME_PACKAGES, id.toString()) break - } else if (index == item.links.lastIndex) { + } else if (!connectionResult.tryNext || index >= item.links.lastIndex) { downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) + break } } } catch (e: Exception) { @@ -1731,62 +1657,69 @@ object VideoDownloadManager { // return id } - fun getDownloadFileInfoAndUpdateSettings(context: Context, id: Int): DownloadedFileInfoResult? { - val res = getDownloadFileInfo(context, id) - if (res == null) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) - return res + /* fun getDownloadFileInfoAndUpdateSettings(context: Context, id: Int): DownloadedFileInfoResult? { + val res = getDownloadFileInfo(context, id) + if (res == null) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) + return res + } + */ + fun getDownloadFileInfoAndUpdateSettings(context: Context, id: Int): DownloadedFileInfoResult? = + getDownloadFileInfo(context, id, removeKeys = true) + + private fun DownloadedFileInfo.toFile(context: Context): SafeFile? { + return basePathToFile(context, this.basePath)?.gotoDirectory(relativePath) + ?.findFile(displayName) } - private fun getDownloadFileInfo(context: Context, id: Int): DownloadedFileInfoResult? { + private fun getDownloadFileInfo( + context: Context, + id: Int, + removeKeys: Boolean = false + ): DownloadedFileInfoResult? { try { val info = context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return null - val base = basePathToFile(context, info.basePath) - val file = base?.gotoDir(info.relativePath, false)?.findFile(info.displayName) - if (file?.exists() != true) return null + val file = info.toFile(context) - return DownloadedFileInfoResult(file.size(), info.totalBytes, file.uri) + // only delete the key if the file is not found + if (file == null || !file.existsOrThrow()) { + if (removeKeys) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) + return null + } + + return DownloadedFileInfoResult( + file.lengthOrThrow(), + info.totalBytes, + file.uriOrThrow() + ) } catch (e: Exception) { logError(e) return null } } - /** - * Gets the true download size as Scoped Storage sometimes wrongly returns 0. - * */ - fun UniFile.size(): Long { - val len = length() - return if (len <= 1) { - println("LEN:::::::>>>>>>>>>>>>>>>>>>>>>>>$len") - val inputStream = this.openInputStream() - return inputStream.available().toLong().also { inputStream.closeQuietly() } - } else { - len - } - } - fun deleteFileAndUpdateSettings(context: Context, id: Int): Boolean { val success = deleteFile(context, id) if (success) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) return success } - private fun deleteFile( + /*private fun deleteFile( context: Context, - folder: UniFile?, + folder: SafeFile?, relativePath: String, displayName: String ): Boolean { - val file = folder?.gotoDir(relativePath)?.findFile(displayName) ?: return false - if (!file.exists()) return true + val file = folder?.gotoDirectory(relativePath)?.findFile(displayName) ?: return false + if (file.exists() == false) return true return try { file.delete() } catch (e: Exception) { logError(e) - (context.contentResolver?.delete(file.uri, null, null) ?: return false) > 0 + (context.contentResolver?.delete(file.uri() ?: return true, null, null) + ?: return false) > 0 } - } + }*/ private fun deleteFile(context: Context, id: Int): Boolean { val info = @@ -1795,8 +1728,7 @@ object VideoDownloadManager { downloadProgressEvent.invoke(Triple(id, 0, 0)) downloadStatusEvent.invoke(id to DownloadType.IsStopped) downloadDeleteEvent.invoke(id) - val base = basePathToFile(context, info.basePath) - return deleteFile(context, base, info.relativePath, info.displayName) + return info.toFile(context)?.delete() ?: false } fun getDownloadResumePackage(context: Context, id: Int): DownloadResumePackage? { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt new file mode 100644 index 00000000..83c66b8b --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt @@ -0,0 +1,369 @@ +package com.lagradost.cloudstream3.utils.storage + +import android.content.ContentResolver +import android.content.ContentUris +import android.content.ContentValues +import android.content.Context +import android.net.Uri +import android.os.Build +import android.os.Environment +import android.provider.MediaStore +import androidx.annotation.RequiresApi +import com.hippo.unifile.UniRandomAccessFile +import com.lagradost.cloudstream3.mvvm.logError +import okhttp3.internal.closeQuietly +import java.io.File +import java.io.InputStream +import java.io.OutputStream + + +enum class MediaFileContentType { + Downloads, + Audio, + Video, + Images, +} + +// https://developer.android.com/training/data-storage/shared/media +fun MediaFileContentType.toPath(): String { + return when (this) { + MediaFileContentType.Downloads -> Environment.DIRECTORY_DOWNLOADS + MediaFileContentType.Audio -> Environment.DIRECTORY_MUSIC + MediaFileContentType.Video -> Environment.DIRECTORY_MOVIES + MediaFileContentType.Images -> Environment.DIRECTORY_DCIM + } +} + +fun MediaFileContentType.defaultPrefix(): String { + return Environment.getExternalStorageDirectory().absolutePath +} + +fun MediaFileContentType.toAbsolutePath(): String { + return defaultPrefix() + File.separator + + this.toPath() +} + +fun replaceDuplicateFileSeparators(path: String): String { + return path.replace(Regex("${File.separator}+"), File.separator) +} + +@RequiresApi(Build.VERSION_CODES.Q) +fun MediaFileContentType.toUri(external: Boolean): Uri { + val volume = if (external) MediaStore.VOLUME_EXTERNAL_PRIMARY else MediaStore.VOLUME_INTERNAL + return when (this) { + MediaFileContentType.Downloads -> MediaStore.Downloads.getContentUri(volume) + MediaFileContentType.Audio -> MediaStore.Audio.Media.getContentUri(volume) + MediaFileContentType.Video -> MediaStore.Video.Media.getContentUri(volume) + MediaFileContentType.Images -> MediaStore.Images.Media.getContentUri(volume) + } +} + +@RequiresApi(Build.VERSION_CODES.Q) +class MediaFile( + private val context: Context, + private val folderType: MediaFileContentType, + private val external: Boolean = true, + absolutePath: String, +) : SafeFile { + // this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt" + private val sanitizedAbsolutePath: String = + replaceDuplicateFileSeparators(absolutePath) + + // this is only a directory if the filepath ends with a / + private val isDir: Boolean = sanitizedAbsolutePath.endsWith(File.separator) + private val isFile: Boolean = !isDir + + // this is the relative path including the Download directory, so "/hello/text.txt" => "Download/hello" + private val relativePath: String = + replaceDuplicateFileSeparators(folderType.toPath() + File.separator + sanitizedAbsolutePath).substringBeforeLast( + File.separator + ) + + // "/hello/text.txt" => "text.txt" + private val namePath: String = sanitizedAbsolutePath.substringAfterLast(File.separator) + private val baseUri = folderType.toUri(external) + private val contentResolver: ContentResolver = context.contentResolver + + init { + // some standard asserts that should always be hold or else this class wont work + assert(!relativePath.endsWith(File.separator)) + assert(!(isDir && isFile)) + assert(!relativePath.contains(File.separator + File.separator)) + assert(!namePath.contains(File.separator)) + + if (isDir) { + assert(namePath.isBlank()) + } else { + assert(namePath.isNotBlank()) + } + } + + companion object { + private fun splitFilenameExt(name: String): Pair { + val split = name.indexOfLast { it == '.' } + if (split <= 0) return name to null + val ext = name.substring(split + 1 until name.length) + if (ext.isBlank()) return name to null + + return name.substring(0 until split) to ext + } + + private fun splitFilenameMime(name: String): Pair { + val (display, ext) = splitFilenameExt(name) + val mimeType = when (ext) { + + // Absolutely ridiculous, if text/vtt is used as mimetype scoped storage prevents + // downloading to /Downloads yet it works with null + + "vtt" -> null // "text/vtt" + "mp4" -> "video/mp4" + "srt" -> null // "application/x-subrip"//"text/plain" + else -> null + } + return display to mimeType + } + } + + private fun appendRelativePath(path: String, folder: Boolean): MediaFile? { + if (isFile) return null + + // VideoDownloadManager.sanitizeFilename(path.replace(File.separator, "")) + + val newPath = + sanitizedAbsolutePath + path + if (folder) File.separator else "" + + return MediaFile( + context = context, + folderType = folderType, + external = external, + absolutePath = newPath + ) + } + + private fun createUri(displayName: String? = namePath): Uri? { + if (displayName == null) return null + if (isFile) return null + val (name, mime) = splitFilenameMime(displayName) + + val newFile = ContentValues().apply { + put(MediaStore.MediaColumns.DISPLAY_NAME, displayName) + put(MediaStore.MediaColumns.TITLE, name) + if (mime != null) + put(MediaStore.MediaColumns.MIME_TYPE, mime) + put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath) + } + return contentResolver.insert(baseUri, newFile) + } + + override fun createFile(displayName: String?): SafeFile? { + if (isFile || displayName == null) return null + query(displayName)?.uri ?: createUri(displayName) ?: return null + return appendRelativePath(displayName, false) //SafeFile.fromUri(context, ?: return null) + } + + override fun createDirectory(directoryName: String?): SafeFile? { + if (directoryName == null) return null + // we don't create a dir here tbh, just fake create it + return appendRelativePath(directoryName, true) + } + + private data class QueryResult( + val uri: Uri, + val lastModified: Long, + val length: Long, + ) + + @RequiresApi(Build.VERSION_CODES.Q) + private fun query(displayName: String = namePath): QueryResult? { + try { + //val (name, mime) = splitFilenameMime(fullName) + + val projection = arrayOf( + MediaStore.MediaColumns._ID, + MediaStore.MediaColumns.DATE_MODIFIED, + MediaStore.MediaColumns.SIZE, + ) + + val selection = + "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'" + + contentResolver.query( + baseUri, + projection, selection, null, null + )?.use { cursor -> + while (cursor.moveToNext()) { + val id = + cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) + + return QueryResult( + uri = ContentUris.withAppendedId( + baseUri, id + ), + lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)), + length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), + ) + } + } + } catch (t: Throwable) { + logError(t) + } + + return null + } + + override fun uri(): Uri? { + return query()?.uri + } + + override fun name(): String? { + if (isDir) return null + return namePath + } + + override fun type(): String? { + TODO("Not yet implemented") + } + + override fun filePath(): String { + return replaceDuplicateFileSeparators(relativePath + File.separator + namePath) + } + + override fun isDirectory(): Boolean { + return isDir + } + + override fun isFile(): Boolean { + return isFile + } + + override fun lastModified(): Long? { + if (isDir) return null + return query()?.lastModified + } + + override fun length(): Long? { + if (isDir) return null + val length = query()?.length ?: return null + if(length <= 0) { + val inputStream : InputStream = openInputStream() ?: return null + return try { + inputStream.available().toLong() + } catch (t : Throwable) { + null + } finally { + inputStream.closeQuietly() + } + } + return length + } + + override fun canRead(): Boolean { + TODO("Not yet implemented") + } + + override fun canWrite(): Boolean { + TODO("Not yet implemented") + } + + private fun delete(uri: Uri): Boolean { + return contentResolver.delete(uri, null, null) > 0 + } + + override fun delete(): Boolean { + return if (isDir) { + (listFiles() ?: return false).all { + it.delete() + } + } else { + delete(uri() ?: return false) + } + } + + override fun exists(): Boolean { + if (isDir) return true + return query() != null + } + + override fun listFiles(): List? { + if (isFile) return null + try { + val projection = arrayOf( + MediaStore.MediaColumns.DISPLAY_NAME + ) + + val selection = + "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}'" + contentResolver.query( + baseUri, + projection, selection, null, null + )?.use { cursor -> + val out = ArrayList(cursor.count) + while (cursor.moveToNext()) { + val nameIdx = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) + if (nameIdx == -1) continue + val name = cursor.getString(nameIdx) + + appendRelativePath(name, false)?.let { new -> + out.add(new) + } + } + + out + } + } catch (t: Throwable) { + logError(t) + } + return null + } + + override fun findFile(displayName: String?, ignoreCase: Boolean): SafeFile? { + if (isFile || displayName == null) return null + + val new = appendRelativePath(displayName, false) ?: return null + if (new.exists()) { + return new + } + + return null//SafeFile.fromUri(context, query(displayName ?: return null)?.uri ?: return null) + } + + override fun renameTo(name: String?): Boolean { + TODO("Not yet implemented") + } + + override fun openOutputStream(append: Boolean): OutputStream? { + try { + // use current file + uri()?.let { + return contentResolver.openOutputStream( + it, + if (append) "wa" else "wt" + ) + } + + // create a new file if current is not found, + // as we know it is new only write access is needed + createUri()?.let { + return contentResolver.openOutputStream( + it, + "w" + ) + } + return null + } catch (t: Throwable) { + return null + } + } + + override fun openInputStream(): InputStream? { + try { + return contentResolver.openInputStream(uri() ?: return null) + } catch (t: Throwable) { + return null + } + } + + override fun createRandomAccessFile(mode: String?): UniRandomAccessFile? { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt new file mode 100644 index 00000000..9ba0ef88 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt @@ -0,0 +1,244 @@ +package com.lagradost.cloudstream3.utils.storage + +import android.content.Context +import android.net.Uri +import android.os.Build +import android.os.Environment +import com.hippo.unifile.UniFile +import com.hippo.unifile.UniRandomAccessFile + +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream + +interface SafeFile { + companion object { + fun fromUri(context: Context, uri: Uri): SafeFile? { + return UniFileWrapper(UniFile.fromUri(context, uri) ?: return null) + } + + fun fromFile(context: Context, file: File?): SafeFile? { + if (file == null) return null + // because UniFile sucks balls on Media we have to do this + val absPath = file.absolutePath.removePrefix(File.separator) + for (value in MediaFileContentType.values()) { + val prefixes = listOf(value.toAbsolutePath(), value.toPath()) + for (prefix in prefixes) { + if (!absPath.startsWith(prefix)) continue + return fromMedia( + context, + value, + absPath.removePrefix(prefix).ifBlank { File.separator } + ) + } + } + + return UniFileWrapper(UniFile.fromFile(file) ?: return null) + } + + fun fromAsset( + context: Context, + filename: String? + ): SafeFile? { + return UniFileWrapper( + UniFile.fromAsset(context.assets, filename ?: return null) ?: return null + ) + } + + fun fromResource( + context: Context, + id: Int + ): SafeFile? { + return UniFileWrapper( + UniFile.fromResource(context, id) ?: return null + ) + } + + fun fromMedia( + context: Context, + folderType: MediaFileContentType, + path: String = File.separator, + external: Boolean = true, + ): SafeFile? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //fromUri(context, folderType.toUri(external))?.findFile(folderType.toPath())?.gotoDirectory(path) + + return MediaFile( + context = context, + folderType = folderType, + external = external, + absolutePath = path + ) + } else { + fromFile( + context, + File( + (Environment.getExternalStorageDirectory().absolutePath + File.separator + + folderType.toPath() + File.separator + folderType).replace( + File.separator + File.separator, + File.separator + ) + ) + ) + } + + } + } + + /*val uri: Uri? get() = getUri() + val name: String? get() = getName() + val type: String? get() = getType() + val filePath: String? get() = getFilePath() + val isFile: Boolean? get() = isFile() + val isDirectory: Boolean? get() = isDirectory() + val length: Long? get() = length() + val canRead: Boolean get() = canRead() + val canWrite: Boolean get() = canWrite() + val lastModified: Long? get() = lastModified()*/ + + @Throws(IOException::class) + fun isFileOrThrow(): Boolean { + return isFile() ?: throw IOException("Unable to get if file is a file or directory") + } + + @Throws(IOException::class) + fun lengthOrThrow(): Long { + return length() ?: throw IOException("Unable to get file length") + } + + @Throws(IOException::class) + fun isDirectoryOrThrow(): Boolean { + return isDirectory() ?: throw IOException("Unable to get if file is a directory") + } + + @Throws(IOException::class) + fun filePathOrThrow(): String { + return filePath() ?: throw IOException("Unable to get file path") + } + + @Throws(IOException::class) + fun uriOrThrow(): Uri { + return uri() ?: throw IOException("Unable to get uri") + } + + @Throws(IOException::class) + fun renameOrThrow(name: String?) { + if (!renameTo(name)) { + throw IOException("Unable to rename to $name") + } + } + + @Throws(IOException::class) + fun openOutputStreamOrThrow(append: Boolean = false): OutputStream { + return openOutputStream(append) ?: throw IOException("Unable to open output stream") + } + + @Throws(IOException::class) + fun openInputStreamOrThrow(): InputStream { + return openInputStream() ?: throw IOException("Unable to open input stream") + } + + @Throws(IOException::class) + fun existsOrThrow(): Boolean { + return exists() ?: throw IOException("Unable get if file exists") + } + + @Throws(IOException::class) + fun findFileOrThrow(displayName: String?, ignoreCase: Boolean = false): SafeFile { + return findFile(displayName, ignoreCase) ?: throw IOException("Unable find file") + } + + @Throws(IOException::class) + fun gotoDirectoryOrThrow( + directoryName: String?, + createMissingDirectories: Boolean = true + ): SafeFile { + return gotoDirectory(directoryName, createMissingDirectories) + ?: throw IOException("Unable to go to directory $directoryName") + } + + @Throws(IOException::class) + fun listFilesOrThrow(): List { + return listFiles() ?: throw IOException("Unable to get files") + } + + + @Throws(IOException::class) + fun createFileOrThrow(displayName: String?): SafeFile { + return createFile(displayName) ?: throw IOException("Unable to create file $displayName") + } + + @Throws(IOException::class) + fun createDirectoryOrThrow(directoryName: String?): SafeFile { + return createDirectory( + directoryName ?: throw IOException("Unable to create file with invalid name") + ) + ?: throw IOException("Unable to create directory $directoryName") + } + + @Throws(IOException::class) + fun deleteOrThrow() { + if (!delete()) { + throw IOException("Unable to delete file") + } + } + + /** file.gotoDirectory("a/b/c") -> "file/a/b/c/" where a null or blank directoryName + * returns itself. createMissingDirectories specifies if the dirs should be created + * when travelling or break at a dir not found */ + fun gotoDirectory( + directoryName: String?, + createMissingDirectories: Boolean = true + ): SafeFile? { + if (directoryName == null) return this + + return directoryName.split(File.separatorChar).filter { it.isNotBlank() } + .fold(this) { file: SafeFile?, directory -> + // as MediaFile does not actually create a directory we can do this + if (createMissingDirectories || this is MediaFile) { + file?.createDirectory(directory) + } else { + val next = file?.findFile(directory) + + // we require the file to be a directory + if (next?.isDirectory() != true) { + null + } else { + next + } + } + } + } + + + fun createFile(displayName: String?): SafeFile? + fun createDirectory(directoryName: String?): SafeFile? + fun uri(): Uri? + fun name(): String? + fun type(): String? + fun filePath(): String? + fun isDirectory(): Boolean? + fun isFile(): Boolean? + fun lastModified(): Long? + fun length(): Long? + fun canRead(): Boolean + fun canWrite(): Boolean + fun delete(): Boolean + fun exists(): Boolean? + fun listFiles(): List? + + // fun listFiles(filter: FilenameFilter?): Array? + fun findFile(displayName: String?, ignoreCase: Boolean = false): SafeFile? + + fun renameTo(name: String?): Boolean + + /** Open a stream on to the content associated with the file */ + fun openOutputStream(append: Boolean = false): OutputStream? + + /** Open a stream on to the content associated with the file */ + fun openInputStream(): InputStream? + + /** Get a random access stuff of the UniFile, "r" or "rw" */ + fun createRandomAccessFile(mode: String?): UniRandomAccessFile? +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt new file mode 100644 index 00000000..f1592169 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt @@ -0,0 +1,116 @@ +package com.lagradost.cloudstream3.utils.storage + +import android.net.Uri +import com.hippo.unifile.UniFile +import com.hippo.unifile.UniRandomAccessFile +import com.lagradost.cloudstream3.mvvm.logError +import okhttp3.internal.closeQuietly +import java.io.InputStream +import java.io.OutputStream + +private fun UniFile.toFile(): SafeFile { + return UniFileWrapper(this) +} + +fun safe(apiCall: () -> T): T? { + return try { + apiCall.invoke() + } catch (throwable: Throwable) { + logError(throwable) + null + } +} + +class UniFileWrapper(val file: UniFile) : SafeFile { + override fun createFile(displayName: String?): SafeFile? { + return file.createFile(displayName)?.toFile() + } + + override fun createDirectory(directoryName: String?): SafeFile? { + return file.createDirectory(directoryName)?.toFile() + } + + override fun uri(): Uri? { + return safe { file.uri } + } + + override fun name(): String? { + return safe { file.name } + } + + override fun type(): String? { + return safe { file.type } + } + + override fun filePath(): String? { + return safe { file.filePath } + } + + override fun isDirectory(): Boolean? { + return safe { file.isDirectory } + } + + override fun isFile(): Boolean? { + return safe { file.isFile } + } + + override fun lastModified(): Long? { + return safe { file.lastModified() } + } + + override fun length(): Long? { + return safe { + val len = file.length() + if (len <= 1) { + val inputStream = this.openInputStream() ?: return@safe null + try { + inputStream.available().toLong() + } finally { + inputStream.closeQuietly() + } + } else { + len + } + } + } + + override fun canRead(): Boolean { + return safe { file.canRead() } ?: false + } + + override fun canWrite(): Boolean { + return safe { file.canWrite() } ?: false + } + + override fun delete(): Boolean { + return safe { file.delete() } ?: false + } + + override fun exists(): Boolean? { + return safe { file.exists() } + } + + override fun listFiles(): List? { + return safe { file.listFiles()?.mapNotNull { it?.toFile() } } + } + + override fun findFile(displayName: String?, ignoreCase: Boolean): SafeFile? { + return safe { file.findFile(displayName, ignoreCase)?.toFile() } + } + + override fun renameTo(name: String?): Boolean { + return safe { file.renameTo(name) } ?: return false + } + + override fun openOutputStream(append: Boolean): OutputStream? { + return safe { file.openOutputStream(append) } + } + + override fun openInputStream(): InputStream? { + return safe { file.openInputStream() } + } + + override fun createRandomAccessFile(mode: String?): UniRandomAccessFile? { + return safe { file.createRandomAccessFile(mode) } + } +} \ No newline at end of file From d436171a2f89f58107d5bc48d2a6be2fbb8845eb Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 23 Aug 2023 06:36:43 +0200 Subject: [PATCH 509/888] removed possible duplicate download queue --- .../lagradost/cloudstream3/utils/VideoDownloadManager.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 37c02be4..442fa32f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1598,9 +1598,8 @@ object VideoDownloadManager { val item = pkg.item val id = item.ep.id if (currentDownloads.contains(id)) { // IF IT IS ALREADY DOWNLOADING, RESUME IT - downloadEvent.invoke(Pair(id, DownloadActionType.Resume)) - /** ID needs to be returned to the work-manager to properly await notification */ - // return id + downloadEvent.invoke(id to DownloadActionType.Resume) + return } currentDownloads.add(id) @@ -1741,14 +1740,14 @@ object VideoDownloadManager { notificationCallback: (Int, Notification) -> Unit, setKey: Boolean = true ) { - if (!currentDownloads.any { it == pkg.item.ep.id }) { + if (!currentDownloads.any { it == pkg.item.ep.id } && !downloadQueue.any { it.item.ep.id == pkg.item.ep.id }) { downloadQueue.addLast(pkg) downloadCheck(context, notificationCallback) if (setKey) saveQueue() //ret } else { downloadEvent( - Pair(pkg.item.ep.id, DownloadActionType.Resume) + pkg.item.ep.id to DownloadActionType.Resume ) //null } From bac2ee980551d194b70866fc1580ecf40455e024 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 23 Aug 2023 17:08:26 +0200 Subject: [PATCH 510/888] fixed div by zero --- .../com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index eb8cb9b3..91e97dfc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -44,6 +44,8 @@ open class ResultTrailerPlayer : ResultFragmentPhone(), IOnBackPressed { private fun fixPlayerSize() { playerWidthHeight?.let { (w, h) -> + if(w <= 0 || h <= 0) return@let + val orientation = context?.resources?.configuration?.orientation ?: return val sw = if (orientation == Configuration.ORIENTATION_LANDSCAPE) { From e2502de02cdf226ab4c37cbc71743c68896f5745 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:43:55 +0200 Subject: [PATCH 511/888] bump acra --- app/build.gradle.kts | 2 +- .../main/java/com/lagradost/cloudstream3/AcraApplication.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 50125aa3..178b49c2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -58,7 +58,7 @@ android { targetSdk = 33 versionCode = 59 - versionName = "4.1.6" + versionName = "4.1.7" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 32702657..c14780d8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -43,9 +43,9 @@ class CustomReportSender : ReportSender { override fun send(context: Context, errorContent: CrashReportData) { println("Sending report") val url = - "https://docs.google.com/forms/d/e/1FAIpQLSdOlbgCx7NeaxjvEGyEQlqdh2nCvwjm2vwpP1VwW7REj9Ri3Q/formResponse" + "https://docs.google.com/forms/d/e/1FAIpQLSfO4r353BJ79TTY_-t5KWSIJT2xfqcQWY81xjAA1-1N0U2eSg/formResponse" val data = mapOf( - "entry.753293084" to errorContent.toJSON() + "entry.1993829403" to errorContent.toJSON() ) thread { // to not run it on main thread From 5bad6aca352506c722749fa6c1b5123ae722a071 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:57:54 +0200 Subject: [PATCH 512/888] fixed native crash handle --- .../com/lagradost/cloudstream3/AcraApplication.kt | 11 ++++++++--- .../com/lagradost/cloudstream3/NativeCrashHandler.kt | 11 ++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index c14780d8..4b4747ae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -104,13 +104,17 @@ class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)) : } class AcraApplication : Application() { + override fun onCreate() { super.onCreate() NativeCrashHandler.initCrashHandler() - Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler(filesDir.resolve("last_error")) { + ExceptionHandler(filesDir.resolve("last_error")) { val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) startActivity(Intent.makeRestartActivityTask(intent!!.component)) - }) + }.also { + exceptionHandler = it + Thread.setDefaultUncaughtExceptionHandler(it) + } } override fun attachBaseContext(base: Context?) { @@ -138,6 +142,8 @@ class AcraApplication : Application() { } companion object { + var exceptionHandler: ExceptionHandler? = null + /** Use to get activity from Context */ tailrec fun Context.getActivity(): Activity? = this as? Activity ?: (this as? ContextWrapper)?.baseContext?.getActivity() @@ -212,6 +218,5 @@ class AcraApplication : Application() { activity?.supportFragmentManager?.fragments?.lastOrNull() ) } - } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt index e5cb2702..1fe00748 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt @@ -14,6 +14,12 @@ object NativeCrashHandler { private external fun getSignalStatus(): Int private fun initSignalPolling() = CoroutineScope(Dispatchers.IO).launch { + + //launch { + // delay(10000) + // triggerNativeCrash() + //} + while (true) { delay(10_000) val signal = getSignalStatus() @@ -24,7 +30,10 @@ object NativeCrashHandler { if (lastError != null) continue if (checkSafeModeFile()) continue - throw RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n") + AcraApplication.exceptionHandler?.uncaughtException( + Thread.currentThread(), + RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n") + ) } } From 823ffd87080f12791a72d54508bb2393f4444d3c Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 00:25:05 +0200 Subject: [PATCH 513/888] reverted low api crash handle crashing --- app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 4b4747ae..5f3162b4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -107,7 +107,7 @@ class AcraApplication : Application() { override fun onCreate() { super.onCreate() - NativeCrashHandler.initCrashHandler() + //NativeCrashHandler.initCrashHandler() ExceptionHandler(filesDir.resolve("last_error")) { val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) startActivity(Intent.makeRestartActivityTask(intent!!.component)) From 9a1358e295cf9761d3e8c9bba04ef214dcfc96ca Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Thu, 24 Aug 2023 14:16:33 +0000 Subject: [PATCH 514/888] Lower targetSdk to get all installed packages (#571) --- app/build.gradle.kts | 2 +- app/src/main/AndroidManifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 178b49c2..dfd2c173 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -55,7 +55,7 @@ android { defaultConfig { applicationId = "com.lagradost.cloudstream3" minSdk = 21 - targetSdk = 33 + targetSdk = 29 versionCode = 59 versionName = "4.1.7" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 563c82f8..0e716034 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ - + Date: Thu, 24 Aug 2023 16:39:50 +0200 Subject: [PATCH 515/888] fixed removal of predownloaded files --- .../java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt index 9ba0ef88..85a74963 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt @@ -23,7 +23,7 @@ interface SafeFile { // because UniFile sucks balls on Media we have to do this val absPath = file.absolutePath.removePrefix(File.separator) for (value in MediaFileContentType.values()) { - val prefixes = listOf(value.toAbsolutePath(), value.toPath()) + val prefixes = listOf(value.toAbsolutePath(), value.toPath()).map { it.removePrefix(File.separator) } for (prefix in prefixes) { if (!absPath.startsWith(prefix)) continue return fromMedia( From c92ac3e8b3502f26ed812647134dc0977218831e Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 18:13:42 +0200 Subject: [PATCH 516/888] fixed removal of predownloaded files 2 + permission --- app/src/main/AndroidManifest.xml | 2 +- .../java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0e716034..15767d7b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ - + Download + if(relativePath == path) return this + val newPath = sanitizedAbsolutePath + path + if (folder) File.separator else "" From 9b4701fe91858c71fa32ecec98c3fb05451dfc6c Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 18:14:54 +0200 Subject: [PATCH 517/888] dont remove keys while this is tested --- .../com/lagradost/cloudstream3/utils/VideoDownloadManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 442fa32f..948d7b8a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1682,7 +1682,7 @@ object VideoDownloadManager { // only delete the key if the file is not found if (file == null || !file.existsOrThrow()) { - if (removeKeys) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) + //if (removeKeys) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) // TODO READD return null } From 1a4cbcaea048e9d057f9c70e37a7a46330a0203c Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 21:17:42 +0200 Subject: [PATCH 518/888] small fix --- .../ui/result/ResultViewModel2.kt | 4 +-- .../cloudstream3/utils/storage/MediaFile.kt | 27 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index bdd27091..82d9a8fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -591,7 +591,7 @@ class ResultViewModel2 : ViewModel() { link, "$fileName ${link.name}", folder, - if (link.url.contains(".srt")) ".srt" else "vtt", + if (link.url.contains(".srt")) "srt" else "vtt", false, null, createNotificationCallback = {} ) @@ -719,7 +719,7 @@ class ResultViewModel2 : ViewModel() { ) ) } - .map { ExtractorSubtitleLink(it.name, it.url, "") } + .map { ExtractorSubtitleLink(it.name, it.url, "") }.take(3) .forEach { link -> val fileName = VideoDownloadManager.getFileName(context, meta) downloadSubtitle(context, link, fileName, folder) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt index 526d31ca..51b8adfe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt @@ -13,6 +13,7 @@ import com.hippo.unifile.UniRandomAccessFile import com.lagradost.cloudstream3.mvvm.logError import okhttp3.internal.closeQuietly import java.io.File +import java.io.FileNotFoundException import java.io.InputStream import java.io.OutputStream @@ -65,6 +66,10 @@ class MediaFile( private val external: Boolean = true, absolutePath: String, ) : SafeFile { + override fun toString(): String { + return sanitizedAbsolutePath + } + // this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt" private val sanitizedAbsolutePath: String = replaceDuplicateFileSeparators(absolutePath) @@ -130,7 +135,7 @@ class MediaFile( // VideoDownloadManager.sanitizeFilename(path.replace(File.separator, "")) // in case of duplicate path, aka Download -> Download - if(relativePath == path) return this + if (relativePath == path) return this val newPath = sanitizedAbsolutePath + path + if (folder) File.separator else "" @@ -246,12 +251,24 @@ class MediaFile( override fun length(): Long? { if (isDir) return null - val length = query()?.length ?: return null - if(length <= 0) { - val inputStream : InputStream = openInputStream() ?: return null + val query = query() + val length = query?.length ?: return null + if (length <= 0) { + try { + contentResolver.openFileDescriptor(query.uri, "r") + .use { + it?.statSize + }?.let { + return it + } + } catch (e: FileNotFoundException) { + return null + } + + val inputStream: InputStream = openInputStream() ?: return null return try { inputStream.available().toLong() - } catch (t : Throwable) { + } catch (t: Throwable) { null } finally { inputStream.closeQuietly() From b38a9b1ff5d6e1c5de21851af089232fca7c985b Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 21:39:05 +0200 Subject: [PATCH 519/888] fuck android --- .../com/lagradost/cloudstream3/utils/VideoDownloadManager.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 948d7b8a..7bd863ae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -62,6 +62,7 @@ const val DOWNLOAD_CHANNEL_DESCRIPT = "The download notification channel" object VideoDownloadManager { var maxConcurrentDownloads = 3 + var maxConcurrentConnections = 3 private var currentDownloads = mutableListOf() private const val USER_AGENT = @@ -1568,7 +1569,7 @@ object VideoDownloadManager { folder ?: "", ep.id, startIndex, - callback + callback, parallelConnections = maxConcurrentConnections ) } else { return downloadThing( @@ -1579,7 +1580,7 @@ object VideoDownloadManager { "mp4", tryResume, ep.id, - callback + callback, parallelConnections = maxConcurrentConnections ) } } catch (t: Throwable) { From 2d82480398c2dd5b0dfa5b0c0db7c626658aafd2 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Fri, 25 Aug 2023 15:58:58 +0700 Subject: [PATCH 520/888] fix Rabbitstream (#573) Co-authored-by: Sofie99 --- .../com/lagradost/cloudstream3/extractors/Rabbitstream.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt index b686f7d8..0154b4e8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt @@ -36,7 +36,6 @@ open class Rabbitstream : ExtractorApi() { override val requiresReferer = false open val embed = "ajax/embed-4" open val key = "https://raw.githubusercontent.com/enimax-anime/key/e4/key.txt" - private var rawKey: String? = null override suspend fun getUrl( url: String, @@ -82,9 +81,10 @@ open class Rabbitstream : ExtractorApi() { ) } + } - private suspend fun getRawKey(): String = rawKey ?: app.get(key).text.also { rawKey = it } + private suspend fun getRawKey(): String = app.get(key).text private fun extractRealKey(originalString: String?, stops: String): Pair { val table = parseJson>>(stops) From d0c03321b90b13142dce2ab5931c13db48e4a90d Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Fri, 25 Aug 2023 10:59:18 +0200 Subject: [PATCH 521/888] Translations update from Hosted Weblate (#568) Co-authored-by: Carlos Luiz Co-authored-by: Joel Brink Co-authored-by: Julian Co-authored-by: Mubarek Seyd Juhar Co-authored-by: Sam Cooper Co-authored-by: Skrripy Co-authored-by: mbottari Co-authored-by: tabtomi8 --- app/src/main/res/values-ajp/strings.xml | 2 + app/src/main/res/values-am/strings.xml | 5 + app/src/main/res/values-ars/strings.xml | 203 +++++++++++++++++- app/src/main/res/values-bp/strings.xml | 69 +++++- app/src/main/res/values-de/strings.xml | 12 +- app/src/main/res/values-hu/strings.xml | 38 ++-- app/src/main/res/values-ti/strings.xml | 6 + app/src/main/res/values-uk/strings.xml | 4 +- .../metadata/android/ar-SA/changelogs/2.txt | 1 + .../android/ar-SA/full_description.txt | 10 +- .../android/ar-SA/short_description.txt | 2 +- fastlane/metadata/android/ar-SA/title.txt | 2 +- .../android/de-DE/full_description.txt | 6 +- 13 files changed, 321 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/values-ajp/strings.xml create mode 100644 app/src/main/res/values-am/strings.xml create mode 100644 app/src/main/res/values-ti/strings.xml create mode 100644 fastlane/metadata/android/ar-SA/changelogs/2.txt diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml new file mode 100644 index 00000000..a6b3daec --- /dev/null +++ b/app/src/main/res/values-ajp/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml new file mode 100644 index 00000000..98eb0e0d --- /dev/null +++ b/app/src/main/res/values-am/strings.xml @@ -0,0 +1,5 @@ + + + %s ክፍል %d + ተዋናዮች: %s + \ No newline at end of file diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index 42eba3cc..12d558ad 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -1,2 +1,203 @@ - + + لافتة + تغيير مزود + جارى التحميل + بث%s + ملء + تخطي التحميل + تحميل… + ترجمات + إعادة محاولة الاتصال … + %sييبي%d + الحلقة%dسيتم نشرها في + %dي%dس%dد + %dس%dد + %dد + لافتة الحلقة + اللافتة الاساسية + اذهب للخالف + معاينة الخلفية + سرعة(%.2fx) + فتح مع كلاودستريم + الصفحة الاساسية + ...%sابحث + لايوجد بيانات + المزيد من الخيارات + فتح في المتصفح + المتصفح + شاهد الفلم + دفق التورنت + بدأ التنزيل + عشوائي قادم + تشغيل المقطع الدعائي + الأنواع + توقف التنزيل + خطط للمشاهدة + لا يوجد + إعادة المشاهدة + !تم العثور على تحديث جديد +\n%s->%s + %.1f:قدر + %dاقل + كلاودستريم + بحث + التحميلات + اعدادات + ...بحث + الحلقة القادمة + شارك + مشاهدة + في التوقف + مكتمل + توقف + تشغيل البث المباشر + مصادر + تشغيل الحلقة + تم إلغاء التنزيل + تم التنزيل + تنززل + تحميل + عُد + التحميل فشل + استخدم سطوع النظام في مشغل التطبيق بدلاً من التراكب الداكن + تم تحميل ملف النسخ الاحتياطي + البحث المتقدم + إزالة الحدود السوداء + ترجمات + يضيف خيار السرعة في المشغل + انقر نقرا مزدوجا للبحث + انقر نقرًا مزدوجًا للإيقاف المؤقت + اللاعب يبحث عن المبلغ (بالثواني) + اسحب من جانب إلى آخر للتحكم بموقعك في الفيديو + ابدأ الحلقة التالية عندما تنتهي الحلقة الحالية + استخدام سطوع النظام + تحديث مراقبة التقدم + قم بمزامنة تقدم الحلقة الحالية تلقائيًا + اسحب لتغيير الإعدادات + استعادة البيانات من النسخة الاحتياطية + فشل في استعادة البيانات من الملف %s + انقر مرتين على الجانب الأيمن أو الأيسر للبحث للأمام أو للخلف + البيانات المخزنة + اضغط مرتين في المنتصف للتوقف مؤقتًا + أذونات التخزين مفقودة. حاول مرة اخرى. + حدث خطأ أثناء النسخ الاحتياطي %s + بحث + مكتبة + معلومات + التحديثات والنسخ الاحتياطي + يعطيك نتائج البحث مفصولة حسب المزود + يرسل فقط البيانات عن الأعطال + عرض المقطورات + عرض الملصقات من كيتسو + حسابات + لا يرسل أي بيانات + عرض حلقة حشو للأنمي + إخفاء جودة الفيديو المحددة في نتائج البحث + تحديثات البرنامج المساعد التلقائي + البحث تلقائيًا عن التحديثات الجديدة بعد بدء تشغيل التطبيق. + التحديث إلى الإصداراالمسبق + تنزيل المكونات الإضافية تلقائيًا + إعادة عملية الإعداد + ابحث عن تحديثات الإصدار التجريبي بدلاً من الإصدارات الكاملة فقط + حدد الوضع لتصفية تنزيل المكونات الإضافية + قم تلقائيًا بتثبيت جميع المكونات الإضافية التي لم يتم تثبيتها بعد من المستودعات المضافة. + إعدادات ترجمات كرومكاست + وضع إيجينجرافي + انتقد للبحث + نسخ إحتياطي للبيانات + إظهار تحديثات التطبيق + إعدادات ترجمات المشغل + ترجمات كرومكاست + قم بالتمرير لأعلى أو لأسفل على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت + التشغيل التلقائي للحلقة القادمة + تطبيق رواية خفيفة من نفس المطورين + أعط بينيني للمطورين + جيتهب + تطبيق انيمي من نفس المطورين + لغة التطبيق + انضم إلى الديسكورد + بنيني معطا + بعض الهواتف لا تدعم مثبت الحزمة الجديد. جرب الخيار القديم إذا لم يتم تثبيت التحديثات. + مثبت تتبيق + اجتاز + الحلقات + موسم + تم نسخ الرابط إلى الحافظة + مسح + وقف + جارٍ تنزيل تحديث التطبيق… + إعادة التعيين إلى القيمة العادية + س + %d%s + لا يتمتع هذا المزود بدعم كرومكاست + لم يتم العثور على أي روابط + تشغيل الحلقة + عذرًا، تعطل التطبيق. سيتم إرسال تقرير خطأ مجهول إلى المطورين + %s%d%s + لا يوجد موسم + حلقة + %d-%d + يي + امسح التاريخ + جارٍ تثبيت تحديث التطبيق… + بدأ + لم يتم العثور على أي حلقات + إظهار تخطي النوافذ المنبثقة للفتح/الإنهاء + الكثير من النص. غير قادر على الحفظ في الحافظة. + وضع علامة كما شاهدت + إزالة من شاهد + حذف ملف + فشل + اكتمل + -30 + +30 + تاريخ + هل أنت متأكد أنك تريد الخروج؟ + نعم + لا + تعذر تثبيت الإصدار الجديد من التطبيق + إرث + منزل المجموعة + التقييم (من الأقل إلى الأعلى) + تم التحديث (من الجديد إلى القديم) + تم التحديث (القديم إلى الجديد) + أبجديًا (من الألف إلى الياء) + مكتبتك فارغة :( +\nقم بتسجيل الدخول إلى حساب المكتبة أو قم بإضافة العروض إلى مكتبتك المحلية. + !تم العثور على ملف الوضع الآمن +\n.عدم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف + ارجع + تحديث العروض المشتركة + الوضع العادي + حرر + ملفات تعريفية + مساعدة + .هنا يمكنك تغيير كيفية ترتيب المصادر. إذا كان للفيديو أولوية أعلى، فسيظهر في مكان أعلى في تحديد المصدر. مجموع أولوية المصدر وأولوية الجودة هو أولوية الفيديو +\n +\nالمصدر أ: 3 +\nالجودة ب: 7 +\nستكون أولوية الفيديو المدمجة .10 +\n +\n!ملاحظة: إذا كان المجموع 10 أو أكثر، فسيقوم اللاعب تلقائيًا بتخطي التحميل عند تحميل هذا الرابط + لقد صوت بالفعل + أبجديًا (ياء إلى ألف) + ترتيب حسب + مشترك + سيتم تحديث التطبيق عند الخروج + رتب + التقييم (من الأعلى إلى الأقل) + حدد المكتبة + افتع مع + .هذه القائمة فارغة. حاول التبديل إلى واحد آخر + %sتم الاشتراك في + %sتم إلغاء الاشتراك من + !%dتم إصدار الحلقة + خلفية الملف الشخصي + %dملف التعريف + واي فاي + بيانات الجوال + استخدم + %sتعذر إنشاء واجهة المستخدم بشكل صحيح، وهذا خطأ كبير ويجب الإبلاغ عنه على الفور + الصفات + \ No newline at end of file diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 425293e4..df95d69f 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -156,7 +156,7 @@ Não enviar nenhum dado Mostrar episódios de Filler em anime Mostrar trailers - Mostrar posters do kitsu + Mostrar posters do Kitsu Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa Atualizações de plugin automáticas Mostrar atualizações do app @@ -183,7 +183,7 @@ S E Nenhum Episódio encontrado - Deletar Arquivo + Apagar Arquivo Deletar Pausar Retomar @@ -410,15 +410,19 @@ Transferido %d %s com sucesso Tudo %s já transferido Transferência em batch - plugin - plugins + Plugin + Plugins Isto irá apagar todos os repositórios de plugins Apagar repositório Transferir lista de sites a usar Transferido: %d Desativado: %d Não transferido: %d - Adicionar um repositório para instalar extensões de sites + CloudStream não tem fontes instaladas por padrão. Você precisa instalar um site de repositórios. +\n +\nPor causa das limitações do DMCA (Digital Millennium Copyright Act ) feito em nome de Sky UK Limited 🤮nós não podemos adicionar site de repositórios no app. +\n +\nEntre no nosso Discord ou pesquise online. Ver repositórios da comunidade Lista pública Todas as legendas em maiúsculas @@ -455,7 +459,7 @@ Editar Perfis Exibindo Player - procure na Barra de Progresso - remover dos assitidos + Remover dos assistidos Extensões Alfabética(A => Z) Abrir com @@ -468,7 +472,7 @@ Biblioteca Não Trilhas Sonoras - Votação(Baixa para Alta) + Votação (Baixa para Alta) Atualização iniciada Conteúdo +18 Ajuda @@ -476,7 +480,7 @@ Não pudemos instalar a nova versão do App instalador de pacotes Organizar por - Votação(Alta para Baixa) + Votação (Alta para Baixa) Alfabética(Z => A) Qualidade Perfil de plano de fundo @@ -499,4 +503,51 @@ Atualizando shows inscritos Player oculto - Procure na barra de progresso Conteúdo +18 - + Reiniciar + Parar + Marcar como assistido + Aplicativo precisa ser fechado para atualizar + Mostrar popups pulados para abertura e finalização + %d-%d + Player interno + Tamanho + Abrindo + %s %d%s + %d plugins atualizados + Todos as extensões serão desligadas para ajuda se talvez estejam causando algum bug. + Aplicativo não encontrado + Recapitular + Todas as linguagens + Pula %s + Mistura terminada + Modo seguro ligado + Ranquear: %s + Linguagem + Lista de reprodução HLS + Terminando + %d %s + Adicionado em (antigo para novo) + Introdução + plug-ins não foram encontrados no repositório + Repositório não encontrado, verifique o URL e tente usa uma VPN + Descrição + Versão + Autores + Instale a extensão primeiro + Créditos + Historico + Limpar historico + Tem Muito texto. Não é possível salvar no clipboard. + Player de vídeo preferido + Começar + Suportado + Status + MPV + Abrindo mistura + VLC + Aplicar quando reiniciar + Visualização info de crash + Faixas de áudio + Adicionado em (novo para antigo) + Faixas de video + \ 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 45a6a66c..6892c8fd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -92,7 +92,7 @@ Abbrechen Kopieren Schließen - Löschen + Leeren Speichern Player-Geschwindigkeit Untertiteleinstellungen @@ -390,7 +390,7 @@ Einrichtung überspringen Aussehen der App passend zu dem des Geräts ändern Absturzmeldung - Was möchtest du anschauen\? + Was möchten Sie sehen\? Fertig Erweiterungen Repository hinzufügen @@ -546,4 +546,10 @@ \nWerden eine kombinierte Videopriorität von 10 haben. \n \nHINWEIS: Wenn die Summe 10 oder mehr beträgt, überspringt der Player automatisch das Laden, wenn der Link geladen wird! - + Filtermodus für Plugin-Downloads auswählen + Es wurde bereits abgestimmt + Keine Plugins im Repository gefunden + Repository nicht gefunden, überprüfe die URL und probiere eine VPN + Die Benutzeroberfläche konnte nicht korrekt erstellt werden. Dies ist ein schwerwiegender Fehler und sollte sofort gemeldet werden. %s + Deaktivieren + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 46407f76..ac817db0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -190,7 +190,7 @@ Adatok eltárolva Hiba a biztonsági mentés során %s Fiókok - Szolgáltatás szerinti keresés eredmények + Szolgáltató szerint elkülönítve adja meg a keresési eredményeket Nem küld adatokat Poszterek megjelenítése Kitsu-ról Kiválasztott videóminőségek elrejtése keresési eredményekbe @@ -198,7 +198,7 @@ Bővítmények automatikus letöltése Automatikusan telepíti az összes még nem telepített bővítményt a hozzáadott tárolókból. Alkalmazás frissítések megjelenítése - Automatikusan keressen új frissítéseket indításkor + Automatikusan keressen új frissítéseket indításkor. Frissítés az előzetes kiadásokhoz (prerelease) Csak előzetesen kiadott frissítések (prerelease) keresése a teljes kiadások helyett Github @@ -232,30 +232,30 @@ Lejátszás böngészőben Feliratok letöltése Újracsatlakozás… - Swipe balra vagy jobbra a videólejátszóban az idő vezérléséhez + Húzd balra vagy jobbra a videólejátszóban az idő vezérléséhez Csúsztassa ujját a beállítások módosításához - Csúsztassa az újját bal vagy jobb oldalon a fényerő vagy hangerő megváltoztatásához + Csúsztassa felfelé vagy lefelé a bal vagy jobb oldalon a fényerő vagy a hangerő megváltoztatásához Biztonsági mentés 0 Banán a fejlesztőknek - Swipe to seek + Húzás a kereséshez Következő epizód automatikus lejátszása Következő epizód lejátszása amikor az aktuális epizód véget ér - Dupla koppintás to seek + Dupla koppintás a kereséshez Dupla koppintás a szüneteltetéshez - Player seek amount + Lejátszó keresési értéke (Másodpercben) Koppintson kétszer a jobb vagy bal oldalra az előre vagy hátra ugráshoz - Koppintson középre a szüneteltetéshez + Koppintson kétszer középen a szüneteltetéshez Rendszer fényerejének használata Rendszer fényerejének használata az appban a sötét átfedés helyett Előrehaladás frissítése Automatikusan szinkronizálja az aktuális epizód előrehaladását - Adatok visszaállítása a biztonsági mentésből + Adatok visszaállítása biztonsági mentésből Biztonsági mentés betöltve Információ Folytatás -30 Frissítés elkezdődött - Nem sikerült visszaállítani az adatok a fájlból %s + Nem sikerült visszaállítani az adatokat a %s fájlból Tárolási engedélyek hiányoznak. Kérjük próbálja újra. Csak összeomlásokról küld adatokat APK Telepítő @@ -280,7 +280,7 @@ DNS HTTPS-en keresztül Böngésző Android TV - kézmozdulatok + Kézmozdulatok frissítés kihagyása Alkalmazásfrissítések Szolgáltatók @@ -496,4 +496,18 @@ HQ %d letöltve Start - + Emulátor elrendezés + Nyomkövetés hozzáadása + Telefon elrendezés + Poszter cím helye + Tegye a címet a poszter alá + Az átugrás mértéke, amikor a lejátszó el van rejtve + Jogi nyilatkozat + Lejátszó megjelenítve - Ugrási Érték + Lejátszó elrejtve - Ugrási Érték + Klónozott oldal + Egy meglévő webhely klónjának hozzáadása, más URL-címmel + TV elrendezés + Automatikus + Az átugrás mértéke, amikor a lejátszó látható + \ No newline at end of file diff --git a/app/src/main/res/values-ti/strings.xml b/app/src/main/res/values-ti/strings.xml new file mode 100644 index 00000000..0f64858d --- /dev/null +++ b/app/src/main/res/values-ti/strings.xml @@ -0,0 +1,6 @@ + + + %s ክፋል %d + ክፋል %d በ ላይ ይወጣል + ተዋሳእቲ፡ %s + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e0db1c0e..8b1b6c39 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -418,7 +418,7 @@ Почалося завантаження %d %s… Завантажено %d %s Всі %s вже завантажено - Пакетне завантаження + Завантажити пакети плагін плагіни Видалити репозиторій @@ -553,4 +553,4 @@ Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували - + \ No newline at end of file diff --git a/fastlane/metadata/android/ar-SA/changelogs/2.txt b/fastlane/metadata/android/ar-SA/changelogs/2.txt new file mode 100644 index 00000000..cc43acf1 --- /dev/null +++ b/fastlane/metadata/android/ar-SA/changelogs/2.txt @@ -0,0 +1 @@ +تمت إضافة سجل التغيير! diff --git a/fastlane/metadata/android/ar-SA/full_description.txt b/fastlane/metadata/android/ar-SA/full_description.txt index 2107b338..9668a9b1 100644 --- a/fastlane/metadata/android/ar-SA/full_description.txt +++ b/fastlane/metadata/android/ar-SA/full_description.txt @@ -1,14 +1,10 @@ -يتيح لك كلاود ستريم -3 بث وتنزيل الأفلام والمسلسلات التلفزيونية والأنيمي. يأتي التطبيق بدون أي إعلانات وتحليلات. و يدعم العديد من مواقع البث الاولي(التريلر) والأفلام والمزيد. وتشمل الميزات: - +يسمح لك كلاود ستريم -3 ببث وتنزيل الأفلام, المسلسلات التلفزيونية, والأنيمي. +يأتي التطبيق بدون أي إعلانات وتحليلات و + يدعم العديد من مواقع البث الاولي(التريلر) ,والأفلام, والمزيد. إشارات مرجعية - -قم بتنزيل ودفق الأفلام والبرامج التلفزيونية والأنيمي - - تنزيلات الترجمة - دعم كروم كاست diff --git a/fastlane/metadata/android/ar-SA/short_description.txt b/fastlane/metadata/android/ar-SA/short_description.txt index f396ff81..7ccd9743 100644 --- a/fastlane/metadata/android/ar-SA/short_description.txt +++ b/fastlane/metadata/android/ar-SA/short_description.txt @@ -1 +1 @@ -بث وتحميل الأفلام والأنمي والمسلسلات التلفزيونية. +بث وتحميل الأفلام, الأنمي, والمسلسلات التلفزيونية. diff --git a/fastlane/metadata/android/ar-SA/title.txt b/fastlane/metadata/android/ar-SA/title.txt index 635e1390..7977b290 100644 --- a/fastlane/metadata/android/ar-SA/title.txt +++ b/fastlane/metadata/android/ar-SA/title.txt @@ -1 +1 @@ -كلاود ستريم +كلاودستريم diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index df314372..ea2a8750 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -1,11 +1,11 @@ -Mit CloudStream-3 kannst du Filme, TV-Serien und Anime streamen und herunterladen. +Mit CloudStream-3 kannst du Filme, TV-Serien und Anime streamen und herunterladen. Die App kommt ganz ohne Werbung und Analytik aus. -Sie unterstützt mehrere Trailer-, Filmseiten und vieles mehr. Integrierte Features: +Sie unterstützt zahlreiche Trailer, Filmseiten und vieles mehr, unter anderem: Lesezeichen -Herunterladen und Streamen von Filmen, Fernsehsendungen und Animes +Herunterladen und Streaming von Filmen, Fernsehsendungen und Animes Downloads von Untertiteln From 557003895b65a7b6e1631489523e1225d56cdc34 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Fri, 25 Aug 2023 08:59:37 +0000 Subject: [PATCH 522/888] chore(locales): fix locale issues --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 3 +++ app/src/main/res/values-ajp/strings.xml | 2 +- app/src/main/res/values-am/strings.xml | 2 +- app/src/main/res/values-ars/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-ti/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- 9 files changed, 11 insertions(+), 8 deletions(-) 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 f46aac9b..1bd9778e 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 @@ -54,6 +54,8 @@ fun getCurrentLocale(context: Context): String { // https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes leave blank for auto val appLanguages = arrayListOf( /* begin language list */ + Triple("", "ajp", "ajp"), + Triple("", "አማርኛ", "am"), Triple("", "العربية", "ar"), Triple("", "ars", "ars"), Triple("", "български", "bg"), @@ -96,6 +98,7 @@ val appLanguages = arrayListOf( Triple("", "Soomaaliga", "so"), Triple("", "svenska", "sv"), Triple("", "தமிழ்", "ta"), + Triple("", "ትግርኛ", "ti"), Triple("", "Tagalog", "tl"), Triple("", "Türkçe", "tr"), Triple("", "українська", "uk"), diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index a6b3daec..42eba3cc 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index 98eb0e0d..5a799eb4 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -2,4 +2,4 @@ %s ክፍል %d ተዋናዮች: %s - \ No newline at end of file + diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index 12d558ad..ea8aa05c 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -200,4 +200,4 @@ استخدم %sتعذر إنشاء واجهة المستخدم بشكل صحيح، وهذا خطأ كبير ويجب الإبلاغ عنه على الفور الصفات - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index df95d69f..b70eec12 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -550,4 +550,4 @@ Faixas de áudio Adicionado em (novo para antigo) Faixas de video - \ 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 6892c8fd..6739465a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -552,4 +552,4 @@ Repository nicht gefunden, überprüfe die URL und probiere eine VPN Die Benutzeroberfläche konnte nicht korrekt erstellt werden. Dies ist ein schwerwiegender Fehler und sollte sofort gemeldet werden. %s Deaktivieren - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index ac817db0..05a7f0a7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -510,4 +510,4 @@ TV elrendezés Automatikus Az átugrás mértéke, amikor a lejátszó látható - \ No newline at end of file + diff --git a/app/src/main/res/values-ti/strings.xml b/app/src/main/res/values-ti/strings.xml index 0f64858d..a9079ed5 100644 --- a/app/src/main/res/values-ti/strings.xml +++ b/app/src/main/res/values-ti/strings.xml @@ -3,4 +3,4 @@ %s ክፋል %d ክፋል %d በ ላይ ይወጣል ተዋሳእቲ፡ %s - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8b1b6c39..4866ecd4 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -553,4 +553,4 @@ Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували - \ No newline at end of file + From 8193e39b3046192dfb6970e5ff49f30d629d033a Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Fri, 25 Aug 2023 23:16:34 +0200 Subject: [PATCH 523/888] bump + refactor --- app/build.gradle.kts | 15 +- .../lagradost/cloudstream3/MainActivity.kt | 18 +- .../cloudstream3/NativeCrashHandler.kt | 4 +- .../ui/player/DownloadedPlayerActivity.kt | 8 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 6 +- .../ui/settings/SettingsGeneral.kt | 4 +- .../cloudstream3/utils/BackupUtils.kt | 1 + .../utils/VideoDownloadManager.kt | 14 +- .../cloudstream3/utils/storage/MediaFile.kt | 389 ------------------ .../cloudstream3/utils/storage/SafeFile.kt | 244 ----------- .../utils/storage/UniFileWrapper.kt | 116 ------ 11 files changed, 40 insertions(+), 779 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dfd2c173..333fbfb8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -32,11 +32,12 @@ android { enable = true } - externalNativeBuild { - cmake { - path("CMakeLists.txt") - } - } + // disable this for now + //externalNativeBuild { + // cmake { + // path("CMakeLists.txt") + // } + //} signingConfigs { create("prerelease") { @@ -58,7 +59,7 @@ android { targetSdk = 29 versionCode = 59 - versionName = "4.1.7" + versionName = "4.1.8" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") @@ -232,7 +233,7 @@ dependencies { // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 - implementation("com.github.tachiyomiorg:unifile:17bec43") + implementation("com.github.LagradOst:SafeFile:0.0.2") // API because cba maintaining it myself implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 15b16078..fbad4fce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -144,6 +144,7 @@ import com.lagradost.cloudstream3.utils.USER_PROVIDER_API import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ResponseParser +import com.lagradost.safefile.SafeFile import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import java.io.File @@ -279,6 +280,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" var lastError: String? = null + /** * Setting this will automatically enter the query in the search * next time the search fragment is opened. @@ -366,7 +368,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { nextSearchQuery = try { URLDecoder.decode(query, "UTF-8") - } catch (t : Throwable) { + } catch (t: Throwable) { logError(t) query } @@ -859,7 +861,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { RecyclerView::class.java.declaredMethods.firstOrNull { it.name == "scrollStep" }?.also { it.isAccessible = true } - } catch (t : Throwable) { + } catch (t: Throwable) { null } } @@ -906,11 +908,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (dx > 0) dx else 0 } - if(!NO_MOVE_LIST) { + if (!NO_MOVE_LIST) { parent.smoothScrollBy(rdx, 0) - }else { + } else { val smoothScroll = reflectedScroll - if(smoothScroll == null) { + if (smoothScroll == null) { parent.smoothScrollBy(rdx, 0) } else { try { @@ -920,12 +922,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val out = IntArray(2) smoothScroll.invoke(parent, rdx, 0, out) val scrolledX = out[0] - if(abs(scrolledX) <= 0) { // newFocus.measuredWidth*2 + if (abs(scrolledX) <= 0) { // newFocus.measuredWidth*2 smoothScroll.invoke(parent, -rdx, 0, out) parent.smoothScrollBy(scrolledX, 0) if (NO_MOVE_LIST) targetDx = scrolledX } - } catch (t : Throwable) { + } catch (t: Throwable) { parent.smoothScrollBy(rdx, 0) } } @@ -1131,10 +1133,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { snackbar.show() } } - } } + ioSafe { SafeFile.check(this@MainActivity) } if (PluginManager.checkSafeModeFile()) { normalSafeApiCall { diff --git a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt index 1fe00748..7be90440 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt @@ -10,7 +10,7 @@ import kotlinx.coroutines.launch object NativeCrashHandler { // external fun triggerNativeCrash() - private external fun initNativeCrashHandler() + /*private external fun initNativeCrashHandler() private external fun getSignalStatus(): Int private fun initSignalPolling() = CoroutineScope(Dispatchers.IO).launch { @@ -49,5 +49,5 @@ object NativeCrashHandler { } initSignalPolling() - } + }*/ } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 03405faf..d181e175 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.player +import android.content.ContentUris import android.content.Intent import android.net.Uri import android.os.Bundle @@ -10,7 +11,7 @@ import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.UIHelper.navigate -import com.lagradost.cloudstream3.utils.storage.SafeFile +import com.lagradost.safefile.SafeFile const val DTAG = "PlayerActivity" @@ -57,7 +58,10 @@ class DownloadedPlayerActivity : AppCompatActivity() { listOf( ExtractorUri( uri = uri, - name = name ?: getString(R.string.downloaded_file) + name = name ?: getString(R.string.downloaded_file), + // well not the same as a normal id, but we take it as users may want to + // play downloaded files and save the location + id = kotlin.runCatching { ContentUris.parseId(uri) }.getOrNull()?.hashCode() ) ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 341b4ad3..2b9304b6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -21,13 +21,11 @@ import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager import androidx.media3.common.Format.NO_VALUE import androidx.media3.common.MimeTypes -import com.hippo.unifile.UniFile import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.databinding.DialogOnlineSubtitlesBinding import com.lagradost.cloudstream3.databinding.FragmentPlayerBinding -import com.lagradost.cloudstream3.databinding.PlayerCustomLayoutBinding import com.lagradost.cloudstream3.databinding.PlayerSelectSourceAndSubsBinding import com.lagradost.cloudstream3.databinding.PlayerSelectTracksBinding import com.lagradost.cloudstream3.mvvm.* @@ -52,7 +50,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import com.lagradost.cloudstream3.utils.UIHelper.toPx -import com.lagradost.cloudstream3.utils.storage.SafeFile +import com.lagradost.safefile.SafeFile import kotlinx.coroutines.Job import java.util.* import kotlin.math.abs @@ -136,7 +134,7 @@ class GeneratorPlayer : FullScreenPlayer() { return durPos.position } - var currentVerifyLink: Job? = null + private var currentVerifyLink: Job? = null private fun loadExtractorJob(extractorLink: ExtractorLink?) { currentVerifyLink?.cancel() 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 f46aac9b..49f678c4 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 @@ -38,7 +38,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.USER_PROVIDER_API import com.lagradost.cloudstream3.utils.VideoDownloadManager import com.lagradost.cloudstream3.utils.VideoDownloadManager.getBasePath -import com.lagradost.cloudstream3.utils.storage.SafeFile +import com.lagradost.safefile.SafeFile fun getCurrentLocale(context: Context): String { val res = context.resources @@ -335,7 +335,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { val currentDir = settingsManager.getString(getString(R.string.download_path_pref), null) - ?: context?.let { ctx -> VideoDownloadManager.getDefaultDir(ctx).toString() } + ?: context?.let { ctx -> VideoDownloadManager.getDefaultDir(ctx)?.filePath() } activity?.showBottomDialog( dirs + listOf("Custom"), diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 2da54678..41326eb8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -158,6 +158,7 @@ object BackupUtils { val displayName = "CS3_Backup_${date}" val backupFile = getBackup() val stream = setupStream(this, displayName, null, ext, false) + fileStream = stream.openNew() printStream = PrintWriter(fileStream) printStream.print(mapper.writeValueAsString(backupFile)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 7bd863ae..6425ba66 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -35,8 +35,8 @@ import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.removeKey import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -import com.lagradost.cloudstream3.utils.storage.MediaFileContentType -import com.lagradost.cloudstream3.utils.storage.SafeFile +import com.lagradost.safefile.MediaFileContentType +import com.lagradost.safefile.SafeFile import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -554,9 +554,8 @@ object VideoDownloadManager { extension: String, tryResume: Boolean, ): StreamData { - val (base, _) = context.getBasePath() return setupStream( - base ?: throw IOException("Bad config"), + context.getBasePath().first ?: getDefaultDir(context) ?: throw IOException("Bad config"), name, folder, extension, @@ -1401,7 +1400,12 @@ object VideoDownloadManager { metadata.type = DownloadType.IsFailed } } finally { - fileMutex.unlock() + try { + // may cause java.lang.IllegalStateException: Mutex is not locked because of cancelling + fileMutex.unlock() + } catch (t : Throwable) { + logError(t) + } } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt deleted file mode 100644 index 51b8adfe..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt +++ /dev/null @@ -1,389 +0,0 @@ -package com.lagradost.cloudstream3.utils.storage - -import android.content.ContentResolver -import android.content.ContentUris -import android.content.ContentValues -import android.content.Context -import android.net.Uri -import android.os.Build -import android.os.Environment -import android.provider.MediaStore -import androidx.annotation.RequiresApi -import com.hippo.unifile.UniRandomAccessFile -import com.lagradost.cloudstream3.mvvm.logError -import okhttp3.internal.closeQuietly -import java.io.File -import java.io.FileNotFoundException -import java.io.InputStream -import java.io.OutputStream - - -enum class MediaFileContentType { - Downloads, - Audio, - Video, - Images, -} - -// https://developer.android.com/training/data-storage/shared/media -fun MediaFileContentType.toPath(): String { - return when (this) { - MediaFileContentType.Downloads -> Environment.DIRECTORY_DOWNLOADS - MediaFileContentType.Audio -> Environment.DIRECTORY_MUSIC - MediaFileContentType.Video -> Environment.DIRECTORY_MOVIES - MediaFileContentType.Images -> Environment.DIRECTORY_DCIM - } -} - -fun MediaFileContentType.defaultPrefix(): String { - return Environment.getExternalStorageDirectory().absolutePath -} - -fun MediaFileContentType.toAbsolutePath(): String { - return defaultPrefix() + File.separator + - this.toPath() -} - -fun replaceDuplicateFileSeparators(path: String): String { - return path.replace(Regex("${File.separator}+"), File.separator) -} - -@RequiresApi(Build.VERSION_CODES.Q) -fun MediaFileContentType.toUri(external: Boolean): Uri { - val volume = if (external) MediaStore.VOLUME_EXTERNAL_PRIMARY else MediaStore.VOLUME_INTERNAL - return when (this) { - MediaFileContentType.Downloads -> MediaStore.Downloads.getContentUri(volume) - MediaFileContentType.Audio -> MediaStore.Audio.Media.getContentUri(volume) - MediaFileContentType.Video -> MediaStore.Video.Media.getContentUri(volume) - MediaFileContentType.Images -> MediaStore.Images.Media.getContentUri(volume) - } -} - -@RequiresApi(Build.VERSION_CODES.Q) -class MediaFile( - private val context: Context, - private val folderType: MediaFileContentType, - private val external: Boolean = true, - absolutePath: String, -) : SafeFile { - override fun toString(): String { - return sanitizedAbsolutePath - } - - // this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt" - private val sanitizedAbsolutePath: String = - replaceDuplicateFileSeparators(absolutePath) - - // this is only a directory if the filepath ends with a / - private val isDir: Boolean = sanitizedAbsolutePath.endsWith(File.separator) - private val isFile: Boolean = !isDir - - // this is the relative path including the Download directory, so "/hello/text.txt" => "Download/hello" - private val relativePath: String = - replaceDuplicateFileSeparators(folderType.toPath() + File.separator + sanitizedAbsolutePath).substringBeforeLast( - File.separator - ) - - // "/hello/text.txt" => "text.txt" - private val namePath: String = sanitizedAbsolutePath.substringAfterLast(File.separator) - private val baseUri = folderType.toUri(external) - private val contentResolver: ContentResolver = context.contentResolver - - init { - // some standard asserts that should always be hold or else this class wont work - assert(!relativePath.endsWith(File.separator)) - assert(!(isDir && isFile)) - assert(!relativePath.contains(File.separator + File.separator)) - assert(!namePath.contains(File.separator)) - - if (isDir) { - assert(namePath.isBlank()) - } else { - assert(namePath.isNotBlank()) - } - } - - companion object { - private fun splitFilenameExt(name: String): Pair { - val split = name.indexOfLast { it == '.' } - if (split <= 0) return name to null - val ext = name.substring(split + 1 until name.length) - if (ext.isBlank()) return name to null - - return name.substring(0 until split) to ext - } - - private fun splitFilenameMime(name: String): Pair { - val (display, ext) = splitFilenameExt(name) - val mimeType = when (ext) { - - // Absolutely ridiculous, if text/vtt is used as mimetype scoped storage prevents - // downloading to /Downloads yet it works with null - - "vtt" -> null // "text/vtt" - "mp4" -> "video/mp4" - "srt" -> null // "application/x-subrip"//"text/plain" - else -> null - } - return display to mimeType - } - } - - private fun appendRelativePath(path: String, folder: Boolean): MediaFile? { - if (isFile) return null - - // VideoDownloadManager.sanitizeFilename(path.replace(File.separator, "")) - - // in case of duplicate path, aka Download -> Download - if (relativePath == path) return this - - val newPath = - sanitizedAbsolutePath + path + if (folder) File.separator else "" - - return MediaFile( - context = context, - folderType = folderType, - external = external, - absolutePath = newPath - ) - } - - private fun createUri(displayName: String? = namePath): Uri? { - if (displayName == null) return null - if (isFile) return null - val (name, mime) = splitFilenameMime(displayName) - - val newFile = ContentValues().apply { - put(MediaStore.MediaColumns.DISPLAY_NAME, displayName) - put(MediaStore.MediaColumns.TITLE, name) - if (mime != null) - put(MediaStore.MediaColumns.MIME_TYPE, mime) - put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath) - } - return contentResolver.insert(baseUri, newFile) - } - - override fun createFile(displayName: String?): SafeFile? { - if (isFile || displayName == null) return null - query(displayName)?.uri ?: createUri(displayName) ?: return null - return appendRelativePath(displayName, false) //SafeFile.fromUri(context, ?: return null) - } - - override fun createDirectory(directoryName: String?): SafeFile? { - if (directoryName == null) return null - // we don't create a dir here tbh, just fake create it - return appendRelativePath(directoryName, true) - } - - private data class QueryResult( - val uri: Uri, - val lastModified: Long, - val length: Long, - ) - - @RequiresApi(Build.VERSION_CODES.Q) - private fun query(displayName: String = namePath): QueryResult? { - try { - //val (name, mime) = splitFilenameMime(fullName) - - val projection = arrayOf( - MediaStore.MediaColumns._ID, - MediaStore.MediaColumns.DATE_MODIFIED, - MediaStore.MediaColumns.SIZE, - ) - - val selection = - "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'" - - contentResolver.query( - baseUri, - projection, selection, null, null - )?.use { cursor -> - while (cursor.moveToNext()) { - val id = - cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) - - return QueryResult( - uri = ContentUris.withAppendedId( - baseUri, id - ), - lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)), - length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), - ) - } - } - } catch (t: Throwable) { - logError(t) - } - - return null - } - - override fun uri(): Uri? { - return query()?.uri - } - - override fun name(): String? { - if (isDir) return null - return namePath - } - - override fun type(): String? { - TODO("Not yet implemented") - } - - override fun filePath(): String { - return replaceDuplicateFileSeparators(relativePath + File.separator + namePath) - } - - override fun isDirectory(): Boolean { - return isDir - } - - override fun isFile(): Boolean { - return isFile - } - - override fun lastModified(): Long? { - if (isDir) return null - return query()?.lastModified - } - - override fun length(): Long? { - if (isDir) return null - val query = query() - val length = query?.length ?: return null - if (length <= 0) { - try { - contentResolver.openFileDescriptor(query.uri, "r") - .use { - it?.statSize - }?.let { - return it - } - } catch (e: FileNotFoundException) { - return null - } - - val inputStream: InputStream = openInputStream() ?: return null - return try { - inputStream.available().toLong() - } catch (t: Throwable) { - null - } finally { - inputStream.closeQuietly() - } - } - return length - } - - override fun canRead(): Boolean { - TODO("Not yet implemented") - } - - override fun canWrite(): Boolean { - TODO("Not yet implemented") - } - - private fun delete(uri: Uri): Boolean { - return contentResolver.delete(uri, null, null) > 0 - } - - override fun delete(): Boolean { - return if (isDir) { - (listFiles() ?: return false).all { - it.delete() - } - } else { - delete(uri() ?: return false) - } - } - - override fun exists(): Boolean { - if (isDir) return true - return query() != null - } - - override fun listFiles(): List? { - if (isFile) return null - try { - val projection = arrayOf( - MediaStore.MediaColumns.DISPLAY_NAME - ) - - val selection = - "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}'" - contentResolver.query( - baseUri, - projection, selection, null, null - )?.use { cursor -> - val out = ArrayList(cursor.count) - while (cursor.moveToNext()) { - val nameIdx = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) - if (nameIdx == -1) continue - val name = cursor.getString(nameIdx) - - appendRelativePath(name, false)?.let { new -> - out.add(new) - } - } - - out - } - } catch (t: Throwable) { - logError(t) - } - return null - } - - override fun findFile(displayName: String?, ignoreCase: Boolean): SafeFile? { - if (isFile || displayName == null) return null - - val new = appendRelativePath(displayName, false) ?: return null - if (new.exists()) { - return new - } - - return null//SafeFile.fromUri(context, query(displayName ?: return null)?.uri ?: return null) - } - - override fun renameTo(name: String?): Boolean { - TODO("Not yet implemented") - } - - override fun openOutputStream(append: Boolean): OutputStream? { - try { - // use current file - uri()?.let { - return contentResolver.openOutputStream( - it, - if (append) "wa" else "wt" - ) - } - - // create a new file if current is not found, - // as we know it is new only write access is needed - createUri()?.let { - return contentResolver.openOutputStream( - it, - "w" - ) - } - return null - } catch (t: Throwable) { - return null - } - } - - override fun openInputStream(): InputStream? { - try { - return contentResolver.openInputStream(uri() ?: return null) - } catch (t: Throwable) { - return null - } - } - - override fun createRandomAccessFile(mode: String?): UniRandomAccessFile? { - TODO("Not yet implemented") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt deleted file mode 100644 index 85a74963..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/SafeFile.kt +++ /dev/null @@ -1,244 +0,0 @@ -package com.lagradost.cloudstream3.utils.storage - -import android.content.Context -import android.net.Uri -import android.os.Build -import android.os.Environment -import com.hippo.unifile.UniFile -import com.hippo.unifile.UniRandomAccessFile - -import java.io.File -import java.io.IOException -import java.io.InputStream -import java.io.OutputStream - -interface SafeFile { - companion object { - fun fromUri(context: Context, uri: Uri): SafeFile? { - return UniFileWrapper(UniFile.fromUri(context, uri) ?: return null) - } - - fun fromFile(context: Context, file: File?): SafeFile? { - if (file == null) return null - // because UniFile sucks balls on Media we have to do this - val absPath = file.absolutePath.removePrefix(File.separator) - for (value in MediaFileContentType.values()) { - val prefixes = listOf(value.toAbsolutePath(), value.toPath()).map { it.removePrefix(File.separator) } - for (prefix in prefixes) { - if (!absPath.startsWith(prefix)) continue - return fromMedia( - context, - value, - absPath.removePrefix(prefix).ifBlank { File.separator } - ) - } - } - - return UniFileWrapper(UniFile.fromFile(file) ?: return null) - } - - fun fromAsset( - context: Context, - filename: String? - ): SafeFile? { - return UniFileWrapper( - UniFile.fromAsset(context.assets, filename ?: return null) ?: return null - ) - } - - fun fromResource( - context: Context, - id: Int - ): SafeFile? { - return UniFileWrapper( - UniFile.fromResource(context, id) ?: return null - ) - } - - fun fromMedia( - context: Context, - folderType: MediaFileContentType, - path: String = File.separator, - external: Boolean = true, - ): SafeFile? { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - //fromUri(context, folderType.toUri(external))?.findFile(folderType.toPath())?.gotoDirectory(path) - - return MediaFile( - context = context, - folderType = folderType, - external = external, - absolutePath = path - ) - } else { - fromFile( - context, - File( - (Environment.getExternalStorageDirectory().absolutePath + File.separator + - folderType.toPath() + File.separator + folderType).replace( - File.separator + File.separator, - File.separator - ) - ) - ) - } - - } - } - - /*val uri: Uri? get() = getUri() - val name: String? get() = getName() - val type: String? get() = getType() - val filePath: String? get() = getFilePath() - val isFile: Boolean? get() = isFile() - val isDirectory: Boolean? get() = isDirectory() - val length: Long? get() = length() - val canRead: Boolean get() = canRead() - val canWrite: Boolean get() = canWrite() - val lastModified: Long? get() = lastModified()*/ - - @Throws(IOException::class) - fun isFileOrThrow(): Boolean { - return isFile() ?: throw IOException("Unable to get if file is a file or directory") - } - - @Throws(IOException::class) - fun lengthOrThrow(): Long { - return length() ?: throw IOException("Unable to get file length") - } - - @Throws(IOException::class) - fun isDirectoryOrThrow(): Boolean { - return isDirectory() ?: throw IOException("Unable to get if file is a directory") - } - - @Throws(IOException::class) - fun filePathOrThrow(): String { - return filePath() ?: throw IOException("Unable to get file path") - } - - @Throws(IOException::class) - fun uriOrThrow(): Uri { - return uri() ?: throw IOException("Unable to get uri") - } - - @Throws(IOException::class) - fun renameOrThrow(name: String?) { - if (!renameTo(name)) { - throw IOException("Unable to rename to $name") - } - } - - @Throws(IOException::class) - fun openOutputStreamOrThrow(append: Boolean = false): OutputStream { - return openOutputStream(append) ?: throw IOException("Unable to open output stream") - } - - @Throws(IOException::class) - fun openInputStreamOrThrow(): InputStream { - return openInputStream() ?: throw IOException("Unable to open input stream") - } - - @Throws(IOException::class) - fun existsOrThrow(): Boolean { - return exists() ?: throw IOException("Unable get if file exists") - } - - @Throws(IOException::class) - fun findFileOrThrow(displayName: String?, ignoreCase: Boolean = false): SafeFile { - return findFile(displayName, ignoreCase) ?: throw IOException("Unable find file") - } - - @Throws(IOException::class) - fun gotoDirectoryOrThrow( - directoryName: String?, - createMissingDirectories: Boolean = true - ): SafeFile { - return gotoDirectory(directoryName, createMissingDirectories) - ?: throw IOException("Unable to go to directory $directoryName") - } - - @Throws(IOException::class) - fun listFilesOrThrow(): List { - return listFiles() ?: throw IOException("Unable to get files") - } - - - @Throws(IOException::class) - fun createFileOrThrow(displayName: String?): SafeFile { - return createFile(displayName) ?: throw IOException("Unable to create file $displayName") - } - - @Throws(IOException::class) - fun createDirectoryOrThrow(directoryName: String?): SafeFile { - return createDirectory( - directoryName ?: throw IOException("Unable to create file with invalid name") - ) - ?: throw IOException("Unable to create directory $directoryName") - } - - @Throws(IOException::class) - fun deleteOrThrow() { - if (!delete()) { - throw IOException("Unable to delete file") - } - } - - /** file.gotoDirectory("a/b/c") -> "file/a/b/c/" where a null or blank directoryName - * returns itself. createMissingDirectories specifies if the dirs should be created - * when travelling or break at a dir not found */ - fun gotoDirectory( - directoryName: String?, - createMissingDirectories: Boolean = true - ): SafeFile? { - if (directoryName == null) return this - - return directoryName.split(File.separatorChar).filter { it.isNotBlank() } - .fold(this) { file: SafeFile?, directory -> - // as MediaFile does not actually create a directory we can do this - if (createMissingDirectories || this is MediaFile) { - file?.createDirectory(directory) - } else { - val next = file?.findFile(directory) - - // we require the file to be a directory - if (next?.isDirectory() != true) { - null - } else { - next - } - } - } - } - - - fun createFile(displayName: String?): SafeFile? - fun createDirectory(directoryName: String?): SafeFile? - fun uri(): Uri? - fun name(): String? - fun type(): String? - fun filePath(): String? - fun isDirectory(): Boolean? - fun isFile(): Boolean? - fun lastModified(): Long? - fun length(): Long? - fun canRead(): Boolean - fun canWrite(): Boolean - fun delete(): Boolean - fun exists(): Boolean? - fun listFiles(): List? - - // fun listFiles(filter: FilenameFilter?): Array? - fun findFile(displayName: String?, ignoreCase: Boolean = false): SafeFile? - - fun renameTo(name: String?): Boolean - - /** Open a stream on to the content associated with the file */ - fun openOutputStream(append: Boolean = false): OutputStream? - - /** Open a stream on to the content associated with the file */ - fun openInputStream(): InputStream? - - /** Get a random access stuff of the UniFile, "r" or "rw" */ - fun createRandomAccessFile(mode: String?): UniRandomAccessFile? -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt deleted file mode 100644 index f1592169..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/UniFileWrapper.kt +++ /dev/null @@ -1,116 +0,0 @@ -package com.lagradost.cloudstream3.utils.storage - -import android.net.Uri -import com.hippo.unifile.UniFile -import com.hippo.unifile.UniRandomAccessFile -import com.lagradost.cloudstream3.mvvm.logError -import okhttp3.internal.closeQuietly -import java.io.InputStream -import java.io.OutputStream - -private fun UniFile.toFile(): SafeFile { - return UniFileWrapper(this) -} - -fun safe(apiCall: () -> T): T? { - return try { - apiCall.invoke() - } catch (throwable: Throwable) { - logError(throwable) - null - } -} - -class UniFileWrapper(val file: UniFile) : SafeFile { - override fun createFile(displayName: String?): SafeFile? { - return file.createFile(displayName)?.toFile() - } - - override fun createDirectory(directoryName: String?): SafeFile? { - return file.createDirectory(directoryName)?.toFile() - } - - override fun uri(): Uri? { - return safe { file.uri } - } - - override fun name(): String? { - return safe { file.name } - } - - override fun type(): String? { - return safe { file.type } - } - - override fun filePath(): String? { - return safe { file.filePath } - } - - override fun isDirectory(): Boolean? { - return safe { file.isDirectory } - } - - override fun isFile(): Boolean? { - return safe { file.isFile } - } - - override fun lastModified(): Long? { - return safe { file.lastModified() } - } - - override fun length(): Long? { - return safe { - val len = file.length() - if (len <= 1) { - val inputStream = this.openInputStream() ?: return@safe null - try { - inputStream.available().toLong() - } finally { - inputStream.closeQuietly() - } - } else { - len - } - } - } - - override fun canRead(): Boolean { - return safe { file.canRead() } ?: false - } - - override fun canWrite(): Boolean { - return safe { file.canWrite() } ?: false - } - - override fun delete(): Boolean { - return safe { file.delete() } ?: false - } - - override fun exists(): Boolean? { - return safe { file.exists() } - } - - override fun listFiles(): List? { - return safe { file.listFiles()?.mapNotNull { it?.toFile() } } - } - - override fun findFile(displayName: String?, ignoreCase: Boolean): SafeFile? { - return safe { file.findFile(displayName, ignoreCase)?.toFile() } - } - - override fun renameTo(name: String?): Boolean { - return safe { file.renameTo(name) } ?: return false - } - - override fun openOutputStream(append: Boolean): OutputStream? { - return safe { file.openOutputStream(append) } - } - - override fun openInputStream(): InputStream? { - return safe { file.openInputStream() } - } - - override fun createRandomAccessFile(mode: String?): UniRandomAccessFile? { - return safe { file.createRandomAccessFile(mode) } - } -} \ No newline at end of file From f01820059b520912d77be56ce8a39c2530f6f886 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 27 Aug 2023 19:07:08 +0200 Subject: [PATCH 524/888] delete resume watching + delete bookmarks buttons. fixed backup crash --- .../cloudstream3/ui/home/HomeFragment.kt | 6 ++- .../ui/home/HomeParentItemAdapterPreview.kt | 31 ++++++++--- .../cloudstream3/ui/home/HomeViewModel.kt | 36 ++++++++++--- .../cloudstream3/utils/BackupUtils.kt | 53 +++---------------- .../cloudstream3/utils/DataStoreHelper.kt | 12 +++-- 5 files changed, 72 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index fa0b6dfb..b84c619e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -658,12 +658,14 @@ class HomeFragment : Fragment() { return@observeNullable } - bottomSheetDialog = activity?.loadHomepageList(item, expandCallback = { + val (items, delete) = item + + bottomSheetDialog = activity?.loadHomepageList(items, expandCallback = { homeViewModel.expandAndReturn(it) }, dismissCallback = { homeViewModel.popup(null) bottomSheetDialog = null - }) + }, deleteCallback = delete) } homeViewModel.reloadStored() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 13497a99..1d8e1399 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -246,7 +246,7 @@ class HomeParentItemAdapterPreview( private val previewViewpagerText: ViewGroup = itemView.findViewById(R.id.home_preview_viewpager_text) - // private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview) + // private val previewHeader: FrameLayout = itemView.findViewById(R.id.home_preview) private var resumeHolder: View = itemView.findViewById(R.id.home_watch_holder) private var resumeRecyclerView: RecyclerView = itemView.findViewById(R.id.home_watch_child_recyclerview) @@ -257,7 +257,7 @@ class HomeParentItemAdapterPreview( private var homeAccount: View? = itemView.findViewById(R.id.home_preview_switch_account) - private var topPadding : View? = itemView.findViewById(R.id.home_padding) + private var topPadding: View? = itemView.findViewById(R.id.home_padding) private val homeNonePadding: View = itemView.findViewById(R.id.home_none_padding) @@ -283,7 +283,11 @@ class HomeParentItemAdapterPreview( item.plot ?: "" homePreviewText.text = item.name - populateChips(homePreviewTags,item.tags ?: emptyList(), R.style.ChipFilledSemiTransparent) + populateChips( + homePreviewTags, + item.tags ?: emptyList(), + R.style.ChipFilledSemiTransparent + ) homePreviewTags.isGone = item.tags.isNullOrEmpty() @@ -413,7 +417,7 @@ class HomeParentItemAdapterPreview( Pair(itemView.findViewById(R.id.home_plan_to_watch_btt), WatchType.PLANTOWATCH), ) - private val toggleListHolder : ChipGroup? = itemView.findViewById(R.id.home_type_holder) + private val toggleListHolder: ChipGroup? = itemView.findViewById(R.id.home_type_holder) init { previewViewpager.setPageTransformer(HomeScrollTransformer()) @@ -422,8 +426,14 @@ class HomeParentItemAdapterPreview( resumeRecyclerView.adapter = resumeAdapter bookmarkRecyclerView.adapter = bookmarkAdapter - resumeRecyclerView.setLinearListLayout(nextLeft = R.id.nav_rail_view, nextRight = FOCUS_SELF) - bookmarkRecyclerView.setLinearListLayout(nextLeft = R.id.nav_rail_view, nextRight = FOCUS_SELF) + resumeRecyclerView.setLinearListLayout( + nextLeft = R.id.nav_rail_view, + nextRight = FOCUS_SELF + ) + bookmarkRecyclerView.setLinearListLayout( + nextLeft = R.id.nav_rail_view, + nextRight = FOCUS_SELF + ) fixPaddingStatusbarMargin(topPadding) @@ -547,7 +557,10 @@ class HomeParentItemAdapterPreview( resumeWatching, false ), 1, false - ) + ), + deleteCallback = { + viewModel.deleteResumeWatching() + } ) } } @@ -572,7 +585,9 @@ class HomeParentItemAdapterPreview( list, false ), 1, false - ) + ), deleteCallback = { + viewModel.deleteBookmarks(list) + } ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index e8cf8863..b27223ec 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -41,6 +41,8 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE import com.lagradost.cloudstream3.utils.DataStoreHelper +import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllBookmarkedData +import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData @@ -92,6 +94,21 @@ class HomeViewModel : ViewModel() { } } + fun deleteResumeWatching() { + deleteAllResumeStateIds() + loadResumeWatching() + } + + fun deleteBookmarks(list: List) { + list.forEach { DataStoreHelper.deleteBookmarkedData(it.id) } + loadStoredData() + } + + fun deleteBookmarks() { + deleteAllBookmarkedData() + loadStoredData() + } + var repo: APIRepository? = null private val _apiName = MutableLiveData() @@ -394,11 +411,14 @@ class HomeViewModel : ViewModel() { } - private val _popup = MutableLiveData(null) - val popup: LiveData = _popup + private val _popup = MutableLiveData Unit)?>?>(null) + val popup: LiveData Unit)?>?> = _popup - fun popup(list: ExpandableHomepageList?) { - _popup.postValue(list) + fun popup(list: ExpandableHomepageList?, deleteCallback: (() -> Unit)? = null) { + if (list == null) + _popup.postValue(null) + else + _popup.postValue(list to deleteCallback) } private fun bookmarksUpdated(unused: Boolean) { @@ -436,8 +456,7 @@ class HomeViewModel : ViewModel() { // do nothing } - fun reloadStored() { - loadResumeWatching() + fun loadStoredData() { val list = EnumSet.noneOf(WatchType::class.java) getKey(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let { list.addAll(it) @@ -445,6 +464,11 @@ class HomeViewModel : ViewModel() { loadStoredData(list) } + fun reloadStored() { + loadResumeWatching() + loadStoredData() + } + fun click(load: LoadClickCallback) { loadResult(load.response.url, load.response.apiName, load.action) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 41326eb8..96593769 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -25,6 +25,7 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_T import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY +import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getDefaultSharedPrefs @@ -143,66 +144,26 @@ object BackupUtils { } @SuppressLint("SimpleDateFormat") - fun FragmentActivity.backup() { + fun FragmentActivity.backup() = ioSafe { var fileStream: OutputStream? = null var printStream: PrintWriter? = null try { if (!checkWrite()) { - showToast(getString(R.string.backup_failed), Toast.LENGTH_LONG) + showToast(R.string.backup_failed, Toast.LENGTH_LONG) requestRW() - return + return@ioSafe } val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) - val ext = "json" + val ext = "txt" val displayName = "CS3_Backup_${date}" val backupFile = getBackup() - val stream = setupStream(this, displayName, null, ext, false) + val stream = setupStream(this@backup, displayName, null, ext, false) fileStream = stream.openNew() printStream = PrintWriter(fileStream) printStream.print(mapper.writeValueAsString(backupFile)) - /*val steam = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q - && subDir?.isDownloadDir() == true - ) { - val cr = this.contentResolver - val contentUri = - MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) // USE INSTEAD OF MediaStore.Downloads.EXTERNAL_CONTENT_URI - //val currentMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) - - val newFile = ContentValues().apply { - put(MediaStore.MediaColumns.DISPLAY_NAME, displayName) - put(MediaStore.MediaColumns.TITLE, displayName) - // While it a json file we store as txt because not - // all file managers support mimetype json - put(MediaStore.MediaColumns.MIME_TYPE, "text/plain") - //put(MediaStore.MediaColumns.RELATIVE_PATH, folder) - } - - val newFileUri = cr.insert( - contentUri, - newFile - ) ?: throw IOException("Error creating file uri") - cr.openOutputStream(newFileUri, "w") - ?: throw IOException("Error opening stream") - } else { - val fileName = "$displayName.$ext" - val rFile = subDir?.findFile(fileName) - if (rFile?.exists() == true) { - rFile.delete() - } - val file = - subDir?.createFile(fileName) - ?: throw IOException("Error creating file") - if (!file.exists()) throw IOException("File does not exist") - file.openOutputStream() - } - - val printStream = PrintWriter(steam) - printStream.print(mapper.writeValueAsString(backupFile)) - printStream.close()*/ - showToast( R.string.backup_success, Toast.LENGTH_LONG @@ -211,7 +172,7 @@ object BackupUtils { logError(e) try { showToast( - getString(R.string.backup_failed_error_format).format(e.toString()), + txt(R.string.backup_failed_error_format, e.toString()), Toast.LENGTH_LONG ) } catch (e: Exception) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 991651dc..2eb2ab01 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -353,6 +353,12 @@ object DataStoreHelper { removeKeys(folder2) } + fun deleteBookmarkedData(id : Int?) { + if (id == null) return + removeKey("$currentAccount/$RESULT_WATCH_STATE", id.toString()) + removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString()) + } + fun getAllResumeStateIds(): List? { val folder = "$currentAccount/$RESULT_RESUME_WATCHING" return getKeys(folder)?.mapNotNull { @@ -519,12 +525,10 @@ object DataStoreHelper { fun setResultWatchState(id: Int?, status: Int) { if (id == null) return - val folder = "$currentAccount/$RESULT_WATCH_STATE" if (status == WatchType.NONE.internalId) { - removeKey(folder, id.toString()) - removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString()) + deleteBookmarkedData(id) } else { - setKey(folder, id.toString(), status) + setKey("$currentAccount/$RESULT_WATCH_STATE", id.toString(), status) } } From ce1f48978be3aada3e6b68d8726539375c3f14f1 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 28 Aug 2023 20:56:58 +0200 Subject: [PATCH 525/888] fixed download error --- app/build.gradle.kts | 2 +- .../cloudstream3/extractors/SpeedoStream.kt | 13 +++++++++---- .../lagradost/cloudstream3/utils/ExtractorApi.kt | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 333fbfb8..3927d081 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -233,7 +233,7 @@ dependencies { // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 - implementation("com.github.LagradOst:SafeFile:0.0.2") + implementation("com.github.LagradOst:SafeFile:0.0.3") // API because cba maintaining it myself implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0") diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt index 3f6fff2f..213ecdf3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt @@ -7,15 +7,22 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class SpeedoStream2 : SpeedoStream() { + override val mainUrl = "https://speedostream.mom" +} + class SpeedoStream1 : SpeedoStream() { override val mainUrl = "https://speedostream.pm" } open class SpeedoStream : ExtractorApi() { override val name = "SpeedoStream" - override val mainUrl = "https://speedostream.mom" + override val mainUrl = "https://speedostream.bond" override val requiresReferer = true + // .bond, .pm, .mom redirect to .bond + private val hostUrl = "https://speedostream.bond" + override suspend fun getUrl(url: String, referer: String?): List { val sources = mutableListOf() app.get(url, referer = referer).document.select("script").map { script -> @@ -26,7 +33,7 @@ open class SpeedoStream : ExtractorApi() { M3u8Helper.generateM3u8( name, it.file, - "$mainUrl/", + "$hostUrl/", ).forEach { m3uData -> sources.add(m3uData) } } } @@ -37,6 +44,4 @@ open class SpeedoStream : ExtractorApi() { private data class File( @JsonProperty("file") val file: String, ) - - } 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 83c61542..ffda32d7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -389,6 +389,7 @@ val extractorApis: MutableList = arrayListOf( Acefile(), SpeedoStream(), SpeedoStream1(), + SpeedoStream2(), Zorofile(), Embedgram(), Mvidoo(), From 6089cbc48493d746a110bba8d9997c3d2209b82e Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 30 Aug 2023 00:52:34 +0200 Subject: [PATCH 526/888] fixed subs on downloads --- app/build.gradle.kts | 2 +- .../ui/player/DownloadFileGenerator.kt | 73 +++++++++++-------- .../utils/VideoDownloadManager.kt | 2 +- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3927d081..55d0f7ae 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -233,7 +233,7 @@ dependencies { // To fix SSL fuckery on android 9 implementation("org.conscrypt:conscrypt-android:2.2.1") // Util to skip the URI file fuckery 🙏 - implementation("com.github.LagradOst:SafeFile:0.0.3") + implementation("com.github.LagradOst:SafeFile:0.0.5") // API because cba maintaining it myself implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index baf7ed52..1b618e45 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -50,6 +50,10 @@ class DownloadFileGenerator( return null } + fun cleanDisplayName(name: String): String { + return name.substringBeforeLast('.').trim() + } + override suspend fun generateLinks( clearCache: Boolean, isCasting: Boolean, @@ -58,39 +62,48 @@ class DownloadFileGenerator( offset: Int, ): Boolean { val meta = episodes[currentIndex + offset] - callback(Pair(null, meta)) + callback(null to meta) - context?.let { ctx -> - val relative = meta.relativePath - val display = meta.displayName + val ctx = context ?: return true + val relative = meta.relativePath ?: return true + val display = meta.displayName ?: return true - if (display == null || relative == null) { - return@let + val cleanDisplay = cleanDisplayName(display) + + VideoDownloadManager.getFolder(ctx, relative, meta.basePath) + ?.forEach { (name, uri) -> + // only these files are allowed, so no videos as subtitles + if (listOf( + ".vtt", + ".srt", + ".txt", + ".ass", + ".ttml", + ".sbv", + ".dfxp" + ).none { name.contains(it, true) } + ) return@forEach + + // cant have the exact same file as a subtitle + if (name.equals(display, true)) return@forEach + + val cleanName = cleanDisplayName(name) + + // we only want files with the approx same name + if (!cleanName.startsWith(cleanDisplay, true)) return@forEach + + val realName = cleanName.removePrefix(cleanDisplay) + + subtitleCallback( + SubtitleData( + realName.ifBlank { ctx.getString(R.string.default_subtitles) }, + uri.toString(), + SubtitleOrigin.DOWNLOADED_FILE, + name.toSubtitleMimeType(), + emptyMap() + ) + ) } - VideoDownloadManager.getFolder(ctx, relative, meta.basePath) - ?.forEach { file -> - val name = display.removeSuffix(".mp4") - if (file.first != meta.displayName && file.first.startsWith(name)) { - val realName = file.first.removePrefix(name) - .removeSuffix(".vtt") - .removeSuffix(".srt") - .removeSuffix(".txt") - .trim() - .removePrefix("(") - .removeSuffix(")") - - subtitleCallback( - SubtitleData( - realName.ifBlank { ctx.getString(R.string.default_subtitles) }, - file.second.toString(), - SubtitleOrigin.DOWNLOADED_FILE, - name.toSubtitleMimeType(), - emptyMap() - ) - ) - } - } - } return true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 6425ba66..72eb002a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -505,7 +505,7 @@ object VideoDownloadManager { ): List>? { val base = basePathToFile(context, basePath) val folder = base?.gotoDirectory(relativePath, false) ?: return null - if (folder.isDirectory() != false) return null + //if (folder.isDirectory() != false) return null return folder.listFiles() ?.mapNotNull { (it.name() ?: "") to (it.uri() ?: return@mapNotNull null) } From 9c991f2abd53bdbf50f7ae52f3fe64221d341e57 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Sat, 2 Sep 2023 05:32:18 +0700 Subject: [PATCH 527/888] extractor: fix chillx (#583) * Extractor: added Rabbitstream * Extractor: added Rabbitstream * extractor: fix Chillx * comply --------- Co-authored-by: Sofie99 --- .../cloudstream3/extractors/Chillx.kt | 58 +---------- .../cloudstream3/extractors/Gdriveplayer.kt | 88 +---------------- .../extractors/helper/AesHelper.kt | 95 +++++++++++++++++++ 3 files changed, 102 insertions(+), 139 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt index b4f3d897..bcf8848c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -2,15 +2,12 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.extractors.helper.* +import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities -import javax.crypto.Cipher -import javax.crypto.SecretKeyFactory -import javax.crypto.spec.IvParameterSpec -import javax.crypto.spec.PBEKeySpec -import javax.crypto.spec.SecretKeySpec class Moviesapi : Chillx() { override val name = "Moviesapi" @@ -32,7 +29,7 @@ open class Chillx : ExtractorApi() { override val requiresReferer = true companion object { - private const val KEY = "11x&W5UBrcqn\$9Yl" + private const val KEY = "m4H6D9%0\$N&F6rQ&" } override suspend fun getUrl( @@ -47,8 +44,7 @@ open class Chillx : ExtractorApi() { referer = referer ).text )?.groupValues?.get(1) - val encData = AppUtils.tryParseJson(base64Decode(master ?: return)) - val decrypt = cryptoAESHandler(encData ?: return, KEY, false) + val decrypt = cryptoAESHandler(master ?: return, KEY.toByteArray(), false)?.replace("\\", "") ?: throw ErrorLoadingException("failed to decrypt") val source = Regex(""""?file"?:\s*"([^"]+)""").find(decrypt)?.groupValues?.get(1) val tracks = Regex("""tracks:\s*\[(.+)]""").find(decrypt)?.groupValues?.get(1) @@ -86,52 +82,6 @@ open class Chillx : ExtractorApi() { } } - private fun cryptoAESHandler( - data: AESData, - pass: String, - encrypt: Boolean = true - ): String { - val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512") - val spec = PBEKeySpec( - pass.toCharArray(), - data.salt?.hexToByteArray(), - data.iterations?.toIntOrNull() ?: 1, - 256 - ) - val key = factory.generateSecret(spec) - val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") - return if (!encrypt) { - cipher.init( - Cipher.DECRYPT_MODE, - SecretKeySpec(key.encoded, "AES"), - IvParameterSpec(data.iv?.hexToByteArray()) - ) - String(cipher.doFinal(base64DecodeArray(data.ciphertext.toString()))) - } else { - cipher.init( - Cipher.ENCRYPT_MODE, - SecretKeySpec(key.encoded, "AES"), - IvParameterSpec(data.iv?.hexToByteArray()) - ) - base64Encode(cipher.doFinal(data.ciphertext?.toByteArray())) - } - } - - private fun String.hexToByteArray(): ByteArray { - check(length % 2 == 0) { "Must have an even length" } - return chunked(2) - .map { it.toInt(16).toByte() } - - .toByteArray() - } - - data class AESData( - @JsonProperty("ciphertext") val ciphertext: String? = null, - @JsonProperty("iv") val iv: String? = null, - @JsonProperty("salt") val salt: String? = null, - @JsonProperty("iterations") val iterations: String? = null, - ) - data class Tracks( @JsonProperty("file") val file: String? = null, @JsonProperty("label") val label: String? = null, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt index df9c74a4..8d1a4d07 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt @@ -2,14 +2,10 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import org.jsoup.nodes.Element -import java.security.DigestException -import java.security.MessageDigest -import javax.crypto.Cipher -import javax.crypto.spec.IvParameterSpec -import javax.crypto.spec.SecretKeySpec class DatabaseGdrive2 : Gdriveplayer() { override var mainUrl = "https://databasegdriveplayer.co" @@ -65,78 +61,6 @@ open class Gdriveplayer : ExtractorApi() { ?.data()?.let { getAndUnpack(it) } } - private fun String.decodeHex(): ByteArray { - check(length % 2 == 0) { "Must have an even length" } - return chunked(2) - .map { it.toInt(16).toByte() } - .toByteArray() - } - - // https://stackoverflow.com/a/41434590/8166854 - private fun GenerateKeyAndIv( - password: ByteArray, - salt: ByteArray, - hashAlgorithm: String = "MD5", - keyLength: Int = 32, - ivLength: Int = 16, - iterations: Int = 1 - ): List? { - - val md = MessageDigest.getInstance(hashAlgorithm) - val digestLength = md.digestLength - val targetKeySize = keyLength + ivLength - val requiredLength = (targetKeySize + digestLength - 1) / digestLength * digestLength - val generatedData = ByteArray(requiredLength) - var generatedLength = 0 - - try { - md.reset() - - while (generatedLength < targetKeySize) { - if (generatedLength > 0) - md.update( - generatedData, - generatedLength - digestLength, - digestLength - ) - - md.update(password) - md.update(salt, 0, 8) - md.digest(generatedData, generatedLength, digestLength) - - for (i in 1 until iterations) { - md.update(generatedData, generatedLength, digestLength) - md.digest(generatedData, generatedLength, digestLength) - } - - generatedLength += digestLength - } - return listOf( - generatedData.copyOfRange(0, keyLength), - generatedData.copyOfRange(keyLength, targetKeySize) - ) - } catch (e: DigestException) { - return null - } - } - - private fun cryptoAESHandler( - data: AesData, - pass: ByteArray, - encrypt: Boolean = true - ): String? { - val (key, iv) = GenerateKeyAndIv(pass, data.s.decodeHex()) ?: return null - val cipher = Cipher.getInstance("AES/CBC/NoPadding") - return if (!encrypt) { - cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) - String(cipher.doFinal(base64DecodeArray(data.ct))) - } else { - cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) - base64Encode(cipher.doFinal(data.ct.toByteArray())) - - } - } - private fun Regex.first(str: String): String? { return find(str)?.groupValues?.getOrNull(1) } @@ -154,14 +78,14 @@ open class Gdriveplayer : ExtractorApi() { val document = app.get(url).document val eval = unpackJs(document)?.replace("\\", "") ?: return - val data = tryParseJson(Regex("data='(\\S+?)'").first(eval)) ?: return + val data = Regex("data='(\\S+?)'").first(eval) ?: return val password = Regex("null,['|\"](\\w+)['|\"]").first(eval) ?.split(Regex("\\D+")) ?.joinToString("") { Char(it.toInt()).toString() }.let { Regex("var pass = \"(\\S+?)\"").first(it ?: return)?.toByteArray() } ?: throw ErrorLoadingException("can't find password") - val decryptedData = cryptoAESHandler(data, password, false)?.let { getAndUnpack(it) }?.replace("\\", "") + val decryptedData = cryptoAESHandler(data, password, false, "AES/CBC/NoPadding")?.let { getAndUnpack(it) }?.replace("\\", "") val sourceData = decryptedData?.substringAfter("sources:[")?.substringBefore("],") val subData = decryptedData?.substringAfter("tracks:[")?.substringBefore("],") @@ -194,12 +118,6 @@ open class Gdriveplayer : ExtractorApi() { } - data class AesData( - @JsonProperty("ct") val ct: String, - @JsonProperty("iv") val iv: String, - @JsonProperty("s") val s: String - ) - data class Tracks( @JsonProperty("file") val file: String, @JsonProperty("kind") val kind: String, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt new file mode 100644 index 00000000..b41eae52 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt @@ -0,0 +1,95 @@ +package com.lagradost.cloudstream3.extractors.helper + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.ErrorLoadingException +import com.lagradost.cloudstream3.base64DecodeArray +import com.lagradost.cloudstream3.base64Encode +import com.lagradost.cloudstream3.utils.AppUtils +import java.security.DigestException +import java.security.MessageDigest +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +object AesHelper { + + private const val HASH = "AES/CBC/PKCS5PADDING" + private const val KDF = "MD5" + + fun cryptoAESHandler( + data: String, + pass: ByteArray, + encrypt: Boolean = true, + padding: String = HASH, + ): String? { + val parse = AppUtils.tryParseJson(data) ?: return null + val (key, iv) = generateKeyAndIv(pass, parse.s.hexToByteArray()) ?: return null + val cipher = Cipher.getInstance(padding) + return if (!encrypt) { + cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) + String(cipher.doFinal(base64DecodeArray(parse.ct))) + } else { + cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(key, "AES"), IvParameterSpec(iv)) + base64Encode(cipher.doFinal(parse.ct.toByteArray())) + } + } + + // https://stackoverflow.com/a/41434590/8166854 + fun generateKeyAndIv( + password: ByteArray, + salt: ByteArray, + hashAlgorithm: String = KDF, + keyLength: Int = 32, + ivLength: Int = 16, + iterations: Int = 1 + ): Pair? { + + val md = MessageDigest.getInstance(hashAlgorithm) + val digestLength = md.digestLength + val targetKeySize = keyLength + ivLength + val requiredLength = (targetKeySize + digestLength - 1) / digestLength * digestLength + val generatedData = ByteArray(requiredLength) + var generatedLength = 0 + + try { + md.reset() + + while (generatedLength < targetKeySize) { + if (generatedLength > 0) + md.update( + generatedData, + generatedLength - digestLength, + digestLength + ) + + md.update(password) + md.update(salt, 0, 8) + md.digest(generatedData, generatedLength, digestLength) + + for (i in 1 until iterations) { + md.update(generatedData, generatedLength, digestLength) + md.digest(generatedData, generatedLength, digestLength) + } + + generatedLength += digestLength + } + return generatedData.copyOfRange(0, keyLength) to generatedData.copyOfRange(keyLength, targetKeySize) + } catch (e: DigestException) { + return null + } + } + + fun String.hexToByteArray(): ByteArray { + check(length % 2 == 0) { "Must have an even length" } + return chunked(2) + .map { it.toInt(16).toByte() } + .toByteArray() + } + + private data class AesData( + @JsonProperty("ct") val ct: String, + @JsonProperty("iv") val iv: String, + @JsonProperty("s") val s: String + ) + +} \ No newline at end of file From 6211b02e85b0dcd4ab5a2954623917e8c27ba552 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 3 Sep 2023 23:32:43 +0200 Subject: [PATCH 528/888] switched from isM3u8 to ExtractorLinkType --- .../cloudstream3/extractors/Pelisplus.kt | 3 +- .../cloudstream3/extractors/Vidstream.kt | 3 +- .../cloudstream3/extractors/WcoStream.kt | 4 +- .../cloudstream3/extractors/Wibufile.kt | 6 +- .../cloudstream3/ui/APIRepository.kt | 14 ++- .../cloudstream3/ui/ControllerActivity.kt | 4 +- .../cloudstream3/ui/player/CS3IPlayer.kt | 12 +- .../ui/player/DownloadFileGenerator.kt | 4 +- .../ui/player/ExtractorLinkGenerator.kt | 7 +- .../cloudstream3/ui/player/IGenerator.kt | 43 ++++++- .../cloudstream3/ui/player/LinkGenerator.kt | 2 +- .../ui/player/PlayerGeneratorViewModel.kt | 12 +- .../ui/player/RepoLinkGenerator.kt | 21 ++-- .../ui/result/ResultViewModel2.kt | 40 +++--- .../cloudstream3/utils/CastHelper.kt | 6 +- .../cloudstream3/utils/ExtractorApi.kt | 119 +++++++++++++++--- .../utils/VideoDownloadManager.kt | 78 +++++++----- 17 files changed, 269 insertions(+), 109 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt index 45ec4c2f..4163cd94 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt @@ -5,6 +5,7 @@ import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.extractorApis import com.lagradost.cloudstream3.utils.getQualityFromName import com.lagradost.cloudstream3.utils.loadExtractor @@ -66,7 +67,7 @@ open class Pelisplus(val mainUrl: String) { href, page.url, getQualityFromName(qual), - element.attr("href").contains(".m3u8") + type = INFER_TYPE ) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt index 7eb7fbac..c6493dbe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt @@ -5,6 +5,7 @@ import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.argamap import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.extractorApis import com.lagradost.cloudstream3.utils.getQualityFromName import com.lagradost.cloudstream3.utils.loadExtractor @@ -70,7 +71,7 @@ class Vidstream(val mainUrl: String) { href, page.url, getQualityFromName(qual), - element.attr("href").contains(".m3u8") + type = INFER_TYPE ) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt index 6cc486cd..659d7804 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt @@ -7,6 +7,7 @@ import com.lagradost.cloudstream3.extractors.helper.NineAnimeHelper.encrypt import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.Qualities class Vidstreamz : WcoStream() { @@ -126,8 +127,7 @@ open class WcoStream : ExtractorApi() { if (!response.text.startsWith("{")) throw ErrorLoadingException("Seems like 9Anime kiddies changed stuff again, Go touch some grass for bout an hour Or use a different Server") return response.parsed().data.media.sources.map { - ExtractorLink(name, it.file,it.file,host,Qualities.Unknown.value,it.file.contains(".m3u8")) + ExtractorLink(name, it.file, it.file, host, Qualities.Unknown.value, type = INFER_TYPE) } - } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt index ae1e872a..c69f0938 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt @@ -4,8 +4,8 @@ import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.Qualities -import java.net.URI open class Wibufile : ExtractorApi() { override val name: String = "Wibufile" @@ -28,10 +28,8 @@ open class Wibufile : ExtractorApi() { video ?: return, "$mainUrl/", Qualities.Unknown.value, - URI(url).path.endsWith(".m3u8") + type = INFER_TYPE ) ) - } - } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index 4ab2e8e2..a075cc2e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -1,16 +1,24 @@ package com.lagradost.cloudstream3.ui -import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.APIHolder.unixTimeMS +import com.lagradost.cloudstream3.DubStatus +import com.lagradost.cloudstream3.ErrorLoadingException +import com.lagradost.cloudstream3.HomePageResponse +import com.lagradost.cloudstream3.LoadResponse +import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent +import com.lagradost.cloudstream3.MainPageRequest +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.fixUrl import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf import com.lagradost.cloudstream3.utils.ExtractorLink import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope.coroutineContext import kotlinx.coroutines.async import kotlinx.coroutines.delay @@ -174,7 +182,7 @@ class APIRepository(val api: MainAPI) { data: String, isCasting: Boolean, subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit + callback: (ExtractorLink) -> Unit, ): Boolean { if (isInvalidData(data)) return false // this makes providers cleaner return try { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index 46ddce09..6c0e7796 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -25,6 +25,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.sortSubs import com.lagradost.cloudstream3.sortUrls +import com.lagradost.cloudstream3.ui.player.LoadType import com.lagradost.cloudstream3.ui.player.RepoLinkGenerator import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.result.ResultEpisode @@ -294,7 +295,8 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi val generator = RepoLinkGenerator(listOf(epData)) val isSuccessful = safeApiCall { - generator.generateLinks(clearCache = false, isCasting = true, + generator.generateLinks( + clearCache = false, type = LoadType.Chromecast, callback = { it.first?.let { link -> currentLinks.add(link) 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 2067eb04..fd1da5ca 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 @@ -53,9 +53,11 @@ import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList +import com.lagradost.cloudstream3.utils.ExtractorLinkType import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import java.io.File +import java.lang.IllegalArgumentException import javax.net.ssl.HttpsURLConnection import javax.net.ssl.SSLContext import javax.net.ssl.SSLSession @@ -1257,10 +1259,12 @@ class CS3IPlayer : IPlayer { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory) } - val mime = when { - link.isM3u8 -> MimeTypes.APPLICATION_M3U8 - link.isDash -> MimeTypes.APPLICATION_MPD - else -> MimeTypes.VIDEO_MP4 + val mime = when(link.type) { + ExtractorLinkType.M3U8 -> MimeTypes.APPLICATION_M3U8 + ExtractorLinkType.DASH -> MimeTypes.APPLICATION_MPD + ExtractorLinkType.VIDEO -> MimeTypes.VIDEO_MP4 + ExtractorLinkType.TORRENT -> throw IllegalArgumentException("No torrent support") + ExtractorLinkType.MAGNET -> throw IllegalArgumentException("No magnet support") } val mediaItems = if (link is ExtractorLinkPlayList) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index 1b618e45..b0223bb5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -56,10 +56,10 @@ class DownloadFileGenerator( override suspend fun generateLinks( clearCache: Boolean, - isCasting: Boolean, + type: LoadType, callback: (Pair) -> Unit, subtitleCallback: (SubtitleData) -> Unit, - offset: Int, + offset: Int ): Boolean { val meta = episodes[currentIndex + offset] callback(null to meta) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt index 7c19e97d..d8d2d537 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt @@ -37,14 +37,17 @@ class ExtractorLinkGenerator( override suspend fun generateLinks( clearCache: Boolean, - isCasting: Boolean, + type: LoadType, callback: (Pair) -> Unit, subtitleCallback: (SubtitleData) -> Unit, offset: Int ): Boolean { subtitles.forEach(subtitleCallback) + val allowedTypes = type.toSet() links.forEach { - callback.invoke(it to null) + if(allowedTypes.contains(it.type)) { + callback.invoke(it to null) + } } return true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt index a1287e6a..af74cb57 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt @@ -1,8 +1,43 @@ package com.lagradost.cloudstream3.ui.player import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.ExtractorLinkType import com.lagradost.cloudstream3.utils.ExtractorUri +enum class LoadType { + Unknown, + InApp, + InAppDownload, + ExternalApp, + Browser, + Chromecast +} + +fun LoadType.toSet() : Set { + return when(this) { + LoadType.InApp -> setOf( + ExtractorLinkType.VIDEO, + ExtractorLinkType.DASH, + ExtractorLinkType.M3U8 + ) + LoadType.Browser -> setOf( + ExtractorLinkType.VIDEO, + ExtractorLinkType.DASH, + ExtractorLinkType.M3U8 + ) + LoadType.InAppDownload -> setOf( + ExtractorLinkType.VIDEO, + ExtractorLinkType.M3U8 + ) + LoadType.ExternalApp, LoadType.Unknown -> ExtractorLinkType.values().toSet() + LoadType.Chromecast -> setOf( + ExtractorLinkType.VIDEO, + ExtractorLinkType.DASH, + ExtractorLinkType.M3U8 + ) + } +} + interface IGenerator { val hasCache: Boolean @@ -13,15 +48,15 @@ interface IGenerator { fun goto(index: Int) fun getCurrentId(): Int? // this is used to save data or read data about this id - fun getCurrent(offset : Int = 0): Any? // this is used to get metadata about the current playing, can return null - fun getAll() : List? // this us used to get the metadata about all entries, not needed + fun getCurrent(offset: Int = 0): Any? // this is used to get metadata about the current playing, can return null + fun getAll(): List? // this us used to get the metadata about all entries, not needed /* not safe, must use try catch */ suspend fun generateLinks( clearCache: Boolean, - isCasting: Boolean, + type: LoadType, callback: (Pair) -> Unit, subtitleCallback: (SubtitleData) -> Unit, - offset : Int = 0, + offset: Int = 0, ): Boolean } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 0b560857..ba2cdb40 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -48,7 +48,7 @@ class LinkGenerator( override suspend fun generateLinks( clearCache: Boolean, - isCasting: Boolean, + type: LoadType, callback: (Pair) -> Unit, subtitleCallback: (SubtitleData) -> Unit, offset: Int diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index 1b13b519..42659f8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -78,10 +78,10 @@ class PlayerGeneratorViewModel : ViewModel() { if (generator?.hasCache == true && generator?.hasNext() == true) { safeApiCall { generator?.generateLinks( + type = LoadType.InApp, clearCache = false, - isCasting = false, - {}, - {}, + callback = {}, + subtitleCallback = {}, offset = 1 ) } @@ -147,7 +147,7 @@ class PlayerGeneratorViewModel : ViewModel() { } } - fun loadLinks(clearCache: Boolean = false, isCasting: Boolean = false) { + fun loadLinks(clearCache: Boolean = false, type: LoadType = LoadType.InApp) { Log.i(TAG, "loadLinks") currentJob?.cancel() @@ -162,14 +162,14 @@ class PlayerGeneratorViewModel : ViewModel() { // load more data _loadingLinks.postValue(Resource.Loading()) val loadingState = safeApiCall { - generator?.generateLinks(clearCache = clearCache, isCasting = isCasting, { + generator?.generateLinks(type = type,clearCache = clearCache, callback = { currentLinks.add(it) // Clone to prevent ConcurrentModificationException normalSafeApiCall { // Extra normalSafeApiCall since .toSet() iterates. _currentLinks.postValue(currentLinks.toSet()) } - }, { + }, subtitleCallback = { currentSubs.add(it) normalSafeApiCall { _currentSubs.postValue(currentSubs.toSet()) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt index 2ce53ea5..d55da57c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt @@ -67,18 +67,19 @@ class RepoLinkGenerator( override suspend fun generateLinks( clearCache: Boolean, - isCasting: Boolean, + type: LoadType, callback: (Pair) -> Unit, subtitleCallback: (SubtitleData) -> Unit, - offset: Int, + offset: Int ): Boolean { + val allowedTypes = type.toSet() val index = currentIndex val current = episodes.getOrNull(index + offset) ?: return false val (currentLinkCache, currentSubsCache) = if (clearCache) { Pair(mutableSetOf(), mutableSetOf()) } else { - cache[Pair(current.apiName, current.id)] ?: Pair(mutableSetOf(), mutableSetOf()) + cache[current.apiName to current.id] ?: Pair(mutableSetOf(), mutableSetOf()) } //val currentLinkCache = if (clearCache) mutableSetOf() else linkCache[index].toMutableSet() @@ -88,9 +89,9 @@ class RepoLinkGenerator( val currentSubsUrls = mutableSetOf() // makes all subs urls unique val currentSubsNames = mutableSetOf() // makes all subs names unique - currentLinkCache.forEach { link -> + currentLinkCache.filter { allowedTypes.contains(it.type) }.forEach { link -> currentLinks.add(link.url) - callback(Pair(link, null)) + callback(link to null) } currentSubsCache.forEach { sub -> @@ -108,8 +109,8 @@ class RepoLinkGenerator( val result = APIRepository( getApiFromNameNull(current.apiName) ?: throw Exception("This provider does not exist") ).loadLinks(current.data, - isCasting, - { file -> + isCasting = LoadType.Chromecast == type, + subtitleCallback = { file -> val correctFile = PlayerSubtitleHelper.getSubtitleData(file) if (!currentSubsUrls.contains(correctFile.url)) { currentSubsUrls.add(correctFile.url) @@ -132,12 +133,14 @@ class RepoLinkGenerator( } } }, - { link -> + callback = { link -> Log.d(TAG, "Loaded ExtractorLink: $link") if (!currentLinks.contains(link.url)) { if (!currentLinkCache.contains(link)) { currentLinks.add(link.url) - callback(Pair(link, null)) + if (allowedTypes.contains(link.type)) { + callback(Pair(link, null)) + } currentLinkCache.add(link) //linkCache[index] = currentLinkCache } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 82d9a8fe..b2c57137 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -36,6 +36,7 @@ import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.player.IGenerator +import com.lagradost.cloudstream3.ui.player.LoadType import com.lagradost.cloudstream3.ui.player.RepoLinkGenerator import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.result.EpisodeAdapter.Companion.getPlayerAction @@ -745,7 +746,7 @@ class ResultViewModel2 : ViewModel() { val generator = RepoLinkGenerator(listOf(episode)) val currentLinks = mutableSetOf() val currentSubs = mutableSetOf() - generator.generateLinks(clearCache = false, isCasting = false, callback = { + generator.generateLinks(clearCache = false, LoadType.Chromecast, callback = { it.first?.let { link -> currentLinks.add(link) } @@ -825,7 +826,7 @@ class ResultViewModel2 : ViewModel() { isVisible: Boolean = true ) { if (activity == null) return - loadLinks(result, isVisible = isVisible, isCasting = true) { data -> + loadLinks(result, isVisible = isVisible, LoadType.Chromecast) { data -> startChromecast(activity, result, data.links, data.subs, 0) } } @@ -936,7 +937,7 @@ class ResultViewModel2 : ViewModel() { private fun loadLinks( result: ResultEpisode, isVisible: Boolean, - isCasting: Boolean, + type: LoadType, clearCache: Boolean = false, work: suspend (CoroutineScope.(LinkLoadingResult) -> Unit) ) { @@ -945,7 +946,7 @@ class ResultViewModel2 : ViewModel() { val links = loadLinks( result, isVisible = isVisible, - isCasting = isCasting, + type = type, clearCache = clearCache ) if (!this.isActive) return@ioSafe @@ -956,11 +957,11 @@ class ResultViewModel2 : ViewModel() { private var currentLoadLinkJob: Job? = null private fun acquireSingleLink( result: ResultEpisode, - isCasting: Boolean, + type: LoadType, text: UiText, callback: (Pair) -> Unit, ) { - loadLinks(result, isVisible = true, isCasting = isCasting) { links -> + loadLinks(result, isVisible = true, type) { links -> postPopup( text, links.links.map { txt("${it.name} ${Qualities.getStringByInt(it.quality)}") }) { @@ -971,11 +972,10 @@ class ResultViewModel2 : ViewModel() { private fun acquireSingleSubtitle( result: ResultEpisode, - isCasting: Boolean, text: UiText, callback: (Pair) -> Unit, ) { - loadLinks(result, isVisible = true, isCasting = isCasting) { links -> + loadLinks(result, isVisible = true, type = LoadType.Unknown) { links -> postPopup( text, links.subs.map { txt(it.name) }) @@ -988,7 +988,7 @@ class ResultViewModel2 : ViewModel() { private suspend fun CoroutineScope.loadLinks( result: ResultEpisode, isVisible: Boolean, - isCasting: Boolean, + type: LoadType, clearCache: Boolean = false, ): LinkLoadingResult { val tempGenerator = RepoLinkGenerator(listOf(result)) @@ -1002,7 +1002,7 @@ class ResultViewModel2 : ViewModel() { } try { updatePage() - tempGenerator.generateLinks(clearCache, isCasting, { (link, _) -> + tempGenerator.generateLinks(clearCache, type, { (link, _) -> if (link != null) { links += link updatePage() @@ -1272,7 +1272,6 @@ class ResultViewModel2 : ViewModel() { acquireSingleSubtitle( click.data, - false, txt(R.string.episode_action_download_subtitle) ) { (links, index) -> downloadSubtitle( @@ -1317,7 +1316,7 @@ class ResultViewModel2 : ViewModel() { val response = currentResponse ?: return acquireSingleLink( click.data, - false, + LoadType.InAppDownload, txt(R.string.episode_action_download_mirror) ) { (result, index) -> ioSafe { @@ -1347,7 +1346,7 @@ class ResultViewModel2 : ViewModel() { loadLinks( click.data, isVisible = false, - isCasting = false, + type = LoadType.InApp, clearCache = true ) } @@ -1356,7 +1355,7 @@ class ResultViewModel2 : ViewModel() { ACTION_CHROME_CAST_MIRROR -> { acquireSingleLink( click.data, - isCasting = true, + LoadType.Chromecast, txt(R.string.episode_action_chromecast_mirror) ) { (result, index) -> startChromecast(activity, click.data, result.links, result.subs, index) @@ -1365,7 +1364,7 @@ class ResultViewModel2 : ViewModel() { ACTION_PLAY_EPISODE_IN_BROWSER -> acquireSingleLink( click.data, - isCasting = true, + LoadType.Browser, txt(R.string.episode_action_play_in_browser) ) { (result, index) -> try { @@ -1380,7 +1379,7 @@ class ResultViewModel2 : ViewModel() { ACTION_COPY_LINK -> { acquireSingleLink( click.data, - isCasting = true, + LoadType.ExternalApp, txt(R.string.episode_action_copy_link) ) { (result, index) -> val act = activity ?: return@acquireSingleLink @@ -1399,7 +1398,7 @@ class ResultViewModel2 : ViewModel() { } ACTION_PLAY_EPISODE_IN_VLC_PLAYER -> { - loadLinks(click.data, isVisible = true, isCasting = true) { links -> + loadLinks(click.data, isVisible = true, LoadType.ExternalApp) { links -> if (links.links.isEmpty()) { showToast(R.string.no_links_found_toast, Toast.LENGTH_SHORT) return@loadLinks @@ -1415,7 +1414,7 @@ class ResultViewModel2 : ViewModel() { ACTION_PLAY_EPISODE_IN_WEB_VIDEO -> acquireSingleLink( click.data, - isCasting = true, + LoadType.Chromecast, txt( R.string.episode_action_play_in_format, txt(R.string.player_settings_play_in_web) @@ -1432,7 +1431,7 @@ class ResultViewModel2 : ViewModel() { ACTION_PLAY_EPISODE_IN_MPV -> acquireSingleLink( click.data, - isCasting = true, + LoadType.Chromecast, txt( R.string.episode_action_play_in_format, txt(R.string.player_settings_play_in_mpv) @@ -1461,7 +1460,6 @@ class ResultViewModel2 : ViewModel() { if (index >= 0) it.goto(index) } - } ?: return, list ) ) @@ -2173,7 +2171,7 @@ class ResultViewModel2 : ViewModel() { trailerData.extractorUrl, trailerData.referer ?: "", Qualities.Unknown.value, - trailerData.extractorUrl.contains(".m3u8") + type = INFER_TYPE ) ) to arrayListOf() } else { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt index 6b5e9ec2..d8373165 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt @@ -55,7 +55,11 @@ object CastHelper { val builder = MediaInfo.Builder(link.url) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) - .setContentType(if (link.isM3u8) MimeTypes.APPLICATION_M3U8 else MimeTypes.VIDEO_MP4) + .setContentType(when(link.type) { + ExtractorLinkType.M3U8 -> MimeTypes.APPLICATION_M3U8 + ExtractorLinkType.DASH -> MimeTypes.APPLICATION_MPD + else -> MimeTypes.VIDEO_MP4 + }) .setMetadata(movieMetadata) .setMediaTracks(tracks) data?.let { 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 ffda32d7..2a539f0d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -4,8 +4,10 @@ import android.net.Uri import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.extractors.* +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import kotlinx.coroutines.delay import org.jsoup.Jsoup +import java.net.URL import kotlin.collections.MutableList /** @@ -35,35 +37,101 @@ data class ExtractorLinkPlayList( val playlist: List, override val referer: String, override val quality: Int, - override val isM3u8: Boolean = false, + val isM3u8: Boolean = false, override val headers: Map = mapOf(), /** Used for getExtractorVerifierJob() */ override val extractorData: String? = null, + override val type: ExtractorLinkType, ) : ExtractorLink( - source, - name, - // Blank as un-used - "", - referer, - quality, - isM3u8, - headers, - extractorData -) + source = source, + name = name, + url = "", + referer = referer, + quality = quality, + headers = headers, + extractorData = extractorData, + type = type +) { + constructor( + source: String, + name: String, + playlist: List, + referer: String, + quality: Int, + isM3u8: Boolean = false, + headers: Map = mapOf(), + extractorData: String? = null, + ) : this( + source = source, + name = name, + playlist = playlist, + referer = referer, + quality = quality, + type = if (isM3u8) ExtractorLinkType.M3U8 else ExtractorLinkType.VIDEO, + headers = headers, + extractorData = extractorData, + ) +} +/** Metadata about the file type used for downloads and exoplayer hint, + * if you respond with the wrong one the file will fail to download or be played */ +enum class ExtractorLinkType { + /** Single stream of bytes no matter the actual file type */ + VIDEO, + /** Split into several .ts files, has support for encrypted m3u8s */ + M3U8, + /** Like m3u8 but uses xml, currently no download support */ + DASH, + /** No support at the moment */ + TORRENT, + /** No support at the moment */ + MAGNET, +} +private fun inferTypeFromUrl(url: String): ExtractorLinkType { + val path = normalSafeApiCall { URL(url).path } + return when { + path?.endsWith(".m3u8") == true -> ExtractorLinkType.M3U8 + path?.endsWith(".mpd") == true -> ExtractorLinkType.DASH + path?.endsWith(".torrent") == true -> ExtractorLinkType.TORRENT + url.startsWith("magnet:") -> ExtractorLinkType.MAGNET + else -> ExtractorLinkType.VIDEO + } +} +val INFER_TYPE : ExtractorLinkType? = null open class ExtractorLink constructor( open val source: String, open val name: String, override val url: String, override val referer: String, open val quality: Int, - open val isM3u8: Boolean = false, override val headers: Map = mapOf(), /** Used for getExtractorVerifierJob() */ open val extractorData: String? = null, - open val isDash: Boolean = false, + open val type: ExtractorLinkType, ) : VideoDownloadManager.IDownloadableMinimum { + constructor( + source: String, + name: String, + url: String, + referer: String, + quality: Int, + /** the type of the media, use INFER_TYPE if you want to auto infer the type from the url */ + type: ExtractorLinkType?, + headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + extractorData: String? = null, + ) : this( + source = source, + name = name, + url = url, + referer = referer, + quality = quality, + headers = headers, + extractorData = extractorData, + type = type ?: inferTypeFromUrl(url) + ) + /** * Old constructor without isDash, allows for backwards compatibility with extensions. * Should be removed after all extensions have updated their cloudstream.jar @@ -80,8 +148,30 @@ open class ExtractorLink constructor( extractorData: String? = null ) : this(source, name, url, referer, quality, isM3u8, headers, extractorData, false) + constructor( + source: String, + name: String, + url: String, + referer: String, + quality: Int, + isM3u8: Boolean = false, + headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + extractorData: String? = null, + isDash: Boolean, + ) : this( + source = source, + name = name, + url = url, + referer = referer, + quality = quality, + headers = headers, + extractorData = extractorData, + type = if (isDash) ExtractorLinkType.DASH else if (isM3u8) ExtractorLinkType.M3U8 else ExtractorLinkType.VIDEO + ) + override fun toString(): String { - return "ExtractorLink(name=$name, url=$url, referer=$referer, isM3u8=$isM3u8)" + return "ExtractorLink(name=$name, url=$url, referer=$referer, type=$type)" } } @@ -135,6 +225,7 @@ enum class Qualities(var value: Int, val defaultPriority: Int) { else -> "${qual}p" } } + fun getStringByIntFull(quality: Int): String { return when (quality) { 0 -> "Auto" diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 72eb002a..d108daed 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -53,7 +53,7 @@ import java.io.Closeable import java.io.File import java.io.IOException import java.io.OutputStream -import java.net.URL +import java.lang.IllegalArgumentException import java.util.* const val DOWNLOAD_CHANNEL_ID = "cloudstream3.general" @@ -951,7 +951,10 @@ object VideoDownloadManager { /** how many bytes every connection should be, by default it is 10 MiB */ chuckSize: Long = (1 shl 20) * 10, /** maximum bytes in the buffer that responds */ - bufferSize: Int = DEFAULT_BUFFER_SIZE + bufferSize: Int = DEFAULT_BUFFER_SIZE, + /** how many bytes bytes it should require to use the parallel downloader instead, + * if we download a very small file we don't want it parallel */ + maximumSmallSize : Long = chuckSize * 2 ): LazyStreamDownloadData { // we don't want to make a separate connection for every 1kb require(chuckSize > 1000) @@ -963,7 +966,7 @@ object VideoDownloadManager { var downloadLength: Long? = null var totalLength: Long? = null - val ranges = if (contentLength == null) { + val ranges = if (contentLength == null || contentLength < maximumSmallSize) { // is the equivalent of [startByte..EOF] as we don't know the size we can only do one // connection LongArray(1) { startByte } @@ -1024,6 +1027,7 @@ object VideoDownloadManager { } } + /** download a file that consist of a single stream of data*/ suspend fun downloadThing( context: Context, link: IDownloadableMinimum, @@ -1035,8 +1039,7 @@ object VideoDownloadManager { createNotificationCallback: (CreateNotificationMetadata) -> Unit, parallelConnections: Int = 3 ): DownloadStatus = withContext(Dispatchers.IO) { - // we cant download torrents with this implementation, aria2c might be used in the future - if (link.url.startsWith("magnet") || link.url.endsWith(".torrent") || parallelConnections < 1) { + if (parallelConnections < 1) { return@withContext DOWNLOAD_INVALID_INPUT } @@ -1529,6 +1532,11 @@ object VideoDownloadManager { notificationCallback: (Int, Notification) -> Unit, tryResume: Boolean = false, ): DownloadStatus { + // no support for these file formats + if(link.type == ExtractorLinkType.MAGNET || link.type == ExtractorLinkType.TORRENT || link.type == ExtractorLinkType.DASH) { + return DOWNLOAD_INVALID_INPUT + } + val name = getFileName(context, ep) // Make sure this is cancelled when download is done or cancelled. @@ -1557,35 +1565,39 @@ object VideoDownloadManager { } try { - if (link.isM3u8 || normalSafeApiCall { URL(link.url).path.endsWith(".m3u8") } == true) { - val startIndex = if (tryResume) { - context.getKey( - KEY_DOWNLOAD_INFO, - ep.id.toString(), - null - )?.extraInfo?.toIntOrNull() - } else null + when(link.type) { + ExtractorLinkType.M3U8 -> { + val startIndex = if (tryResume) { + context.getKey( + KEY_DOWNLOAD_INFO, + ep.id.toString(), + null + )?.extraInfo?.toIntOrNull() + } else null - return downloadHLS( - context, - link, - name, - folder ?: "", - ep.id, - startIndex, - callback, parallelConnections = maxConcurrentConnections - ) - } else { - return downloadThing( - context, - link, - name, - folder ?: "", - "mp4", - tryResume, - ep.id, - callback, parallelConnections = maxConcurrentConnections - ) + return downloadHLS( + context, + link, + name, + folder ?: "", + ep.id, + startIndex, + callback, parallelConnections = maxConcurrentConnections + ) + } + ExtractorLinkType.VIDEO -> { + return downloadThing( + context, + link, + name, + folder ?: "", + "mp4", + tryResume, + ep.id, + callback, parallelConnections = maxConcurrentConnections + ) + } + else -> throw IllegalArgumentException("unsuported download type") } } catch (t: Throwable) { return DOWNLOAD_FAILED From 0839775172db1f55b4703d189e1aa7e8f3aed3f3 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Mon, 4 Sep 2023 20:36:36 +0000 Subject: [PATCH 529/888] Upgrade SDK (#590) * Update sdk version * Let's not be too radical --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 55d0f7ae..e31de078 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -51,12 +51,12 @@ android { } compileSdk = 33 - buildToolsVersion = "30.0.3" + buildToolsVersion = "34.0.0" defaultConfig { applicationId = "com.lagradost.cloudstream3" minSdk = 21 - targetSdk = 29 + targetSdk = 33 versionCode = 59 versionName = "4.1.8" From 3fe247fb193ada9bbb7ff391d38e02a24630c1e0 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 6 Sep 2023 20:53:43 +0200 Subject: [PATCH 530/888] added drm player support --- .../cloudstream3/ui/player/CS3IPlayer.kt | 87 ++++++++++++++++--- .../cloudstream3/utils/ExtractorApi.kt | 55 ++++++++++++ 2 files changed, 132 insertions(+), 10 deletions(-) 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 fd1da5ca..c779943b 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 @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.player +import android.annotation.SuppressLint import android.content.Context import android.net.Uri import android.os.Handler @@ -7,6 +8,7 @@ import android.os.Looper import android.util.Log import android.util.Rational import android.widget.FrameLayout +import androidx.media3.common.C import androidx.media3.common.C.* import androidx.media3.common.Format import androidx.media3.common.MediaItem @@ -31,6 +33,10 @@ import androidx.media3.exoplayer.DefaultRenderersFactory import androidx.media3.exoplayer.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.SeekParameters +import androidx.media3.exoplayer.dash.DashMediaSource +import androidx.media3.exoplayer.drm.DefaultDrmSessionManager +import androidx.media3.exoplayer.drm.FrameworkMediaDrm +import androidx.media3.exoplayer.drm.LocalMediaDrmCallback import androidx.media3.exoplayer.source.ClippingMediaSource import androidx.media3.exoplayer.source.ConcatenatingMediaSource import androidx.media3.exoplayer.source.DefaultMediaSourceFactory @@ -50,6 +56,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData +import com.lagradost.cloudstream3.utils.DrmExtractorLink import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList @@ -58,6 +65,7 @@ import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import java.io.File import java.lang.IllegalArgumentException +import java.util.UUID import javax.net.ssl.HttpsURLConnection import javax.net.ssl.SSLContext import javax.net.ssl.SSLSession @@ -104,7 +112,16 @@ class CS3IPlayer : IPlayer { * */ data class MediaItemSlice( val mediaItem: MediaItem, - val durationUs: Long + val durationUs: Long, + val drm: DrmMetadata? = null + ) + + data class DrmMetadata( + val kid: String, + val key: String, + val uuid: UUID, + val kty: String, + val keyRequestParameters: HashMap, ) override fun getDuration(): Long? = exoPlayer?.duration @@ -340,6 +357,7 @@ class CS3IPlayer : IPlayer { }.flatten() } + @SuppressLint("UnsafeOptInUsageError") private fun Tracks.Group.getFormats(): List> { return (0 until this.mediaTrackGroup.length).mapNotNull { i -> if (this.isSupported) @@ -368,6 +386,7 @@ class CS3IPlayer : IPlayer { ) } + @SuppressLint("UnsafeOptInUsageError") override fun getVideoTracks(): CurrentTracks { val allTracks = exoPlayer?.currentTracks?.groups ?: emptyList() val videoTracks = allTracks.filter { it.type == TRACK_TYPE_VIDEO } @@ -387,6 +406,7 @@ class CS3IPlayer : IPlayer { /** * @return True if the player should be reloaded * */ + @SuppressLint("UnsafeOptInUsageError") override fun setPreferredSubtitles(subtitle: SubtitleData?): Boolean { Log.i(TAG, "setPreferredSubtitles init $subtitle") currentSubtitles = subtitle @@ -465,6 +485,7 @@ class CS3IPlayer : IPlayer { } } + @SuppressLint("UnsafeOptInUsageError") override fun getAspectRatio(): Rational? { return exoPlayer?.videoFormat?.let { format -> Rational(format.width, format.height) @@ -475,6 +496,7 @@ class CS3IPlayer : IPlayer { subtitleHelper.setSubStyle(style) } + @SuppressLint("UnsafeOptInUsageError") override fun saveData() { Log.i(TAG, "saveData") updatedTime() @@ -548,6 +570,7 @@ class CS3IPlayer : IPlayer { var requestSubtitleUpdate: (() -> Unit)? = null + @SuppressLint("UnsafeOptInUsageError") private fun createOnlineSource(headers: Map): HttpDataSource.Factory { val source = OkHttpDataSource.Factory(app.baseClient).setUserAgent(USER_AGENT) return source.apply { @@ -555,6 +578,7 @@ class CS3IPlayer : IPlayer { } } + @SuppressLint("UnsafeOptInUsageError") private fun createOnlineSource(link: ExtractorLink): HttpDataSource.Factory { val provider = getApiFromNameNull(link.source) val interceptor = provider?.getVideoInterceptor(link) @@ -632,6 +656,7 @@ class CS3IPlayer : IPlayer { return Pair(subSources, activeSubtitles) }*/ + @SuppressLint("UnsafeOptInUsageError") private fun getCache(context: Context, cacheSize: Long): SimpleCache? { return try { val databaseProvider = StandaloneDatabaseProvider(context) @@ -663,6 +688,7 @@ class CS3IPlayer : IPlayer { return getMediaItemBuilder(mimeType).setUri(url).build() } + @SuppressLint("UnsafeOptInUsageError") private fun getTrackSelector(context: Context, maxVideoHeight: Int?): TrackSelector { val trackSelector = DefaultTrackSelector(context) trackSelector.parameters = trackSelector.buildUponParameters() @@ -676,6 +702,7 @@ class CS3IPlayer : IPlayer { var currentTextRenderer: CustomTextRenderer? = null + @SuppressLint("UnsafeOptInUsageError") private fun buildExoPlayer( context: Context, mediaItemSlices: List, @@ -760,15 +787,33 @@ class CS3IPlayer : IPlayer { // If there is only one item then treat it as normal, if multiple: concatenate the items. val videoMediaSource = if (mediaItemSlices.size == 1) { - factory.createMediaSource(mediaItemSlices.first().mediaItem) + val item = mediaItemSlices.first() + + item.drm?.let { drm -> + val drmCallback = + LocalMediaDrmCallback("{\"keys\":[{\"kty\":\"${drm.kty}\",\"k\":\"${drm.key}\",\"kid\":\"${drm.kid}\"}],\"type\":\"temporary\"}".toByteArray()) + val manager = DefaultDrmSessionManager.Builder() + .setPlayClearSamplesWithoutKeys(true) + .setMultiSession(false) + .setKeyRequestParameters(drm.keyRequestParameters) + .setUuidAndExoMediaDrmProvider(drm.uuid, FrameworkMediaDrm.DEFAULT_PROVIDER) + .build(drmCallback) + val manifestDataSourceFactory = DefaultHttpDataSource.Factory() + + DashMediaSource.Factory(manifestDataSourceFactory) + .setDrmSessionManagerProvider { manager } + .createMediaSource(item.mediaItem) + } ?: run { + factory.createMediaSource(item.mediaItem) + } } else { val source = ConcatenatingMediaSource() - mediaItemSlices.map { + mediaItemSlices.map { item -> source.addMediaSource( // The duration MUST be known for it to work properly, see https://github.com/google/ExoPlayer/issues/4727 ClippingMediaSource( - factory.createMediaSource(it.mediaItem), - it.durationUs + factory.createMediaSource(item.mediaItem), + item.durationUs ) ) } @@ -1105,6 +1150,8 @@ class CS3IPlayer : IPlayer { } private var lastTimeStamps: List = emptyList() + + @SuppressLint("UnsafeOptInUsageError") override fun addTimeStamps(timeStamps: List) { lastTimeStamps = timeStamps timeStamps.forEach { timestamp -> @@ -1122,6 +1169,7 @@ class CS3IPlayer : IPlayer { updatedTime() } + @SuppressLint("UnsafeOptInUsageError") fun onRenderFirst() { if (hasUsedFirstRender) { // this insures that we only call this once per player load return @@ -1188,6 +1236,7 @@ class CS3IPlayer : IPlayer { } } + @SuppressLint("UnsafeOptInUsageError") private fun getSubSources( onlineSourceFactory: HttpDataSource.Factory?, offlineSourceFactory: DataSource.Factory?, @@ -1243,6 +1292,7 @@ class CS3IPlayer : IPlayer { return exoPlayer != null } + @SuppressLint("UnsafeOptInUsageError") private fun loadOnlinePlayer(context: Context, link: ExtractorLink) { Log.i(TAG, "loadOnlinePlayer $link") try { @@ -1259,7 +1309,7 @@ class CS3IPlayer : IPlayer { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory) } - val mime = when(link.type) { + val mime = when (link.type) { ExtractorLinkType.M3U8 -> MimeTypes.APPLICATION_M3U8 ExtractorLinkType.DASH -> MimeTypes.APPLICATION_MPD ExtractorLinkType.VIDEO -> MimeTypes.VIDEO_MP4 @@ -1267,12 +1317,29 @@ class CS3IPlayer : IPlayer { ExtractorLinkType.MAGNET -> throw IllegalArgumentException("No magnet support") } - val mediaItems = if (link is ExtractorLinkPlayList) { - link.playlist.map { + + val mediaItems = when (link) { + is ExtractorLinkPlayList -> link.playlist.map { MediaItemSlice(getMediaItem(mime, it.url), it.durationUs) } - } else { - listOf( + + is DrmExtractorLink -> { + listOf( + // Single sliced list with unset length + MediaItemSlice( + getMediaItem(mime, link.url), Long.MIN_VALUE, + drm = DrmMetadata( + kid = link.kid, + key = link.key, + uuid = link.uuid ?: C.CLEARKEY_UUID, + kty = link.kty, + keyRequestParameters = link.keyRequestParameters + ) + ) + ) + } + + else -> listOf( // Single sliced list with unset length MediaItemSlice(getMediaItem(mime, link.url), Long.MIN_VALUE) ) 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 2a539f0d..85e88819 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -8,6 +8,7 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import kotlinx.coroutines.delay import org.jsoup.Jsoup import java.net.URL +import java.util.UUID import kotlin.collections.MutableList /** @@ -99,6 +100,60 @@ private fun inferTypeFromUrl(url: String): ExtractorLinkType { } } val INFER_TYPE : ExtractorLinkType? = null + +open class DrmExtractorLink private constructor( + override val source: String, + override val name: String, + override val url: String, + override val referer: String, + override val quality: Int, + override val headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + override val extractorData: String? = null, + override val type: ExtractorLinkType, + open val kid : String, + open val key : String, + /** if null then it uses the UUID for the ClearKey DRM scheme */ + open val uuid : UUID?, + open val kty : String, + + open val keyRequestParameters : HashMap +) : ExtractorLink( + source, name, url, referer, quality, type, headers, extractorData +) { + constructor( + source: String, + name: String, + url: String, + referer: String, + quality: Int, + /** the type of the media, use INFER_TYPE if you want to auto infer the type from the url */ + type: ExtractorLinkType?, + headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + extractorData: String? = null, + kid : String, + key : String, + uuid : UUID? = null, + kty : String = "oct", + keyRequestParameters : HashMap = hashMapOf(), + ) : this( + source = source, + name = name, + url = url, + referer = referer, + quality = quality, + headers = headers, + extractorData = extractorData, + type = type ?: inferTypeFromUrl(url), + kid = kid, + key = key, + uuid = uuid, + keyRequestParameters = keyRequestParameters, + kty = kty, + ) +} + open class ExtractorLink constructor( open val source: String, open val name: String, From 49731cd6995dc2b784fef17554faeb90a1b895c0 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 6 Sep 2023 22:42:22 +0200 Subject: [PATCH 531/888] changed drm API a bit --- .../cloudstream3/ui/player/CS3IPlayer.kt | 2 +- .../cloudstream3/utils/ExtractorApi.kt | 225 +++++++++++++++++- 2 files changed, 220 insertions(+), 7 deletions(-) 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 c779943b..4a88a2e7 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 @@ -1331,7 +1331,7 @@ class CS3IPlayer : IPlayer { drm = DrmMetadata( kid = link.kid, key = link.key, - uuid = link.uuid ?: C.CLEARKEY_UUID, + uuid = link.uuid, kty = link.kty, keyRequestParameters = link.keyRequestParameters ) 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 85e88819..0a926374 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -1,15 +1,204 @@ package com.lagradost.cloudstream3.utils import android.net.Uri -import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.USER_AGENT +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.extractors.AStreamHub +import com.lagradost.cloudstream3.extractors.Acefile +import com.lagradost.cloudstream3.extractors.Ahvsh +import com.lagradost.cloudstream3.extractors.Aico +import com.lagradost.cloudstream3.extractors.AsianLoad +import com.lagradost.cloudstream3.extractors.Bestx +import com.lagradost.cloudstream3.extractors.Blogger +import com.lagradost.cloudstream3.extractors.BullStream +import com.lagradost.cloudstream3.extractors.ByteShare +import com.lagradost.cloudstream3.extractors.Cda +import com.lagradost.cloudstream3.extractors.Cdnplayer +import com.lagradost.cloudstream3.extractors.Chillx +import com.lagradost.cloudstream3.extractors.CineGrabber +import com.lagradost.cloudstream3.extractors.Cinestart +import com.lagradost.cloudstream3.extractors.DBfilm +import com.lagradost.cloudstream3.extractors.Dailymotion +import com.lagradost.cloudstream3.extractors.DatabaseGdrive +import com.lagradost.cloudstream3.extractors.DatabaseGdrive2 +import com.lagradost.cloudstream3.extractors.DesuArcg +import com.lagradost.cloudstream3.extractors.DesuDrive +import com.lagradost.cloudstream3.extractors.DesuOdchan +import com.lagradost.cloudstream3.extractors.DesuOdvip +import com.lagradost.cloudstream3.extractors.Dokicloud +import com.lagradost.cloudstream3.extractors.DoodCxExtractor +import com.lagradost.cloudstream3.extractors.DoodLaExtractor +import com.lagradost.cloudstream3.extractors.DoodPmExtractor +import com.lagradost.cloudstream3.extractors.DoodShExtractor +import com.lagradost.cloudstream3.extractors.DoodSoExtractor +import com.lagradost.cloudstream3.extractors.DoodToExtractor +import com.lagradost.cloudstream3.extractors.DoodWatchExtractor +import com.lagradost.cloudstream3.extractors.DoodWfExtractor +import com.lagradost.cloudstream3.extractors.DoodWsExtractor +import com.lagradost.cloudstream3.extractors.DoodYtExtractor +import com.lagradost.cloudstream3.extractors.Dooood +import com.lagradost.cloudstream3.extractors.Embedgram +import com.lagradost.cloudstream3.extractors.Evoload +import com.lagradost.cloudstream3.extractors.Evoload1 +import com.lagradost.cloudstream3.extractors.FEmbed +import com.lagradost.cloudstream3.extractors.FEnet +import com.lagradost.cloudstream3.extractors.Fastream +import com.lagradost.cloudstream3.extractors.FeHD +import com.lagradost.cloudstream3.extractors.Fembed9hd +import com.lagradost.cloudstream3.extractors.FileMoon +import com.lagradost.cloudstream3.extractors.FileMoonIn +import com.lagradost.cloudstream3.extractors.FileMoonSx +import com.lagradost.cloudstream3.extractors.Filesim +import com.lagradost.cloudstream3.extractors.Fplayer +import com.lagradost.cloudstream3.extractors.GMPlayer +import com.lagradost.cloudstream3.extractors.Gdriveplayer +import com.lagradost.cloudstream3.extractors.Gdriveplayerapi +import com.lagradost.cloudstream3.extractors.Gdriveplayerapp +import com.lagradost.cloudstream3.extractors.Gdriveplayerbiz +import com.lagradost.cloudstream3.extractors.Gdriveplayerco +import com.lagradost.cloudstream3.extractors.Gdriveplayerfun +import com.lagradost.cloudstream3.extractors.Gdriveplayerio +import com.lagradost.cloudstream3.extractors.Gdriveplayerme +import com.lagradost.cloudstream3.extractors.Gdriveplayerorg +import com.lagradost.cloudstream3.extractors.Gdriveplayerus +import com.lagradost.cloudstream3.extractors.Gofile +import com.lagradost.cloudstream3.extractors.GuardareStream +import com.lagradost.cloudstream3.extractors.Guccihide +import com.lagradost.cloudstream3.extractors.Hxfile +import com.lagradost.cloudstream3.extractors.JWPlayer +import com.lagradost.cloudstream3.extractors.Jawcloud +import com.lagradost.cloudstream3.extractors.Jeniusplay +import com.lagradost.cloudstream3.extractors.Keephealth +import com.lagradost.cloudstream3.extractors.KotakAnimeid +import com.lagradost.cloudstream3.extractors.Kotakajair +import com.lagradost.cloudstream3.extractors.Krakenfiles +import com.lagradost.cloudstream3.extractors.LayarKaca +import com.lagradost.cloudstream3.extractors.Linkbox +import com.lagradost.cloudstream3.extractors.Luxubu +import com.lagradost.cloudstream3.extractors.Lvturbo +import com.lagradost.cloudstream3.extractors.Maxstream +import com.lagradost.cloudstream3.extractors.Mcloud +import com.lagradost.cloudstream3.extractors.Megacloud +import com.lagradost.cloudstream3.extractors.Meownime +import com.lagradost.cloudstream3.extractors.MixDrop +import com.lagradost.cloudstream3.extractors.MixDropBz +import com.lagradost.cloudstream3.extractors.MixDropCh +import com.lagradost.cloudstream3.extractors.MixDropTo +import com.lagradost.cloudstream3.extractors.Movhide +import com.lagradost.cloudstream3.extractors.Moviehab +import com.lagradost.cloudstream3.extractors.MoviehabNet +import com.lagradost.cloudstream3.extractors.Moviesapi +import com.lagradost.cloudstream3.extractors.Moviesm4u +import com.lagradost.cloudstream3.extractors.Mp4Upload +import com.lagradost.cloudstream3.extractors.Mvidoo +import com.lagradost.cloudstream3.extractors.MwvnVizcloudInfo +import com.lagradost.cloudstream3.extractors.Neonime7n +import com.lagradost.cloudstream3.extractors.Neonime8n +import com.lagradost.cloudstream3.extractors.OkRu +import com.lagradost.cloudstream3.extractors.OkRuHttps +import com.lagradost.cloudstream3.extractors.Okrulink +import com.lagradost.cloudstream3.extractors.Pixeldrain +import com.lagradost.cloudstream3.extractors.PlayLtXyz +import com.lagradost.cloudstream3.extractors.PlayerVoxzer +import com.lagradost.cloudstream3.extractors.Rabbitstream +import com.lagradost.cloudstream3.extractors.Rasacintaku +import com.lagradost.cloudstream3.extractors.SBfull +import com.lagradost.cloudstream3.extractors.Sbasian +import com.lagradost.cloudstream3.extractors.Sbface +import com.lagradost.cloudstream3.extractors.Sbflix +import com.lagradost.cloudstream3.extractors.Sblona +import com.lagradost.cloudstream3.extractors.Sblongvu +import com.lagradost.cloudstream3.extractors.Sbnet +import com.lagradost.cloudstream3.extractors.Sbrapid +import com.lagradost.cloudstream3.extractors.Sbsonic +import com.lagradost.cloudstream3.extractors.Sbspeed +import com.lagradost.cloudstream3.extractors.Sbthe +import com.lagradost.cloudstream3.extractors.Sendvid +import com.lagradost.cloudstream3.extractors.ShaveTape +import com.lagradost.cloudstream3.extractors.Solidfiles +import com.lagradost.cloudstream3.extractors.SpeedoStream +import com.lagradost.cloudstream3.extractors.SpeedoStream1 +import com.lagradost.cloudstream3.extractors.SpeedoStream2 +import com.lagradost.cloudstream3.extractors.Ssbstream +import com.lagradost.cloudstream3.extractors.StreamM4u +import com.lagradost.cloudstream3.extractors.StreamSB +import com.lagradost.cloudstream3.extractors.StreamSB1 +import com.lagradost.cloudstream3.extractors.StreamSB10 +import com.lagradost.cloudstream3.extractors.StreamSB11 +import com.lagradost.cloudstream3.extractors.StreamSB2 +import com.lagradost.cloudstream3.extractors.StreamSB3 +import com.lagradost.cloudstream3.extractors.StreamSB4 +import com.lagradost.cloudstream3.extractors.StreamSB5 +import com.lagradost.cloudstream3.extractors.StreamSB6 +import com.lagradost.cloudstream3.extractors.StreamSB7 +import com.lagradost.cloudstream3.extractors.StreamSB8 +import com.lagradost.cloudstream3.extractors.StreamSB9 +import com.lagradost.cloudstream3.extractors.StreamTape +import com.lagradost.cloudstream3.extractors.StreamTapeNet +import com.lagradost.cloudstream3.extractors.StreamhideCom +import com.lagradost.cloudstream3.extractors.StreamhideTo +import com.lagradost.cloudstream3.extractors.Streamhub2 +import com.lagradost.cloudstream3.extractors.Streamlare +import com.lagradost.cloudstream3.extractors.StreamoUpload +import com.lagradost.cloudstream3.extractors.Streamplay +import com.lagradost.cloudstream3.extractors.Streamsss +import com.lagradost.cloudstream3.extractors.Supervideo +import com.lagradost.cloudstream3.extractors.Tantifilm +import com.lagradost.cloudstream3.extractors.Tomatomatela +import com.lagradost.cloudstream3.extractors.TomatomatelalClub +import com.lagradost.cloudstream3.extractors.Tubeless +import com.lagradost.cloudstream3.extractors.Upstream +import com.lagradost.cloudstream3.extractors.UpstreamExtractor +import com.lagradost.cloudstream3.extractors.Uqload +import com.lagradost.cloudstream3.extractors.Uqload1 +import com.lagradost.cloudstream3.extractors.Uqload2 +import com.lagradost.cloudstream3.extractors.Userload +import com.lagradost.cloudstream3.extractors.Userscloud +import com.lagradost.cloudstream3.extractors.Uservideo +import com.lagradost.cloudstream3.extractors.Vanfem +import com.lagradost.cloudstream3.extractors.Vicloud +import com.lagradost.cloudstream3.extractors.VidSrcExtractor +import com.lagradost.cloudstream3.extractors.VidSrcExtractor2 +import com.lagradost.cloudstream3.extractors.VideoVard +import com.lagradost.cloudstream3.extractors.VideovardSX +import com.lagradost.cloudstream3.extractors.Vidgomunime +import com.lagradost.cloudstream3.extractors.Vidgomunimesb +import com.lagradost.cloudstream3.extractors.Vidmoly +import com.lagradost.cloudstream3.extractors.Vidmolyme +import com.lagradost.cloudstream3.extractors.Vido +import com.lagradost.cloudstream3.extractors.Vidstreamz +import com.lagradost.cloudstream3.extractors.Vizcloud +import com.lagradost.cloudstream3.extractors.Vizcloud2 +import com.lagradost.cloudstream3.extractors.VizcloudCloud +import com.lagradost.cloudstream3.extractors.VizcloudDigital +import com.lagradost.cloudstream3.extractors.VizcloudInfo +import com.lagradost.cloudstream3.extractors.VizcloudLive +import com.lagradost.cloudstream3.extractors.VizcloudOnline +import com.lagradost.cloudstream3.extractors.VizcloudSite +import com.lagradost.cloudstream3.extractors.VizcloudXyz +import com.lagradost.cloudstream3.extractors.Voe +import com.lagradost.cloudstream3.extractors.Watchx +import com.lagradost.cloudstream3.extractors.WcoStream +import com.lagradost.cloudstream3.extractors.Wibufile +import com.lagradost.cloudstream3.extractors.XStreamCdn +import com.lagradost.cloudstream3.extractors.YourUpload +import com.lagradost.cloudstream3.extractors.YoutubeExtractor +import com.lagradost.cloudstream3.extractors.YoutubeMobileExtractor +import com.lagradost.cloudstream3.extractors.YoutubeNoCookieExtractor +import com.lagradost.cloudstream3.extractors.YoutubeShortLinkExtractor +import com.lagradost.cloudstream3.extractors.Yufiles +import com.lagradost.cloudstream3.extractors.Zorofile +import com.lagradost.cloudstream3.extractors.Zplayer +import com.lagradost.cloudstream3.extractors.ZplayerV2 +import com.lagradost.cloudstream3.extractors.Ztreamhub import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.extractors.* import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import kotlinx.coroutines.delay import org.jsoup.Jsoup import java.net.URL import java.util.UUID -import kotlin.collections.MutableList /** * For use in the ConcatenatingMediaSource. @@ -101,6 +290,31 @@ private fun inferTypeFromUrl(url: String): ExtractorLinkType { } val INFER_TYPE : ExtractorLinkType? = null +/** + * UUID for the ClearKey DRM scheme. + * + * + * ClearKey is supported on Android devices running Android 5.0 (API Level 21) and up. + */ +val CLEARKEY_UUID = UUID(-0x1d8e62a7567a4c37L, 0x781AB030AF78D30EL) + +/** + * UUID for the Widevine DRM scheme. + * + * + * Widevine is supported on Android devices running Android 4.3 (API Level 18) and up. + */ +val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L) + +/** + * UUID for the PlayReady DRM scheme. + * + * + * PlayReady is supported on all AndroidTV devices. Note that most other Android devices do not + * provide PlayReady support. + */ +val PLAYREADY_UUID = UUID(-0x65fb0f8667bfbd7aL, -0x546d19a41f77a06bL) + open class DrmExtractorLink private constructor( override val source: String, override val name: String, @@ -113,8 +327,7 @@ open class DrmExtractorLink private constructor( override val type: ExtractorLinkType, open val kid : String, open val key : String, - /** if null then it uses the UUID for the ClearKey DRM scheme */ - open val uuid : UUID?, + open val uuid : UUID, open val kty : String, open val keyRequestParameters : HashMap @@ -134,7 +347,7 @@ open class DrmExtractorLink private constructor( extractorData: String? = null, kid : String, key : String, - uuid : UUID? = null, + uuid : UUID = CLEARKEY_UUID, kty : String = "oct", keyRequestParameters : HashMap = hashMapOf(), ) : this( From 4ddd78ebb6892742543b082a6395553d9642dc8e Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Fri, 8 Sep 2023 13:30:00 +0530 Subject: [PATCH 532/888] fook jitpack (#595) --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e31de078..f52d6e5e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -250,9 +250,9 @@ dependencies { // used for subtitle decoding https://github.com/albfernandez/juniversalchardet implementation("com.github.albfernandez:juniversalchardet:2.4.0") - // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204 + // newpipe yt taken from https://github.com/TeamNewPipe/NewPipeExtractor/commits/dev // this should be updated frequently to avoid trailer fu*kery - implementation("com.github.TeamNewPipe:NewPipeExtractor:1f08d28") + implementation("com.github.teamnewpipe:NewPipeExtractor:1f08d28") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance From f05c65cf5c62964c73b9756c4f5c2dedb7cfb919 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Fri, 8 Sep 2023 10:01:11 +0200 Subject: [PATCH 533/888] Translated using Weblate (Odia) (#574) Currently translated at 39.5% (249 of 630 strings) Translated using Weblate (Odia) Currently translated at 25.0% (1 of 4 strings) Translated using Weblate (Odia) Currently translated at 38.8% (245 of 630 strings) Translated using Weblate (German) Currently translated at 99.8% (629 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Tamil) Currently translated at 20.9% (132 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Ukrainian) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (630 of 630 strings) Translated using Weblate (Croatian) Currently translated at 99.8% (629 of 630 strings) Translated using Weblate (Croatian) Currently translated at 99.3% (626 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Arabic (Najdi)) Currently translated at 54.9% (346 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Ukrainian) Currently translated at 100.0% (630 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (French) Currently translated at 100.0% (630 of 630 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Hungarian) Currently translated at 85.7% (540 of 630 strings) Translated using Weblate (Romanian) Currently translated at 95.7% (603 of 630 strings) Translated using Weblate (Arabic (Najdi)) Currently translated at 50.1% (316 of 630 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (630 of 630 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 96.1% (606 of 630 strings) Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Translated using Weblate (Arabic (Najdi)) Currently translated at 44.9% (283 of 630 strings) Translated using Weblate (Arabic (Najdi)) Currently translated at 39.6% (250 of 630 strings) Translated using Weblate (Arabic (Najdi)) Currently translated at 39.5% (249 of 630 strings) Translated using Weblate (German) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (German) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (German) Currently translated at 99.8% (629 of 630 strings) Translated using Weblate (German) Currently translated at 99.8% (629 of 630 strings) Translated using Weblate (Arabic (Najdi)) Currently translated at 33.4% (211 of 630 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (630 of 630 strings) Translated using Weblate (German) Currently translated at 99.8% (629 of 630 strings) Translated using Weblate (German) Currently translated at 99.8% (629 of 630 strings) Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Merge remote-tracking branch 'origin/master' Update translation files Updated by "Remove blank strings" hook in Weblate. Translated using Weblate (Arabic (Najdi)) Currently translated at 32.0% (202 of 630 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 91.5% (577 of 630 strings) Translated using Weblate (Arabic (Saudi Arabia)) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Arabic (Najdi)) Currently translated at 23.9% (151 of 630 strings) Added translation using Weblate (Arabic (South Levantine)) Translated using Weblate (Amharic) Currently translated at 14.9% (94 of 630 strings) Translated using Weblate (Tigrinya) Currently translated at 15.0% (95 of 630 strings) Added translation using Weblate (Amharic) Added translation using Weblate (Tigrinya) Merge remote-tracking branch 'origin/master' Translated using Weblate (Hungarian) Currently translated at 85.2% (537 of 630 strings) Translated using Weblate (Hungarian) Currently translated at 81.4% (513 of 630 strings) Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/am/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ars/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/hu/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/or/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ro/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ta/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ti/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/ar_SA/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/de/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/or/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/uk/ Translation: Cloudstream/App Translation: Cloudstream/Fastlane Co-authored-by: Alexandru Co-authored-by: Anarchydr Co-authored-by: Cait Martin Newnham <85128509+helloiamcait@users.noreply.github.com> Co-authored-by: Carlos Luiz Co-authored-by: Chi Uma Co-authored-by: GobinathAL Co-authored-by: Gyuri Bajzik Co-authored-by: Joel Brink Co-authored-by: Julian Co-authored-by: Mubarek Seyd Juhar Co-authored-by: Sam Cooper Co-authored-by: Skrripy Co-authored-by: Subham Jena Co-authored-by: mbottari Co-authored-by: pedrolinharesmoreira Co-authored-by: tabtomi8 --- app/src/main/res/values-ars/strings.xml | 67 +++++++++++++- app/src/main/res/values-bp/strings.xml | 43 ++++++--- app/src/main/res/values-de/strings.xml | 92 +++++++++---------- app/src/main/res/values-fr/strings.xml | 6 +- app/src/main/res/values-hr/strings.xml | 13 ++- app/src/main/res/values-hu/strings.xml | 7 +- app/src/main/res/values-or/strings.xml | 7 +- app/src/main/res/values-ro/strings.xml | 3 +- app/src/main/res/values-ta/strings.xml | 26 ++++-- app/src/main/res/values-uk/strings.xml | 38 ++++---- fastlane/metadata/android/or/changelogs/2.txt | 1 + fastlane/metadata/android/uk/changelogs/2.txt | 2 +- 12 files changed, 209 insertions(+), 96 deletions(-) create mode 100644 fastlane/metadata/android/or/changelogs/2.txt diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index ea8aa05c..5135c97e 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -200,4 +200,69 @@ استخدم %sتعذر إنشاء واجهة المستخدم بشكل صحيح، وهذا خطأ كبير ويجب الإبلاغ عنه على الفور الصفات - + نوع الحافة + العب + حدث خطأ أثناء تحميل الروابط + التخزين الداخلي + الترجمة + استئناف تحميل + معلومات + وقفة التحميل + الغي + احفظ + إعدادات الترجمة + لون الخط + لون المخطط التفصيلي + اقفل + امسح + سرعة اللاعب + لون الخلفية + لون النافذة + ارتفاع الترجمة + حذف ملف + تعطيل الإبلاغ التلقائي عن الأخطاء + بدأ التحديث + انسخ + بث + ملف اللعب + مزيد من المعلومات + تصفية الإشارات المرجعية + إشارات مرجعية + زيل + ضبط حالة المشاهدة + مدبلجة + اخفي + قدم + وصف + يستمر التشغيل في مشغل مصغر فوق التطبيقات الأخرى + نهائيا %sسيؤدي هذا الى حذف +\nهل أنت متأكد؟ + الخط + حجم الخط + زيل + هذا المزود عبارة عن تورنت، ويوصى باستخدام فيبيان + لا يتم توفير البيانات الوصفية بواسطة الموقع، وسيفشل تحميل الفيديو إذا لم يكن موجودًا في الموقع. + جاري التنفيذ + مكتمل + حالة + التحديد التلقائي للغة + زر تغيير حجم المشغل + مواصلة المشاهدة + مزيد من المعلومات + البحث باستخدام مقدمي الخدمات + البحث باستخدام الأنواع + بنيني الى المطورين %d تم منح + لم يتم تقديم بنيني + تحميل اللغات + لغة الترجمة + اضغط لإعادة التعيين إلى الوضع الافتراضي + %s قم باستيراد الخطوط بوضعها في + قد تكون هناك حاجة إلى فيبيان حتى يعمل هذا المزود بشكل صحيح + لم يتم العثور على قطعة أرض + لم يتم العثور على وصف + 🐈عرض لوجكات + سجل + صور في صور + %d +\nباقي + \ No newline at end of file diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index b70eec12..daa352a7 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -157,7 +157,7 @@ Mostrar episódios de Filler em anime Mostrar trailers Mostrar posters do Kitsu - Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa + Esconder qualidades de vídeo selecionadas nos resultados da pesquisa Atualizações de plugin automáticas Mostrar atualizações do app Automaticamente procurar por novas atualizações ao abrir @@ -222,7 +222,7 @@ Filme Série Desenho Animado - @string/anime + Anime @string/ova Torrent Documentário @@ -265,14 +265,14 @@ Cache do vídeo em disco Limpar cache de vídeo e imagem Causará travamentos aleatórios se definido muito alto. Não mude caso tiver pouca memória RAM, como um Android TV ou um telefone antigo - Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV + Causa problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV. DNS sobre HTTPS Útil para burlar bloqueios de provedores de internet Clonar site Remover site Adiciona um clone de um site existente, com uma URL diferente Caminho para Download - Url do servidor Nginx + URL do servidor NGINX Mostrar Anime Dublado/Legendado Ajustar para a Tela Esticar @@ -338,7 +338,7 @@ Sombreado Em Relevo Sincronizar legendas - 1000ms + 1000 ms Atraso de legenda Use isto se as legendas forem mostradas %dms adiantadas Use isto se as legendas forem mostradas %dms atrasadas @@ -382,9 +382,9 @@ Resolução e título Título Resolução - Id invalida + ID inválido Dado invalido - URL invalido + URL inválida Erro Remover legendas ocultas(CC) das legendas Remover bloat das legendas @@ -406,8 +406,8 @@ Plugin Carregado Plugin Apagado Falha ao carregar %s - Iniciada a transferência %d %s - Transferido %d %s com sucesso + Iniciada a transferência %d %s… + Transferido %d %s Tudo %s já transferido Transferência em batch Plugin @@ -444,7 +444,7 @@ Navegador Copia de Segurança A Barra de Progresso pode ser usada quando o player estiver oculto - Inscrever + Inscrito Essa lista está vazia. Tente mudar para outra. Reproduzir Livestream Log do Teste @@ -493,10 +493,10 @@ \nNOTA: Se a soma for 10 ou mais, o Player pulará automaticamente o carregamento quando o link for carregado! Arquivo de modo de segurança encontrado! \nNão carregar nenhuma extensão na inicialização até que o arquivo seja removido. - Inscrevel em %d + Inscrito em %s Episódio %d Lançado Selecionar padrão - Disinscrevel em %d + Desinscrito de %s Alguns aparelhos não possuem suporte para este pacote de instalação. Tente a opção legada se a atualização não instalar. Dados móveis Perfil %d @@ -550,4 +550,21 @@ Faixas de áudio Adicionado em (novo para antigo) Faixas de video - + Legendas + Navegador + 18+ + Links + Funcionalidades do Player + Instalador APK + Aparência + Desativar + Usar + Link da stream + Gestos + Plugin baixado + Não foi possível se conectar ao GitHub. Ativando proxy jsDelivr… + Cache + Vídeo + Android TV + Wi-Fi + \ 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 6739465a..233e38e4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -5,19 +5,19 @@ Episode %d wird veröffentlicht in Vorschaubild Vorschaubild - Halten, um auf die Standardeinstellungen zurückzusetzen + Halten, um auf Standardeinstellungen zurückzusetzen Wiederherstellung der Daten aus der Datei %s fehlgeschlagen Daten erfolgreich gesichert Fehler beim Sichern von %s Dieser Anbieter hat keine Chromecast-Unterstützung Chromecast-Mirror In App wiedergeben - Vermischte Openings + Gemischte Openings Abspann Intro Verlauf löschen Verlauf - Überspringen Knopf für Openings/Endings anzeigen + Button zum Überspringen für Openings/Endings anzeigen Zu viel Text. Kann nicht in der Zwischenablage gespeichert werden. Episodenvorschaubild Medienvorschaubild @@ -34,7 +34,7 @@ CloudStream Mit CloudStream abspielen Startseite - Suchen + Suche Downloads Einstellungen Suchen… @@ -44,8 +44,8 @@ Nächste Episode Genres Teilen - In Browser öffnen - Puffern überspringen + Im Browser öffnen + Laden überspringen Lädt… Am schauen Pausiert @@ -79,7 +79,7 @@ Datei abspielen Download fortsetzen Download pausieren - Automatische Fehlerberichterstattung deaktivieren + Automatische Fehlerberichtserstattung deaktivieren Mehr Infos Verstecken Abspielen @@ -106,8 +106,8 @@ Schriftgröße Suche anhand Anbietern Suche anhand Typen - %d Benenes an die Devs verteilt - Noch keine Benenes verteilt + %d Benenes an die Devs geschenkt + Noch keine Benenes verschenkt Sprache automatisch wählen Sprachen herunterladen Untertitelsprache @@ -117,8 +117,8 @@ Mehr Infos @string/home_play Damit dieser Anbieter korrekt funktioniert, ist möglicherweise ein VPN erforderlich - Dieser Anbieter bietet Torrents an, ein VPN wird dringend empfohlen - Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie auf der Website nicht vorhanden sind. + Dieser Anbieter bietet Torrents an, ein VPN wird deswegen dringend empfohlen + Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie nicht auf der Website vorhanden sind. Beschreibung Keine Handlung gefunden Keine Beschreibung gefunden @@ -143,7 +143,7 @@ Doppeltippen zum Pausieren Zeit für vor- und zurückspulen im Player (Sekunden) Zweimal auf die rechte oder linke Seite tippen, um vor- oder zurückzuspulen - Doppelt in die Mitte tippen, um zu pausieren + Zweimal in die Mitte tippen, um zu pausieren Systemhelligkeit verwenden Systemhelligkeit anstelle eines dunklen Overlay im Player verwenden Episodenfortschritt aktualisieren @@ -163,7 +163,7 @@ Füller-Episoden für Animes anzeigen Trailer anzeigen Vorschaubilder von Kitsu anzeigen - Ausgewählte Videoqualität bei Suchergebnissen ausblenden + Ausgewählte Videoqualität in den Suchergebnissen ausblenden Automatische Plugin-Updates App-Updates anzeigen Automatisches Suchen nach neuen Updates nach dem Start. @@ -172,11 +172,11 @@ Github Light Novel App von denselben Entwicklern Anime App von denselben Entwicklern - Discord beitreten - Eine Benene an die Devs verteilen - Verteilte Benenes + Trete dem Discord Server bei + Eine Benene an die Devs schenken + Geschenkte Benenes App-Sprache - Keine Verlinkung gefunden + Keine Links gefunden Link in die Zwischenablage kopiert Episode abspielen Auf Standardwert zurücksetzen @@ -240,7 +240,7 @@ Remote-Fehler Renderfehler Unerwarteter Playerfehler - Downloadfehler, Speicherberechtigungen prüfen + Downloadfehler, bitte überprüfen sie die Speicherberechtigungen Chromecast-Episode In %s wiedergeben In Browser wiedergeben @@ -255,7 +255,7 @@ Titel UI-Elemente auf Vorschaubild umschalten Kein Update gefunden - Auf Update prüfen + Auf Updates prüfen Sperren Skalieren Quelle @@ -270,16 +270,16 @@ Videopufferlänge Video-Cache in Speicher Video- und Bild-Cache leeren - Verursacht Abstürze, wenn zu hoch eingestellt. Nicht ändern, wenn wenig Arbeitsspeicher verfügbar ist, wie z.B. ein Android TV oder ein altes Telefon. - Kann auf Systemen mit geringem Speicherplatz, wie z. B. Android TV-Geräten, zu Problemen führen, wenn der Wert zu hoch eingestellt ist. + Verursacht Abstürze, wenn zu hoch eingestellt. Nicht ändern, wenn wenig Arbeitsspeicher verfügbar ist, wie z.B. auf einem Android TV oder auf einem alten Smartphone. + Kann auf Systemen mit geringem Speicherplatz, wie z. B. auf Android TV-Geräten, zu Problemen führen, wenn der Wert zu hoch eingestellt ist. DNS über HTTPS - Nützlich für die Umgehung von ISP-Sperren + Nützlich zur Umgehung von ISP-Sperren Website klonen Website entfernen Einen Klon einer bestehenden Website mit einer anderen URL hinzufügen Downloadpfad Nginx-Server-URL - Dubbed/Subbed Anime anzeigen (Synchronisiert/Untertitelt) + Dubbed/Subbed Anime anzeigen An Bildschirm anpassen Strecken Vergrößern @@ -308,7 +308,7 @@ 127.0.0.1 MeineCooleSeite example.com - Sprachcode (en) + Sprachencode (en) %s %s Account Ausloggen @@ -317,13 +317,13 @@ Account hinzufügen Account erstellen Synchronisation hinzufügen - Hinzugefügt %s + %s hinzugefügt Sync Bewertung %d / 10 /\?\? /%d - Authentifiziert %s + %s authentifiziert Die Authentifizierung bei %s ist fehlgeschlagen Keine Normal @@ -335,10 +335,10 @@ Schatten Erhöht Untertitel synchronisieren - 1000ms + 1000 ms Untertitelverzögerung - Verwenden, wenn die Untertitel %dms zu früh angezeigt werden - Verwenden, wenn die Untertitel %dms zu spät angezeigt werden + Verwenden, wenn die Untertitel %d ms zu früh angezeigt werden + Verwenden, wenn die Untertitel %d ms zu spät angezeigt werden Keine Untertitelverzögerung Vogel Quax zwickt Johnys Pferd Bim Empfohlen @@ -359,7 +359,7 @@ HD TS TC - BlueRay + Blue-ray WP DVD 4K @@ -408,7 +408,7 @@ Plugins Dadurch werden auch alle Repository-Plugins gelöscht Repository löschen - Lade eine Liste der Websiten herunter, welche du verwenden möchtest + Lade eine Liste der Websites herunter, welche du verwenden möchtest Heruntergeladen: %d Deaktiviert: %d Nicht heruntergeladen: %d @@ -416,7 +416,7 @@ \n \nAufgrund eines hirnlosen DMCA-Takedowns durch Sky UK Limited 🤮 können wir die Repository-Site nicht in der App verlinken. \n -\nTrete unserem Discord bei oder suche online. +\nTrete unserem Discord Server bei oder suche online. Community-Repositories anzeigen Öffentliche Liste Alle Untertitel in Großbuchstaben @@ -427,7 +427,7 @@ Videospuren Bei Neustart anwenden Abgesicherter Modus aktiviert - Alle Erweiterungen wurden aufgrund eines Absturzes deaktiviert, damit Sie diejenige finden können, die Probleme verursacht. + Alle Erweiterungen wurden aufgrund eines Absturzes deaktiviert, damit Sie diejenige finden können, welche Probleme verursacht. Absturzinfo ansehen Bewertung: %s Beschreibung @@ -460,7 +460,7 @@ Automatische Installation aller noch nicht installierten Plugins aus hinzugefügten Repositories. Einrichtungsvorgang wiederholen APK-Installer - Einige Telefone unterstützen den neuen Package-Installer nicht. Benutze die Legacy-Option, wenn sich die Updates nicht installieren lassen. + Einige Smartphones unterstützen den neuen Package-Installer nicht. Benutze die Legacy-Option, wenn sich die Updates nicht installieren lassen. %s %d%s Links App-Updates @@ -482,7 +482,7 @@ Nein App-Update wird heruntergeladen… App-Update wird installiert… - Konnte die neue Version der App nicht installieren + Die neue Version der App konnte nicht installieren werden Legacy PackageInstaller Aktualisierung gestartet @@ -493,18 +493,18 @@ Browser Sortieren nach Sortieren - Bewertung (gut bis schlecht) - Bewertung (schlecht bis gut) - Aktualisiert (neu bis alt) - Aktualisiert (alt bis neu) - Alphabetisch (A bis Z) - Alphabetisch (Z bis A) + Bewertung (gut zu schlecht) + Bewertung (schlecht zu gut) + Aktualisiert (neu zu alt) + Aktualisiert (alt zu neu) + Alphabetisch (A zu Z) + Alphabetisch (Z zu A) Bibliothek auswählen Öffnen mit Deine Bibliothek ist leer :( \nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu. - Diese Liste ist leer. Versuche zu einer anderen Liste zu wechseln. - Datei für abgesicherten Modus gefunden! + Diese Liste ist leer. Versuch zu einer anderen Liste zu wechseln. + Datei für den 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 @@ -549,7 +549,7 @@ Filtermodus für Plugin-Downloads auswählen Es wurde bereits abgestimmt Keine Plugins im Repository gefunden - Repository nicht gefunden, überprüfe die URL und probiere eine VPN - Die Benutzeroberfläche konnte nicht korrekt erstellt werden. Dies ist ein schwerwiegender Fehler und sollte sofort gemeldet werden. %s + Repository nicht gefunden, überprüf die URL und versuch ein VPN + Die Benutzeroberfläche konnte nicht korrekt erstellt werden. Dies ist ein SCHWERWIEGENDER FEHLER und sollte sofort gemeldet werden. %s Deaktivieren - + \ 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 208e6140..2849b744 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -540,7 +540,7 @@ \n \nREMARQUE : Si la somme est de 10 ou plus, le joueur sautera automatiquement le chargement lorsque ce lien est chargé ! Aucun plugin trouvé dans ce dossier - Dossier non trouvé, vérifiez l\'url et essayé un VPN + Dépôt introuvable, vérifiez l\'URL et essayez avec un VPN Données mobiles Définir par défaut Utiliser @@ -552,4 +552,6 @@ Qualités L\'interface utilisateur n\'a pas pu être créée correctement. Il s\'agit d\'un bogue majeur qui doit être signalé immédiatement %s Sélectionnez le mode pour filtrer le téléchargement des plugins - + Fond de profil + \@string/default_subtitles + \ 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 35df36ac..a0bf44ca 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -566,4 +566,15 @@ Pozadina profila Nije bilo moguće ispravno izraditi korisničko sučelje. Ovo je ZNAČAJNA GREŠKA i treba se odmah prijaviti %s Odaberi modus za filtriranje preuzimanja dodataka - + Onemogući + \@string/default_subtitles + U repozitoriju nisu pronađeni dodaci + Repozitorij nije pronađen, provjerite URL i pokušajte koristiti VPN + Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je video prioritet. +\n +\nIzvor A: 3 +\nKvaliteta B: 7 +\nImat će kombinirani prioritet videozapisa od 10. +\n +\nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita! + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 05a7f0a7..4c30caaf 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -219,7 +219,7 @@ Folyamatban levő Év Webhely - Szinopszis + Összegzés Nincsenek feliratok Távoli hiba Render hiba @@ -237,7 +237,7 @@ Csúsztassa felfelé vagy lefelé a bal vagy jobb oldalon a fényerő vagy a hangerő megváltoztatásához Biztonsági mentés 0 Banán a fejlesztőknek - Húzás a kereséshez + Húzd el, hogy beless Következő epizód automatikus lejátszása Következő epizód lejátszása amikor az aktuális epizód véget ér Dupla koppintás a kereséshez @@ -510,4 +510,5 @@ TV elrendezés Automatikus Az átugrás mértéke, amikor a lejátszó látható - + Válassza ki a módot a pluginek letöltésének szűréséhez + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 9b9385c2..e5044571 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -153,4 +153,9 @@ ଆପ୍ ଅଦ୍ୟତନ ଦେଖାଇବା ଅଦ୍ୟତନ ଆରମ୍ଭ ହୋଇଛି ସନ୍ଧାନ କରିବା… - + ସଂକ୍ଷିପ୍ତବୃତ୍ତି + ଚଳଚ୍ଚିତ୍ର ଚଲାଅ + %s ସନ୍ଧାନ କରିବା… + ପରବର୍ତ୍ତୀ ଅଧ୍ୟାୟ + କୌଣସି ତଥ୍ୟ ନାହିଁ + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1f288d2a..3db9accb 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -570,4 +570,5 @@ UI nu a putut fi creată corect, acesta este un BUG MAJOR și trebuie raportat imediat %s Selectați modul de filtrare a descărcării plugin-urilor @string/default_subtitles - + Ați votat deja + \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index affb04bf..41cfa846 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -6,12 +6,12 @@ முகப்பு தேடு பதிவிறக்கம் - தகவல் எதுவும் இல்லை + தரவு இல்லை மேலும் விருப்பங்கள் - அடுத்த எபிசோட் + அடுத்த அத்தியாயம் வகைகள் பகிர் - Browser இல் திற + உலாவியில் திற ஏற்றுவதைத் தவிர் பார்த்து கொண்டிருப்பது நிறுத்தி வைக்கப்பட்டுள்ளது @@ -21,9 +21,9 @@ ஸ்ட்ரீம் டோரண்ட் வசன வரிகள் பின் செல் - எபிசோடை இயக்கு + அத்தியாயத்தை இயக்கு எபிசோட் பதிவிற்கான அனுமதி கொடுக்கவும் - பதிவிறக்கம் செய்யப்பட்டது + பதிவிறக்கப்பட்டது பதிவிறக்குகிறது பதிவிறக்கம் இடைநிறுத்தப்பட்டது பதிவிறக்கம் தொடங்கியது @@ -67,10 +67,10 @@ ஏற்றுகிறது… கைவிடப்பட்டது பதிவிறக்கம் முடிந்தது - இணைப்பை மீண்டும் முயற்சிக்கவும்… + இணைப்பை மீண்டும் முயலவும்… திரைப்படத்தை இயக்கு லைவ்ஸ்ட்ரீம் இயக்கு - டிரெய்லரை இயக்கவும் + டிரெய்லரை இயக்கு மூலம் இணைப்புகளை ஏற்றுவதில் பிழை இயக்கு @@ -107,4 +107,14 @@ இடைநிறுத்துவதற்கு இருமுறை தட்டவும் Chromecast வசன அமைப்புகள் இருண்ட மேலடுக்குக்குப் பதிலாக ஆப் பிளேயரில் சிஸ்டம் பிரகாசத்தைப் பயன்படுத்தவும் - + அத்தியாயம் %d-இன் வெளியீட்டு நேரம் + %dம %dநி + %dநி + அடுத்து ஏதாவது + உலாவி + %d நிமி + CloudStream-உடன் இயக்கு + புதிய புதுப்பிப்பு உள்ளது +\n%s->%s + நிரப்பி + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 4866ecd4..8e0dd88e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -18,7 +18,7 @@ Попередній перегляд фону Швидкість (%.2fx) Знайдено нове оновлення! -\n%s -> %s +\n%s –> %s Пошук Завантаження %d хв @@ -37,7 +37,7 @@ Покинуто Переглянути фільм Переглянути трейлер - Трансляція через торрент + Трансляція через торент Повторити підключення… Назад Переглянути епізод @@ -75,7 +75,7 @@ Продовжити перегляд Вилучити Детальніше - Цей постачальник є торрентом, рекомендується VPN + Цей постачальник є торентом, рекомендується використовувати VPN Опис Сюжет не знайдено Опис не знайдено @@ -86,9 +86,9 @@ Субтитри Chromecast Налаштування субтитрів Chromecast Режим Eigengravy - Проведіть пальцем, щоб змінити налаштування + Проведіть, щоб змінити налаштування Проведіть вгору або вниз з лівого або правого боку, щоб змінити яскравість чи гучність - Відтворювати наступний епізод після закінчення поточного + Відтворює наступний епізод після закінчення поточного Головна CloudStream Філер @@ -130,7 +130,7 @@ Картинка в картинці Налаштування субтитрів плеєра Додає опцію керування швидкістю в плеєрі - Проведіть пальцем, щоб перемотати + Проведіть, щоб перемотати Двічі торкніться, щоб перемотати Двічі торкніться для паузи Крок перемотки (секунди) @@ -224,7 +224,7 @@ Двічі торкніться праворуч або ліворуч, щоб перемотати відео вперед або назад Використовуйте системну яскравість у плеєрі замість темної накладки Завантажено файл резервної копії - Торренти + Торенти Автоматична синхронізація прогресу поточного епізоду Відсутні дозволи на зберігання. Будь ласка, спробуйте ще раз. Показувати постери від Kitsu @@ -256,7 +256,7 @@ NSFW Фільм OVA - Торрент + Торент Мітка якості NSFW Переглянути в браузері @@ -294,9 +294,9 @@ Основний колір Тема застосунку Розташування назви постера - Розмістіть назву під постером + Розмістити назву під постером Пароль123 - Моє круте ім\'я + Моє круте ім’я hello@world.com Мій крутий сайт Код мови (uk) @@ -348,9 +348,9 @@ Роздільна здатність відеоплеєра Довжина буфера відео Очистити кеш відео та зображень - Спричиняє збої, якщо встановлено занадто високе значення на пристроях із малим об\'ємом пам\'яті, наприклад Android TV. + Спричиняє збої, якщо встановлено занадто високе значення на пристроях із малим об’ємом пам’яті, наприклад Android TV. Корисно для обходу блокувань провайдера - Спричиняє збої, якщо встановлено занадто високе значення на пристроях із малим об\'ємом вільної пам\'яті, наприклад Android TV. + Спричиняє збої, якщо встановлено занадто високе значення на пристроях із малим об’ємом вільної пам’яті, наприклад Android TV. DNS через HTTPS Шлях завантаження Додайте клон існуючого сайту, з іншою URL-адресою @@ -374,10 +374,10 @@ Оцінений Завантажити з файлу Макс. - Щастям б\'єш жук їх глицю в фон й ґедзь пріч + Щастям б’єш жук їх глицю в фон й ґедзь пріч 1000 мс - Використовуйте цей параметр, якщо субтитри з\'являються на %d мс занадто рано - Використовуйте це, якщо субтитри з\'являються із запізненням на %d мс + Використовуйте цей параметр, якщо субтитри з’являються на %d мс занадто рано + Використовуйте це, якщо субтитри з’являються із запізненням на %d мс Завантажено %s Підтримка Фон @@ -507,8 +507,8 @@ Файл безпечного режиму знайдено! \nРозширеня не завантажуються під час запуску, доки файл не буде видалено. Android TV - Плеєр сховано - обсяг перемотки - Плеєр показано - обсяг перемотки + Плеєр сховано – обсяг перемотки + Плеєр показано – обсяг перемотки Обсяг перемотки, який використовується, коли плеєр видимий Обсяг перемотки, який використовується, коли плеєр прихований Тест провалено @@ -532,7 +532,7 @@ Встановити за замовчуванням Профілі Допомога - Тут ви можете змінити порядок джерел. Якщо відео має вищий пріоритет, воно з\'явиться вище у списку джерел. Сума пріоритету джерела та пріоритету якості є пріоритетом відео. + Тут ви можете змінити порядок джерел. Якщо відео має вищий пріоритет, воно з’явиться вище у списку джерел. Сума пріоритету джерела та пріоритету якості є пріоритетом відео. \n \nДжерело A: 3 \nЯкість B: 7 @@ -553,4 +553,4 @@ Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували - + \ No newline at end of file diff --git a/fastlane/metadata/android/or/changelogs/2.txt b/fastlane/metadata/android/or/changelogs/2.txt new file mode 100644 index 00000000..e8b23e5f --- /dev/null +++ b/fastlane/metadata/android/or/changelogs/2.txt @@ -0,0 +1 @@ +- ପରିବର୍ତ୍ତନ ପୋଥି ଯୋଡ଼ାଗଲା! diff --git a/fastlane/metadata/android/uk/changelogs/2.txt b/fastlane/metadata/android/uk/changelogs/2.txt index 2c8d9f7e..97e84fa8 100644 --- a/fastlane/metadata/android/uk/changelogs/2.txt +++ b/fastlane/metadata/android/uk/changelogs/2.txt @@ -1 +1 @@ -- Додано журнал змін! +– Додано журнал змін! From 1629db2fc9c617d6bbe9617035213f3064a822ba Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 08:01:34 +0000 Subject: [PATCH 534/888] chore(locales): fix locale issues --- app/src/main/res/values-ars/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 4 ++-- app/src/main/res/values-hr/strings.xml | 4 ++-- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index 5135c97e..a1042b7e 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -265,4 +265,4 @@ صور في صور %d \nباقي - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index daa352a7..016fbe43 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -567,4 +567,4 @@ Vídeo Android TV Wi-Fi - \ 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 233e38e4..3efc4072 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -552,4 +552,4 @@ Repository nicht gefunden, überprüf die URL und versuch ein VPN Die Benutzeroberfläche konnte nicht korrekt erstellt werden. Dies ist ein SCHWERWIEGENDER FEHLER und sollte sofort gemeldet werden. %s Deaktivieren - \ 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 2849b744..63d03a6b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -553,5 +553,5 @@ L\'interface utilisateur n\'a pas pu être créée correctement. Il s\'agit d\'un bogue majeur qui doit être signalé immédiatement %s Sélectionnez le mode pour filtrer le téléchargement des plugins Fond de profil - \@string/default_subtitles - \ No newline at end of file + @string/default_subtitles + diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index a0bf44ca..477ab92b 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -567,7 +567,7 @@ Nije bilo moguće ispravno izraditi korisničko sučelje. Ovo je ZNAČAJNA GREŠKA i treba se odmah prijaviti %s Odaberi modus za filtriranje preuzimanja dodataka Onemogući - \@string/default_subtitles + @string/default_subtitles U repozitoriju nisu pronađeni dodaci Repozitorij nije pronađen, provjerite URL i pokušajte koristiti VPN Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je video prioritet. @@ -577,4 +577,4 @@ \nImat će kombinirani prioritet videozapisa od 10. \n \nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita! - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 4c30caaf..677beaf8 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -511,4 +511,4 @@ Automatikus Az átugrás mértéke, amikor a lejátszó látható Válassza ki a módot a pluginek letöltésének szűréséhez - \ No newline at end of file + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index e5044571..177f7ea1 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -158,4 +158,4 @@ %s ସନ୍ଧାନ କରିବା… ପରବର୍ତ୍ତୀ ଅଧ୍ୟାୟ କୌଣସି ତଥ୍ୟ ନାହିଁ - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 3db9accb..b6971c37 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -571,4 +571,4 @@ Selectați modul de filtrare a descărcării plugin-urilor @string/default_subtitles Ați votat deja - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 41cfa846..3f4134e5 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -117,4 +117,4 @@ புதிய புதுப்பிப்பு உள்ளது \n%s->%s நிரப்பி - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8e0dd88e..f9dccfc4 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -553,4 +553,4 @@ Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN Не знайдено жодних плагінів у репозиторії Ви вже проголосували - \ No newline at end of file + From 130cc16e258a08c1a3a2ba75e5669d9ffee6d024 Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Fri, 8 Sep 2023 22:13:04 +0000 Subject: [PATCH 535/888] Simkl API optimizations (#581) * Fix episode removal in simkl * Simkl API optimizations --- .../syncproviders/providers/SimklApi.kt | 570 ++++++++++++------ 1 file changed, 377 insertions(+), 193 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index b4a9d789..cd1df562 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -5,7 +5,9 @@ import androidx.core.net.toUri import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.AcraApplication import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -13,6 +15,7 @@ import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mapper import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.debugPrint import com.lagradost.cloudstream3.mvvm.logError @@ -33,6 +36,9 @@ import java.text.SimpleDateFormat import java.time.Instant import java.util.Date import java.util.TimeZone +import kotlin.time.Duration +import kotlin.time.DurationUnit +import kotlin.time.toDuration class SimklApi(index: Int) : AccountManager(index), SyncAPI { override var name = "Simkl" @@ -59,6 +65,80 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { */ private var lastScoreTime = -1L + private object SimklCache { + private const val SIMKL_CACHE_KEY = "SIMKL_API_CACHE" + + enum class CacheTimes(val value: String) { + OneMonth("30d"), + ThirtyMinutes("30m") + } + + private class SimklCacheWrapper( + @JsonProperty("obj") val obj: T?, + @JsonProperty("validUntil") val validUntil: Long, + @JsonProperty("cacheTime") val cacheTime: Long = unixTime, + ) { + /** Returns true if cache is newer than cacheDays */ + fun isFresh(): Boolean { + return validUntil > unixTime + } + + fun remainingTime(): Duration { + val unixTime = unixTime + return if (validUntil > unixTime) { + (validUntil - unixTime).toDuration(DurationUnit.SECONDS) + } else { + Duration.ZERO + } + } + } + + fun cleanOldCache() { + getKeys(SIMKL_CACHE_KEY)?.forEach { + val isOld = AcraApplication.getKey>(it)?.isFresh() == false + if (isOld) { + removeKey(it) + } + } + } + + fun setKey(path: String, value: T, cacheTime: Duration) { + debugPrint { "Set cache: $SIMKL_CACHE_KEY/$path for ${cacheTime.inWholeDays} days or ${cacheTime.inWholeSeconds} seconds." } + setKey( + SIMKL_CACHE_KEY, + path, + // Storing as plain sting is required to make generics work. + SimklCacheWrapper(value, unixTime + cacheTime.inWholeSeconds).toJson() + ) + } + + /** + * Gets cached object, if object is not fresh returns null and removes it from cache + */ + inline fun getKey(path: String): T? { + // Required for generic otherwise "LinkedHashMap cannot be cast to MediaObject" + val type = mapper.typeFactory.constructParametricType( + SimklCacheWrapper::class.java, + T::class.java + ) + val cache = getKey(SIMKL_CACHE_KEY, path)?.let { + mapper.readValue>(it, type) + } + + return if (cache?.isFresh() == true) { + debugPrint { + "Cache hit at: $SIMKL_CACHE_KEY/$path. " + + "Remains fresh for ${cache.remainingTime().inWholeDays} days or ${cache.remainingTime().inWholeSeconds} seconds." + } + cache.obj + } else { + debugPrint { "Cache miss at: $SIMKL_CACHE_KEY/$path" } + removeKey(SIMKL_CACHE_KEY, path) + null + } + } + } + companion object { private const val clientId: String = BuildConfig.SIMKL_CLIENT_ID private const val clientSecret: String = BuildConfig.SIMKL_CLIENT_SECRET @@ -210,18 +290,18 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("img") val img: String? ) { companion object { - fun convertToEpisodes(list: List?): List { + fun convertToEpisodes(list: List?): List? { return list?.map { MediaObject.Season.Episode(it.episode) - } ?: emptyList() + } } - fun convertToSeasons(list: List?): List { + fun convertToSeasons(list: List?): List? { return list?.filter { it.season != null }?.groupBy { it.season - }?.map { (season, episodes) -> - MediaObject.Season(season!!, convertToEpisodes(episodes)) - } ?: emptyList() + }?.mapNotNull { (season, episodes) -> + convertToEpisodes(episodes)?.let { MediaObject.Season(season!!, it) } + }?.ifEmpty { null } } } } @@ -235,11 +315,17 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("title") val title: String?, @JsonProperty("year") val year: Int?, @JsonProperty("ids") val ids: Ids?, + @JsonProperty("total_episodes") val total_episodes: Int? = null, + @JsonProperty("status") val status: String? = null, @JsonProperty("poster") val poster: String? = null, @JsonProperty("type") val type: String? = null, @JsonProperty("seasons") val seasons: List? = null, @JsonProperty("episodes") val episodes: List? = null ) { + fun hasEnded(): Boolean { + return status == "released" || status == "ended" + } + @JsonInclude(JsonInclude.Include.NON_EMPTY) data class Season( @JsonProperty("number") val number: Int, @@ -281,6 +367,194 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } } + class SimklScoreBuilder private constructor() { + data class Builder( + private var url: String? = null, + private var interceptor: Interceptor? = null, + private var ids: MediaObject.Ids? = null, + private var score: Int? = null, + private var status: Int? = null, + private var addEpisodes: Pair?, List?>? = null, + private var removeEpisodes: Pair?, List?>? = null, + ) { + fun interceptor(interceptor: Interceptor) = apply { this.interceptor = interceptor } + fun apiUrl(url: String) = apply { this.url = url } + fun ids(ids: MediaObject.Ids) = apply { this.ids = ids } + fun score(score: Int?, oldScore: Int?) = apply { + if (score != oldScore) { + this.score = score + } + } + + fun status(newStatus: Int?, oldStatus: Int?) = apply { + // Only set status if its new + if (newStatus != oldStatus) { + this.status = newStatus + } else { + this.status = null + } + } + + fun episodes( + allEpisodes: List?, + newEpisodes: Int?, + oldEpisodes: Int?, + ) = apply { + if (allEpisodes == null || newEpisodes == null) return@apply + + fun getEpisodes(rawEpisodes: List) = + if (rawEpisodes.any { it.season != null }) { + EpisodeMetadata.convertToSeasons(rawEpisodes) to null + } else { + null to EpisodeMetadata.convertToEpisodes(rawEpisodes) + } + + // Do not add episodes if there is no change + if (newEpisodes > (oldEpisodes ?: 0)) { + this.addEpisodes = getEpisodes(allEpisodes.take(newEpisodes)) + } + if ((oldEpisodes ?: 0) > newEpisodes) { + this.removeEpisodes = getEpisodes(allEpisodes.drop(newEpisodes)) + } + } + + suspend fun execute(): Boolean { + val time = getDateTime(unixTime) + + return if (this.status == SimklListStatusType.None.value) { + app.post( + "$url/sync/history/remove", + json = StatusRequest( + shows = listOf(HistoryMediaObject(ids = ids)), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } else { + val episodeRemovalResponse = removeEpisodes?.let { (seasons, episodes) -> + app.post( + "${this.url}/sync/history/remove", + json = StatusRequest( + shows = listOf( + HistoryMediaObject( + ids = ids, + seasons = seasons, + episodes = episodes + ) + ), + movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } ?: true + + val historyResponse = + // Only post if there are episodes or score to upload + if (addEpisodes != null || score != null) { + app.post( + "${this.url}/sync/history", + json = StatusRequest( + shows = listOf( + HistoryMediaObject( + null, + null, + ids, + addEpisodes?.first, + addEpisodes?.second, + score, + score?.let { time }, + ) + ), movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } else { + true + } + + val statusResponse = status?.let { setStatus -> + val newStatus = + SimklListStatusType.values() + .firstOrNull { it.value == setStatus }?.originalName + ?: SimklListStatusType.Watching.originalName!! + + app.post( + "${this.url}/sync/add-to-list", + json = StatusRequest( + shows = listOf( + StatusMediaObject( + null, + null, + ids, + newStatus, + ) + ), movies = emptyList() + ), + interceptor = interceptor + ).isSuccessful + } ?: true + + statusResponse && episodeRemovalResponse && historyResponse + } + } + } + } + + suspend fun getEpisodes( + simklId: Int?, + type: String?, + episodes: Int?, + hasEnded: Boolean? + ): Array? { + if (simklId == null) return null + + val cacheKey = "Episodes/$simklId" + val cache = SimklCache.getKey>(cacheKey) + + // Return cached result if its higher or equal the amount of episodes. + if (cache != null && cache.size >= (episodes ?: 0)) { + return cache + } + + // There is always one season in Anime -> no request necessary + if (type == "anime" && episodes != null) { + return episodes.takeIf { it > 0 }?.let { + (1..it).map { episode -> + EpisodeMetadata( + null, null, null, episode, null + ) + }.toTypedArray() + } + } + val url = when (type) { + "anime" -> "https://api.simkl.com/anime/episodes/$simklId" + "tv" -> "https://api.simkl.com/tv/episodes/$simklId" + "movie" -> return null + else -> return null + } + + debugPrint { "Requesting episodes from $url" } + return app.get(url, params = mapOf("client_id" to clientId)) + .parsedSafe>()?.also { + val cacheTime = + if (hasEnded == true) SimklCache.CacheTimes.OneMonth.value else SimklCache.CacheTimes.ThirtyMinutes.value + + // 1 Month cache + SimklCache.setKey(cacheKey, it, Duration.parse(cacheTime)) + } + } + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + class HistoryMediaObject( + @JsonProperty("title") title: String? = null, + @JsonProperty("year") year: Int? = null, + @JsonProperty("ids") ids: Ids? = null, + @JsonProperty("seasons") seasons: List? = null, + @JsonProperty("episodes") episodes: List? = null, + @JsonProperty("rating") val rating: Int? = null, + @JsonProperty("rated_at") val rated_at: String? = null, + ) : MediaObject(title, year, ids, seasons = seasons, episodes = episodes) + @JsonInclude(JsonInclude.Include.NON_EMPTY) class RatingMediaObject( @JsonProperty("title") title: String?, @@ -299,15 +573,6 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("watched_at") val watched_at: String? = getDateTime(unixTime) ) : MediaObject(title, year, ids) - @JsonInclude(JsonInclude.Include.NON_EMPTY) - class HistoryMediaObject( - @JsonProperty("title") title: String?, - @JsonProperty("year") year: Int?, - @JsonProperty("ids") ids: Ids?, - @JsonProperty("seasons") seasons: List?, - @JsonProperty("episodes") episodes: List?, - ) : MediaObject(title, year, ids, seasons = seasons, episodes = episodes) - @JsonInclude(JsonInclude.Include.NON_EMPTY) data class StatusRequest( @JsonProperty("movies") val movies: List, @@ -404,13 +669,13 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } data class ShowMetadata( - override val last_watched_at: String?, - override val status: String, - override val user_rating: Int?, - override val last_watched: String?, - override val watched_episodes_count: Int?, - override val total_episodes_count: Int?, - val show: Show + @JsonProperty("last_watched_at") override val last_watched_at: String?, + @JsonProperty("status") override val status: String, + @JsonProperty("user_rating") override val user_rating: Int?, + @JsonProperty("last_watched") override val last_watched: String?, + @JsonProperty("watched_episodes_count") override val watched_episodes_count: Int?, + @JsonProperty("total_episodes_count") override val total_episodes_count: Int?, + @JsonProperty("show") val show: Show ) : Metadata { override fun getIds(): Show.Ids { return this.show.ids @@ -435,23 +700,23 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } data class Show( - val title: String, - val poster: String?, - val year: Int?, - val ids: Ids, + @JsonProperty("title") val title: String, + @JsonProperty("poster") val poster: String?, + @JsonProperty("year") val year: Int?, + @JsonProperty("ids") val ids: Ids, ) { data class Ids( - val simkl: Int, - val slug: String?, - val imdb: String?, - val zap2it: String?, - val tmdb: String?, - val offen: String?, - val tvdb: String?, - val mal: String?, - val anidb: String?, - val anilist: String?, - val traktslug: String? + @JsonProperty("simkl") val simkl: Int, + @JsonProperty("slug") val slug: String?, + @JsonProperty("imdb") val imdb: String?, + @JsonProperty("zap2it") val zap2it: String?, + @JsonProperty("tmdb") val tmdb: String?, + @JsonProperty("offen") val offen: String?, + @JsonProperty("tvdb") val tvdb: String?, + @JsonProperty("mal") val mal: String?, + @JsonProperty("anidb") val anidb: String?, + @JsonProperty("anilist") val anilist: String?, + @JsonProperty("traktslug") val traktslug: String? ) { fun matchesId(database: SyncServices, id: String): Boolean { return when (database) { @@ -491,20 +756,58 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } } + /** + * Useful to get episodes on demand to prevent unnecessary requests. + */ + class SimklEpisodeConstructor( + private val simklId: Int?, + private val type: String?, + private val totalEpisodeCount: Int?, + private val hasEnded: Boolean? + ) { + suspend fun getEpisodes(): Array? { + return getEpisodes(simklId, type, totalEpisodeCount, hasEnded) + } + } + class SimklSyncStatus( override var status: Int, override var score: Int?, + val oldScore: Int?, override var watchedEpisodes: Int?, - val episodes: Array?, + val episodeConstructor: SimklEpisodeConstructor, override var isFavorite: Boolean? = null, override var maxEpisodes: Int? = null, /** Save seen episodes separately to know the change from old to new. * Required to remove seen episodes if count decreases */ val oldEpisodes: Int, + val oldStatus: String? ) : SyncAPI.AbstractSyncStatus() override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? { val realIds = readIdFromString(id) + + // Key which assumes all ids are the same each time :/ + // This could be some sort of reference system to make multiple IDs + // point to the same key. + val idKey = + realIds.toList().map { "${it.first.originalName}=${it.second}" }.sorted().joinToString() + + val cachedObject = SimklCache.getKey(idKey) + val searchResult: MediaObject = cachedObject + ?: (searchByIds(realIds)?.firstOrNull()?.also { result -> + val cacheTime = + if (result.hasEnded()) SimklCache.CacheTimes.OneMonth.value else SimklCache.CacheTimes.ThirtyMinutes.value + SimklCache.setKey(idKey, result, Duration.parse(cacheTime)) + }) ?: return null + + val episodeConstructor = SimklEpisodeConstructor( + searchResult.ids?.simkl, + searchResult.type, + searchResult.total_episodes, + searchResult.hasEnded() + ) + val foundItem = getSyncListSmart()?.let { list -> listOf(list.shows, list.anime, list.movies).flatten().firstOrNull { show -> realIds.any { (database, id) -> @@ -513,172 +816,63 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } } - // Search to get episodes - val searchResult = searchByIds(realIds)?.firstOrNull() - val episodes = getEpisodes(searchResult?.ids?.simkl, searchResult?.type) - if (foundItem != null) { return SimklSyncStatus( status = foundItem.status?.let { SimklListStatusType.fromString(it)?.value } ?: return null, score = foundItem.user_rating, watchedEpisodes = foundItem.watched_episodes_count, - maxEpisodes = foundItem.total_episodes_count, - episodes = episodes, + maxEpisodes = searchResult.total_episodes, + episodeConstructor = episodeConstructor, oldEpisodes = foundItem.watched_episodes_count ?: 0, + oldScore = foundItem.user_rating, + oldStatus = foundItem.status ) } else { - return if (searchResult != null) { - SimklSyncStatus( - status = SimklListStatusType.None.value, - score = 0, - watchedEpisodes = 0, - maxEpisodes = if (searchResult.type == "movie") 0 else null, - episodes = episodes, - oldEpisodes = 0, - ) - } else { - null - } + return SimklSyncStatus( + status = SimklListStatusType.None.value, + score = 0, + watchedEpisodes = 0, + maxEpisodes = if (searchResult.type == "movie") 0 else searchResult.total_episodes, + episodeConstructor = episodeConstructor, + oldEpisodes = 0, + oldStatus = null, + oldScore = null + ) } } override suspend fun score(id: String, status: SyncAPI.AbstractSyncStatus): Boolean { val parsedId = readIdFromString(id) lastScoreTime = unixTime - - if (status.status == SimklListStatusType.None.value) { - return app.post( - "$mainUrl/sync/history/remove", - json = StatusRequest( - shows = listOf( - HistoryMediaObject( - null, - null, - MediaObject.Ids.fromMap(parsedId), - emptyList(), - emptyList() - ) - ), - movies = emptyList() - ), - interceptor = interceptor - ).isSuccessful - } - - val realScore = status.score - val ratingResponseSuccess = if (realScore != null) { - // Remove rating if score is 0 - val ratingsSuffix = if (realScore == 0) "/remove" else "" - debugPrint { "Rate ${this.name} item: rating=$realScore" } - app.post( - "$mainUrl/sync/ratings$ratingsSuffix", - json = StatusRequest( - // Not possible to know if TV or Movie - shows = listOf( - RatingMediaObject( - null, - null, - MediaObject.Ids.fromMap(parsedId), - realScore - ) - ), - movies = emptyList() - ), - interceptor = interceptor - ).isSuccessful - } else { - true - } - val simklStatus = status as? SimklSyncStatus + + val builder = SimklScoreBuilder.Builder() + .apiUrl(this.mainUrl) + .score(status.score, simklStatus?.oldScore) + .status(status.status, (status as? SimklSyncStatus)?.oldStatus?.let { oldStatus -> + SimklListStatusType.values().firstOrNull { + it.originalName == oldStatus + }?.value + }) + .interceptor(interceptor) + .ids(MediaObject.Ids.fromMap(parsedId)) + + + // Get episodes only when required + val episodes = simklStatus?.episodeConstructor?.getEpisodes() + // All episodes if marked as completed val watchedEpisodes = if (status.status == SimklListStatusType.Completed.value) { - simklStatus?.episodes?.size + episodes?.size } else { status.watchedEpisodes } - // Only post episodes if available episodes and the status is correct - val episodeResponseSuccess = - if (simklStatus != null && watchedEpisodes != null && !simklStatus.episodes.isNullOrEmpty() && listOf( - SimklListStatusType.Paused.value, - SimklListStatusType.Dropped.value, - SimklListStatusType.Watching.value, - SimklListStatusType.Completed.value, - SimklListStatusType.ReWatching.value - ).contains(status.status) - ) { - suspend fun postEpisodes( - url: String, - rawEpisodes: List - ): Boolean { - val (seasons, episodes) = if (rawEpisodes.any { it.season != null }) { - EpisodeMetadata.convertToSeasons(rawEpisodes) to null - } else { - null to EpisodeMetadata.convertToEpisodes(rawEpisodes) - } - debugPrint { "Synced history using $url: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" } - return app.post( - url, - json = StatusRequest( - shows = listOf( - HistoryMediaObject( - null, - null, - MediaObject.Ids.fromMap(parsedId), - seasons, - episodes - ) - ), - movies = emptyList() - ), - interceptor = interceptor - ).isSuccessful - } + builder.episodes(episodes?.toList(), watchedEpisodes, simklStatus?.oldEpisodes) - // If episodes decrease: remove all episodes beyond watched episodes. - val removeResponse = if (simklStatus.oldEpisodes > watchedEpisodes) { - val removeEpisodes = simklStatus.episodes - .drop(watchedEpisodes) - postEpisodes("$mainUrl/sync/history/remove", removeEpisodes) - } else { - true - } - val cutEpisodes = simklStatus.episodes.take(watchedEpisodes) - val addResponse = postEpisodes("$mainUrl/sync/history/", cutEpisodes) - - removeResponse && addResponse - } else true - - val newStatus = - SimklListStatusType.values().firstOrNull { it.value == status.status }?.originalName - ?: SimklListStatusType.Watching.originalName - - val statusResponseSuccess = if (newStatus != null) { - debugPrint { "Add to ${this.name} list: status=$newStatus" } - app.post( - "$mainUrl/sync/add-to-list", - json = StatusRequest( - shows = listOf( - StatusMediaObject( - null, - null, - MediaObject.Ids.fromMap(parsedId), - newStatus - ) - ), - movies = emptyList() - ), - interceptor = interceptor - ).isSuccessful - } else { - true - } - - debugPrint { "All scoring complete: rating=$ratingResponseSuccess, status=$statusResponseSuccess, episode=$episodeResponseSuccess" } requireLibraryRefresh = true - return ratingResponseSuccess && statusResponseSuccess && episodeResponseSuccess + return builder.execute() } @@ -694,17 +888,6 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { ).parsedSafe() } - suspend fun getEpisodes(simklId: Int?, type: String?): Array? { - if (simklId == null) return null - val url = when (type) { - "anime" -> "https://api.simkl.com/anime/episodes/$simklId" - "tv" -> "https://api.simkl.com/tv/episodes/$simklId" - "movie" -> return null - else -> return null - } - return app.get(url, params = mapOf("client_id" to clientId)).parsedSafe() - } - override suspend fun search(name: String): List? { return app.get( "$mainUrl/search/", params = mapOf("client_id" to clientId, "q" to name) @@ -737,16 +920,17 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { return null } - private suspend fun getSyncListSince(since: Long?): AllItemsResponse { + private suspend fun getSyncListSince(since: Long?): AllItemsResponse? { val params = getDateTime(since)?.let { mapOf("date_from" to it) } ?: emptyMap() + // Can return null on no change. return app.get( "$mainUrl/sync/all-items/", params = params, interceptor = interceptor - ).parsed() + ).parsedSafe() } private suspend fun getActivities(): ActivitiesResponse? { From b6e99d7358ee5d13127be79869fa162a505f3a09 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 9 Sep 2023 23:18:21 +0200 Subject: [PATCH 536/888] backend change for events in player --- .../ui/player/AbstractPlayerFragment.kt | 95 ++++++-- .../cloudstream3/ui/player/CS3IPlayer.kt | 215 +++++++----------- .../ui/player/FullScreenPlayer.kt | 4 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 11 +- .../cloudstream3/ui/player/IPlayer.kt | 136 +++++++++-- .../ui/result/ResultFragmentPhone.kt | 4 +- .../ui/result/ResultTrailerPlayer.kt | 10 +- 7 files changed, 289 insertions(+), 186 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 53ee5e12..c6f02f1a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -92,11 +92,11 @@ abstract class AbstractPlayerFragment( throw NotImplementedError() } - open fun playerPositionChanged(posDur: Pair) { + open fun playerPositionChanged(position: Long, duration : Long) { throw NotImplementedError() } - open fun playerDimensionsLoaded(widthHeight: Pair) { + open fun playerDimensionsLoaded(width: Int, height : Int) { throw NotImplementedError() } @@ -132,8 +132,8 @@ abstract class AbstractPlayerFragment( } } - private fun updateIsPlaying(playing: Pair) { - val (wasPlaying, isPlaying) = playing + private fun updateIsPlaying(wasPlaying : CSPlayerLoading, + isPlaying : CSPlayerLoading) { val isPlayingRightNow = CSPlayerLoading.IsPlaying == isPlaying val isPausedRightNow = CSPlayerLoading.IsPaused == isPlaying @@ -206,7 +206,7 @@ abstract class AbstractPlayerFragment( CSPlayerEvent.values()[intent.getIntExtra( EXTRA_CONTROL_TYPE, 0 - )] + )], source = PlayerEventSource.UI ) } } @@ -216,7 +216,7 @@ abstract class AbstractPlayerFragment( val isPlaying = player.getIsPlaying() val isPlayingValue = if (isPlaying) CSPlayerLoading.IsPlaying else CSPlayerLoading.IsPaused - updateIsPlaying(Pair(isPlayingValue, isPlayingValue)) + updateIsPlaying(isPlayingValue, isPlayingValue) } else { // Restore the full-screen UI. piphide?.isVisible = true @@ -249,7 +249,7 @@ abstract class AbstractPlayerFragment( } } - open fun playerError(exception: Exception) { + open fun playerError(exception: Throwable) { fun showToast(message: String, gotoNext: Boolean = false) { if (gotoNext && hasNextMirror()) { showToast( @@ -326,6 +326,7 @@ abstract class AbstractPlayerFragment( } } + @SuppressLint("UnsafeOptInUsageError") private fun playerUpdated(player: Any?) { if (player is ExoPlayer) { context?.let { ctx -> @@ -366,6 +367,71 @@ abstract class AbstractPlayerFragment( // } //} + /** This receives the events from the player, if you want to append functionality you do it here, + * do note that this only receives events for UI changes, + * and returning early WONT stop it from changing in eg the player time or pause status */ + open fun mainCallback(event : PlayerEvent) { + when(event) { + is ResizedEvent -> { + playerDimensionsLoaded(event.width, event.height) + } + is PlayerAttachedEvent -> { + playerUpdated(event.player) + } + is SubtitlesUpdatedEvent -> { + subtitlesChanged() + } + is TimestampSkippedEvent -> { + onTimestampSkipped(event.timestamp) + } + is TimestampInvokedEvent -> { + onTimestamp(event.timestamp) + } + is TracksChangedEvent -> { + onTracksInfoChanged() + } + is EmbeddedSubtitlesFetchedEvent -> { + embeddedSubtitlesFetched(event.tracks) + } + is ErrorEvent -> { + playerError(event.error) + } + is RequestAudioFocusEvent -> { + requestAudioFocus() + } + is EpisodeSeekEvent -> { + when(event.offset) { + -1 -> prevEpisode() + 1 -> nextEpisode() + else -> {} + } + } + is StatusEvent -> { + updateIsPlaying(wasPlaying = event.wasPlaying, isPlaying = event.isPlaying) + } + is PositionEvent -> { + playerPositionChanged(position = event.toMs, duration = event.durationMs) + } + is VideoEndedEvent -> { + context?.let { ctx -> + // Only play next episode if autoplay is on (default) + if (PreferenceManager.getDefaultSharedPreferences(ctx) + ?.getBoolean( + ctx.getString(R.string.autoplay_next_key), + true + ) == true + ) { + player.handleEvent( + CSPlayerEvent.NextEpisode, + source = PlayerEventSource.Player + ) + } + } + } + is PauseEvent -> Unit + is PlayEvent -> Unit + } + } @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -374,25 +440,13 @@ abstract class AbstractPlayerFragment( player.releaseCallbacks() player.initCallbacks( - playerUpdated = ::playerUpdated, - updateIsPlaying = ::updateIsPlaying, - playerError = ::playerError, - requestAutoFocus = ::requestAudioFocus, - nextEpisode = ::nextEpisode, - prevEpisode = ::prevEpisode, - playerPositionChanged = ::playerPositionChanged, - playerDimensionsLoaded = ::playerDimensionsLoaded, + eventHandler = ::mainCallback, requestedListeningPercentages = listOf( SKIP_OP_VIDEO_PERCENTAGE, PRELOAD_NEXT_EPISODE_PERCENTAGE, NEXT_WATCH_EPISODE_PERCENTAGE, UPDATE_SYNC_PROGRESS_PERCENTAGE, ), - subtitlesUpdates = ::subtitlesChanged, - embeddedSubtitlesFetched = ::embeddedSubtitlesFetched, - onTracksInfoChanged = ::onTracksInfoChanged, - onTimestampInvoked = ::onTimestamp, - onTimestampSkipped = ::onTimestampSkipped ) if (player is CS3IPlayer) { @@ -461,6 +515,7 @@ abstract class AbstractPlayerFragment( resize(PlayerResize.values()[resize], showToast) } + @SuppressLint("UnsafeOptInUsageError") fun resize(resize: PlayerResize, showToast: Boolean) { setKey(RESIZE_MODE_KEY, resize.ordinal) val type = when (resize) { 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 4a88a2e7..fe4e3423 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 @@ -8,7 +8,6 @@ import android.os.Looper import android.util.Log import android.util.Rational import android.widget.FrameLayout -import androidx.media3.common.C import androidx.media3.common.C.* import androidx.media3.common.Format import androidx.media3.common.MediaItem @@ -135,80 +134,24 @@ class CS3IPlayer : IPlayer { * Boolean = if it's active * */ private var playerSelectedSubtitleTracks = listOf>() - - /** isPlaying */ - private var updateIsPlaying: ((Pair) -> Unit)? = null - private var requestAutoFocus: (() -> Unit)? = null - private var playerError: ((Exception) -> Unit)? = null - private var subtitlesUpdates: (() -> Unit)? = null - - /** width x height */ - private var playerDimensionsLoaded: ((Pair) -> Unit)? = null - - /** used for playerPositionChanged */ private var requestedListeningPercentages: List? = null - /** Fired when seeking the player or on requestedListeningPercentages, - * used to make things appear on que - * position, duration */ - private var playerPositionChanged: ((Pair) -> Unit)? = null + private var eventHandler: ((PlayerEvent) -> Unit)? = null - private var nextEpisode: (() -> Unit)? = null - private var prevEpisode: (() -> Unit)? = null - - private var playerUpdated: ((Any?) -> Unit)? = null - private var embeddedSubtitlesFetched: ((List) -> Unit)? = null - private var onTracksInfoChanged: (() -> Unit)? = null - private var onTimestampInvoked: ((EpisodeSkip.SkipStamp?) -> Unit)? = null - private var onTimestampSkipped: ((EpisodeSkip.SkipStamp) -> Unit)? = null + fun event(event: PlayerEvent) { + eventHandler?.invoke(event) + } override fun releaseCallbacks() { - playerUpdated = null - updateIsPlaying = null - requestAutoFocus = null - playerError = null - playerDimensionsLoaded = null - requestedListeningPercentages = null - playerPositionChanged = null - nextEpisode = null - prevEpisode = null - subtitlesUpdates = null - onTracksInfoChanged = null - onTimestampInvoked = null - requestSubtitleUpdate = null - onTimestampSkipped = null + eventHandler = null } override fun initCallbacks( - playerUpdated: (Any?) -> Unit, - updateIsPlaying: ((Pair) -> Unit)?, - requestAutoFocus: (() -> Unit)?, - playerError: ((Exception) -> Unit)?, - playerDimensionsLoaded: ((Pair) -> Unit)?, + eventHandler: ((PlayerEvent) -> Unit), requestedListeningPercentages: List?, - playerPositionChanged: ((Pair) -> Unit)?, - nextEpisode: (() -> Unit)?, - prevEpisode: (() -> Unit)?, - subtitlesUpdates: (() -> Unit)?, - embeddedSubtitlesFetched: ((List) -> Unit)?, - onTracksInfoChanged: (() -> Unit)?, - onTimestampInvoked: ((EpisodeSkip.SkipStamp?) -> Unit)?, - onTimestampSkipped: ((EpisodeSkip.SkipStamp) -> Unit)?, ) { - this.playerUpdated = playerUpdated - this.updateIsPlaying = updateIsPlaying - this.requestAutoFocus = requestAutoFocus - this.playerError = playerError - this.playerDimensionsLoaded = playerDimensionsLoaded this.requestedListeningPercentages = requestedListeningPercentages - this.playerPositionChanged = playerPositionChanged - this.nextEpisode = nextEpisode - this.prevEpisode = prevEpisode - this.subtitlesUpdates = subtitlesUpdates - this.embeddedSubtitlesFetched = embeddedSubtitlesFetched - this.onTracksInfoChanged = onTracksInfoChanged - this.onTimestampInvoked = onTimestampInvoked - this.onTimestampSkipped = onTimestampSkipped + this.eventHandler = eventHandler } // I know, this is not a perfect solution, however it works for fixing subs @@ -217,7 +160,7 @@ class CS3IPlayer : IPlayer { try { Handler(it).post { try { - seekTime(1L) + seekTime(1L, source = PlayerEventSource.Player) } catch (e: Exception) { logError(e) } @@ -271,8 +214,9 @@ class CS3IPlayer : IPlayer { subtitleHelper.setAllSubtitles(subtitles) } - var currentSubtitles: SubtitleData? = null + private var currentSubtitles: SubtitleData? = null + @SuppressLint("UnsafeOptInUsageError") private fun List.getTrack(id: String?): Pair? { if (id == null) return null // This beast of an expression does: @@ -526,14 +470,14 @@ class CS3IPlayer : IPlayer { Log.i(TAG, "onStop") saveData() - exoPlayer?.pause() + handleEvent(CSPlayerEvent.Pause, PlayerEventSource.Player) //releasePlayer() } override fun onPause() { Log.i(TAG, "onPause") saveData() - exoPlayer?.pause() + handleEvent(CSPlayerEvent.Pause, PlayerEventSource.Player) //releasePlayer() } @@ -611,6 +555,7 @@ class CS3IPlayer : IPlayer { } } + @SuppressLint("UnsafeOptInUsageError") private fun Context.createOfflineSource(): DataSource.Factory { return DefaultDataSourceFactory(this, USER_AGENT) } @@ -846,43 +791,55 @@ class CS3IPlayer : IPlayer { return null } - fun updatedTime(writePosition: Long? = null) { + fun updatedTime( + writePosition: Long? = null, + source: PlayerEventSource = PlayerEventSource.Player + ) { val position = writePosition ?: exoPlayer?.currentPosition getCurrentTimestamp(position)?.let { timestamp -> - onTimestampInvoked?.invoke(timestamp) + event(TimestampInvokedEvent(timestamp, source)) } val duration = exoPlayer?.contentDuration if (duration != null && position != null) { - playerPositionChanged?.invoke(Pair(position, duration)) + event( + PositionEvent( + source, + fromMs = exoPlayer?.currentPosition ?: 0, + position, + duration + ) + ) } } - override fun seekTime(time: Long) { - exoPlayer?.seekTime(time) + override fun seekTime(time: Long, source: PlayerEventSource) { + exoPlayer?.seekTime(time, source) } - override fun seekTo(time: Long) { - updatedTime(time) + override fun seekTo(time: Long, source: PlayerEventSource) { + updatedTime(time, source) exoPlayer?.seekTo(time) } - private fun ExoPlayer.seekTime(time: Long) { - updatedTime(currentPosition + time) + private fun ExoPlayer.seekTime(time: Long, source: PlayerEventSource) { + updatedTime(currentPosition + time, source) seekTo(currentPosition + time) } - override fun handleEvent(event: CSPlayerEvent) { + override fun handleEvent(event: CSPlayerEvent, source: PlayerEventSource) { Log.i(TAG, "handleEvent ${event.name}") try { exoPlayer?.apply { when (event) { CSPlayerEvent.Play -> { + event(PlayEvent(source)) play() } CSPlayerEvent.Pause -> { + event(PauseEvent(source)) pause() } @@ -899,32 +856,32 @@ class CS3IPlayer : IPlayer { CSPlayerEvent.PlayPauseToggle -> { if (isPlaying) { - pause() + handleEvent(CSPlayerEvent.Pause, source) } else { - play() + handleEvent(CSPlayerEvent.Play, source) } } - CSPlayerEvent.SeekForward -> seekTime(seekActionTime) - CSPlayerEvent.SeekBack -> seekTime(-seekActionTime) - CSPlayerEvent.NextEpisode -> nextEpisode?.invoke() - CSPlayerEvent.PrevEpisode -> prevEpisode?.invoke() + CSPlayerEvent.SeekForward -> seekTime(seekActionTime, source) + CSPlayerEvent.SeekBack -> seekTime(-seekActionTime, source) + CSPlayerEvent.NextEpisode -> event(EpisodeSeekEvent(offset = 1, source = source)) + CSPlayerEvent.PrevEpisode -> event(EpisodeSeekEvent(offset = -1, source = source)) CSPlayerEvent.SkipCurrentChapter -> { //val dur = this@CS3IPlayer.getDuration() ?: return@apply getCurrentTimestamp()?.let { lastTimeStamp -> if (lastTimeStamp.skipToNextEpisode) { - handleEvent(CSPlayerEvent.NextEpisode) + handleEvent(CSPlayerEvent.NextEpisode, source) } else { seekTo(lastTimeStamp.endMs + 1L) } - onTimestampSkipped?.invoke(lastTimeStamp) + event(TimestampSkippedEvent(timestamp = lastTimeStamp, source = source)) } } } } - } catch (e: Exception) { - Log.e(TAG, "handleEvent error", e) - playerError?.invoke(e) + } catch (t: Throwable) { + Log.e(TAG, "handleEvent error", t) + event(ErrorEvent(t)) } } @@ -963,18 +920,14 @@ class CS3IPlayer : IPlayer { requestSubtitleUpdate = ::reloadSubs - playerUpdated?.invoke(exoPlayer) + event(PlayerAttachedEvent(exoPlayer)) exoPlayer?.prepare() exoPlayer?.let { exo -> - updateIsPlaying?.invoke( - Pair( - CSPlayerLoading.IsBuffering, - CSPlayerLoading.IsBuffering - ) - ) + event(StatusEvent(CSPlayerLoading.IsBuffering, CSPlayerLoading.IsBuffering)) isPlaying = exo.isPlaying } + exoPlayer?.addListener(object : Player.Listener { override fun onTracksChanged(tracks: Tracks) { normalSafeApiCall { @@ -1008,18 +961,19 @@ class CS3IPlayer : IPlayer { ) } - embeddedSubtitlesFetched?.invoke(exoPlayerReportedTracks) - onTracksInfoChanged?.invoke() - subtitlesUpdates?.invoke() + event(EmbeddedSubtitlesFetchedEvent(tracks = exoPlayerReportedTracks)) + event(TracksChangedEvent()) + event(SubtitlesUpdatedEvent()) } } + @SuppressLint("UnsafeOptInUsageError") override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { exoPlayer?.let { exo -> - updateIsPlaying?.invoke( - Pair( - if (isPlaying) CSPlayerLoading.IsPlaying else CSPlayerLoading.IsPaused, - if (playbackState == Player.STATE_BUFFERING) CSPlayerLoading.IsBuffering else if (exo.isPlaying) CSPlayerLoading.IsPlaying else CSPlayerLoading.IsPaused + event( + StatusEvent( + wasPlaying = if (isPlaying) CSPlayerLoading.IsPlaying else CSPlayerLoading.IsPaused, + isPlaying = if (playbackState == Player.STATE_BUFFERING) CSPlayerLoading.IsBuffering else if (exo.isPlaying) CSPlayerLoading.IsPlaying else CSPlayerLoading.IsPaused ) ) isPlaying = exo.isPlaying @@ -1041,23 +995,15 @@ class CS3IPlayer : IPlayer { } Player.STATE_ENDED -> { - // Only play next episode if autoplay is on (default) - if (PreferenceManager.getDefaultSharedPreferences(context) - ?.getBoolean( - context.getString(com.lagradost.cloudstream3.R.string.autoplay_next_key), - true - ) == true - ) { - handleEvent(CSPlayerEvent.NextEpisode) - } + event(VideoEndedEvent()) } Player.STATE_BUFFERING -> { - updatedTime() + updatedTime(source = PlayerEventSource.Player) } Player.STATE_IDLE -> { - // IDLE + } else -> Unit @@ -1082,7 +1028,7 @@ class CS3IPlayer : IPlayer { } else -> { - playerError?.invoke(error) + event(ErrorEvent(error)) } } @@ -1096,7 +1042,7 @@ class CS3IPlayer : IPlayer { override fun onIsPlayingChanged(isPlaying: Boolean) { super.onIsPlayingChanged(isPlaying) if (isPlaying) { - requestAutoFocus?.invoke() + event(RequestAudioFocusEvent()) onRenderFirst() } } @@ -1116,12 +1062,15 @@ class CS3IPlayer : IPlayer { true ) == true ) { - handleEvent(CSPlayerEvent.NextEpisode) + handleEvent( + CSPlayerEvent.NextEpisode, + source = PlayerEventSource.Player + ) } } Player.STATE_BUFFERING -> { - updatedTime() + updatedTime(source = PlayerEventSource.Player) } Player.STATE_IDLE -> { @@ -1134,18 +1083,18 @@ class CS3IPlayer : IPlayer { override fun onVideoSizeChanged(videoSize: VideoSize) { super.onVideoSizeChanged(videoSize) - playerDimensionsLoaded?.invoke(Pair(videoSize.width, videoSize.height)) + event(ResizedEvent(height = videoSize.height, width = videoSize.width)) } override fun onRenderedFirstFrame() { super.onRenderedFirstFrame() onRenderFirst() - updatedTime() + updatedTime(source = PlayerEventSource.Player) } }) - } catch (e: Exception) { - Log.e(TAG, "loadExo error", e) - playerError?.invoke(e) + } catch (t: Throwable) { + Log.e(TAG, "loadExo error", t) + event(ErrorEvent(t)) } } @@ -1156,7 +1105,7 @@ class CS3IPlayer : IPlayer { lastTimeStamps = timeStamps timeStamps.forEach { timestamp -> exoPlayer?.createMessage { _, _ -> - updatedTime() + updatedTime(source = PlayerEventSource.Player) //if (payload is EpisodeSkip.SkipStamp) // this should always be true // onTimestampInvoked?.invoke(payload) } @@ -1166,7 +1115,7 @@ class CS3IPlayer : IPlayer { ?.setDeleteAfterDelivery(false) ?.send() } - updatedTime() + updatedTime(source = PlayerEventSource.Player) } @SuppressLint("UnsafeOptInUsageError") @@ -1187,7 +1136,7 @@ class CS3IPlayer : IPlayer { if (invalid) { releasePlayer(saveTime = false) - playerError?.invoke(InvalidFileException("Too short playback")) + event(ErrorEvent(InvalidFileException("Too short playback"))) return } @@ -1196,7 +1145,7 @@ class CS3IPlayer : IPlayer { val width = format?.width val height = format?.height if (height != null && width != null) { - playerDimensionsLoaded?.invoke(Pair(width, height)) + event(ResizedEvent(width = width, height = height)) updatedTime() exoPlayer?.apply { requestedListeningPercentages?.forEach { percentage -> @@ -1230,9 +1179,9 @@ class CS3IPlayer : IPlayer { subtitleHelper.setActiveSubtitles(activeSubtitles.toSet()) loadExo(context, listOf(MediaItemSlice(mediaItem, Long.MIN_VALUE)), subSources) - } catch (e: Exception) { - Log.e(TAG, "loadOfflinePlayer error", e) - playerError?.invoke(e) + } catch (t: Throwable) { + Log.e(TAG, "loadOfflinePlayer error", t) + event(ErrorEvent(t)) } } @@ -1365,9 +1314,9 @@ class CS3IPlayer : IPlayer { } loadExo(context, mediaItems, subSources, cacheFactory) - } catch (e: Exception) { - Log.e(TAG, "loadOnlinePlayer error", e) - playerError?.invoke(e) + } catch (t: Throwable) { + Log.e(TAG, "loadOnlinePlayer error", t) + event(ErrorEvent(t)) } } 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 0f3c189d..6dabb5b7 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 @@ -874,7 +874,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { currentTouch )?.let { seekTo -> if (abs(seekTo - startTime) > MINIMUM_SEEK_TIME) { - player.seekTo(seekTo) + player.seekTo(seekTo, PlayerEventSource.UI) } } } @@ -909,7 +909,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } else -> { - player.handleEvent(CSPlayerEvent.PlayPauseToggle) + player.handleEvent(CSPlayerEvent.PlayPauseToggle, PlayerEventSource.UI) } } } else if (doubleTapEnabled && isFullScreenPlayer) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 2b9304b6..b2542ffa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -551,7 +551,7 @@ class GeneratorPlayer : FullScreenPlayer() { //println("CURRENT SELECTED :$currentSelectedSubtitles of $currentSubs") context?.let { ctx -> val isPlaying = player.getIsPlaying() - player.handleEvent(CSPlayerEvent.Pause) + player.handleEvent(CSPlayerEvent.Pause, PlayerEventSource.UI) val currentSubtitles = sortSubs(currentSubs) val sourceDialog = Dialog(ctx, R.style.AlertDialogCustomBlack) @@ -883,7 +883,7 @@ class GeneratorPlayer : FullScreenPlayer() { } - override fun playerError(exception: Exception) { + override fun playerError(exception: Throwable) { Log.i(TAG, "playerError = $currentSelectedLink") super.playerError(exception) } @@ -945,14 +945,13 @@ class GeneratorPlayer : FullScreenPlayer() { var maxEpisodeSet: Int? = null var hasRequestedStamps: Boolean = false - override fun playerPositionChanged(posDur: Pair) { + override fun playerPositionChanged(position: Long, duration : Long) { // Don't save livestream data if ((currentMeta as? ResultEpisode)?.tvType?.isLiveStream() == true) return // Don't save NSFW data if ((currentMeta as? ResultEpisode)?.tvType == TvType.NSFW) return - val (position, duration) = posDur if (duration <= 0L) return // idk how you achieved this, but div by zero crash if (!hasRequestedStamps) { hasRequestedStamps = true @@ -1209,8 +1208,8 @@ class GeneratorPlayer : FullScreenPlayer() { } } - override fun playerDimensionsLoaded(widthHeight: Pair) { - setPlayerDimen(widthHeight) + override fun playerDimensionsLoaded(width: Int, height : Int) { + setPlayerDimen(width to height) } private fun unwrapBundle(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index 3038cb8d..ec006234 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -45,9 +45,120 @@ enum class CSPlayerLoading { IsPaused, IsPlaying, IsBuffering, - //IsDone, } +enum class PlayerEventSource { + /** This event was invoked from the user pressing some button or selecting something */ + UI, + + /** This event was invoked automatically */ + Player, + + /** This event was invoked from a external sync tool like WatchTogether */ + Sync, +} + +abstract class PlayerEvent { + abstract val source: PlayerEventSource +} + +/** this is used to update UI based of the current time, + * using requestedListeningPercentages as well as saving time */ +data class PositionEvent( + override val source: PlayerEventSource, + val fromMs: Long, + val toMs: Long, + /** duration of the entire video */ + val durationMs: Long, +) : PlayerEvent() { + /** how many ms (+-) we have skipped */ + val seekMs : Long get() = toMs - fromMs +} + +/** player error when rendering or misc, used to display toast or log */ +data class ErrorEvent( + val error: Throwable, + override val source: PlayerEventSource = PlayerEventSource.Player, +) : PlayerEvent() + +/** Event when timestamps appear, null when it should disappear */ +data class TimestampInvokedEvent( + val timestamp: EpisodeSkip.SkipStamp, + override val source: PlayerEventSource = PlayerEventSource.Player, +) : PlayerEvent() + +/** Event for when a chapter is skipped, aka when event is handled (or for future use when skip automatically ads/sponsor) */ +data class TimestampSkippedEvent( + val timestamp: EpisodeSkip.SkipStamp, + override val source: PlayerEventSource = PlayerEventSource.Player, +) : PlayerEvent() + +/** this is used by the player to load the next or prev episode */ +data class EpisodeSeekEvent( + /** -1 = prev, 1 = next, will never be 0, atm the user cant seek more than +-1 */ + val offset: Int, + override val source: PlayerEventSource = PlayerEventSource.Player, +) : PlayerEvent() { + init { + assert(offset != 0) + } +} + +/** Event when the video is resized aka changed resolution or mirror */ +data class ResizedEvent( + val height: Int, + val width: Int, + override val source: PlayerEventSource = PlayerEventSource.Player, +) : PlayerEvent() + +/** Event when the player status update, along with the previous status (for animation)*/ +data class StatusEvent( + val wasPlaying: CSPlayerLoading, + val isPlaying: CSPlayerLoading, + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Event when tracks are changed, used for UI changes */ +data class TracksChangedEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Event from player to give all embedded subtitles */ +data class EmbeddedSubtitlesFetchedEvent( + val tracks: List, + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** on attach player to view */ +data class PlayerAttachedEvent( + val player: Any?, + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Event from player to inform that subtitles have updated in some way */ +data class SubtitlesUpdatedEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** current player starts, asking for all other programs to shut the fuck up */ +data class RequestAudioFocusEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Pause event, separate from StatusEvent */ +data class PauseEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Play event, separate from StatusEvent */ +data class PlayEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() + +/** Event when the player video has ended, up to the settings on what to do when that happens */ +data class VideoEndedEvent( + override val source: PlayerEventSource = PlayerEventSource.Player +) : PlayerEvent() interface Track { /** @@ -108,27 +219,16 @@ interface IPlayer { fun getDuration(): Long? fun getPosition(): Long? - fun seekTime(time: Long) - fun seekTo(time: Long) + fun seekTime(time: Long, source: PlayerEventSource = PlayerEventSource.UI) + fun seekTo(time: Long, source: PlayerEventSource = PlayerEventSource.UI) fun getSubtitleOffset(): Long // in ms fun setSubtitleOffset(offset: Long) // in ms fun initCallbacks( - playerUpdated: (Any?) -> Unit, // attach player to view - updateIsPlaying: ((Pair) -> Unit)? = null, // (wasPlaying, isPlaying) - requestAutoFocus: (() -> Unit)? = null, // current player starts, asking for all other programs to shut the fuck up - playerError: ((Exception) -> Unit)? = null, // player error when rendering or misc, used to display toast or log - playerDimensionsLoaded: ((Pair) -> Unit)? = null, // (with, height), for UI - requestedListeningPercentages: List? = null, // this is used to request when the player should report back view percentage - playerPositionChanged: ((Pair) -> Unit)? = null,// (position, duration) this is used to update UI based of the current time - nextEpisode: (() -> Unit)? = null, // this is used by the player to load the next episode - prevEpisode: (() -> Unit)? = null, // this is used by the player to load the previous episode - subtitlesUpdates: (() -> Unit)? = null, // callback from player to inform that subtitles have updated in some way - embeddedSubtitlesFetched: ((List) -> Unit)? = null, // callback from player to give all embedded subtitles - onTracksInfoChanged: (() -> Unit)? = null, // Callback when tracks are changed, used for UI changes - onTimestampInvoked: ((EpisodeSkip.SkipStamp?) -> Unit)? = null, // Callback when timestamps appear, null when it should disappear - onTimestampSkipped: ((EpisodeSkip.SkipStamp) -> Unit)? = null, // callback for when a chapter is skipped, aka when event is handled (or for future use when skip automatically ads/sponsor) + eventHandler: ((PlayerEvent) -> Unit), + /** this is used to request when the player should report back view percentage */ + requestedListeningPercentages: List? = null, ) fun releaseCallbacks() @@ -155,7 +255,7 @@ interface IPlayer { fun setPreferredSubtitles(subtitle: SubtitleData?): Boolean // returns true if the player requires a reload, null for nothing fun getCurrentPreferredSubtitle(): SubtitleData? - fun handleEvent(event: CSPlayerEvent) + fun handleEvent(event: CSPlayerEvent, source: PlayerEventSource = PlayerEventSource.UI) fun onStop() fun onPause() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index a932a57c..ef2ed0df 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -130,8 +130,8 @@ open class ResultFragmentPhone : FullScreenPlayer() { return currentTrailerIndex + 1 < currentTrailers.size } - override fun playerError(exception: Exception) { - if (player.getIsPlaying()) { // because we dont want random toasts in player + override fun playerError(exception: Throwable) { + if (player.getIsPlaying()) { // because we don't want random toasts in player super.playerError(exception) } else { nextMirror() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index 91e97dfc..5208e4a5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.ui.result import android.animation.ValueAnimator import android.content.Context import android.content.res.Configuration -import android.graphics.Rect import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -12,6 +11,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.CSPlayerEvent +import com.lagradost.cloudstream3.ui.player.PlayerEventSource import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.utils.IOnBackPressed @@ -32,7 +32,7 @@ open class ResultTrailerPlayer : ResultFragmentPhone(), IOnBackPressed { override fun prevEpisode() {} - override fun playerPositionChanged(posDur: Pair) {} + override fun playerPositionChanged(position: Long, duration : Long) {} override fun nextMirror() {} @@ -99,8 +99,8 @@ open class ResultTrailerPlayer : ResultFragmentPhone(), IOnBackPressed { } } - override fun playerDimensionsLoaded(widthHeight: Pair) { - playerWidthHeight = widthHeight + override fun playerDimensionsLoaded(width: Int, height : Int) { + playerWidthHeight = width to height fixPlayerSize() } @@ -164,7 +164,7 @@ open class ResultTrailerPlayer : ResultFragmentPhone(), IOnBackPressed { playerBinding?.playerIntroPlay?.setOnClickListener { playerBinding?.playerIntroPlay?.isGone = true - player.handleEvent(CSPlayerEvent.Play) + player.handleEvent(CSPlayerEvent.Play, PlayerEventSource.UI) updateUIVisibility() fixPlayerSize() } From 85c4c74222188ef1b998bdef62eb011cea8efedc Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 9 Sep 2023 23:53:35 +0200 Subject: [PATCH 537/888] fixed shitty external extractor code --- .../main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 3 +++ 1 file changed, 3 insertions(+) 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 0a926374..62217a0b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -378,6 +378,9 @@ open class ExtractorLink constructor( open val extractorData: String? = null, open val type: ExtractorLinkType, ) : VideoDownloadManager.IDownloadableMinimum { + val isM3u8 : Boolean get() = type == ExtractorLinkType.M3U8 + val isDash : Boolean get() = type == ExtractorLinkType.DASH + constructor( source: String, name: String, From 0afbc90cd2a57c0cd5bb6d0709dcd44c0fc85b26 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 9 Sep 2023 23:57:18 +0200 Subject: [PATCH 538/888] fixed last fix --- .../main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 1 - 1 file changed, 1 deletion(-) 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 62217a0b..5edff7a1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -227,7 +227,6 @@ data class ExtractorLinkPlayList( val playlist: List, override val referer: String, override val quality: Int, - val isM3u8: Boolean = false, override val headers: Map = mapOf(), /** Used for getExtractorVerifierJob() */ override val extractorData: String? = null, From f6b0ea8dfa4253446e9532689531a0aba6505f54 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sun, 10 Sep 2023 16:31:01 +0300 Subject: [PATCH 539/888] Stream button type switch support (#597) * Stream button type switch support * Hide Hls playlist switch --- .../com/lagradost/cloudstream3/ui/player/LinkGenerator.kt | 5 ++--- app/src/main/res/layout/stream_input.xml | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index ba2cdb40..ca2d9c81 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -67,9 +67,8 @@ class LinkGenerator( link.name ?: link.url, unshortenLinkSafe(link.url), // unshorten because it might be a raw link referer ?: "", - Qualities.Unknown.value, isM3u8 ?: normalSafeApiCall { - URI(link.url).path?.substringAfterLast(".")?.contains("m3u") - } ?: false + Qualities.Unknown.value, + type = INFER_TYPE, ) to null ) } diff --git a/app/src/main/res/layout/stream_input.xml b/app/src/main/res/layout/stream_input.xml index 20a91b4a..83605ce3 100644 --- a/app/src/main/res/layout/stream_input.xml +++ b/app/src/main/res/layout/stream_input.xml @@ -49,7 +49,8 @@ android:layout_marginTop="10dp" android:text="@string/hls_playlist" android:textColor="?attr/textColor" - android:textSize="16sp" /> + android:textSize="16sp" + android:visibility="invisible" /> From 7f7c81828a294a6f77cbc563dcf1b77b96173e6e Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 11 Sep 2023 13:37:02 +0200 Subject: [PATCH 540/888] added UI event for seekbar --- .../ui/player/AbstractPlayerFragment.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index c6f02f1a..4316bbc6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -7,6 +7,7 @@ import android.graphics.drawable.AnimatedVectorDrawable import android.media.metrics.PlaybackErrorEvent import android.os.Build import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -25,8 +26,10 @@ import androidx.media3.common.PlaybackException import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession import androidx.media3.ui.AspectRatioFrameLayout +import androidx.media3.ui.DefaultTimeBar import androidx.media3.ui.PlayerView import androidx.media3.ui.SubtitleView +import androidx.media3.ui.TimeBar import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.canEnterPipMode @@ -371,6 +374,7 @@ abstract class AbstractPlayerFragment( * do note that this only receives events for UI changes, * and returning early WONT stop it from changing in eg the player time or pause status */ open fun mainCallback(event : PlayerEvent) { + Log.i(TAG, "Handle event: $event") when(event) { is ResizedEvent -> { playerDimensionsLoaded(event.width, event.height) @@ -433,7 +437,7 @@ abstract class AbstractPlayerFragment( } } - @SuppressLint("SetTextI18n") + @SuppressLint("SetTextI18n", "UnsafeOptInUsageError") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { resizeMode = getKey(RESIZE_MODE_KEY) ?: 0 resize(resizeMode, false) @@ -454,6 +458,19 @@ abstract class AbstractPlayerFragment( subStyle = SubtitlesFragment.getCurrentSavedStyle() player.initSubtitles(subView, subtitleHolder, subStyle) + /** this might seam a bit fucky and that is because it is, the seek event is captured twice, once by the player + * and once by the UI even if it should only be registered once by the UI */ + playerView?.findViewById(R.id.exo_progress)?.addListener(object : TimeBar.OnScrubListener { + override fun onScrubStart(timeBar: TimeBar, position: Long) = Unit + override fun onScrubMove(timeBar: TimeBar, position: Long) = Unit + override fun onScrubStop(timeBar: TimeBar, position: Long, canceled: Boolean) { + if (canceled) return + val playerDuration = player.getDuration() ?: return + val playerPosition = player.getPosition() ?: return + mainCallback(PositionEvent(source = PlayerEventSource.UI, durationMs = playerDuration, fromMs = playerPosition, toMs = position)) + } + }) + SubtitlesFragment.applyStyleEvent += ::onSubStyleChanged try { From 10bc688eaf00d34bd41da06d53f1142fc7888f09 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 11 Sep 2023 14:29:30 +0200 Subject: [PATCH 541/888] fixed tracker on dub --- .../lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index b2c57137..b398b54e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1538,7 +1538,11 @@ class ResultViewModel2 : ViewModel() { this.name, this.japName ).filter { it.length > 2 } - .distinct(), // the reason why we filter is due to not wanting smth like " " or "?" + .distinct().map { + // this actually would be nice if we improved a bit as 3rd season == season 3 == III ect + // right now it just removes the dubbed status + it.lowercase().replace(Regex("""\(?[ds]ub(bed)?\)?(\s|$)""") , "").trim() + }, TrackerType.getTypes(this.type), this.year ) From 01e7acdeace32f20e6c23f5cb187977bd6131d45 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:31:11 +0700 Subject: [PATCH 542/888] getTracker: switched to anilist api (#593) * getTracker: switched to anilist api --------- Co-authored-by: Sofie99 --- .../com/lagradost/cloudstream3/MainAPI.kt | 119 +++++++++++++----- 1 file changed, 87 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 80332445..0175e0d0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -22,8 +22,10 @@ import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.Coroutines.mainWork import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf +import com.lagradost.nicehttp.RequestBodyTypes import okhttp3.Interceptor -import org.mozilla.javascript.Scriptable +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.RequestBody.Companion.toRequestBody import java.text.SimpleDateFormat import java.util.* import kotlin.math.absoluteValue @@ -180,7 +182,7 @@ object APIHolder { /** * Get anime tracker information based on title, year and type. * Both titles are attempted to be matched with both Romaji and English title. - * Uses the consumet api. + * Uses the anilist api. * * @param titles uses first index to search, but if you have multiple titles and want extra guarantee to match you can also have that * @param types Optional parameter to narrow down the scope to Movies, TV, etc. See TrackerType.getTypes() @@ -189,7 +191,8 @@ object APIHolder { suspend fun getTracker( titles: List, types: Set?, - year: Int? + year: Int?, + lessAccurate: Boolean = false ): Tracker? { return try { require(titles.isNotEmpty()) { "titles must no be empty when calling getTracker" } @@ -197,30 +200,70 @@ object APIHolder { val mainTitle = titles[0] val search = trackerCache[mainTitle] - ?: app.get("https://api.consumet.org/meta/anilist/$mainTitle") - .parsedSafe()?.also { - trackerCache[mainTitle] = it - } ?: return null + ?: searchAnilist(mainTitle)?.also { + trackerCache[mainTitle] = it + } ?: return null - val res = search.results?.find { media -> - val matchingYears = year == null || media.releaseDate == year + val res = search.data?.page?.media?.find { media -> + val matchingYears = year == null || media.seasonYear == year val matchingTitles = media.title?.let { title -> titles.any { userTitle -> title.isMatchingTitles(userTitle) } } ?: false - val matchingTypes = types?.any { it.name.equals(media.type, true) } == true - matchingTitles && matchingTypes && matchingYears + val matchingTypes = types?.any { it.name.equals(media.format, true) } == true + if(lessAccurate) matchingTitles || matchingTypes && matchingYears else matchingTitles && matchingTypes && matchingYears } ?: return null - Tracker(res.malId, res.aniId, res.image, res.cover) + Tracker(res.idMal, res.id.toString(), res.coverImage?.extraLarge ?: res.coverImage?.large, res.bannerImage) } catch (t: Throwable) { logError(t) null } } + private suspend fun searchAnilist( + title: String?, + ): AniSearch? { + val query = """ + query ( + ${'$'}page: Int = 1 + ${'$'}search: String + ${'$'}sort: [MediaSort] = [POPULARITY_DESC, SCORE_DESC] + ${'$'}type: MediaType + ) { + Page(page: ${'$'}page, perPage: 20) { + media( + search: ${'$'}search + sort: ${'$'}sort + type: ${'$'}type + ) { + id + idMal + title { romaji english } + coverImage { extraLarge large } + bannerImage + seasonYear + format + } + } + } + """.trimIndent().trim() + + val data = mapOf( + "query" to query, + "variables" to mapOf( + "search" to title, + "sort" to "SEARCH_MATCH", + "type" to "ANIME", + ) + ).toJson().toRequestBody(RequestBodyTypes.JSON.toMediaTypeOrNull()) + + return app.post("https://graphql.anilist.co", requestBody = data) + .parsedSafe() + } + fun Context.getApiSettings(): HashSet { //val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) @@ -1730,30 +1773,42 @@ data class Tracker( val cover: String? = null, ) -data class Title( - @JsonProperty("romaji") val romaji: String? = null, - @JsonProperty("english") val english: String? = null, +data class AniSearch( + @JsonProperty("data") var data: Data? = Data() ) { - fun isMatchingTitles(title: String?): Boolean { - if (title == null) return false - return english.equals(title, true) || romaji.equals(title, true) + data class Data( + @JsonProperty("Page") var page: Page? = Page() + ) { + data class Page( + @JsonProperty("media") var media: ArrayList = arrayListOf() + ) { + data class Media( + @JsonProperty("title") var title: Title? = null, + @JsonProperty("id") var id: Int? = null, + @JsonProperty("idMal") var idMal: Int? = null, + @JsonProperty("seasonYear") var seasonYear: Int? = null, + @JsonProperty("format") var format: String? = null, + @JsonProperty("coverImage") var coverImage: CoverImage? = null, + @JsonProperty("bannerImage") var bannerImage: String? = null, + ) { + data class CoverImage( + @JsonProperty("extraLarge") var extraLarge: String? = null, + @JsonProperty("large") var large: String? = null, + ) + data class Title( + @JsonProperty("romaji") var romaji: String? = null, + @JsonProperty("english") var english: String? = null, + ) { + fun isMatchingTitles(title: String?): Boolean { + if (title == null) return false + return english.equals(title, true) || romaji.equals(title, true) + } + } + } + } } } -data class Results( - @JsonProperty("id") val aniId: String? = null, - @JsonProperty("malId") val malId: Int? = null, - @JsonProperty("title") val title: Title? = null, - @JsonProperty("releaseDate") val releaseDate: Int? = null, - @JsonProperty("type") val type: String? = null, - @JsonProperty("image") val image: String? = null, - @JsonProperty("cover") val cover: String? = null, -) - -data class AniSearch( - @JsonProperty("results") val results: ArrayList? = arrayListOf() -) - /** * used for the getTracker() method **/ From 2baa75496ec16ba5e8cf2eba13641563bcf6f8fc Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:13:42 +0000 Subject: [PATCH 543/888] Fix opensubtitles (#598) * Fix OpenSubtitles --- .../providers/OpenSubtitlesApi.kt | 50 +++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt index 3e372c2d..4030649d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt @@ -2,12 +2,13 @@ package com.lagradost.cloudstream3.syncproviders.providers import android.util.Log import com.fasterxml.jackson.annotation.JsonProperty -import com.google.common.collect.BiMap -import com.google.common.collect.HashBiMap -import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.ErrorLoadingException +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.subtitles.AbstractSubApi import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities @@ -15,8 +16,8 @@ import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPIManager import com.lagradost.cloudstream3.utils.AppUtils -import java.net.URLEncoder -import java.nio.charset.StandardCharsets +import okhttp3.Interceptor +import okhttp3.Response class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi { override val idPrefix = "opensubtitles" @@ -36,6 +37,23 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi var currentSession: SubtitleOAuthEntity? = null } + private val headerInterceptor = OpenSubtitleInterceptor() + + /** Automatically adds required api headers */ + private class OpenSubtitleInterceptor : Interceptor { + /** Required user agent! */ + private val userAgent = "Cloudstream3 v0.1" + override fun intercept(chain: Interceptor.Chain): Response { + return chain.proceed( + chain.request().newBuilder() + .removeHeader("user-agent") + .addHeader("user-agent", userAgent) + .addHeader("Api-Key", apiKey) + .build() + ) + } + } + private fun canDoRequest(): Boolean { return unixTimeMs > currentCoolDown } @@ -98,13 +116,13 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi val response = app.post( url = "$host/login", headers = mapOf( - "Api-Key" to apiKey, - "Content-Type" to "application/json" + "Content-Type" to "application/json", ), data = mapOf( "username" to username, "password" to password - ) + ), + interceptor = headerInterceptor ) //Log.i(TAG, "Responsecode = ${response.code}") //Log.i(TAG, "Result => ${response.text}") @@ -149,11 +167,13 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi // "pt" to "pt-PT", // "pt" to "pt-BR" ) - private fun fixLanguage(language: String?) : String? { + + private fun fixLanguage(language: String?): String? { return languageExceptions[language] ?: language } + // O(n) but good enough, BiMap did not want to work properly - private fun fixLanguageReverse(language: String?) : String? { + private fun fixLanguageReverse(language: String?): String? { return languageExceptions.entries.firstOrNull { it.value == language }?.key ?: language } @@ -183,9 +203,9 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi val req = app.get( url = searchQueryUrl, headers = mapOf( - Pair("Api-Key", apiKey), Pair("Content-Type", "application/json") - ) + ), + interceptor = headerInterceptor ) Log.i(TAG, "Search Req => ${req.text}") if (!req.isSuccessful) { @@ -207,7 +227,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi //Use any valid name/title in hierarchy val name = filename ?: featureDetails?.movieName ?: featureDetails?.title ?: featureDetails?.parentTitle ?: attr.release ?: query.query - val lang = fixLanguageReverse(attr.language)?: "" + val lang = fixLanguageReverse(attr.language) ?: "" val resEpNum = featureDetails?.episodeNumber ?: query.epNumber val resSeasonNum = featureDetails?.seasonNumber ?: query.seasonNumber val year = featureDetails?.year ?: query.year @@ -251,13 +271,13 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi "Authorization", "Bearer ${currentSession?.access_token ?: throw ErrorLoadingException("No access token active in current session")}" ), - Pair("Api-Key", apiKey), Pair("Content-Type", "application/json"), Pair("Accept", "*/*") ), data = mapOf( Pair("file_id", data.data) - ) + ), + interceptor = headerInterceptor ) Log.i(TAG, "Request result => (${req.code}) ${req.text}") //Log.i(TAG, "Request headers => ${req.headers}") From 7d6ba8c7a4feed2636ab7fd386d1c76ffa73f2de Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 11 Sep 2023 23:05:10 +0200 Subject: [PATCH 544/888] tv changes for better centering + bigger text + better contrast --- .../lagradost/cloudstream3/CommonActivity.kt | 37 ++++++++++++-- .../lagradost/cloudstream3/MainActivity.kt | 50 ++++++++++++++++--- .../ui/player/FullScreenPlayer.kt | 15 +----- .../ui/result/ResultTrailerPlayer.kt | 2 + .../main/res/layout/fragment_result_tv.xml | 40 +++++++++------ 5 files changed, 107 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 0bcd4152..a7d899b6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -7,9 +7,14 @@ import android.content.Context import android.content.pm.PackageManager import android.content.res.Resources import android.os.Build +import android.util.DisplayMetrics import android.util.Log -import android.view.* +import android.view.Gravity +import android.view.KeyEvent +import android.view.LayoutInflater +import android.view.View import android.view.View.NO_ID +import android.view.ViewGroup import android.widget.TextView import android.widget.Toast import androidx.activity.ComponentActivity @@ -40,7 +45,9 @@ import com.lagradost.cloudstream3.utils.UIHelper.shouldShowPIPMode import com.lagradost.cloudstream3.utils.UIHelper.toPx import org.schabi.newpipe.extractor.NewPipe import java.lang.ref.WeakReference -import java.util.* +import java.util.Locale +import kotlin.math.max +import kotlin.math.min enum class FocusDirection { Start, @@ -63,6 +70,19 @@ object CommonActivity { return (this as MainActivity?)?.mSessionManager?.currentCastSession } + val displayMetrics: DisplayMetrics = Resources.getSystem().displayMetrics + + // screenWidth and screenHeight does always + // refer to the screen while in landscape mode + val screenWidth: Int + get() { + return max(displayMetrics.widthPixels, displayMetrics.heightPixels) + } + val screenHeight: Int + get() { + return min(displayMetrics.widthPixels, displayMetrics.heightPixels) + } + var canEnterPipMode: Boolean = false var canShowPipMode: Boolean = false @@ -328,6 +348,14 @@ object CommonActivity { currentLook = currentLook.parent as? View ?: break }*/ + private fun View.hasContent() : Boolean { + return isShown && when(this) { + //is RecyclerView -> this.childCount > 0 + is ViewGroup -> this.childCount > 0 + else -> true + } + } + /** skips the initial stage of searching for an id using the view, see getNextFocus for specification */ fun continueGetNextFocus( root: Any?, @@ -348,16 +376,17 @@ object CommonActivity { } ?: return null next = localLook(view, nextId) ?: next + val shown = next.hasContent() // if cant focus but visible then break and let android decide // the exception if is the view is a parent and has children that wants focus val hasChildrenThatWantsFocus = (next as? ViewGroup)?.let { parent -> parent.descendantFocusability == ViewGroup.FOCUS_AFTER_DESCENDANTS && parent.childCount > 0 } ?: false - if (!next.isFocusable && next.isShown && !hasChildrenThatWantsFocus) return null + if (!next.isFocusable && shown && !hasChildrenThatWantsFocus) return null // if not shown then continue because we will "skip" over views to get to a replacement - if (!next.isShown) { + if (!shown) { // we don't want a while true loop, so we let android decide if we find a recursive view if (next == view) return null return getNextFocus(root, next, direction, depth + 1) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index fbad4fce..a07ae2c2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration +import android.graphics.Rect import android.net.Uri import android.os.Build import android.os.Bundle @@ -52,6 +53,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.navigationrail.NavigationRailView import com.google.android.material.snackbar.Snackbar +import com.google.common.collect.Comparators.min import com.jaredrummler.android.colorpicker.ColorPickerDialogListener import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.APIHolder.apis @@ -64,13 +66,13 @@ import com.lagradost.cloudstream3.CommonActivity.loadThemes import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint +import com.lagradost.cloudstream3.CommonActivity.screenHeight import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale import com.lagradost.cloudstream3.databinding.ActivityMainBinding import com.lagradost.cloudstream3.databinding.ActivityMainTvBinding import com.lagradost.cloudstream3.databinding.BottomResultviewPreviewBinding import com.lagradost.cloudstream3.mvvm.Resource -import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.observeNullable @@ -832,6 +834,13 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { focusOutline.get()?.isVisible = false } } + /*private val scrollListener = object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + current = current.copy(x = current.x + dx, y = current.y + dy) + setTargetPosition(current) + } + }*/ private fun setTargetPosition(target: FocusTarget) { focusOutline.get()?.apply { @@ -874,7 +883,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (!exactlyTheSame) { lastView?.removeOnLayoutChangeListener(layoutListener) lastView?.removeOnAttachStateChangeListener(attachListener) - (lastView?.parent as? RecyclerView)?.removeOnLayoutChangeListener(layoutListener) + (lastView?.parent as? RecyclerView)?.apply { + removeOnLayoutChangeListener(layoutListener) + //removeOnScrollListener(scrollListener) + } } val wasGone = focusOutline.isGone @@ -952,7 +964,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { focusOutline.isVisible = false } if (!exactlyTheSame) { - (newFocus.parent as? RecyclerView)?.addOnLayoutChangeListener(layoutListener) + (newFocus.parent as? RecyclerView)?.apply { + addOnLayoutChangeListener(layoutListener) + //addOnScrollListener(scrollListener) + } newFocus.addOnLayoutChangeListener(layoutListener) newFocus.addOnAttachStateChangeListener(attachListener) } @@ -970,8 +985,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { ) // if they are the same within then snap, aka scrolling - val deltaMin = 50.toPx - if (start.width == end.width && start.height == end.height && (start.x - end.x).absoluteValue < deltaMin && (start.y - end.y).absoluteValue < deltaMin) { + val deltaMinX = min(end.width / 2, 60.toPx) + val deltaMinY = min(end.height / 2, 60.toPx) + if (start.width == end.width && start.height == end.height && (start.x - end.x).absoluteValue < deltaMinX && (start.y - end.y).absoluteValue < deltaMinY) { animator?.cancel() last = start current = end @@ -1000,7 +1016,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // animate between a and b animator = ValueAnimator.ofFloat(0.0f, 1.0f).apply { startDelay = 0 - duration = 100 + duration = 200 addUpdateListener { animation -> val animatedValue = animation.animatedValue as Float val target = FocusTarget.lerp(last, current, minOf(animatedValue, 1.0f)) @@ -1095,7 +1111,29 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { TvFocus.focusOutline = WeakReference(newLocalBinding.focusOutline) newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> // println("refocus $oldFocus -> $newFocus") + try { + val r = Rect(0,0,0,0) + newFocus.getDrawingRect(r) + val x = r.centerX() + val y = r.centerY() + val dx = 0 //screenWidth / 2 + val dy = screenHeight / 2 + val r2 = Rect(x-dx,y-dy,x+dx,y+dy) + newFocus.requestRectangleOnScreen(r2, false) + // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) + } catch (_ : Throwable) { } TvFocus.updateFocusView(newFocus) + /*var focus = newFocus + + while(focus != null) { + if(focus is ScrollingView && focus.canScrollVertically()) { + focus.scrollBy() + } + when(focus.parent) { + is View -> focus = newFocus + else -> break + } + }*/ } newLocalBinding.root.viewTreeObserver.addOnScrollChangedListener { TvFocus.updateFocusView(TvFocus.lastFocus.get(), same = true) 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 6dabb5b7..e698191d 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 @@ -38,6 +38,8 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.keyEventListener import com.lagradost.cloudstream3.CommonActivity.playerEventListener +import com.lagradost.cloudstream3.CommonActivity.screenHeight +import com.lagradost.cloudstream3.CommonActivity.screenWidth import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.PlayerCustomLayoutBinding import com.lagradost.cloudstream3.databinding.SubtitleOffsetBinding @@ -126,19 +128,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() { protected var useTrueSystemBrightness = true private val fullscreenNotch = true //TODO SETTING - protected val displayMetrics: DisplayMetrics = Resources.getSystem().displayMetrics - - // screenWidth and screenHeight does always - // refer to the screen while in landscape mode - protected val screenWidth: Int - get() { - return max(displayMetrics.widthPixels, displayMetrics.heightPixels) - } - protected val screenHeight: Int - get() { - return min(displayMetrics.widthPixels, displayMetrics.heightPixels) - } - private var statusBarHeight: Int? = null private var navigationBarHeight: Int? = null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index 5208e4a5..c30e70e5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -9,6 +9,8 @@ import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isGone import androidx.core.view.isVisible +import com.lagradost.cloudstream3.CommonActivity.screenHeight +import com.lagradost.cloudstream3.CommonActivity.screenWidth import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.CSPlayerEvent import com.lagradost.cloudstream3.ui.player.PlayerEventSource diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 1fde999c..4d236d78 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -128,7 +128,7 @@ https://developer.android.com/design/ui/tv/samples/jet-fit - - @@ -411,7 +409,7 @@ https://developer.android.com/design/ui/tv/samples/jet-fit android:padding="5dp" android:requiresFadingEdge="vertical" android:textColor="?attr/textColor" - android:textSize="12sp" + android:textSize="16sp" tools:text="Ryan Quicksave Romano is an eccentric adventurer with a strange power: he can create a save-point in time and redo his life whenever he dies. Arriving in New Rome, the glitzy capital of sin of a rebuilding Europe, he finds the city torn between mega-corporations, sponsored heroes, superpowered criminals, and true monsters. It's a time of chaos, where potions can grant the power to rule the world and dangers lurk everywhere. " /> - + android:layout_height="match_parent"> + + + + Date: Thu, 14 Sep 2023 10:53:35 +0000 Subject: [PATCH 545/888] More robust player release (#601) --- .../ui/player/AbstractPlayerFragment.kt | 1 + .../cloudstream3/ui/player/CS3IPlayer.kt | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 4316bbc6..8388e58f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -517,6 +517,7 @@ abstract class AbstractPlayerFragment( canEnterPipMode = false mMediaSession?.release() mMediaSession = null + playerView?.player = null SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged keepScreenOn(false) 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 fe4e3423..331cfb73 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 @@ -51,6 +51,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle @@ -85,6 +86,12 @@ const val toleranceAfterUs = 300_000L class CS3IPlayer : IPlayer { private var isPlaying = false private var exoPlayer: ExoPlayer? = null + set(value) { + // If the old value is not null then the player has not been properly released. + debugAssert({ field != null && value != null }, { "Previous player instance should be released!" }) + field = value + } + var cacheSize = 0L var simpleCacheSize = 0L var videoBufferMs = 0L @@ -682,13 +689,13 @@ class CS3IPlayer : IPlayer { metadataRendererOutput ).map { if (it is TextRenderer) { - currentTextRenderer = CustomTextRenderer( + val currentTextRenderer = CustomTextRenderer( subtitleOffset, textRendererOutput, eventHandler.looper, CustomSubtitleDecoderFactory() - ) - currentTextRenderer!! + ).also { this.currentTextRenderer = it } + currentTextRenderer } else it }.toTypedArray() } @@ -1323,7 +1330,7 @@ class CS3IPlayer : IPlayer { override fun reloadPlayer(context: Context) { Log.i(TAG, "reloadPlayer") - exoPlayer?.release() + releasePlayer(false) currentLink?.let { loadOnlinePlayer(context, it) } ?: currentDownloadedFile?.let { From 2bed79b1f18e7b7ae145377865f427a781197e11 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:53:54 +0700 Subject: [PATCH 546/888] Update Gofile.kt (#600) --- .../main/java/com/lagradost/cloudstream3/extractors/Gofile.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt index d76b0e11..eaf9c65f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt @@ -19,7 +19,7 @@ open class Gofile : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val id = Regex("/(?:\\?c=|d/)([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) + val id = Regex("/(?:\\?c=|d/)([\\da-zA-Z-]+)").find(url)?.groupValues?.get(1) val token = app.get("$mainApi/createAccount").parsedSafe()?.data?.get("token") val websiteToken = app.get("$mainUrl/dist/js/alljs.js").text.let { Regex("websiteToken\\s*=\\s*\"([^\"]+)").find(it)?.groupValues?.get(1) @@ -59,4 +59,4 @@ open class Gofile : ExtractorApi() { @JsonProperty("data") val data: Data? = null, ) -} \ No newline at end of file +} From 6957a8f95dc7144c5b6c454930950d533c276f95 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:30:44 +0200 Subject: [PATCH 547/888] bump --- app/build.gradle.kts | 4 ++-- app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f52d6e5e..66ba16c6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -58,8 +58,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 59 - versionName = "4.1.8" + versionCode = 60 + versionName = "4.1.9" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 0175e0d0..5b674c4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -179,6 +179,13 @@ object APIHolder { private var trackerCache: HashMap = hashMapOf() + /** backwards compatibility, use getTracker4 instead */ + suspend fun getTracker( + titles: List, + types: Set?, + year: Int?, + ): Tracker? = getTracker(titles, types, year, false) + /** * Get anime tracker information based on title, year and type. * Both titles are attempted to be matched with both Romaji and English title. @@ -192,7 +199,7 @@ object APIHolder { titles: List, types: Set?, year: Int?, - lessAccurate: Boolean = false + lessAccurate: Boolean ): Tracker? { return try { require(titles.isNotEmpty()) { "titles must no be empty when calling getTracker" } From 24977a8d628a3418051e9bbbead8d4a88f7df035 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Fri, 15 Sep 2023 20:47:59 +0000 Subject: [PATCH 548/888] Potential fix for crash loops (#608) --- .../com/lagradost/cloudstream3/MainActivity.kt | 12 ++++++++---- .../cloudstream3/plugins/PluginManager.kt | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a07ae2c2..82a52a2a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1092,15 +1092,19 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { updateTv() // backup when we update the app, I don't trust myself to not boot lock users, might want to make this a setting? - try { + normalSafeApiCall { val appVer = BuildConfig.VERSION_NAME val lastAppAutoBackup: String = getKey("VERSION_NAME") ?: "" if (appVer != lastAppAutoBackup) { setKey("VERSION_NAME", BuildConfig.VERSION_NAME) - backup() + normalSafeApiCall { + backup() + } + normalSafeApiCall { + // Recompile oat on new version + PluginManager.deleteAllOatFiles(this) + } } - } catch (t: Throwable) { - logError(t) } // just in case, MAIN SHOULD *NEVER* BOOT LOOP CRASH diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 87b0ba3b..5bb96ed1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -137,6 +137,20 @@ object PluginManager { } } + /** + * Deletes all generated oat files which will force Android to recompile the dex extensions. + * This might fix unrecoverable SIGSEGV exceptions when old oat files are loaded in a new app update. + */ + fun deleteAllOatFiles(context: Context) { + File("${context.filesDir}/${ONLINE_PLUGINS_FOLDER}").listFiles()?.forEach { repo -> + repo.listFiles { file -> file.name == "oat" && file.isDirectory }?.forEach { file -> + val success = file.deleteRecursively() + Log.i(TAG, "Deleted oat directory: ${file.absolutePath} Success=$success") + } + } + } + + fun getPluginsOnline(): Array { return getKey(PLUGINS_KEY) ?: emptyArray() } From 627c1bb223a3cc4b8a917807e91100211f30a859 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Fri, 15 Sep 2023 22:30:34 +0000 Subject: [PATCH 549/888] Many UI fixes (#606) * Lower targetSdk to get all installed packages * Update sdk version * Let's not be too radical * Many fixes * Revert targetSdk * Make account homepage persistent --- .../lagradost/cloudstream3/MainActivity.kt | 25 +- ...RecyclerView.kt => CustomRecyclerViews.kt} | 39 ++- .../cloudstream3/ui/home/HomeFragment.kt | 3 +- .../cloudstream3/ui/home/HomeViewModel.kt | 17 +- .../ui/result/ResultFragmentTv.kt | 4 +- .../ui/result/ResultViewModel2.kt | 3 +- .../ui/settings/SettingsProviders.kt | 4 +- .../ui/setup/SetupFragmentMedia.kt | 4 +- .../cloudstream3/utils/DataStoreHelper.kt | 33 ++- app/src/main/res/drawable/episodes_shadow.xml | 6 +- .../main/res/layout/fragment_result_tv.xml | 239 ++++++++++-------- 11 files changed, 239 insertions(+), 138 deletions(-) rename app/src/main/java/com/lagradost/cloudstream3/ui/{AutofitRecyclerView.kt => CustomRecyclerViews.kt} (79%) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 82a52a2a..263a40f0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -128,6 +128,7 @@ 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 import com.lagradost.cloudstream3.utils.DataStoreHelper.migrateResumeWatching import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.IOnBackPressed @@ -305,6 +306,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // kinda shitty solution, but cant com main->home otherwise for popups val bookmarksUpdatedEvent = Event() + /** + * Used by data store helper to fully reload home when switching accounts + */ + val reloadHomeEvent = Event() /** @@ -539,6 +544,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val isTrueTv = isTrueTvSettings() navView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + + // Hide downloads on TV + navView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv + navRailView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv } } @@ -1116,16 +1125,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> // println("refocus $oldFocus -> $newFocus") try { - val r = Rect(0,0,0,0) + val r = Rect(0, 0, 0, 0) newFocus.getDrawingRect(r) val x = r.centerX() val y = r.centerY() val dx = 0 //screenWidth / 2 val dy = screenHeight / 2 - val r2 = Rect(x-dx,y-dy,x+dx,y+dy) + val r2 = Rect(x - dx, y - dy, x + dx, y + dy) newFocus.requestRectangleOnScreen(r2, false) - // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) - } catch (_ : Throwable) { } + // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) + } catch (_: Throwable) { + } TvFocus.updateFocusView(newFocus) /*var focus = newFocus @@ -1186,7 +1196,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } else if (lastError == null) { ioSafe { - getKey(USER_SELECTED_HOMEPAGE_API)?.let { homeApi -> + DataStoreHelper.currentHomePage?.let { homeApi -> mainPluginsLoadedEvent.invoke(loadSinglePlugin(this@MainActivity, homeApi)) } ?: run { mainPluginsLoadedEvent.invoke(false) @@ -1547,6 +1557,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { migrateResumeWatching() } + getKey(USER_SELECTED_HOMEPAGE_API)?.let { homepage -> + DataStoreHelper.currentHomePage = homepage + removeKey(USER_SELECTED_HOMEPAGE_API) + } + try { if (getKey(HAS_DONE_SETUP_KEY, false) != true) { navController.navigate(R.id.navigation_setup_language) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt similarity index 79% rename from app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt rename to app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt index 28ced48c..1a9549e1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui import android.content.Context import android.util.AttributeSet import android.view.View +import androidx.core.view.children import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlin.math.abs @@ -70,8 +71,8 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : val orientation = this.orientation // fixes arabic by inverting left and right layout focus - val correctDirection = if(this.isLayoutRTL) { - when(direction) { + val correctDirection = if (this.isLayoutRTL) { + when (direction) { View.FOCUS_RIGHT -> View.FOCUS_LEFT View.FOCUS_LEFT -> View.FOCUS_RIGHT else -> direction @@ -83,12 +84,15 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : View.FOCUS_DOWN -> { return spanCount } + View.FOCUS_UP -> { return -spanCount } + View.FOCUS_RIGHT -> { return 1 } + View.FOCUS_LEFT -> { return -1 } @@ -98,12 +102,15 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) : View.FOCUS_DOWN -> { return 1 } + View.FOCUS_UP -> { return -1 } + View.FOCUS_RIGHT -> { return spanCount } + View.FOCUS_LEFT -> { return -spanCount } @@ -155,4 +162,32 @@ class AutofitRecyclerView @JvmOverloads constructor(context: Context, attrs: Att layoutManager = manager } +} + +/** + * Recyclerview wherein the max item width or height is set by the biggest view to prevent inconsistent view sizes. + */ +class MaxRecyclerView(ctx: Context, attrs: AttributeSet) : RecyclerView(ctx, attrs) { + private var biggestObserved: Int = 0 + private val orientation = LayoutManager.getProperties(context, attrs, 0, 0).orientation + private val isHorizontal = orientation == HORIZONTAL + private fun View.updateMaxSize() { + if (isHorizontal) { + this.minimumHeight = biggestObserved + } else { + this.minimumWidth = biggestObserved + } + } + + override fun onChildAttachedToWindow(child: View) { + child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED) + val observed = if (isHorizontal) child.measuredHeight else child.measuredWidth + if (observed > biggestObserved) { + biggestObserved = observed + children.forEach { it.updateMaxSize() } + } else { + child.updateMaxSize() + } + super.onChildAttachedToWindow(child) + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index b84c619e..0797e9a0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -69,7 +69,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes -import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import java.util.* @@ -669,7 +668,7 @@ class HomeFragment : Fragment() { } homeViewModel.reloadStored() - homeViewModel.loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), false) + homeViewModel.loadAndCancel(DataStoreHelper.currentHomePage, false) //loadHomePage(false) // nice profile pic on homepage diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index b27223ec..13d34b59 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -49,7 +49,6 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos -import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API import com.lagradost.cloudstream3.utils.VideoDownloadHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -426,23 +425,29 @@ class HomeViewModel : ViewModel() { } private fun afterPluginsLoaded(forceReload: Boolean) { - loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), forceReload) + loadAndCancel(DataStoreHelper.currentHomePage, forceReload) } private fun afterMainPluginsLoaded(unused: Boolean = false) { - loadAndCancel(getKey(USER_SELECTED_HOMEPAGE_API), false) + loadAndCancel(DataStoreHelper.currentHomePage, false) + } + + private fun reloadHome(unused: Boolean = false) { + loadAndCancel(DataStoreHelper.currentHomePage, true) } init { MainActivity.bookmarksUpdatedEvent += ::bookmarksUpdated MainActivity.afterPluginsLoadedEvent += ::afterPluginsLoaded MainActivity.mainPluginsLoadedEvent += ::afterMainPluginsLoaded + MainActivity.reloadHomeEvent += ::reloadHome } override fun onCleared() { MainActivity.bookmarksUpdatedEvent -= ::bookmarksUpdated MainActivity.afterPluginsLoadedEvent -= ::afterPluginsLoaded MainActivity.mainPluginsLoadedEvent -= ::afterMainPluginsLoaded + MainActivity.reloadHomeEvent -= ::reloadHome super.onCleared() } @@ -495,7 +500,7 @@ class HomeViewModel : ViewModel() { val api = getApiFromNameNull(preferredApiName) if (preferredApiName == noneApi.name) { // just set to random - if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, noneApi.name) + if (fromUI) DataStoreHelper.currentHomePage = noneApi.name loadAndCancel(noneApi) } else if (preferredApiName == randomApi.name) { // randomize the api, if none exist like if not loaded or not installed @@ -506,7 +511,7 @@ class HomeViewModel : ViewModel() { } else { val apiRandom = validAPIs.random() loadAndCancel(apiRandom) - if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, apiRandom.name) + if (fromUI) DataStoreHelper.currentHomePage = apiRandom.name } } else if (api == null) { // API is not found aka not loaded or removed, post the loading @@ -520,7 +525,7 @@ class HomeViewModel : ViewModel() { } } else { // if the api is found, then set it to it and save key - if (fromUI) setKey(USER_SELECTED_HOMEPAGE_API, api.name) + if (fromUI) DataStoreHelper.currentHomePage = api.name loadAndCancel(api) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index be3de52b..c40d995b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -177,7 +177,7 @@ class ResultFragmentTv : Fragment() { isVisible = true } - this.animate().alpha(if (turnVisible) 1.0f else 0.0f).apply { + this.animate().alpha(if (turnVisible) 0.97f else 0.0f).apply { duration = 200 interpolator = DecelerateInterpolator() setListener(object : Animator.AnimatorListener { @@ -294,9 +294,9 @@ class ResultFragmentTv : Fragment() { toggleEpisodes(true) binding?.apply { val views = listOf( + resultDubSelection, resultSeasonSelection, resultRangeSelection, - resultDubSelection, resultEpisodes, resultPlayTrailer, ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index b398b54e..6acf476a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -518,7 +518,8 @@ class ResultViewModel2 : ViewModel() { val episodeNumber = episodes[currentIndex].episode if (episodeNumber < currentMin) { currentMin = episodeNumber - } else if (episodeNumber > currentMax) { + } + if (episodeNumber > currentMax) { currentMax = episodeNumber } ++currentIndex diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index 0bef5e9a..7e57fc5b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -14,7 +14,7 @@ import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard @@ -96,7 +96,7 @@ class SettingsProviders : PreferenceFragmentCompat() { this.getString(R.string.prefer_media_type_key), selectedList.map { it.toString() }.toMutableSet() ).apply() - removeKey(USER_SELECTED_HOMEPAGE_API) + DataStoreHelper.currentHomePage = null //(context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt index 6916cafe..f9197213 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt @@ -15,8 +15,8 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar -import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API class SetupFragmentMedia : Fragment() { @@ -77,7 +77,7 @@ class SetupFragmentMedia : Fragment() { .apply() // Regenerate set homepage - removeKey(USER_SELECTED_HOMEPAGE_API) + DataStoreHelper.currentHomePage = null } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 2eb2ab01..7bce1b6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -77,10 +77,28 @@ object DataStoreHelper { var selectedKeyIndex by PreferenceDelegate("$TAG/account_key_index", 0) val currentAccount: String get() = selectedKeyIndex.toString() - private fun setAccount(account: Account) { + /** + * Get or set the current account homepage. + * Setting this does not automatically reload the homepage. + */ + var currentHomePage: String? + get() = getKey("$currentAccount/$USER_SELECTED_HOMEPAGE_API") + set(value) { + val key = "$currentAccount/$USER_SELECTED_HOMEPAGE_API" + if (value == null) { + removeKey(key) + } else { + setKey(key, value) + } + } + + private fun setAccount(account: Account, refreshHomePage: Boolean) { selectedKeyIndex = account.keyIndex showToast(account.name) MainActivity.bookmarksUpdatedEvent(true) + if (refreshHomePage) { + MainActivity.reloadHomeEvent(true) + } } private fun editAccount(context: Context, account: Account, isNewAccount: Boolean) { @@ -112,7 +130,7 @@ object DataStoreHelper { accounts = currentAccounts.toTypedArray() // update UI - setAccount(getDefaultAccount(context)) + setAccount(getDefaultAccount(context), true) MainActivity.bookmarksUpdatedEvent(true) dialog?.dismissSafe() } @@ -161,8 +179,13 @@ object DataStoreHelper { currentAccounts.add(currentEditAccount) } + // Save the current homepage for new accounts + val currentHomePage = DataStoreHelper.currentHomePage + // set the new default account as well as add the key for the new account - setAccount(currentEditAccount) + setAccount(currentEditAccount, false) + DataStoreHelper.currentHomePage = currentHomePage + accounts = currentAccounts.toTypedArray() dialog.dismissSafe() @@ -204,7 +227,7 @@ object DataStoreHelper { ) binding.profilesRecyclerview.adapter = WhoIsWatchingAdapter( selectCallBack = { account -> - setAccount(account) + setAccount(account, true) builder.dismissSafe() }, addAccountCallback = { @@ -353,7 +376,7 @@ object DataStoreHelper { removeKeys(folder2) } - fun deleteBookmarkedData(id : Int?) { + fun deleteBookmarkedData(id: Int?) { if (id == null) return removeKey("$currentAccount/$RESULT_WATCH_STATE", id.toString()) removeKey("$currentAccount/$RESULT_WATCH_STATE_DATA", id.toString()) diff --git a/app/src/main/res/drawable/episodes_shadow.xml b/app/src/main/res/drawable/episodes_shadow.xml index b4cdd382..a77cbf25 100644 --- a/app/src/main/res/drawable/episodes_shadow.xml +++ b/app/src/main/res/drawable/episodes_shadow.xml @@ -1,6 +1,8 @@ + android:centerColor="?attr/primaryBlackBackground" + android:centerX="0.2" + android:endColor="?attr/primaryBlackBackground" + android:startColor="@color/transparent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 4d236d78..a143fbda 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -535,129 +535,150 @@ https://developer.android.com/design/ui/tv/samples/jet-fit - - - - - - - - - - - - - + tools:visibility="visible"> - + - style="@style/Widget.AppCompat.ProgressBar" - android:layout_gravity="center" - android:layout_width="50dp" - android:layout_height="50dp" />--> + + - - - - + android:focusableInTouchMode="false" + android:importantForAccessibility="no" + android:src="@drawable/episodes_shadow" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="@+id/shadow_space_2" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + + + - Date: Sun, 17 Sep 2023 20:35:01 +0200 Subject: [PATCH 550/888] fix --- .../ui/player/PlayerGeneratorViewModel.kt | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index 42659f8d..3179cb9f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.launchSafe +import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.safeApiCall import com.lagradost.cloudstream3.ui.result.ResultEpisode @@ -15,6 +16,7 @@ import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorUri import kotlinx.coroutines.Job +import kotlinx.coroutines.launch class PlayerGeneratorViewModel : ViewModel() { companion object { @@ -38,6 +40,11 @@ class PlayerGeneratorViewModel : ViewModel() { private val _currentSubtitleYear = MutableLiveData(null) val currentSubtitleYear: LiveData = _currentSubtitleYear + /** + * Save the Episode ID to prevent starting multiple link loading Jobs when preloading links. + */ + private var currentLoadingEpisodeId: Int? = null + fun setSubtitleYear(year: Int?) { _currentSubtitleYear.postValue(year) } @@ -72,18 +79,32 @@ class PlayerGeneratorViewModel : ViewModel() { } fun preLoadNextLinks() { + val id = getId() + // Do not preload if already loading + if (id == currentLoadingEpisodeId) return + Log.i(TAG, "preLoadNextLinks") currentJob?.cancel() - currentJob = viewModelScope.launchSafe { - if (generator?.hasCache == true && generator?.hasNext() == true) { - safeApiCall { - generator?.generateLinks( - type = LoadType.InApp, - clearCache = false, - callback = {}, - subtitleCallback = {}, - offset = 1 - ) + currentLoadingEpisodeId = id + + currentJob = viewModelScope.launch { + try { + if (generator?.hasCache == true && generator?.hasNext() == true) { + safeApiCall { + generator?.generateLinks( + type = LoadType.InApp, + clearCache = false, + callback = {}, + subtitleCallback = {}, + offset = 1 + ) + } + } + } catch (t: Throwable) { + logError(t) + } finally { + if (currentLoadingEpisodeId == id) { + currentLoadingEpisodeId = null } } } @@ -162,14 +183,14 @@ class PlayerGeneratorViewModel : ViewModel() { // load more data _loadingLinks.postValue(Resource.Loading()) val loadingState = safeApiCall { - generator?.generateLinks(type = type,clearCache = clearCache, callback = { + generator?.generateLinks(type = type, clearCache = clearCache, callback = { currentLinks.add(it) // Clone to prevent ConcurrentModificationException normalSafeApiCall { // Extra normalSafeApiCall since .toSet() iterates. _currentLinks.postValue(currentLinks.toSet()) } - }, subtitleCallback = { + }, subtitleCallback = { currentSubs.add(it) normalSafeApiCall { _currentSubs.postValue(currentSubs.toSet()) From 0d2a19b350021427922d7419f485ef1c46550366 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sun, 17 Sep 2023 20:38:59 +0200 Subject: [PATCH 551/888] bump --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 66ba16c6..ca99894d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -58,8 +58,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 60 - versionName = "4.1.9" + versionCode = 61 + versionName = "4.1.10" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") From 2ae5b6cefbaa85fffaa12838a87d5623e15e73ca Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 18 Sep 2023 22:28:26 +0200 Subject: [PATCH 552/888] fixed the fucking updater :skull: --- app/build.gradle.kts | 4 ++-- .../lagradost/cloudstream3/utils/InAppUpdater.kt | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ca99894d..0f815f8b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -58,8 +58,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 61 - versionName = "4.1.10" + versionCode = 62 + versionName = "4.2.0" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index b2c4aa5c..0dce0b2a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -109,18 +109,19 @@ class InAppUpdater { releases.sortedWith(compareBy { versionRegex.find(it.name)?.groupValues?.get(2) }).toList().lastOrNull()*/ - val found = + val foundList = response.filter { rel -> !rel.prerelease }.sortedWith(compareBy { release -> - release.assets.filter { it.content_type == "application/vnd.android.package-archive" } - .getOrNull(0)?.name?.let { it1 -> + release.assets.firstOrNull { it.content_type == "application/vnd.android.package-archive" }?.name?.let { it1 -> versionRegex.find( it1 - )?.groupValues?.get(2) + )?.groupValues?.let { + it[3].toInt() * 100_000_000 + it[4].toInt() * 10_000 + it[5].toInt() + } } - }).toList().lastOrNull() - + }).toList() + val found = foundList.lastOrNull() val foundAsset = found?.assets?.getOrNull(0) val currentVersion = packageName?.let { packageManager.getPackageInfo( From 15333123cd298357baf85fa2c5f044ada60481d6 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Mon, 18 Sep 2023 21:22:39 +0000 Subject: [PATCH 553/888] TV UI fixes (#612) * TV UI fixes --- .../cloudstream3/ui/result/ActorAdaptor.kt | 26 +++++++++++--- .../ui/result/ResultFragmentTv.kt | 35 +++++++++++++------ .../ui/settings/SettingsFragment.kt | 5 +++ .../main/res/layout/fragment_search_tv.xml | 2 +- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index 531cb5d2..7b743388 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -3,6 +3,8 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.IdRes +import androidx.annotation.LayoutRes import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView @@ -12,7 +14,10 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.CastItemBinding import com.lagradost.cloudstream3.utils.UIHelper.setImage -class ActorAdaptor(private val focusCallback : (View?) -> Unit = {}) : RecyclerView.Adapter() { +class ActorAdaptor( + private var nextFocusUpId: Int? = null, + private val focusCallback: (View?) -> Unit = {} +) : RecyclerView.Adapter() { data class ActorMetaData( var isInverted: Boolean, val actor: ActorData, @@ -22,7 +27,8 @@ class ActorAdaptor(private val focusCallback : (View?) -> Unit = {}) : RecyclerV override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( - CastItemBinding.inflate(LayoutInflater.from(parent.context), parent, false), focusCallback + CastItemBinding.inflate(LayoutInflater.from(parent.context), parent, false), + focusCallback ) } @@ -64,10 +70,10 @@ class ActorAdaptor(private val focusCallback : (View?) -> Unit = {}) : RecyclerV } } - private class CardViewHolder + private inner class CardViewHolder constructor( val binding: CastItemBinding, - private val focusCallback : (View?) -> Unit = {} + private val focusCallback: (View?) -> Unit = {} ) : RecyclerView.ViewHolder(binding.root) { @@ -78,8 +84,18 @@ class ActorAdaptor(private val focusCallback : (View?) -> Unit = {}) : RecyclerV Pair(actor.voiceActor?.image, actor.actor.image) } + // Fix tv focus escaping the recyclerview + if (position == 0) { + itemView.nextFocusLeftId = R.id.result_cast_items + } else if ((position - 1) == itemCount) { + itemView.nextFocusRightId = R.id.result_cast_items + } + nextFocusUpId?.let { + itemView.nextFocusUpId = it + } + itemView.setOnFocusChangeListener { v, hasFocus -> - if(hasFocus) { + if (hasFocus) { focusCallback(v) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index c40d995b..4503cb88 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -114,10 +114,20 @@ class ResultFragmentTv : Fragment() { } } - private fun hasNoFocus(): Boolean { - val focus = activity?.currentFocus - if (focus == null || !focus.isVisible) return true - return focus == binding?.resultRoot +// private fun hasNoFocus(): Boolean { +// val focus = activity?.currentFocus +// if (focus == null || !focus.isVisible) return true +// return focus == binding?.resultRoot +// } + + /** + * Force focus any play button. + * Note that this will steal any focus if the episode loading is too slow (unlikely). + */ + private fun focusPlayButton() { + binding?.resultPlayMovie?.requestFocus() + binding?.resultPlaySeries?.requestFocus() + binding?.resultResumeSeries?.requestFocus() } private fun setRecommendations(rec: List?, validApiName: String?) { @@ -413,7 +423,13 @@ class ResultFragmentTv : Fragment() { setHorizontal() } - resultCastItems.adapter = ActorAdaptor { + val aboveCast = listOf( + binding?.resultEpisodesShow, + binding?.resultBookmarkButton, + ).firstOrNull { + it?.isVisible == true + } + resultCastItems.adapter = ActorAdaptor(aboveCast?.id) { toggleEpisodes(false) } } @@ -454,9 +470,7 @@ class ResultFragmentTv : Fragment() { resultPlaySeries.isVisible = false resultResumeSeries.isVisible = true - if (hasNoFocus()) { - resultResumeSeries.requestFocus() - } + focusPlayButton() resultResumeSeries.text = if (resume.isMovie) context?.getString(R.string.play_movie_button) else context?.getNameFull( @@ -539,9 +553,7 @@ class ResultFragmentTv : Fragment() { ) return@setOnLongClickListener true } - if (hasNoFocus()) { - resultPlayMovie.requestFocus() - } + focusPlayButton() } } } @@ -663,6 +675,7 @@ class ResultFragmentTv : Fragment() { ) return@setOnLongClickListener true } + focusPlayButton() } /* diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index e53fa91a..4895b0d2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -205,6 +205,11 @@ class SettingsFragment : Fragment() { } } } + + // Default focus on TV + if (isTrueTv) { + settingsGeneral.requestFocus() + } } } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search_tv.xml b/app/src/main/res/layout/fragment_search_tv.xml index 4c4af404..5fec8c6a 100644 --- a/app/src/main/res/layout/fragment_search_tv.xml +++ b/app/src/main/res/layout/fragment_search_tv.xml @@ -99,7 +99,7 @@ android:id="@+id/search_autofit_results" android:layout_width="match_parent" android:layout_height="match_parent" - + android:layout_marginStart="@dimen/navbar_width" android:background="?attr/primaryBlackBackground" android:clipToPadding="false" android:descendantFocusability="afterDescendants" From 527a6388a96a4fa961e1544e6b54acdf6a6f5ee5 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:46:23 +0200 Subject: [PATCH 554/888] small fix --- .../lagradost/cloudstream3/ui/result/ResultFragmentTv.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 4503cb88..7c784a43 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -648,6 +648,9 @@ class ResultFragmentTv : Fragment() { .show() } } + + // Used to request focus the first time the episodes are loaded. + var hasLoadedEpisodesOnce = false observeNullable(viewModel.episodes) { episodes -> binding?.apply { resultEpisodes.isVisible = episodes is Resource.Success @@ -675,7 +678,10 @@ class ResultFragmentTv : Fragment() { ) return@setOnLongClickListener true } - focusPlayButton() + if (!hasLoadedEpisodesOnce) { + hasLoadedEpisodesOnce = true + focusPlayButton() + } } /* From d4fff7cee67d8f7b5e610caf98c5d1816cabac83 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Thu, 21 Sep 2023 20:50:31 +0000 Subject: [PATCH 555/888] Add homepage search on TV (#618) * Add search button on homepage for TV --- .../lagradost/cloudstream3/MainActivity.kt | 1 + .../ui/home/HomeParentItemAdapterPreview.kt | 5 ++++ .../ui/quicksearch/QuickSearchFragment.kt | 5 ++++ app/src/main/res/layout/fragment_home.xml | 16 +++++++++++++ .../main/res/layout/fragment_home_head_tv.xml | 20 ++++++++++++++-- app/src/main/res/layout/fragment_home_tv.xml | 24 +++++++++++++++++-- 6 files changed, 67 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 263a40f0..627893c3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -497,6 +497,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { R.id.navigation_results_phone, R.id.navigation_results_tv, R.id.navigation_player, + R.id.navigation_quick_search, ).contains(destination.id) binding?.navHostFragment?.apply { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 1d8e1399..d7956f39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -461,6 +461,11 @@ class HomeParentItemAdapterPreview( } } + homePreviewSearchButton.setOnClickListener { _ -> + // Open blank screen. + viewModel.queryTextSubmit("") + } + // This makes the hidden next buttons only available when on the info button // Otherwise you might be able to go to the next item without being at the info button homePreviewInfoBtt.setOnFocusChangeListener { _, hasFocus -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt index 89a09ae2..53c7c2fa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt @@ -33,6 +33,7 @@ import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.ui.search.SearchViewModel +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.utils.AppUtils.ownShow import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar @@ -269,6 +270,10 @@ class QuickSearchFragment : Fragment() { activity?.popCurrentPage() } + if (isTrueTvSettings()) { + binding?.quickSearch?.requestFocus() + } + arguments?.getString(AUTOSEARCH_KEY)?.let { binding?.quickSearch?.setQuery(it, true) arguments?.remove(AUTOSEARCH_KEY) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index ac660ccd..36cb5f42 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -114,6 +114,22 @@ android:nextFocusRight="@id/home_switch_account" /> + + + + + android:nextFocusRight="@id/home_preview_search_button" + android:nextFocusDown="@id/home_preview_play_btt" /> + + Date: Mon, 25 Sep 2023 09:40:58 +0000 Subject: [PATCH 556/888] Fix episode layout when using RTL language (#631) * Fix episode layout when using RTL language --- .../lagradost/cloudstream3/ui/result/ResultFragmentTv.kt | 6 ++---- app/src/main/res/layout/fragment_result_tv.xml | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 7c784a43..5e4869cc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -216,11 +216,9 @@ class ResultFragmentTv : Fragment() { episodesShadow.fade(show) episodeHolderTv.fade(show) if (episodesShadow.isRtl()) { - episodesShadow.scaleX = -1.0f - episodesShadow.scaleY = -1.0f + episodesShadowBackground.scaleX = -1f } else { - episodesShadow.scaleX = 1.0f - episodesShadow.scaleY = 1.0f + episodesShadowBackground.scaleX = 1f } } } diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index a143fbda..feaf6fbc 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -572,6 +572,7 @@ https://developer.android.com/design/ui/tv/samples/jet-fit app:layout_constraintTop_toTopOf="@+id/shadow_space_1" /> Date: Mon, 25 Sep 2023 17:18:05 +0530 Subject: [PATCH 557/888] refactor: speedostream and newpipe, tmdb update (#632) * migrate speedostream (yomovies) * update tmdb and newpipe --- app/build.gradle.kts | 14 ++++++-------- .../{SpeedoStream.kt => Minoplres.kt} | 17 ++++------------- .../cloudstream3/utils/ExtractorApi.kt | 8 ++------ 3 files changed, 12 insertions(+), 27 deletions(-) rename app/src/main/java/com/lagradost/cloudstream3/extractors/{SpeedoStream.kt => Minoplres.kt} (74%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0f815f8b..f13095fb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -171,7 +171,7 @@ dependencies { androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.test:core") - //implementation("io.karn:khttp-android:0.1.2") //okhttp instead + // implementation("io.karn:khttp-android:0.1.2") //okhttp instead // implementation("org.jsoup:jsoup:1.13.1") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") @@ -199,8 +199,6 @@ dependencies { // Custom ffmpeg extension for audio codecs implementation("com.github.recloudstream:media-ffmpeg:1.1.0") - //implementation("com.google.android.exoplayer:extension-leanback:2.14.0") - // Bug reports implementation("ch.acra:acra-core:5.11.0") implementation("ch.acra:acra-toast:5.11.0") @@ -214,13 +212,13 @@ dependencies { // subtitle color picker implementation("com.jaredrummler:colorpicker:1.1.0") - //run JS + // run JS // do not upgrade to 1.7.14, since in 1.7.14 Rhino uses the `SourceVersion` class, which is not // available on Android (even when using desugaring), and `NoClassDefFoundError` is thrown implementation("org.mozilla:rhino:1.7.13") // TorrentStream - //implementation("com.github.TorrentStream:TorrentStream-Android:2.7.0") + // implementation("com.github.TorrentStream:TorrentStream-Android:2.7.0") // Downloading implementation("androidx.work:work-runtime:2.8.1") @@ -236,11 +234,11 @@ dependencies { implementation("com.github.LagradOst:SafeFile:0.0.5") // API because cba maintaining it myself - implementation("com.uwetrottmann.tmdb2:tmdb-java:2.6.0") + implementation("com.uwetrottmann.tmdb2:tmdb-java:2.10.0") implementation("com.github.discord:OverlappingPanels:0.1.5") // debugImplementation because LeakCanary should only run in debug builds. - //debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12") + // debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12") // for shimmer when loading implementation("com.facebook.shimmer:shimmer:0.5.0") @@ -252,7 +250,7 @@ dependencies { // newpipe yt taken from https://github.com/TeamNewPipe/NewPipeExtractor/commits/dev // this should be updated frequently to avoid trailer fu*kery - implementation("com.github.teamnewpipe:NewPipeExtractor:1f08d28") + implementation("com.github.teamnewpipe:NewPipeExtractor:917554a") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Minoplres.kt similarity index 74% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt rename to app/src/main/java/com/lagradost/cloudstream3/extractors/Minoplres.kt index 213ecdf3..702501a1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SpeedoStream.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Minoplres.kt @@ -7,21 +7,12 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper -class SpeedoStream2 : SpeedoStream() { - override val mainUrl = "https://speedostream.mom" -} +open class Minoplres : ExtractorApi() { -class SpeedoStream1 : SpeedoStream() { - override val mainUrl = "https://speedostream.pm" -} - -open class SpeedoStream : ExtractorApi() { - override val name = "SpeedoStream" - override val mainUrl = "https://speedostream.bond" + override val name = "Minoplres" // formerly SpeedoStream override val requiresReferer = true - - // .bond, .pm, .mom redirect to .bond - private val hostUrl = "https://speedostream.bond" + override val mainUrl = "https://minoplres.xyz" // formerly speedostream.bond + private val hostUrl = "https://minoplres.xyz" override suspend fun getUrl(url: String, referer: String?): List { val sources = mutableListOf() 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 5edff7a1..9db62dc8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -82,6 +82,7 @@ import com.lagradost.cloudstream3.extractors.Maxstream import com.lagradost.cloudstream3.extractors.Mcloud import com.lagradost.cloudstream3.extractors.Megacloud import com.lagradost.cloudstream3.extractors.Meownime +import com.lagradost.cloudstream3.extractors.Minoplres import com.lagradost.cloudstream3.extractors.MixDrop import com.lagradost.cloudstream3.extractors.MixDropBz import com.lagradost.cloudstream3.extractors.MixDropCh @@ -118,9 +119,6 @@ import com.lagradost.cloudstream3.extractors.Sbthe import com.lagradost.cloudstream3.extractors.Sendvid import com.lagradost.cloudstream3.extractors.ShaveTape import com.lagradost.cloudstream3.extractors.Solidfiles -import com.lagradost.cloudstream3.extractors.SpeedoStream -import com.lagradost.cloudstream3.extractors.SpeedoStream1 -import com.lagradost.cloudstream3.extractors.SpeedoStream2 import com.lagradost.cloudstream3.extractors.Ssbstream import com.lagradost.cloudstream3.extractors.StreamM4u import com.lagradost.cloudstream3.extractors.StreamSB @@ -748,9 +746,7 @@ val extractorApis: MutableList = arrayListOf( Vido(), Linkbox(), Acefile(), - SpeedoStream(), - SpeedoStream1(), - SpeedoStream2(), + Minoplres(), // formerly SpeedoStream Zorofile(), Embedgram(), Mvidoo(), From 74060e7da32e0f8af23051149b383c92a6b1efb2 Mon Sep 17 00:00:00 2001 From: Sofie <117321707+Sofie99@users.noreply.github.com> Date: Mon, 25 Sep 2023 18:48:35 +0700 Subject: [PATCH 558/888] Chillx: fix key (#628) --- .../main/java/com/lagradost/cloudstream3/extractors/Chillx.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt index bcf8848c..a9fafc39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -29,7 +29,7 @@ open class Chillx : ExtractorApi() { override val requiresReferer = true companion object { - private const val KEY = "m4H6D9%0\$N&F6rQ&" + private const val KEY = "eN0^>\$^#M08uFv%c" } override suspend fun getUrl( From 0351053d809ef9e86c5faabf29702c2c50d9409c Mon Sep 17 00:00:00 2001 From: Osten <11805592+LagradOst@users.noreply.github.com> Date: Mon, 25 Sep 2023 22:57:18 +0200 Subject: [PATCH 559/888] Readded downloads to tv --- app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 627893c3..d5187029 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -547,8 +547,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv // Hide downloads on TV - navView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv - navRailView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv + //navView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv + //navRailView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv } } From 194678c419343cc8c441bf7946906b039d6e47a6 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 28 Sep 2023 13:21:03 +0300 Subject: [PATCH 560/888] Player Source & Subs navigation change (#633) --- app/src/main/res/layout/player_select_source_and_subs.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/player_select_source_and_subs.xml b/app/src/main/res/layout/player_select_source_and_subs.xml index 7351a41f..f5eab1e7 100644 --- a/app/src/main/res/layout/player_select_source_and_subs.xml +++ b/app/src/main/res/layout/player_select_source_and_subs.xml @@ -66,8 +66,8 @@ android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_forced" - android:nextFocusLeft="@id/sort_subtitles" - android:nextFocusRight="@id/apply_btt" + android:nextFocusRight="@id/sort_subtitles" + android:nextFocusDown="@id/apply_btt" android:requiresFadingEdge="vertical" tools:layout_height="100dp" tools:listitem="@layout/sort_bottom_single_choice" /> @@ -140,7 +140,8 @@ android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_forced" android:nextFocusLeft="@id/sort_providers" - android:nextFocusRight="@id/cancel_btt" + android:nextFocusRight="@id/apply_btt" + android:nextFocusDown="@id/apply_btt" android:requiresFadingEdge="vertical" tools:layout_height="200dp" tools:listfooter="@layout/sort_bottom_footer_add_choice" From 16c2290090a1becb4edab44bf85a54837d6007f0 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 28 Sep 2023 13:22:51 +0300 Subject: [PATCH 561/888] Amazon FireTV focus fixes (#635) * Fix quick search button focus * Switch profile button focus * Cast & Recommendations focus * Player: Profiles settings focus * Player: Subtitles encoding settings focus * profile selection: card item focus * Search history item selectable & deleteable * Search: search filter button next focus fix --- app/src/main/res/layout/cast_item.xml | 2 +- app/src/main/res/layout/fragment_home_head_tv.xml | 2 ++ app/src/main/res/layout/fragment_search_tv.xml | 2 +- app/src/main/res/layout/player_quality_profile_item.xml | 1 + app/src/main/res/layout/player_select_source_and_subs.xml | 4 ++++ app/src/main/res/layout/search_history_item.xml | 4 ++-- 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/layout/cast_item.xml b/app/src/main/res/layout/cast_item.xml index 54df59a8..c09cecfa 100644 --- a/app/src/main/res/layout/cast_item.xml +++ b/app/src/main/res/layout/cast_item.xml @@ -34,7 +34,7 @@ android:id="@+id/actor_image" android:layout_width="match_parent" - + android:focusable="true" android:layout_height="match_parent" android:contentDescription="@string/episode_poster_img_des" android:scaleType="centerCrop" diff --git a/app/src/main/res/layout/fragment_home_head_tv.xml b/app/src/main/res/layout/fragment_home_head_tv.xml index f9ea6974..05cb3a41 100644 --- a/app/src/main/res/layout/fragment_home_head_tv.xml +++ b/app/src/main/res/layout/fragment_home_head_tv.xml @@ -55,6 +55,7 @@ android:layout_gravity="end" android:background="@drawable/player_button_tv_attr_no_bg" android:contentDescription="@string/search" + android:focusable="true" android:nextFocusLeft="@id/home_preview_change_api" android:nextFocusRight="@id/home_preview_switch_account" android:nextFocusDown="@id/home_preview_info_btt" @@ -70,6 +71,7 @@ android:layout_gravity="end" android:background="@drawable/player_button_tv_attr_no_bg" android:contentDescription="@string/account" + android:focusable="true" android:nextFocusLeft="@id/home_preview_search_button" android:nextFocusRight="@id/home_preview_switch_account" android:nextFocusDown="@id/home_preview_info_btt" diff --git a/app/src/main/res/layout/fragment_search_tv.xml b/app/src/main/res/layout/fragment_search_tv.xml index 5fec8c6a..b3f88cd2 100644 --- a/app/src/main/res/layout/fragment_search_tv.xml +++ b/app/src/main/res/layout/fragment_search_tv.xml @@ -84,7 +84,7 @@ android:nextFocusLeft="@id/main_search" android:nextFocusRight="@id/main_search" android:nextFocusUp="@id/nav_rail_view" - android:nextFocusDown="@id/search_autofit_results" + android:nextFocusDown="@id/tvtypes_chips_scroll" android:src="@drawable/ic_baseline_tune_24" app:tint="?attr/textColor" /> diff --git a/app/src/main/res/layout/player_quality_profile_item.xml b/app/src/main/res/layout/player_quality_profile_item.xml index 0eab2407..5178a12f 100644 --- a/app/src/main/res/layout/player_quality_profile_item.xml +++ b/app/src/main/res/layout/player_quality_profile_item.xml @@ -10,6 +10,7 @@ android:id="@+id/card_view" android:layout_width="0dp" android:layout_height="0dp" + android:focusable="true" app:layout_constraintDimensionRatio="1" android:layout_marginStart="10dp" android:animateLayoutChanges="true" diff --git a/app/src/main/res/layout/player_select_source_and_subs.xml b/app/src/main/res/layout/player_select_source_and_subs.xml index f5eab1e7..6bf8006b 100644 --- a/app/src/main/res/layout/player_select_source_and_subs.xml +++ b/app/src/main/res/layout/player_select_source_and_subs.xml @@ -27,6 +27,7 @@ android:layout_height="wrap_content" android:layout_rowWeight="1" android:layout_marginTop="10dp" + android:focusable="true" android:foreground="@drawable/outline_drawable_forced" android:gravity="center_vertical" android:orientation="horizontal"> @@ -66,6 +67,7 @@ android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_forced" + android:nextFocusUp="@id/profiles_click_settings" android:nextFocusRight="@id/sort_subtitles" android:nextFocusDown="@id/apply_btt" android:requiresFadingEdge="vertical" @@ -94,6 +96,7 @@ android:layout_height="wrap_content" android:layout_rowWeight="1" android:layout_marginTop="10dp" + android:focusable="true" android:foreground="@drawable/outline_drawable_forced" android:orientation="horizontal" android:paddingTop="10dp" @@ -139,6 +142,7 @@ android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_forced" + android:nextFocusUp="@id/subtitles_click_settings" android:nextFocusLeft="@id/sort_providers" android:nextFocusRight="@id/apply_btt" android:nextFocusDown="@id/apply_btt" diff --git a/app/src/main/res/layout/search_history_item.xml b/app/src/main/res/layout/search_history_item.xml index 3e9ee833..4c50d0c0 100644 --- a/app/src/main/res/layout/search_history_item.xml +++ b/app/src/main/res/layout/search_history_item.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/outline_drawable_less" - + android:focusable="true" android:nextFocusRight="@id/home_history_remove" android:orientation="horizontal"> diff --git a/app/src/main/res/layout/player_select_source_priority.xml b/app/src/main/res/layout/player_select_source_priority.xml index 86a8a756..2af3c339 100644 --- a/app/src/main/res/layout/player_select_source_priority.xml +++ b/app/src/main/res/layout/player_select_source_priority.xml @@ -42,8 +42,8 @@ android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_less" - android:nextFocusLeft="@id/sort_subtitles" - android:nextFocusRight="@id/apply_btt" + android:nextFocusRight="@id/sort_subtitles" + android:nextFocusDown="@id/profile_text_editable" android:requiresFadingEdge="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:layout_height="100dp" @@ -92,6 +92,8 @@ android:layout_height="50dp" android:background="?attr/selectableItemBackgroundBorderless" android:padding="12dp" + android:focusable="true" + android:nextFocusLeft="@id/sort_sources" android:src="@drawable/baseline_help_outline_24" android:contentDescription="@string/help" /> @@ -115,8 +117,10 @@ android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" android:listSelector="@drawable/outline_drawable_less" - android:nextFocusLeft="@id/sort_providers" - android:nextFocusRight="@id/cancel_btt" + android:nextFocusLeft="@id/sort_sources" + android:nextFocusRight="@id/apply_btt" + android:nextFocusUp="@id/help_btt" + android:nextFocusDown="@id/apply_btt" android:requiresFadingEdge="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:layout_height="200dp" diff --git a/app/src/main/res/layout/subtitle_offset.xml b/app/src/main/res/layout/subtitle_offset.xml index a98fafef..c17c5eff 100644 --- a/app/src/main/res/layout/subtitle_offset.xml +++ b/app/src/main/res/layout/subtitle_offset.xml @@ -35,6 +35,7 @@ android:layout_gravity="center" android:layout_weight="1" android:background="?android:attr/selectableItemBackgroundBorderless" + android:focusable="true" android:nextFocusRight="@id/subtitle_offset_subtract" android:padding="10dp" android:src="@drawable/ic_baseline_keyboard_arrow_left_24" @@ -48,6 +49,7 @@ android:layout_gravity="center" android:layout_weight="1" android:background="?android:attr/selectableItemBackgroundBorderless" + android:focusable="true" android:nextFocusLeft="@id/subtitle_offset_subtract_more" android:padding="10dp" android:src="@drawable/baseline_remove_24" @@ -70,6 +72,7 @@ android:layout_gravity="center" android:layout_weight="1" android:background="?android:attr/selectableItemBackgroundBorderless" + android:focusable="true" android:nextFocusRight="@id/subtitle_offset_add_more" android:padding="10dp" android:src="@drawable/ic_baseline_add_24" @@ -83,7 +86,9 @@ android:layout_gravity="center" android:layout_weight="1" android:background="?android:attr/selectableItemBackgroundBorderless" + android:focusable="true" android:nextFocusLeft="@id/subtitle_offset_add" + android:nextFocusDown="@id/apply_btt" android:padding="10dp" android:src="@drawable/ic_baseline_keyboard_arrow_right_24" app:tint="?attr/white" diff --git a/app/src/main/res/layout/who_is_watching_account.xml b/app/src/main/res/layout/who_is_watching_account.xml index afa1a2a7..4970d004 100644 --- a/app/src/main/res/layout/who_is_watching_account.xml +++ b/app/src/main/res/layout/who_is_watching_account.xml @@ -11,6 +11,7 @@ android:foreground="?attr/selectableItemBackgroundBorderless" app:cardCornerRadius="@dimen/rounded_image_radius" android:layout_margin="5dp" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="1" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/who_is_watching_account_add.xml b/app/src/main/res/layout/who_is_watching_account_add.xml index ed67e144..91c7e419 100644 --- a/app/src/main/res/layout/who_is_watching_account_add.xml +++ b/app/src/main/res/layout/who_is_watching_account_add.xml @@ -11,6 +11,7 @@ android:foreground="?attr/selectableItemBackgroundBorderless" app:cardCornerRadius="@dimen/rounded_image_radius" android:layout_margin="5dp" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="1" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/who_is_watching_account_edit.xml b/app/src/main/res/layout/who_is_watching_account_edit.xml index 74553517..cec37a4f 100644 --- a/app/src/main/res/layout/who_is_watching_account_edit.xml +++ b/app/src/main/res/layout/who_is_watching_account_edit.xml @@ -88,6 +88,7 @@ android:layout_width="match_parent" android:layout_height="60dp" android:layout_gravity="center" + android:focusable="true" android:contentDescription="@string/preview_background_img_des" android:scaleType="centerCrop" android:src="@drawable/profile_bg_blue" /> From bd05a67f260263f1e4d49580cd40fc587b354fd0 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Mon, 2 Oct 2023 17:44:06 +0200 Subject: [PATCH 563/888] preview seekbar --- app/build.gradle.kts | 2 + .../ui/player/AbstractPlayerFragment.kt | 42 ++++- .../cloudstream3/ui/player/CS3IPlayer.kt | 53 ++++++- .../cloudstream3/ui/player/GeneratorPlayer.kt | 1 + .../cloudstream3/ui/player/IPlayer.kt | 7 +- .../ui/player/PreviewGenerator.kt | 147 ++++++++++++++++++ .../ui/result/ResultFragmentPhone.kt | 3 +- app/src/main/res/drawable/video_frame.xml | 10 ++ .../main/res/layout/player_custom_layout.xml | 63 ++++++-- .../res/layout/player_custom_layout_tv.xml | 62 ++++++-- .../main/res/layout/trailer_custom_layout.xml | 78 +++++++--- app/src/main/res/values/dimens.xml | 2 +- 12 files changed, 413 insertions(+), 57 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt create mode 100644 app/src/main/res/drawable/video_frame.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f13095fb..9f484c48 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -258,6 +258,8 @@ dependencies { // color palette for images -> colors implementation("androidx.palette:palette-ktx:1.0.0") + // seekbar https://github.com/rubensousa/PreviewSeekBar + implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") } tasks.register("androidSourcesJar", Jar::class) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 8388e58f..862504a1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -18,10 +18,9 @@ import android.widget.ProgressBar import android.widget.Toast import androidx.annotation.LayoutRes import androidx.annotation.StringRes +import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.Fragment -import androidx.preference.PreferenceManager -import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat import androidx.media3.common.PlaybackException import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession @@ -30,6 +29,10 @@ import androidx.media3.ui.DefaultTimeBar import androidx.media3.ui.PlayerView import androidx.media3.ui.SubtitleView import androidx.media3.ui.TimeBar +import androidx.preference.PreferenceManager +import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat +import com.github.rubensousa.previewseekbar.PreviewBar +import com.github.rubensousa.previewseekbar.media3.PreviewTimeBar import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.canEnterPipMode @@ -454,6 +457,41 @@ abstract class AbstractPlayerFragment( ) if (player is CS3IPlayer) { + // preview bar + val progressBar : PreviewTimeBar? = playerView?.findViewById(R.id.exo_progress) + val previewImageView : ImageView? = playerView?.findViewById(R.id.previewImageView) + val previewFrameLayout : FrameLayout? = playerView?.findViewById(R.id.previewFrameLayout) + if(progressBar != null && previewImageView != null && previewFrameLayout != null) { + var resume = false + progressBar.addOnScrubListener(object : PreviewBar.OnScrubListener { + override fun onScrubStart(previewBar: PreviewBar?) { + progressBar.isPreviewEnabled = player.hasPreview() + resume = player.getIsPlaying() + if (resume) player.handleEvent( + CSPlayerEvent.Pause, + PlayerEventSource.Player + ) + } + + override fun onScrubMove( + previewBar: PreviewBar?, + progress: Int, + fromUser: Boolean + ) { + } + + override fun onScrubStop(previewBar: PreviewBar?) { + if (resume) player.handleEvent(CSPlayerEvent.Play, PlayerEventSource.Player) + } + }) + progressBar.attachPreviewView(previewFrameLayout) + progressBar.setPreviewLoader { currentPosition, max -> + val bitmap = player.getPreview(currentPosition.toFloat().div(max.toFloat())) + previewImageView.isGone = bitmap == null + previewImageView.setImageBitmap(bitmap) + } + } + subView = playerView?.findViewById(R.id.exo_subtitles) subStyle = SubtitlesFragment.getCurrentSavedStyle() player.initSubtitles(subView, subtitleHolder, subStyle) 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 331cfb73..946743a3 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 @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.ui.player import android.annotation.SuppressLint import android.content.Context +import android.graphics.Bitmap import android.net.Uri import android.os.Handler import android.os.Looper @@ -88,7 +89,9 @@ class CS3IPlayer : IPlayer { private var exoPlayer: ExoPlayer? = null set(value) { // If the old value is not null then the player has not been properly released. - debugAssert({ field != null && value != null }, { "Previous player instance should be released!" }) + debugAssert( + { field != null && value != null }, + { "Previous player instance should be released!" }) field = value } @@ -96,6 +99,8 @@ class CS3IPlayer : IPlayer { var simpleCacheSize = 0L var videoBufferMs = 0L + private val imageGenerator = PreviewGenerator() + private val seekActionTime = 30000L private var ignoreSSL: Boolean = true @@ -182,6 +187,14 @@ class CS3IPlayer : IPlayer { subtitleHelper.initSubtitles(subView, subHolder, style) } + override fun getPreview(fraction: Float): Bitmap? { + return imageGenerator.getPreviewImage(fraction) + } + + override fun hasPreview(): Boolean { + return imageGenerator.hasPreview() + } + override fun loadPlayer( context: Context, sameEpisode: Boolean, @@ -190,7 +203,8 @@ class CS3IPlayer : IPlayer { startPosition: Long?, subtitles: Set, subtitle: SubtitleData?, - autoPlay: Boolean? + autoPlay: Boolean?, + preview : Boolean, ) { Log.i(TAG, "loadPlayer") if (sameEpisode) { @@ -210,9 +224,27 @@ class CS3IPlayer : IPlayer { // release the current exoplayer and cache releasePlayer() if (link != null) { + // only video support atm + if (link.type == ExtractorLinkType.VIDEO && preview) { + val headers = if (link.referer.isBlank()) { + link.headers + } else { + mapOf("referer" to link.referer) + link.headers + } + imageGenerator.load(sameEpisode, link.url, headers) + } else { + imageGenerator.clear(sameEpisode) + } loadOnlinePlayer(context, link) } else if (data != null) { + if (preview) { + imageGenerator.load(sameEpisode, context, data.uri) + } else { + imageGenerator.clear(sameEpisode) + } loadOfflinePlayer(context, data) + } else { + throw IllegalArgumentException("Requires link or uri") } } @@ -494,6 +526,7 @@ class CS3IPlayer : IPlayer { } override fun release() { + imageGenerator.release() releasePlayer() } @@ -871,8 +904,20 @@ class CS3IPlayer : IPlayer { CSPlayerEvent.SeekForward -> seekTime(seekActionTime, source) CSPlayerEvent.SeekBack -> seekTime(-seekActionTime, source) - CSPlayerEvent.NextEpisode -> event(EpisodeSeekEvent(offset = 1, source = source)) - CSPlayerEvent.PrevEpisode -> event(EpisodeSeekEvent(offset = -1, source = source)) + CSPlayerEvent.NextEpisode -> event( + EpisodeSeekEvent( + offset = 1, + source = source + ) + ) + + CSPlayerEvent.PrevEpisode -> event( + EpisodeSeekEvent( + offset = -1, + source = source + ) + ) + CSPlayerEvent.SkipCurrentChapter -> { //val dur = this@CS3IPlayer.getDuration() ?: return@apply getCurrentTimestamp()?.let { lastTimeStamp -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index b2542ffa..1c751897 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -180,6 +180,7 @@ class GeneratorPlayer : FullScreenPlayer() { (if (sameEpisode) currentSelectedSubtitles else null) ?: getAutoSelectSubtitle( currentSubs, settings = true, downloads = true ), + preview = isFullScreenPlayer ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index ec006234..a08360ae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.player import android.content.Context +import android.graphics.Bitmap import android.util.Rational import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.utils.EpisodeSkip @@ -246,11 +247,15 @@ interface IPlayer { startPosition: Long? = null, subtitles: Set, subtitle: SubtitleData?, - autoPlay: Boolean? = true + autoPlay: Boolean? = true, + preview : Boolean = true, ) fun reloadPlayer(context: Context) + fun getPreview(fraction : Float) : Bitmap? + fun hasPreview() : Boolean + fun setActiveSubtitles(subtitles: Set) fun setPreferredSubtitles(subtitle: SubtitleData?): Boolean // returns true if the player requires a reload, null for nothing fun getCurrentPreferredSubtitle(): SubtitleData? diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt new file mode 100644 index 00000000..0f47d009 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -0,0 +1,147 @@ +package com.lagradost.cloudstream3.ui.player + +import android.content.Context +import android.graphics.Bitmap +import android.media.MediaMetadataRetriever +import android.net.Uri +import android.util.Log +import androidx.annotation.WorkerThread +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.isActive +import kotlin.math.absoluteValue +import kotlin.math.ceil +import kotlin.math.log2 + +const val MAX_LOD = 6 +const val MIN_LOD = 3 + +class PreviewGenerator { + // lod = level of detail where the number indicates how many ones there is + // 2^(lod-1) = images + private var loadedLod = 0 + private var loadedImages = 0 + private var images = Array((1 shl MAX_LOD) - 1) { + null + } + + fun hasPreview(): Boolean { + synchronized(images) { + return loadedLod >= MIN_LOD + } + } + + val TAG = "PreviewImg" + + fun getPreviewImage(fraction: Float): Bitmap? { + synchronized(images) { + if (loadedLod < MIN_LOD) { + Log.i(TAG, "Requesting preview for $fraction but $loadedLod < $MIN_LOD") + return null + } + Log.i(TAG, "Requesting preview for $fraction") + + var bestIdx = 0 + var bestDiff = 0.5f.minus(fraction).absoluteValue + + // this should be done mathematically, but for now we just loop all images + for (l in 1..loadedLod + 1) { + val items = (1 shl (l - 1)) + for (i in 0 until items) { + val idx = items - 1 + i + if (idx > loadedImages) { + break + } + val currentFraction = + (1.0f.div((1 shl l).toFloat()) + i * 1.0f.div(items.toFloat())) + val diff = currentFraction.minus(fraction).absoluteValue + if (diff < bestDiff) { + bestDiff = diff + bestIdx = idx + } + } + } + Log.i(TAG, "Best diff found at ${bestDiff * 100}% diff (${bestIdx})") + return images[bestIdx] + } + } + + // also check out https://github.com/wseemann/FFmpegMediaMetadataRetriever + private val retriever: MediaMetadataRetriever = MediaMetadataRetriever() + + fun clear(keepCache: Boolean = false) { + if (keepCache) return + synchronized(images) { + loadedLod = 0 + loadedImages = 0 + images.fill(null) + } + } + + private var currentJob: Job? = null + fun load(keepCache: Boolean, url: String, headers: Map) { + currentJob?.cancel() + currentJob = ioSafe { + Log.i(TAG, "Loading with url = $url headers = $headers") + clear(keepCache) + retriever.setDataSource(url, headers) + start(this) + } + } + + fun load(keepCache: Boolean, context: Context, uri: Uri) { + currentJob?.cancel() + currentJob = ioSafe { + Log.i(TAG, "Loading with uri = $uri") + clear(keepCache) + retriever.setDataSource(context, uri) + start(this) + } + } + + fun release() { + currentJob?.cancel() + clear(false) + } + + @Throws + @WorkerThread + private fun start(scope: CoroutineScope) { + Log.i(TAG, "Started loading preview") + + val durationMs = + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toLong() + ?: throw IllegalArgumentException("Bad video duration") + val durationUs = (durationMs * 1000L).toFloat() + //val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toInt() ?: throw IllegalArgumentException("Bad video width") + //val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toInt() ?: throw IllegalArgumentException("Bad video height") + + // log2 # 10s durations in the video ~= how many segments we have + val maxLod = ceil(log2((durationMs / 10_000).toFloat())).toInt().coerceIn(MIN_LOD, MAX_LOD) + + for (l in 1..maxLod) { + val items = (1 shl (l - 1)) + for (i in 0 until items) { + val idx = items - 1 + i // as sum(prev) = cur-1 + // frame = 100 / 2^lod + i * 100 / 2^(lod-1) = duration % where lod is one indexed + val fraction = (1.0f.div((1 shl l).toFloat()) + i * 1.0f.div(items.toFloat())) + Log.i(TAG, "Generating preview for ${fraction * 100}%") + val frame = durationUs * fraction + val img = retriever.getFrameAtTime( + frame.toLong(), + MediaMetadataRetriever.OPTION_CLOSEST_SYNC + ) + if (!scope.isActive) return + synchronized(images) { + images[idx] = img + loadedImages = maxOf(loadedImages,idx) + } + } + + synchronized(images) { + loadedLod = maxOf(loadedLod, l) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index ef2ed0df..e5f16dd5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -151,7 +151,8 @@ open class ResultFragmentPhone : FullScreenPlayer() { startPosition = 0L, subtitles = emptySet(), subtitle = null, - autoPlay = false + autoPlay = false, + preview = false ) true } ?: run { diff --git a/app/src/main/res/drawable/video_frame.xml b/app/src/main/res/drawable/video_frame.xml new file mode 100644 index 00000000..19fcf26d --- /dev/null +++ b/app/src/main/res/drawable/video_frame.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 5592f3a6..0f76e4dd 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -86,7 +86,6 @@ + + android:importantForAccessibility="no" + android:visibility="gone" /> + + + - - - + + + + + - - - + - - + tools:ignore="ContentDescription" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" /> - - + + + + + - + - - + - - - + + + + + - - + + - 62dp 50dp - + 1dp \ No newline at end of file From 1d90858f64bd113df71dc68fa8e03f9be640c542 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:04:40 -0600 Subject: [PATCH 564/888] Make search history account specific (#638) * Make search history account specific * Update for clear history --- .../com/lagradost/cloudstream3/ui/search/SearchFragment.kt | 7 ++++--- .../lagradost/cloudstream3/ui/search/SearchViewModel.kt | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index bdf82377..845c36ef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -55,6 +55,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus 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.currentAccount import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar @@ -398,7 +399,7 @@ class SearchFragment : Fragment() { DialogInterface.OnClickListener { _, which -> when (which) { DialogInterface.BUTTON_POSITIVE -> { - removeKeys(SEARCH_HISTORY_KEY) + removeKeys("$currentAccount/$SEARCH_HISTORY_KEY") searchViewModel.updateHistory() } DialogInterface.BUTTON_NEGATIVE -> { @@ -510,7 +511,7 @@ class SearchFragment : Fragment() { binding?.mainSearch?.setQuery(searchItem.searchText, true) } SEARCH_HISTORY_REMOVE -> { - removeKey(SEARCH_HISTORY_KEY, searchItem.key) + removeKey("$currentAccount/$SEARCH_HISTORY_KEY", searchItem.key) searchViewModel.updateHistory() } else -> { @@ -559,4 +560,4 @@ class SearchFragment : Fragment() { .commit()*/ } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt index 320687f8..839b9d3f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchViewModel.kt @@ -14,6 +14,7 @@ import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch @@ -64,7 +65,7 @@ class SearchViewModel : ViewModel() { fun updateHistory() = viewModelScope.launch { ioSafe { - val items = getKeys(SEARCH_HISTORY_KEY)?.mapNotNull { + val items = getKeys("$currentAccount/$SEARCH_HISTORY_KEY")?.mapNotNull { getKey(it) }?.sortedByDescending { it.searchedAt } ?: emptyList() _currentHistory.postValue(items) @@ -87,7 +88,7 @@ class SearchViewModel : ViewModel() { if (!isQuickSearch) { val key = query.hashCode().toString() setKey( - SEARCH_HISTORY_KEY, + "$currentAccount/$SEARCH_HISTORY_KEY", key, SearchHistoryItem( searchedAt = System.currentTimeMillis(), @@ -140,4 +141,4 @@ class SearchViewModel : ViewModel() { _searchResponse.postValue(Resource.Success(list)) } } -} \ No newline at end of file +} From 08060314ad94054ed8c42bd38824122bfb24565e Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Tue, 3 Oct 2023 16:50:34 +0200 Subject: [PATCH 565/888] preview seekbar m3u8 --- .../cloudstream3/ui/player/CS3IPlayer.kt | 11 +- .../ui/player/PreviewGenerator.kt | 263 +++++++++++++++++- .../cloudstream3/utils/ExtractorApi.kt | 9 + .../cloudstream3/utils/M3u8Helper.kt | 42 ++- 4 files changed, 298 insertions(+), 27 deletions(-) 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 946743a3..6256bef6 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 @@ -225,20 +225,15 @@ class CS3IPlayer : IPlayer { releasePlayer() if (link != null) { // only video support atm - if (link.type == ExtractorLinkType.VIDEO && preview) { - val headers = if (link.referer.isBlank()) { - link.headers - } else { - mapOf("referer" to link.referer) + link.headers - } - imageGenerator.load(sameEpisode, link.url, headers) + if (preview) { + imageGenerator.load(link, sameEpisode) } else { imageGenerator.clear(sameEpisode) } loadOnlinePlayer(context, link) } else if (data != null) { if (preview) { - imageGenerator.load(sameEpisode, context, data.uri) + imageGenerator.load(context, data, sameEpisode) } else { imageGenerator.clear(sameEpisode) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt index 0f47d009..53699782 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -6,10 +6,18 @@ import android.media.MediaMetadataRetriever import android.net.Uri import android.util.Log import androidx.annotation.WorkerThread +import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.ExtractorLinkType +import com.lagradost.cloudstream3.utils.ExtractorUri +import com.lagradost.cloudstream3.utils.M3u8Helper +import com.lagradost.cloudstream3.utils.M3u8Helper2 import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.isActive +import kotlinx.coroutines.withContext import kotlin.math.absoluteValue import kotlin.math.ceil import kotlin.math.log2 @@ -17,7 +25,248 @@ import kotlin.math.log2 const val MAX_LOD = 6 const val MIN_LOD = 3 -class PreviewGenerator { +interface IPreviewGenerator { + fun hasPreview(): Boolean + fun getPreviewImage(fraction: Float): Bitmap? + fun clear(keepCache: Boolean = false) + fun release() +} + +class PreviewGenerator : IPreviewGenerator { + private var currentGenerator: IPreviewGenerator = NoPreviewGenerator() + override fun hasPreview(): Boolean { + return currentGenerator.hasPreview() + } + + override fun getPreviewImage(fraction: Float): Bitmap? { + return try { + currentGenerator.getPreviewImage(fraction) + } catch (t: Throwable) { + logError(t) + null + } + } + + override fun clear(keepCache: Boolean) { + currentGenerator.clear(keepCache) + } + + override fun release() { + currentGenerator.release() + } + + fun load(link: ExtractorLink, keepCache: Boolean) { + val gen = currentGenerator + when (link.type) { + ExtractorLinkType.M3U8 -> { + if (gen is M3u8PreviewGenerator) { + gen.load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) + } else { + currentGenerator.release() + currentGenerator = M3u8PreviewGenerator().apply { + load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) + } + } + } + + ExtractorLinkType.VIDEO -> { + if (gen is Mp4PreviewGenerator) { + gen.load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) + } else { + currentGenerator.release() + currentGenerator = Mp4PreviewGenerator().apply { + load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) + } + } + } + + else -> { + currentGenerator.clear(keepCache) + } + } + } + + fun load(context: Context, link: ExtractorUri, keepCache: Boolean) { + val gen = currentGenerator + if (gen is Mp4PreviewGenerator) { + gen.load(keepCache = keepCache, context = context, uri = link.uri) + } else { + currentGenerator.release() + currentGenerator = Mp4PreviewGenerator().apply { + load(keepCache = keepCache, context = context, uri = link.uri) + } + } + } +} + +class NoPreviewGenerator : IPreviewGenerator { + override fun hasPreview(): Boolean = false + override fun getPreviewImage(fraction: Float): Bitmap? = null + override fun clear(keepCache: Boolean) = Unit + override fun release() = Unit +} + +class M3u8PreviewGenerator : IPreviewGenerator { + // generated images 1:1 to idx of hsl + private var images: Array = arrayOf() + + private val TAG = "PreviewImgM3u8" + + // prefixSum[i] = sum(hsl.ts[0..i].time) + // where [0] = 0, [1] = hsl.ts[0].time aka time at start of segment, do [b] - [a] for range a,b + private var prefixSum: Array = arrayOf() + + // how many images has been generated + private var loadedImages: Int = 0 + + // how many images we can generate in total, == hsl.size ?: 0 + private var totalImages: Int = 0 + + override fun hasPreview(): Boolean { + return totalImages > 0 && loadedImages >= minOf(totalImages, 4) + } + + override fun getPreviewImage(fraction: Float): Bitmap? { + var bestIdx = -1 + var bestDiff = Double.MAX_VALUE + synchronized(images) { + // just find the best one in a for loop, we don't care about bin searching rn + for (i in 0..images.size) { + val diff = prefixSum[i].minus(fraction).absoluteValue + if (diff > bestDiff) { + break + } + if (images[i] != null) { + bestIdx = i + bestDiff = diff + } + } + return images.getOrNull(bestIdx) + } + /* + val targetIndex = prefixSum.binarySearch(target) + var ret = images[targetIndex] + if (ret != null) { + return ret + } + for (i in 0..images.size) { + ret = images.getOrNull(i+targetIndex) ?: + }*/ + } + + override fun clear(keepCache: Boolean) { + synchronized(images) { + currentJob?.cancel() + images = arrayOf() + prefixSum = arrayOf() + loadedImages = 0 + totalImages = 0 + } + } + + override fun release() { + clear() + images = arrayOf() + } + + private var currentJob: Job? = null + fun load(keepCache: Boolean, url: String, headers: Map) { + clear(keepCache) + currentJob?.cancel() + currentJob = ioSafe { + withContext(Dispatchers.IO) { + Log.i(TAG, "Loading with url = $url headers = $headers") + //tmpFile = + // File.createTempFile("video", ".ts", context.cacheDir).apply { + // deleteOnExit() + // } + val retriever = MediaMetadataRetriever() + val hsl = M3u8Helper2.hslLazy( + listOf( + M3u8Helper.M3u8Stream( + streamUrl = url, + headers = headers + ) + ), + selectBest = false + ) + + // no support for encryption atm + if (hsl.isEncrypted) { + totalImages = 0 + return@withContext + } + + // total duration of the entire m3u8 in seconds + val duration = hsl.allTsLinks.sumOf { it.time ?: 0.0 } + val durationInv = 1.0 / duration + + // if the total duration is less then 10s then something is very wrong or + // too short playback to matter + if (duration <= 10.0) { + totalImages = 0 + return@withContext + } + + totalImages = hsl.allTsLinks.size + + // we cant init directly as it is no guarantee of in order + prefixSum = Array(hsl.allTsLinks.size + 1) { 0.0 } + var runningSum = 0.0 + for (i in hsl.allTsLinks.indices) { + runningSum += (hsl.allTsLinks[i].time ?: 0.0) + prefixSum[i + 1] = runningSum * durationInv + } + synchronized(images) { + images = Array(hsl.size) { null } + loadedImages = 0 + } + + val maxLod = ceil(log2(duration)).toInt().coerceIn(MIN_LOD, MAX_LOD) + val count = hsl.allTsLinks.size + for (l in 1..maxLod) { + val items = (1 shl (l - 1)) + for (i in 0 until items) { + val index = (count.div(1 shl l) + (i * count) / items).coerceIn(0, hsl.size) + if (synchronized(images) { images[index] } != null) { + continue + } + Log.i(TAG, "Generating preview for $index") + + val ts = hsl.allTsLinks[index] + try { + retriever.setDataSource(ts.url, hsl.headers) + if (!isActive) { + return@withContext + } + val frame = retriever.getFrameAtTime(0) + if (!isActive) { + return@withContext + } + synchronized(images) { + images[index] = frame + loadedImages += 1 + } + } catch (t: Throwable) { + logError(t) + continue + } + + /* + val buffer = hsl.resolveLinkSafe(index) ?: continue + tmpFile?.writeBytes(buffer) + val buff = FileOutputStream(tmpFile) + retriever.setDataSource(buff.fd) + val frame = retriever.getFrameAtTime(0L)*/ + } + } + + } + } + } +} + +class Mp4PreviewGenerator : IPreviewGenerator { // lod = level of detail where the number indicates how many ones there is // 2^(lod-1) = images private var loadedLod = 0 @@ -26,15 +275,15 @@ class PreviewGenerator { null } - fun hasPreview(): Boolean { + override fun hasPreview(): Boolean { synchronized(images) { return loadedLod >= MIN_LOD } } - val TAG = "PreviewImg" + val TAG = "PreviewImgMp4" - fun getPreviewImage(fraction: Float): Bitmap? { + override fun getPreviewImage(fraction: Float): Bitmap? { synchronized(images) { if (loadedLod < MIN_LOD) { Log.i(TAG, "Requesting preview for $fraction but $loadedLod < $MIN_LOD") @@ -70,7 +319,7 @@ class PreviewGenerator { // also check out https://github.com/wseemann/FFmpegMediaMetadataRetriever private val retriever: MediaMetadataRetriever = MediaMetadataRetriever() - fun clear(keepCache: Boolean = false) { + override fun clear(keepCache: Boolean) { if (keepCache) return synchronized(images) { loadedLod = 0 @@ -100,7 +349,7 @@ class PreviewGenerator { } } - fun release() { + override fun release() { currentJob?.cancel() clear(false) } @@ -135,7 +384,7 @@ class PreviewGenerator { if (!scope.isActive) return synchronized(images) { images[idx] = img - loadedImages = maxOf(loadedImages,idx) + loadedImages = maxOf(loadedImages, idx) } } 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 9db62dc8..d89e67fa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -378,6 +378,15 @@ open class ExtractorLink constructor( val isM3u8 : Boolean get() = type == ExtractorLinkType.M3U8 val isDash : Boolean get() = type == ExtractorLinkType.DASH + fun getAllHeaders() : Map { + if (referer.isBlank()) { + return headers + } else if (headers.keys.none { it.equals("referer", ignoreCase = true) }) { + return headers + mapOf("referer" to referer) + } + return headers + } + constructor( source: String, name: String, diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index 11dfa441..d3fe7162 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -71,7 +71,7 @@ object M3u8Helper2 { private val QUALITY_REGEX = Regex("""#EXT-X-STREAM-INF:(?:(?:.*?(?:RESOLUTION=\d+x(\d+)).*?\s+(.*))|(?:.*?\s+(.*)))""") private val TS_EXTENSION_REGEX = - Regex("""#EXTINF:.*\n(.+?\n)""") // fuck it we ball, who cares about the type anyways + Regex("""#EXTINF:(([0-9]*[.])?[0-9]+|).*\n(.+?\n)""") // fuck it we ball, who cares about the type anyways //Regex("""(.*\.(ts|jpg|html).*)""") //.jpg here 'case vizcloud uses .jpg instead of .ts private fun absoluteExtensionDetermination(url: String): String? { @@ -122,6 +122,15 @@ object M3u8Helper2 { return result.lastOrNull() } + private fun selectWorst(qualities: List): M3u8Helper.M3u8Stream? { + val result = qualities.sortedBy { + if (it.quality != null && it.quality <= 1080) it.quality else 0 + }.filter { + listOf("m3u", "m3u8").contains(absoluteExtensionDetermination(it.streamUrl)) + } + return result.firstOrNull() + } + private fun getParentLink(uri: String): String { val split = uri.split("/").toMutableList() split.removeLast() @@ -173,14 +182,20 @@ object M3u8Helper2 { return list } + data class TsLink( + val url : String, + val time : Double?, + ) + data class LazyHlsDownloadData( private val encryptionData: ByteArray, private val encryptionIv: ByteArray, - private val isEncrypted: Boolean, - private val allTsLinks: List, - private val relativeUrl: String, - private val headers: Map, + val isEncrypted: Boolean, + val allTsLinks: List, + val relativeUrl: String, + val headers: Map, ) { + val size get() = allTsLinks.size suspend fun resolveLinkWhileSafe( @@ -228,9 +243,9 @@ object M3u8Helper2 { @Throws suspend fun resolveLink(index: Int): ByteArray { if (index < 0 || index >= size) throw IllegalArgumentException("index must be in the bounds of the ts") - val url = allTsLinks[index] + val ts = allTsLinks[index] - val tsResponse = app.get(url, headers = headers, verify = false) + val tsResponse = app.get(ts.url, headers = headers, verify = false) val tsData = tsResponse.body.bytes() if (tsData.isEmpty()) throw ErrorLoadingException("no data") @@ -244,15 +259,16 @@ object M3u8Helper2 { @Throws suspend fun hslLazy( - qualities: List + qualities: List, selectBest : Boolean = true ): LazyHlsDownloadData { if (qualities.isEmpty()) throw IllegalArgumentException("qualities must be non empty") - val selected = selectBest(qualities) ?: qualities.first() + val selected = if(selectBest) { selectBest(qualities) } else { selectWorst(qualities) } ?: qualities.first() val headers = selected.headers val streams = qualities.map { m3u8Generation(it, false) }.flatten() // this selects the best quality of the qualities offered, // due to the recursive nature of m3u8, we only go 2 depth - val secondSelection = selectBest(streams.ifEmpty { listOf(selected) }) + val innerStreams = streams.ifEmpty { listOf(selected) } + val secondSelection = if(selectBest) { selectBest(innerStreams) } else { selectWorst(innerStreams) } ?: throw IllegalArgumentException("qualities has no streams") val m3u8Response = @@ -285,12 +301,14 @@ object M3u8Helper2 { } val relativeUrl = getParentLink(secondSelection.streamUrl) val allTsList = TS_EXTENSION_REGEX.findAll(m3u8Response + "\n").map { ts -> - val value = ts.groupValues[1] - if (isNotCompleteUrl(value)) { + val time = ts.groupValues[1] + val value = ts.groupValues[3] + val url = if (isNotCompleteUrl(value)) { "$relativeUrl/${value}" } else { value } + TsLink(url = url, time = time.toDoubleOrNull()) }.toList() if (allTsList.isEmpty()) throw IllegalArgumentException("ts must be non empty") From 462073bd747c62ab995ce200b5a55ddce18811ad Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 3 Oct 2023 08:56:38 -0600 Subject: [PATCH 566/888] Make search prefs account specific (#640) --- .../cloudstream3/ui/search/SearchFragment.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 845c36ef..bad78624 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -194,7 +194,7 @@ class SearchFragment : Fragment() { validAPIs.flatMap { api -> api.supportedTypes }.distinct() ) { list -> if (selectedSearchTypes.toSet() != list.toSet()) { - setKey(SEARCH_PREF_TAGS, selectedSearchTypes) + setKey("$currentAccount/$SEARCH_PREF_TAGS", selectedSearchTypes) selectedSearchTypes.clear() selectedSearchTypes.addAll(list) search(binding?.mainSearch?.query?.toString()) @@ -236,7 +236,7 @@ class SearchFragment : Fragment() { context?.let { ctx -> val validAPIs = ctx.filterProviderByPreferredMedia() selectedApis = ctx.getKey( - SEARCH_PREF_PROVIDERS, + "$currentAccount/$SEARCH_PREF_PROVIDERS", defVal = validAPIs.map { it.name } )!!.toMutableSet() } @@ -287,7 +287,7 @@ class SearchFragment : Fragment() { } fun updateList(types: List) { - setKey(SEARCH_PREF_TAGS, types.map { it.name }) + setKey("$currentAccount/$SEARCH_PREF_TAGS", types.map { it.name }) arrayAdapter.clear() currentValidApis = validAPIs.filter { api -> @@ -312,7 +312,7 @@ class SearchFragment : Fragment() { arrayAdapter.notifyDataSetChanged() } - val selectedSearchTypes = getKey>(SEARCH_PREF_TAGS) + val selectedSearchTypes = getKey>("$currentAccount/$SEARCH_PREF_TAGS") ?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } } @@ -343,7 +343,7 @@ class SearchFragment : Fragment() { } dialog.setOnDismissListener { - context?.setKey(SEARCH_PREF_PROVIDERS, currentSelectedApis.toList()) + context?.setKey("$currentAccount/$SEARCH_PREF_PROVIDERS", currentSelectedApis.toList()) selectedApis = currentSelectedApis } updateList(selectedSearchTypes.toList()) @@ -354,7 +354,7 @@ class SearchFragment : Fragment() { val settingsManager = context?.let { PreferenceManager.getDefaultSharedPreferences(it) } val isAdvancedSearch = settingsManager?.getBoolean("advanced_search", true) ?: true - selectedSearchTypes = context?.getKey>(SEARCH_PREF_TAGS) + selectedSearchTypes = context?.getKey>("$currentAccount/$SEARCH_PREF_TAGS") ?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } } ?.toMutableList() ?: mutableListOf(TvType.Movie, TvType.TvSeries) From cc00e73e16459365bb7d412ee07422a354767ad0 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:25:31 -0600 Subject: [PATCH 567/888] Make homepage preferences account specific (#647) * Make homepage preferences account specific * Fix accidentally removed whitespace * Fix in setkey --- .../java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt | 4 ++-- .../com/lagradost/cloudstream3/ui/home/HomeViewModel.kt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 0797e9a0..ebbb245c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -377,7 +377,7 @@ class HomeFragment : Fragment() { var currentApiName = selectedApiName var currentValidApis: MutableList = mutableListOf() - val preSelectedTypes = this.getKey>(HOME_PREF_HOMEPAGE) + val preSelectedTypes = this.getKey>("${DataStoreHelper.currentAccount}/$HOME_PREF_HOMEPAGE") ?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } } ?.toMutableList() ?: mutableListOf(TvType.Movie, TvType.TvSeries) @@ -408,7 +408,7 @@ class HomeFragment : Fragment() { } fun updateList() { - this.setKey(HOME_PREF_HOMEPAGE, preSelectedTypes) + this.setKey("${DataStoreHelper.currentAccount}/$HOME_PREF_HOMEPAGE", preSelectedTypes) arrayAdapter.clear() currentValidApis = validAPIs.filter { api -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index 13d34b59..a5ef2bb4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -171,7 +171,7 @@ class HomeViewModel : ViewModel() { if (currentWatchTypes.size <= 0) { setKey( - HOME_BOOKMARK_VALUE_LIST, + "${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST", intArrayOf() ) _availableWatchStatusTypes.postValue(setOf() to setOf()) @@ -182,7 +182,7 @@ class HomeViewModel : ViewModel() { val watchPrefNotNull = preferredWatchStatus ?: EnumSet.of(currentWatchTypes.first()) //if (currentWatchTypes.any { watchPrefNotNull.contains(it) }) watchPrefNotNull else listOf(currentWatchTypes.first()) setKey( - HOME_BOOKMARK_VALUE_LIST, + "${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST", watchPrefNotNull.map { it.internalId }.toIntArray() ) _availableWatchStatusTypes.postValue( @@ -463,7 +463,7 @@ class HomeViewModel : ViewModel() { fun loadStoredData() { val list = EnumSet.noneOf(WatchType::class.java) - getKey(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let { + getKey("${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST")?.map { WatchType.fromInternalId(it) }?.let { list.addAll(it) } loadStoredData(list) From b5d4c3bd27cc70edaa461dd0a29c4c5828be8fcf Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:26:56 -0600 Subject: [PATCH 568/888] Make player preferences account specific (#646) --- .../cloudstream3/ui/player/AbstractPlayerFragment.kt | 5 +++-- .../java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 5 +++-- .../com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 862504a1..52974ff7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -48,6 +48,7 @@ import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.AppUtils.requestLocalAudioFocus +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI @@ -442,7 +443,7 @@ abstract class AbstractPlayerFragment( @SuppressLint("SetTextI18n", "UnsafeOptInUsageError") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - resizeMode = getKey(RESIZE_MODE_KEY) ?: 0 + resizeMode = getKey("$currentAccount/$RESIZE_MODE_KEY") ?: 0 resize(resizeMode, false) player.releaseCallbacks() @@ -573,7 +574,7 @@ abstract class AbstractPlayerFragment( @SuppressLint("UnsafeOptInUsageError") fun resize(resize: PlayerResize, showToast: Boolean) { - setKey(RESIZE_MODE_KEY, resize.ordinal) + setKey("$currentAccount/$RESIZE_MODE_KEY", resize.ordinal) val type = when (resize) { PlayerResize.Fill -> AspectRatioFrameLayout.RESIZE_MODE_FILL PlayerResize.Fit -> AspectRatioFrameLayout.RESIZE_MODE_FIT 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 6256bef6..49904f6a 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 @@ -57,6 +57,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.DrmExtractorLink import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink @@ -536,12 +537,12 @@ class CS3IPlayer : IPlayer { **/ var preferredAudioTrackLanguage: String? = null get() { - return field ?: getKey(PREFERRED_AUDIO_LANGUAGE_KEY, field)?.also { + return field ?: getKey("$currentAccount/$PREFERRED_AUDIO_LANGUAGE_KEY", field)?.also { field = it } } set(value) { - setKey(PREFERRED_AUDIO_LANGUAGE_KEY, value) + setKey("$currentAccount/$PREFERRED_AUDIO_LANGUAGE_KEY", value) field = 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 e698191d..43e8aa0b 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 @@ -49,6 +49,7 @@ import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -356,7 +357,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private fun setPlayBackSpeed(speed: Float) { try { - setKey(PLAYBACK_SPEED_KEY, speed) + setKey("$currentAccount/$PLAYBACK_SPEED_KEY", speed) playerBinding?.playerSpeedBtt?.text = getString(R.string.player_speed_text_format).format(speed) .replace(".0x", "x") @@ -1194,7 +1195,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // init variables - setPlayBackSpeed(getKey(PLAYBACK_SPEED_KEY) ?: 1.0f) + setPlayBackSpeed(getKey("$currentAccount/$PLAYBACK_SPEED_KEY") ?: 1.0f) savedInstanceState?.getLong(SUBTITLE_DELAY_BUNDLE_KEY)?.let { subtitleDelay = it } From 3f5119525c3a17a13a3dce42bef6a9caffd5c86e Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:59:26 -0600 Subject: [PATCH 569/888] Make library preferences account specific (#649) --- .../lagradost/cloudstream3/ui/library/LibraryFragment.kt | 9 +++++---- .../cloudstream3/ui/library/LibraryViewModel.kt | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index 04ef3d96..d5fdc1aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -35,6 +35,7 @@ import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_SHOW_METADATA import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.reduceDragSensitivity +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount @@ -180,7 +181,7 @@ class LibraryFragment : Fragment() { val items = baseOptions.map { txt(it.stringRes).asString(this) } + availableProviders - val savedSelection = getKey(LIBRARY_FOLDER, key) + val savedSelection = getKey("$currentAccount/$LIBRARY_FOLDER", key) val selectedIndex = when { savedSelection == null -> 0 @@ -215,7 +216,7 @@ class LibraryFragment : Fragment() { } setKey( - LIBRARY_FOLDER, + "$currentAccount/$LIBRARY_FOLDER", key, savedData, ) @@ -262,8 +263,8 @@ class LibraryFragment : Fragment() { // This basically first selects the individual opener and if that is default then // selects the whole list opener val savedListSelection = - getKey(LIBRARY_FOLDER, syncName.name) - val savedSelection = getKey(LIBRARY_FOLDER, syncId).takeIf { + getKey("$currentAccount/$LIBRARY_FOLDER", syncName.name) + val savedSelection = getKey("$currentAccount/$LIBRARY_FOLDER", syncId).takeIf { it?.openType != LibraryOpenerType.Default } ?: savedListSelection diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index 14d31356..25a5a0f8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount enum class ListSorting(@StringRes val stringRes: Int) { Query(R.string.none), @@ -35,12 +36,12 @@ class LibraryViewModel : ViewModel() { get() = SyncApis.filter { it.hasAccount() } var currentSyncApi = availableSyncApis.let { allApis -> - val lastSelection = getKey(LAST_SYNC_API_KEY) + val lastSelection = getKey("$currentAccount/$LAST_SYNC_API_KEY") availableSyncApis.firstOrNull { it.name == lastSelection } ?: allApis.firstOrNull() } private set(value) { field = value - setKey(LAST_SYNC_API_KEY, field?.name) + setKey("$currentAccount/$LAST_SYNC_API_KEY", field?.name) } val availableApiNames: List From 177b1e47f3f08110c07e3839a2d1935fe491a4da Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 4 Oct 2023 11:33:55 +0200 Subject: [PATCH 570/888] added extra logging --- .../cloudstream3/ui/player/PreviewGenerator.kt | 11 +++++++++-- .../com/lagradost/cloudstream3/utils/M3u8Helper.kt | 12 ++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt index 53699782..946c1d33 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -81,6 +81,7 @@ class PreviewGenerator : IPreviewGenerator { } else -> { + Log.i("PreviewImg", "unsupported format for $link") currentGenerator.clear(keepCache) } } @@ -193,6 +194,7 @@ class M3u8PreviewGenerator : IPreviewGenerator { // no support for encryption atm if (hsl.isEncrypted) { + Log.i(TAG, "m3u8 is encrypted") totalImages = 0 return@withContext } @@ -239,12 +241,13 @@ class M3u8PreviewGenerator : IPreviewGenerator { if (!isActive) { return@withContext } - val frame = retriever.getFrameAtTime(0) + val img = retriever.getFrameAtTime(0) if (!isActive) { return@withContext } + if(img == null || img.width <= 1 || img.height <= 1) continue synchronized(images) { - images[index] = frame + images[index] = img loadedImages += 1 } } catch (t: Throwable) { @@ -302,6 +305,9 @@ class Mp4PreviewGenerator : IPreviewGenerator { if (idx > loadedImages) { break } + if(images[idx] == null) { + continue + } val currentFraction = (1.0f.div((1 shl l).toFloat()) + i * 1.0f.div(items.toFloat())) val diff = currentFraction.minus(fraction).absoluteValue @@ -382,6 +388,7 @@ class Mp4PreviewGenerator : IPreviewGenerator { MediaMetadataRetriever.OPTION_CLOSEST_SYNC ) if (!scope.isActive) return + if(img == null || img.width <= 1 || img.height <= 1) continue synchronized(images) { images[idx] = img loadedImages = maxOf(loadedImages, idx) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt index d3fe7162..298f1601 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt @@ -115,19 +115,19 @@ object M3u8Helper2 { private fun selectBest(qualities: List): M3u8Helper.M3u8Stream? { val result = qualities.sortedBy { - if (it.quality != null && it.quality <= 1080) it.quality else 0 - }.filter { + it.quality ?: Qualities.Unknown.value //if (it.quality != null && it.quality <= 1080) else 0 + }/*.filter { listOf("m3u", "m3u8").contains(absoluteExtensionDetermination(it.streamUrl)) - } + }*/ return result.lastOrNull() } private fun selectWorst(qualities: List): M3u8Helper.M3u8Stream? { val result = qualities.sortedBy { - if (it.quality != null && it.quality <= 1080) it.quality else 0 - }.filter { + it.quality ?: Qualities.Unknown.value //if (it.quality != null && it.quality <= 1080) else 0 + }/*.filter { listOf("m3u", "m3u8").contains(absoluteExtensionDetermination(it.streamUrl)) - } + }*/ return result.firstOrNull() } From 0a327ccbda8d3622127cae2e419a386357250b6e Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:50:31 -0600 Subject: [PATCH 571/888] Reload library when reloading home (#656) So that library is reloaded when switching accounts. Fixes #650 --- .../cloudstream3/ui/library/LibraryViewModel.kt | 10 ++++++++++ .../lagradost/cloudstream3/utils/DataStoreHelper.kt | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index 25a5a0f8..c104a7c3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis @@ -101,4 +102,13 @@ class LibraryViewModel : ViewModel() { } } } + + init { + MainActivity.reloadHomeEvent += ::reloadPages + } + + override fun onCleared() { + MainActivity.reloadHomeEvent -= ::reloadPages + super.onCleared() + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 7bce1b6c..775cb718 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -131,7 +131,6 @@ object DataStoreHelper { // update UI setAccount(getDefaultAccount(context), true) - MainActivity.bookmarksUpdatedEvent(true) dialog?.dismissSafe() } From 77294dc68e6ba19c21017f4ac17847755572ad18 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 7 Oct 2023 01:39:30 +0200 Subject: [PATCH 572/888] cleanup --- .../lagradost/cloudstream3/MainActivity.kt | 40 +++--- .../cloudstream3/ui/home/HomeFragment.kt | 25 +--- .../cloudstream3/ui/home/HomeViewModel.kt | 22 ++- .../ui/player/AbstractPlayerFragment.kt | 11 +- .../ui/player/FullScreenPlayer.kt | 6 +- .../cloudstream3/ui/player/IPlayer.kt | 9 -- .../ui/player/PreviewGenerator.kt | 134 ++++++++++++------ .../cloudstream3/ui/search/SearchFragment.kt | 43 ++---- .../cloudstream3/utils/DataStoreHelper.kt | 68 +++++++++ .../main/res/layout/player_custom_layout.xml | 4 +- 10 files changed, 215 insertions(+), 147 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index d5187029..17823f7c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1122,23 +1122,25 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (isTvSettings()) { val newLocalBinding = ActivityMainTvBinding.inflate(layoutInflater, null, false) setContentView(newLocalBinding.root) - TvFocus.focusOutline = WeakReference(newLocalBinding.focusOutline) - newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> - // println("refocus $oldFocus -> $newFocus") - try { - val r = Rect(0, 0, 0, 0) - newFocus.getDrawingRect(r) - val x = r.centerX() - val y = r.centerY() - val dx = 0 //screenWidth / 2 - val dy = screenHeight / 2 - val r2 = Rect(x - dx, y - dy, x + dx, y + dy) - newFocus.requestRectangleOnScreen(r2, false) - // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) - } catch (_: Throwable) { - } - TvFocus.updateFocusView(newFocus) - /*var focus = newFocus + + if(isTrueTvSettings()) { + TvFocus.focusOutline = WeakReference(newLocalBinding.focusOutline) + newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> + // println("refocus $oldFocus -> $newFocus") + try { + val r = Rect(0, 0, 0, 0) + newFocus.getDrawingRect(r) + val x = r.centerX() + val y = r.centerY() + val dx = 0 //screenWidth / 2 + val dy = screenHeight / 2 + val r2 = Rect(x - dx, y - dy, x + dx, y + dy) + newFocus.requestRectangleOnScreen(r2, false) + // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) + } catch (_: Throwable) { + } + TvFocus.updateFocusView(newFocus) + /*var focus = newFocus while(focus != null) { if(focus is ScrollingView && focus.canScrollVertically()) { @@ -1149,7 +1151,11 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { else -> break } }*/ + } + } else { + newLocalBinding.focusOutline.isVisible = false } + newLocalBinding.root.viewTreeObserver.addOnScrollChangedListener { TvFocus.updateFocusView(TvFocus.lastFocus.get(), same = true) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index ebbb245c..4d940123 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -7,7 +7,6 @@ import android.content.DialogInterface import android.content.Intent import android.content.res.Configuration import android.net.Uri -import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -23,18 +22,12 @@ import androidx.preference.PreferenceManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.button.MaterialButton import com.google.android.material.chip.Chip -import com.google.android.material.chip.ChipGroup import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings -import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.CommonActivity.showToast -import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent -import com.lagradost.cloudstream3.MainActivity.Companion.bookmarksUpdatedEvent -import com.lagradost.cloudstream3.MainActivity.Companion.mainPluginsLoadedEvent import com.lagradost.cloudstream3.databinding.FragmentHomeBinding import com.lagradost.cloudstream3.databinding.HomeEpisodesExpandedBinding import com.lagradost.cloudstream3.databinding.HomeSelectMainpageBinding @@ -45,37 +38,26 @@ import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.mvvm.observeNullable import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi -import com.lagradost.cloudstream3.ui.WatchType -import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.search.* import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings -import com.lagradost.cloudstream3.utils.AppUtils.addProgramsToContinueWatching import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable -import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.ownHide import com.lagradost.cloudstream3.utils.AppUtils.ownShow import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.ioSafe -import com.lagradost.cloudstream3.utils.DataStore.getKey -import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe -import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes - import java.util.* -const val HOME_BOOKMARK_VALUE_LIST = "home_bookmarked_last_list" -const val HOME_PREF_HOMEPAGE = "home_pref_homepage" - class HomeFragment : Fragment() { companion object { val configEvent = Event() @@ -377,10 +359,7 @@ class HomeFragment : Fragment() { var currentApiName = selectedApiName var currentValidApis: MutableList = mutableListOf() - val preSelectedTypes = this.getKey>("${DataStoreHelper.currentAccount}/$HOME_PREF_HOMEPAGE") - ?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } } - ?.toMutableList() - ?: mutableListOf(TvType.Movie, TvType.TvSeries) + val preSelectedTypes = DataStoreHelper.homePreference.toMutableList() binding.cancelBtt.setOnClickListener { dialog.dismissSafe() @@ -408,7 +387,7 @@ class HomeFragment : Fragment() { } fun updateList() { - this.setKey("${DataStoreHelper.currentAccount}/$HOME_PREF_HOMEPAGE", preSelectedTypes) + DataStoreHelper.homePreference = preSelectedTypes arrayAdapter.clear() currentValidApis = validAPIs.filter { api -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index a5ef2bb4..ad75aa9d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -12,7 +12,6 @@ import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull 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.CommonActivity.activity import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.LoadResponse @@ -170,10 +169,7 @@ class HomeViewModel : ViewModel() { currentWatchTypes.remove(WatchType.NONE) if (currentWatchTypes.size <= 0) { - setKey( - "${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST", - intArrayOf() - ) + DataStoreHelper.homeBookmarkedList = intArrayOf() _availableWatchStatusTypes.postValue(setOf() to setOf()) _bookmarks.postValue(Pair(false, ArrayList())) return@launchSafe @@ -181,16 +177,14 @@ class HomeViewModel : ViewModel() { val watchPrefNotNull = preferredWatchStatus ?: EnumSet.of(currentWatchTypes.first()) //if (currentWatchTypes.any { watchPrefNotNull.contains(it) }) watchPrefNotNull else listOf(currentWatchTypes.first()) - setKey( - "${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST", - watchPrefNotNull.map { it.internalId }.toIntArray() - ) + + DataStoreHelper.homeBookmarkedList = watchPrefNotNull.map { it.internalId }.toIntArray() _availableWatchStatusTypes.postValue( - Pair( - watchPrefNotNull, - currentWatchTypes, + + watchPrefNotNull to + currentWatchTypes, + ) - ) val list = withContext(Dispatchers.IO) { watchStatusIds.filter { watchPrefNotNull.contains(it.second) } @@ -463,7 +457,7 @@ class HomeViewModel : ViewModel() { fun loadStoredData() { val list = EnumSet.noneOf(WatchType::class.java) - getKey("${DataStoreHelper.currentAccount}/$HOME_BOOKMARK_VALUE_LIST")?.map { WatchType.fromInternalId(it) }?.let { + DataStoreHelper.homeBookmarkedList.map { WatchType.fromInternalId(it) }.let { list.addAll(it) } loadStoredData(list) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 52974ff7..431e4fe1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -33,8 +33,6 @@ import androidx.preference.PreferenceManager import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat import com.github.rubensousa.previewseekbar.PreviewBar import com.github.rubensousa.previewseekbar.media3.PreviewTimeBar -import com.lagradost.cloudstream3.AcraApplication.Companion.getKey -import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.canEnterPipMode import com.lagradost.cloudstream3.CommonActivity.isInPIPMode import com.lagradost.cloudstream3.CommonActivity.keyEventListener @@ -48,7 +46,7 @@ import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.AppUtils.requestLocalAudioFocus -import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI @@ -443,7 +441,7 @@ abstract class AbstractPlayerFragment( @SuppressLint("SetTextI18n", "UnsafeOptInUsageError") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - resizeMode = getKey("$currentAccount/$RESIZE_MODE_KEY") ?: 0 + resizeMode = DataStoreHelper.resizeMode resize(resizeMode, false) player.releaseCallbacks() @@ -466,7 +464,8 @@ abstract class AbstractPlayerFragment( var resume = false progressBar.addOnScrubListener(object : PreviewBar.OnScrubListener { override fun onScrubStart(previewBar: PreviewBar?) { - progressBar.isPreviewEnabled = player.hasPreview() + val hasPreview = player.hasPreview() + progressBar.isPreviewEnabled = hasPreview resume = player.getIsPlaying() if (resume) player.handleEvent( CSPlayerEvent.Pause, @@ -574,7 +573,7 @@ abstract class AbstractPlayerFragment( @SuppressLint("UnsafeOptInUsageError") fun resize(resize: PlayerResize, showToast: Boolean) { - setKey("$currentAccount/$RESIZE_MODE_KEY", resize.ordinal) + DataStoreHelper.resizeMode = resize.ordinal val type = when (resize) { PlayerResize.Fill -> AspectRatioFrameLayout.RESIZE_MODE_FILL PlayerResize.Fit -> AspectRatioFrameLayout.RESIZE_MODE_FIT 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 43e8aa0b..819e50ba 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 @@ -49,7 +49,7 @@ import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData -import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -357,7 +357,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private fun setPlayBackSpeed(speed: Float) { try { - setKey("$currentAccount/$PLAYBACK_SPEED_KEY", speed) + DataStoreHelper.playBackSpeed = speed playerBinding?.playerSpeedBtt?.text = getString(R.string.player_speed_text_format).format(speed) .replace(".0x", "x") @@ -1195,7 +1195,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // init variables - setPlayBackSpeed(getKey("$currentAccount/$PLAYBACK_SPEED_KEY") ?: 1.0f) + setPlayBackSpeed(DataStoreHelper.playBackSpeed) savedInstanceState?.getLong(SUBTITLE_DELAY_BUNDLE_KEY)?.let { subtitleDelay = it } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index a08360ae..0e54e2cb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -199,17 +199,8 @@ data class CurrentTracks( class InvalidFileException(msg: String) : Exception(msg) //http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 -const val STATE_RESUME_WINDOW = "resumeWindow" -const val STATE_RESUME_POSITION = "resumePosition" -const val STATE_PLAYER_FULLSCREEN = "playerFullscreen" -const val STATE_PLAYER_PLAYING = "playerOnPlay" const val ACTION_MEDIA_CONTROL = "media_control" const val EXTRA_CONTROL_TYPE = "control_type" -const val PLAYBACK_SPEED = "playback_speed" -const val RESIZE_MODE_KEY = "resize_mode" // Last used resize mode -const val PLAYBACK_SPEED_KEY = "playback_speed" // Last used playback speed -const val PREFERRED_SUBS_KEY = "preferred_subtitles" // Last used resize mode -//const val PLAYBACK_FASTFORWARD = "playback_fastforward" // Last used resize mode /** Abstract Exoplayer logic, can be expanded to other players */ interface IPlayer { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt index 946c1d33..ffb4751f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -28,86 +28,122 @@ const val MIN_LOD = 3 interface IPreviewGenerator { fun hasPreview(): Boolean fun getPreviewImage(fraction: Float): Bitmap? - fun clear(keepCache: Boolean = false) fun release() + + var durationMs: Long + var loadedImages: Int } +/** PreviewGenerator that hides the implementation details of the sub generators that is used, used for source switch cache */ class PreviewGenerator : IPreviewGenerator { + /** the most up to date generator, will always mirror the actual source in the player */ private var currentGenerator: IPreviewGenerator = NoPreviewGenerator() + /** the longest generated preview of the same episode */ + private var lastGenerator: IPreviewGenerator = NoPreviewGenerator() + /** always NoPreviewGenerator, used as a cache for nothing */ + private val dummy: IPreviewGenerator = NoPreviewGenerator() + + /** if the current generator is the same as the last by checking time */ + private fun isSameLength(): Boolean = + currentGenerator.durationMs.minus(lastGenerator.durationMs).absoluteValue < 10_000L + + /** use the backup if the current generator is init or if they have the same length */ + private val backupGenerator: IPreviewGenerator + get() { + if (currentGenerator.durationMs == 0L || isSameLength()) { + return lastGenerator + } + return dummy + } + override fun hasPreview(): Boolean { - return currentGenerator.hasPreview() + return currentGenerator.hasPreview() || backupGenerator.hasPreview() } override fun getPreviewImage(fraction: Float): Bitmap? { return try { - currentGenerator.getPreviewImage(fraction) + currentGenerator.getPreviewImage(fraction) ?: backupGenerator.getPreviewImage(fraction) } catch (t: Throwable) { logError(t) null } } - override fun clear(keepCache: Boolean) { - currentGenerator.clear(keepCache) + override fun release() { + lastGenerator.release() + currentGenerator.release() + lastGenerator = NoPreviewGenerator() + currentGenerator = NoPreviewGenerator() } - override fun release() { - currentGenerator.release() + override var durationMs: Long + get() = currentGenerator.durationMs + set(_) {} + override var loadedImages: Int + get() = currentGenerator.loadedImages + set(_) {} + + fun clear(keepCache: Boolean) { + if (keepCache) { + if (!isSameLength() || currentGenerator.loadedImages >= lastGenerator.loadedImages || lastGenerator.durationMs == 0L) { + // the current generator is better than the last generator, therefore keep the current + // or the lengths are not the same, therefore favoring the more recent selection + + // if they are the same we favor the current generator + lastGenerator.release() + lastGenerator = currentGenerator + } else { + // otherwise just keep the last generator and throw away the current generator + currentGenerator.release() + } + } else { + // we switched the episode, therefore keep nothing + lastGenerator.release() + lastGenerator = NoPreviewGenerator() + currentGenerator.release() + // we assume that we set currentGenerator right after this, so currentGenerator != NoPreviewGenerator + } } fun load(link: ExtractorLink, keepCache: Boolean) { - val gen = currentGenerator + clear(keepCache) + when (link.type) { ExtractorLinkType.M3U8 -> { - if (gen is M3u8PreviewGenerator) { - gen.load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) - } else { - currentGenerator.release() - currentGenerator = M3u8PreviewGenerator().apply { - load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) - } + currentGenerator = M3u8PreviewGenerator().apply { + load(url = link.url, headers = link.getAllHeaders()) } } ExtractorLinkType.VIDEO -> { - if (gen is Mp4PreviewGenerator) { - gen.load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) - } else { - currentGenerator.release() - currentGenerator = Mp4PreviewGenerator().apply { - load(keepCache = keepCache, url = link.url, headers = link.getAllHeaders()) - } + currentGenerator = Mp4PreviewGenerator().apply { + load(url = link.url, headers = link.getAllHeaders()) } } else -> { Log.i("PreviewImg", "unsupported format for $link") - currentGenerator.clear(keepCache) } } } fun load(context: Context, link: ExtractorUri, keepCache: Boolean) { - val gen = currentGenerator - if (gen is Mp4PreviewGenerator) { - gen.load(keepCache = keepCache, context = context, uri = link.uri) - } else { - currentGenerator.release() - currentGenerator = Mp4PreviewGenerator().apply { - load(keepCache = keepCache, context = context, uri = link.uri) - } + clear(keepCache) + currentGenerator = Mp4PreviewGenerator().apply { + load(keepCache = keepCache, context = context, uri = link.uri) } } } -class NoPreviewGenerator : IPreviewGenerator { +private class NoPreviewGenerator : IPreviewGenerator { override fun hasPreview(): Boolean = false override fun getPreviewImage(fraction: Float): Bitmap? = null - override fun clear(keepCache: Boolean) = Unit override fun release() = Unit + override var durationMs: Long = 0L + override var loadedImages: Int = 0 } -class M3u8PreviewGenerator : IPreviewGenerator { +private class M3u8PreviewGenerator : IPreviewGenerator { // generated images 1:1 to idx of hsl private var images: Array = arrayOf() @@ -118,7 +154,7 @@ class M3u8PreviewGenerator : IPreviewGenerator { private var prefixSum: Array = arrayOf() // how many images has been generated - private var loadedImages: Int = 0 + override var loadedImages: Int = 0 // how many images we can generate in total, == hsl.size ?: 0 private var totalImages: Int = 0 @@ -155,7 +191,7 @@ class M3u8PreviewGenerator : IPreviewGenerator { }*/ } - override fun clear(keepCache: Boolean) { + private fun clear() { synchronized(images) { currentJob?.cancel() images = arrayOf() @@ -170,9 +206,11 @@ class M3u8PreviewGenerator : IPreviewGenerator { images = arrayOf() } + override var durationMs: Long = 0L + private var currentJob: Job? = null - fun load(keepCache: Boolean, url: String, headers: Map) { - clear(keepCache) + fun load(url: String, headers: Map) { + clear() currentJob?.cancel() currentJob = ioSafe { withContext(Dispatchers.IO) { @@ -201,6 +239,7 @@ class M3u8PreviewGenerator : IPreviewGenerator { // total duration of the entire m3u8 in seconds val duration = hsl.allTsLinks.sumOf { it.time ?: 0.0 } + durationMs = (duration * 1000.0).toLong() val durationInv = 1.0 / duration // if the total duration is less then 10s then something is very wrong or @@ -245,7 +284,7 @@ class M3u8PreviewGenerator : IPreviewGenerator { if (!isActive) { return@withContext } - if(img == null || img.width <= 1 || img.height <= 1) continue + if (img == null || img.width <= 1 || img.height <= 1) continue synchronized(images) { images[index] = img loadedImages += 1 @@ -269,11 +308,11 @@ class M3u8PreviewGenerator : IPreviewGenerator { } } -class Mp4PreviewGenerator : IPreviewGenerator { +private class Mp4PreviewGenerator : IPreviewGenerator { // lod = level of detail where the number indicates how many ones there is // 2^(lod-1) = images private var loadedLod = 0 - private var loadedImages = 0 + override var loadedImages = 0 private var images = Array((1 shl MAX_LOD) - 1) { null } @@ -305,7 +344,7 @@ class Mp4PreviewGenerator : IPreviewGenerator { if (idx > loadedImages) { break } - if(images[idx] == null) { + if (images[idx] == null) { continue } val currentFraction = @@ -325,7 +364,7 @@ class Mp4PreviewGenerator : IPreviewGenerator { // also check out https://github.com/wseemann/FFmpegMediaMetadataRetriever private val retriever: MediaMetadataRetriever = MediaMetadataRetriever() - override fun clear(keepCache: Boolean) { + private fun clear(keepCache: Boolean) { if (keepCache) return synchronized(images) { loadedLod = 0 @@ -335,11 +374,11 @@ class Mp4PreviewGenerator : IPreviewGenerator { } private var currentJob: Job? = null - fun load(keepCache: Boolean, url: String, headers: Map) { + fun load(url: String, headers: Map) { currentJob?.cancel() currentJob = ioSafe { Log.i(TAG, "Loading with url = $url headers = $headers") - clear(keepCache) + clear(true) retriever.setDataSource(url, headers) start(this) } @@ -360,6 +399,8 @@ class Mp4PreviewGenerator : IPreviewGenerator { clear(false) } + override var durationMs: Long = 0L + @Throws @WorkerThread private fun start(scope: CoroutineScope) { @@ -368,6 +409,7 @@ class Mp4PreviewGenerator : IPreviewGenerator { val durationMs = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toLong() ?: throw IllegalArgumentException("Bad video duration") + this.durationMs = durationMs val durationUs = (durationMs * 1000L).toFloat() //val width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)?.toInt() ?: throw IllegalArgumentException("Bad video width") //val height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)?.toInt() ?: throw IllegalArgumentException("Bad video height") @@ -388,7 +430,7 @@ class Mp4PreviewGenerator : IPreviewGenerator { MediaMetadataRetriever.OPTION_CLOSEST_SYNC ) if (!scope.isActive) return - if(img == null || img.width <= 1 || img.height <= 1) continue + if (img == null || img.width <= 1 || img.height <= 1) continue synchronized(images) { images[idx] = img loadedImages = maxOf(loadedImages, idx) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index bad78624..0e994be8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -22,17 +22,22 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton -import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.getApiSettings -import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys -import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.AllLanguagesName +import com.lagradost.cloudstream3.AnimeSearchResponse +import com.lagradost.cloudstream3.HomePageList +import com.lagradost.cloudstream3.MainAPI +import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.databinding.FragmentSearchBinding import com.lagradost.cloudstream3.databinding.HomeSelectMainpageBinding import com.lagradost.cloudstream3.mvvm.Resource @@ -53,8 +58,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.ownHide import com.lagradost.cloudstream3.utils.AppUtils.ownShow import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus 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 import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -63,9 +67,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import java.util.concurrent.locks.ReentrantLock -const val SEARCH_PREF_TAGS = "search_pref_tags" -const val SEARCH_PREF_PROVIDERS = "search_pref_providers" - class SearchFragment : Fragment() { companion object { fun List.filterSearchResponse(): List { @@ -194,7 +195,7 @@ class SearchFragment : Fragment() { validAPIs.flatMap { api -> api.supportedTypes }.distinct() ) { list -> if (selectedSearchTypes.toSet() != list.toSet()) { - setKey("$currentAccount/$SEARCH_PREF_TAGS", selectedSearchTypes) + DataStoreHelper.searchPreferenceTags = list selectedSearchTypes.clear() selectedSearchTypes.addAll(list) search(binding?.mainSearch?.query?.toString()) @@ -233,13 +234,7 @@ class SearchFragment : Fragment() { //searchMagIcon.scaleX = 0.65f //searchMagIcon.scaleY = 0.65f - context?.let { ctx -> - val validAPIs = ctx.filterProviderByPreferredMedia() - selectedApis = ctx.getKey( - "$currentAccount/$SEARCH_PREF_PROVIDERS", - defVal = validAPIs.map { it.name } - )!!.toMutableSet() - } + selectedApis = DataStoreHelper.searchPreferenceProviders.toMutableSet() binding?.searchFilter?.setOnClickListener { searchView -> searchView?.context?.let { ctx -> @@ -287,7 +282,7 @@ class SearchFragment : Fragment() { } fun updateList(types: List) { - setKey("$currentAccount/$SEARCH_PREF_TAGS", types.map { it.name }) + DataStoreHelper.searchPreferenceTags = types arrayAdapter.clear() currentValidApis = validAPIs.filter { api -> @@ -312,12 +307,7 @@ class SearchFragment : Fragment() { arrayAdapter.notifyDataSetChanged() } - val selectedSearchTypes = getKey>("$currentAccount/$SEARCH_PREF_TAGS") - ?.mapNotNull { listName -> - TvType.values().firstOrNull { it.name == listName } - } - ?.toMutableList() - ?: mutableListOf(TvType.Movie, TvType.TvSeries) + val selectedSearchTypes = DataStoreHelper.searchPreferenceTags bindChips( binding.tvtypesChipsScroll.tvtypesChips, @@ -343,7 +333,7 @@ class SearchFragment : Fragment() { } dialog.setOnDismissListener { - context?.setKey("$currentAccount/$SEARCH_PREF_PROVIDERS", currentSelectedApis.toList()) + DataStoreHelper.searchPreferenceProviders = currentSelectedApis.toList() selectedApis = currentSelectedApis } updateList(selectedSearchTypes.toList()) @@ -354,10 +344,7 @@ class SearchFragment : Fragment() { val settingsManager = context?.let { PreferenceManager.getDefaultSharedPreferences(it) } val isAdvancedSearch = settingsManager?.getBoolean("advanced_search", true) ?: true - selectedSearchTypes = context?.getKey>("$currentAccount/$SEARCH_PREF_TAGS") - ?.mapNotNull { listName -> TvType.values().firstOrNull { it.name == listName } } - ?.toMutableList() - ?: mutableListOf(TvType.Movie, TvType.TvSeries) + selectedSearchTypes = DataStoreHelper.searchPreferenceTags.toMutableList() if (isTrueTvSettings()) { binding?.searchFilter?.isFocusable = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 775cb718..10c0546f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -10,7 +10,9 @@ import androidx.core.widget.doOnTextChanged import com.fasterxml.jackson.annotation.JsonProperty import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia import com.lagradost.cloudstream3.APIHolder.unixTimeMS +import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey @@ -31,6 +33,8 @@ import com.lagradost.cloudstream3.ui.result.setImage import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import kotlin.reflect.KClass +import kotlin.reflect.KProperty const val VIDEO_POS_DUR = "video_pos_dur" const val VIDEO_WATCH_STATE = "video_watch_state" @@ -44,6 +48,28 @@ const val RESULT_EPISODE = "result_episode" const val RESULT_SEASON = "result_season" const val RESULT_DUB = "result_dub" + +class UserPreferenceDelegate( + private val key: String, private val default: T //, private val klass: KClass +) { + private val klass: KClass = default::class + private val realKey get() = "${DataStoreHelper.currentAccount}/$key" + operator fun getValue(self: Any?, property: KProperty<*>) = + AcraApplication.getKeyClass(realKey, klass.java) ?: default + + operator fun setValue( + self: Any?, + property: KProperty<*>, + t: T? + ) { + if (t == null) { + removeKey(realKey) + } else { + AcraApplication.setKeyClass(realKey, t) + } + } +} + object DataStoreHelper { // be aware, don't change the index of these as Account uses the index for the art private val profileImages = arrayOf( @@ -56,6 +82,48 @@ object DataStoreHelper { R.drawable.profile_bg_teal ) + private var searchPreferenceProvidersStrings : List by UserPreferenceDelegate( + /** java moment right here, as listOf()::class.java != List(0) { "" }::class.java */ + "search_pref_providers", List(0) { "" } + ) + + private fun serializeTv(data : List) : List = data.map { it.name } + + private fun deserializeTv(data : List) : List { + return data.mapNotNull { listName -> + TvType.values().firstOrNull { it.name == listName } + } + } + + var searchPreferenceProviders : List + get() { + val ret = searchPreferenceProvidersStrings + return ret.ifEmpty { + context?.filterProviderByPreferredMedia()?.map { it.name } ?: emptyList() + } + } set(value) { + searchPreferenceProvidersStrings = value + } + + private var searchPreferenceTagsStrings : List by UserPreferenceDelegate("search_pref_tags", listOf(TvType.Movie, TvType.TvSeries).map { it.name }) + var searchPreferenceTags : List + get() = deserializeTv(searchPreferenceTagsStrings) + set(value) { + searchPreferenceTagsStrings = serializeTv(value) + } + + + private var homePreferenceStrings : List by UserPreferenceDelegate("home_pref_homepage", listOf(TvType.Movie, TvType.TvSeries).map { it.name }) + var homePreference : List + get() = deserializeTv(homePreferenceStrings) + set(value) { + homePreferenceStrings = serializeTv(value) + } + + var homeBookmarkedList : IntArray by UserPreferenceDelegate("home_bookmarked_last_list", IntArray(0)) + var playBackSpeed : Float by UserPreferenceDelegate("playback_speed", 1.0f) + var resizeMode : Int by UserPreferenceDelegate("resize_mode", 0) + data class Account( @JsonProperty("keyIndex") val keyIndex: Int, diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 0f76e4dd..38df4c5b 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -349,14 +349,15 @@ android:layout_width="150dp" android:layout_height="40dp" android:layout_marginEnd="100dp" + android:layout_marginTop="60dp" android:backgroundTint="@color/skipOpTransparent" android:maxLines="1" android:padding="10dp" android:textColor="@color/white" android:visibility="gone" app:cornerRadius="@dimen/rounded_button_radius" - app:layout_constraintBottom_toTopOf="@+id/bottom_player_bar" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="@+id/player_top_holder" app:strokeColor="@color/white" app:strokeWidth="1dp" tools:text="Skip Opening" @@ -435,6 +436,7 @@ android:id="@+id/player_video_bar" android:layout_width="match_parent" android:layout_height="wrap_content" + tools:visibility="visible" android:layoutDirection="ltr" android:orientation="horizontal"> From f14557fe6a3268b07ea1421df109367e7d040da0 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 7 Oct 2023 01:54:34 +0200 Subject: [PATCH 573/888] lib fix --- .../lagradost/cloudstream3/ui/library/LibraryFragment.kt | 8 ++++++++ .../lagradost/cloudstream3/ui/library/LibraryViewModel.kt | 2 ++ 2 files changed, 10 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index d5fdc1aa..a3cc16c9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -15,6 +15,7 @@ import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayoutMediator import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder.allProviders @@ -229,6 +230,7 @@ class LibraryFragment : Fragment() { } binding?.viewpager?.setPageTransformer(LibraryScrollTransformer()) + binding?.viewpager?.adapter = binding?.viewpager?.adapter ?: ViewpagerAdapter( mutableListOf(), @@ -357,6 +359,7 @@ class LibraryFragment : Fragment() { 0, viewpager.adapter?.itemCount ?: 0 ) + binding?.viewpager?.setCurrentItem(libraryViewModel.currentPage, false) // Only stop loading after 300ms to hide the fade effect the viewpager produces when updating // Without this there would be a flashing effect: @@ -415,6 +418,11 @@ class LibraryFragment : Fragment() { } } } + binding?.viewpager?.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + libraryViewModel.currentPage = position + } + }) } override fun onConfigurationChanged(newConfig: Configuration) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index c104a7c3..e590b151 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -30,6 +30,8 @@ class LibraryViewModel : ViewModel() { private val _pages: MutableLiveData>> = MutableLiveData(null) val pages: LiveData>> = _pages + var currentPage : Int = 0 + private val _currentApiName: MutableLiveData = MutableLiveData("") val currentApiName: LiveData = _currentApiName From 33eb3a3b29a1dd7dd21a0847222bac1e6cc04bf5 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Sat, 7 Oct 2023 21:48:24 +0200 Subject: [PATCH 574/888] lib fix2 --- .../ui/library/LibraryViewModel.kt | 32 +++++++++++++------ .../cloudstream3/utils/DataStoreHelper.kt | 2 ++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index e590b151..b44913d9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -12,6 +12,7 @@ import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount enum class ListSorting(@StringRes val stringRes: Int) { @@ -30,7 +31,7 @@ class LibraryViewModel : ViewModel() { private val _pages: MutableLiveData>> = MutableLiveData(null) val pages: LiveData>> = _pages - var currentPage : Int = 0 + var currentPage: Int = 0 private val _currentApiName: MutableLiveData = MutableLiveData("") val currentApiName: LiveData = _currentApiName @@ -62,13 +63,21 @@ class LibraryViewModel : ViewModel() { reloadPages(true) } - fun sort(method: ListSorting, query: String? = null) { - val currentList = pages.value ?: return + fun sort(method: ListSorting, query: String? = null) = ioSafe { + val value = _pages.value ?: return@ioSafe + if (value is Resource.Success) { + sort(method, query, value.value) + } + } + + private fun sort(method: ListSorting, query: String? = null, items: List) { currentSortingMethod = method - (currentList as? Resource.Success)?.value?.forEachIndexed { _, page -> + DataStoreHelper.librarySortingMode = method.ordinal + + items.forEach { page -> page.sort(method, query) } - _pages.postValue(currentList) + _pages.postValue(Resource.Success(items)) } fun reloadPages(forceReload: Boolean) { @@ -89,8 +98,6 @@ class LibraryViewModel : ViewModel() { val library = (libraryResource as? Resource.Success)?.value ?: return@let sortingMethods = library.supportedListSorting.toList() - currentSortingMethod = null - repo.requireLibraryRefresh = false val pages = library.allLibraryLists.map { @@ -100,11 +107,18 @@ class LibraryViewModel : ViewModel() { ) } - _pages.postValue(Resource.Success(pages)) + val desiredSortingMethod = + ListSorting.values().getOrNull(DataStoreHelper.librarySortingMode) + if (desiredSortingMethod != null && library.supportedListSorting.contains(desiredSortingMethod)) { + sort(desiredSortingMethod, null, pages) + } else { + // null query = no sorting + sort(ListSorting.Query, null, pages) + } } } } - + init { MainActivity.reloadHomeEvent += ::reloadPages } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 10c0546f..952422a4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -26,6 +26,7 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.WhoIsWatchingAdapter +import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.FOCUS_SELF import com.lagradost.cloudstream3.ui.result.UiImage import com.lagradost.cloudstream3.ui.result.VideoWatchState @@ -123,6 +124,7 @@ object DataStoreHelper { var homeBookmarkedList : IntArray by UserPreferenceDelegate("home_bookmarked_last_list", IntArray(0)) var playBackSpeed : Float by UserPreferenceDelegate("playback_speed", 1.0f) var resizeMode : Int by UserPreferenceDelegate("resize_mode", 0) + var librarySortingMode : Int by UserPreferenceDelegate("library_sorting_mode", ListSorting.AlphabeticalA.ordinal) data class Account( @JsonProperty("keyIndex") From d277d8a9aabce833b6384948716a5c3d8c680807 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:56:30 +0200 Subject: [PATCH 575/888] bump upstream --- app/build.gradle.kts | 36 +++++++++++++++--------------- app/src/main/res/values/styles.xml | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9f484c48..639932c4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -50,16 +50,16 @@ android { } } - compileSdk = 33 + compileSdk = 34 buildToolsVersion = "34.0.0" defaultConfig { applicationId = "com.lagradost.cloudstream3" minSdk = 21 - targetSdk = 33 + targetSdk = 34 versionCode = 62 - versionName = "4.2.0" + versionName = "4.2.1" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") @@ -154,18 +154,18 @@ repositories { dependencies { implementation("com.google.android.mediahome:video:1.0.0") implementation("androidx.test.ext:junit-ktx:1.1.5") - testImplementation("org.json:json:20180813") + testImplementation("org.json:json:20230618") - implementation("androidx.core:core-ktx:1.10.1") + implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1") // need target 32 for 1.5.0 // dont change this to 1.6.0 it looks ugly af - implementation("com.google.android.material:material:1.5.0") + implementation("com.google.android.material:material:1.10.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") - implementation("androidx.navigation:navigation-fragment-ktx:2.6.0") - implementation("androidx.navigation:navigation-ui-ktx:2.6.0") - implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1") + implementation("androidx.navigation:navigation-fragment-ktx:2.7.4") + implementation("androidx.navigation:navigation-ui-ktx:2.7.4") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") @@ -173,9 +173,9 @@ dependencies { // implementation("io.karn:khttp-android:0.1.2") //okhttp instead // implementation("org.jsoup:jsoup:1.13.1") - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2") - implementation("androidx.preference:preference-ktx:1.2.0") + implementation("androidx.preference:preference-ktx:1.2.1") implementation("com.github.bumptech.glide:glide:4.13.1") kapt("com.github.bumptech.glide:compiler:4.13.1") @@ -200,14 +200,14 @@ dependencies { implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Bug reports - implementation("ch.acra:acra-core:5.11.0") - implementation("ch.acra:acra-toast:5.11.0") + implementation("ch.acra:acra-core:5.11.2") + implementation("ch.acra:acra-toast:5.11.2") - compileOnly("com.google.auto.service:auto-service-annotations:1.0") + compileOnly("com.google.auto.service:auto-service-annotations:1.1.1") //either for java sources: - annotationProcessor("com.google.auto.service:auto-service:1.0") + annotationProcessor("com.google.auto.service:auto-service:1.1.1") //or for kotlin sources (requires kapt gradle plugin): - kapt("com.google.auto.service:auto-service:1.0") + kapt("com.google.auto.service:auto-service:1.1.1") // subtitle color picker implementation("com.jaredrummler:colorpicker:1.1.0") @@ -229,7 +229,7 @@ dependencies { // implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1") implementation("com.github.Blatzar:NiceHttp:0.4.3") // To fix SSL fuckery on android 9 - implementation("org.conscrypt:conscrypt-android:2.2.1") + implementation("org.conscrypt:conscrypt-android:2.5.2") // Util to skip the URI file fuckery 🙏 implementation("com.github.LagradOst:SafeFile:0.0.5") diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e2f11221..5f7adea4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -388,7 +388,7 @@ true @null @null - @color/transparent + ?attr/primaryBlackBackground @drawable/rounded_dialog 512dp From 5b4fd8d77de24dbc012d6c2814e35db26d251fa9 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:05:34 -0600 Subject: [PATCH 576/888] Fix issue where DownloadedPlayerActivity interferes with MainActivity (#674) * Fix issue where DownloadedPlayerActivity interferes with MainActivity --- app/src/main/AndroidManifest.xml | 4 ++- .../lagradost/cloudstream3/CommonActivity.kt | 27 ++++++++++++------- .../lagradost/cloudstream3/MainActivity.kt | 2 ++ .../ui/player/DownloadedPlayerActivity.kt | 5 ++++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 15767d7b..503cd76b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,7 +61,9 @@ android:exported="true" android:resizeableActivity="true" android:screenOrientation="userLandscape" - android:supportsPictureInPicture="true"> + android:supportsPictureInPicture="true" + android:taskAffinity="com.lagradost.cloudstream3.downloadedplayer" + android:launchMode="singleTask"> diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index a7d899b6..16a438b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -65,6 +65,11 @@ object CommonActivity { _activity = WeakReference(value) } + @MainThread + fun setActivityInstance(newActivity: Activity?) { + activity = newActivity + } + @MainThread fun Activity?.getCastSession(): CastSession? { return (this as MainActivity?)?.mSessionManager?.currentCastSession @@ -203,23 +208,25 @@ object CommonActivity { setLocale(this, localeCode) } - fun init(act: ComponentActivity?) { - if (act == null) return - activity = act + fun init(act: Activity) { + setActivityInstance(act) + + val componentActivity = activity as? ComponentActivity ?: return + //https://stackoverflow.com/questions/52594181/how-to-know-if-user-has-disabled-picture-in-picture-feature-permission //https://developer.android.com/guide/topics/ui/picture-in-picture canShowPipMode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && // OS SUPPORT - act.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && // HAS FEATURE, MIGHT BE BLOCKED DUE TO POWER DRAIN - act.hasPIPPermission() // CHECK IF FEATURE IS ENABLED IN SETTINGS + componentActivity.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && // HAS FEATURE, MIGHT BE BLOCKED DUE TO POWER DRAIN + componentActivity.hasPIPPermission() // CHECK IF FEATURE IS ENABLED IN SETTINGS - act.updateLocale() - act.updateTv() + componentActivity.updateLocale() + componentActivity.updateTv() NewPipe.init(DownloaderTestImpl.getInstance()) for (resumeApp in resumeApps) { resumeApp.launcher = - act.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + componentActivity.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> val resultCode = result.resultCode val data = result.data if (resultCode == AppCompatActivity.RESULT_OK && data != null && resumeApp.position != null && resumeApp.duration != null) { @@ -236,11 +243,11 @@ object CommonActivity { // Ask for notification permissions on Android 13 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission( - act, + componentActivity, Manifest.permission.POST_NOTIFICATIONS ) != PackageManager.PERMISSION_GRANTED ) { - val requestPermissionLauncher = act.registerForActivityResult( + val requestPermissionLauncher = componentActivity.registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> Log.d(TAG, "Notification permission: $isGranted") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 17823f7c..5595c377 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -67,6 +67,7 @@ import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint import com.lagradost.cloudstream3.CommonActivity.screenHeight +import com.lagradost.cloudstream3.CommonActivity.setActivityInstance import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale import com.lagradost.cloudstream3.databinding.ActivityMainBinding @@ -590,6 +591,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onResume() { super.onResume() afterPluginsLoadedEvent += ::onAllPluginsLoaded + setActivityInstance(this) try { if (isCastApiAvailable()) { //mCastSession = mSessionManager.currentCastSession diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index d181e175..4c3376bb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -110,4 +110,9 @@ class DownloadedPlayerActivity : AppCompatActivity() { return } } + + override fun onResume() { + super.onResume() + CommonActivity.setActivityInstance(this) + } } \ No newline at end of file From b120a7bce206a1c7f537dc686446be3f0255eac6 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Tue, 10 Oct 2023 18:16:35 +0300 Subject: [PATCH 577/888] Library on TV (#663) * implementation for Library on TV --- .../cloudstream3/ExampleInstrumentedTest.kt | 4 + .../lagradost/cloudstream3/MainActivity.kt | 6 +- .../ui/library/LibraryFragment.kt | 98 +++++++-- .../ui/library/ViewpagerAdapter.kt | 5 +- app/src/main/res/layout/fragment_library.xml | 17 +- .../main/res/layout/fragment_library_tv.xml | 200 ++++++++++++++++++ .../res/layout/library_viewpager_page.xml | 2 + 7 files changed, 305 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/layout/fragment_library_tv.xml diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index df41ef91..a84b2457 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -9,6 +9,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.viewbinding.ViewBinding import com.lagradost.cloudstream3.databinding.FragmentHomeBinding import com.lagradost.cloudstream3.databinding.FragmentHomeTvBinding +import com.lagradost.cloudstream3.databinding.FragmentLibraryBinding +import com.lagradost.cloudstream3.databinding.FragmentLibraryTvBinding import com.lagradost.cloudstream3.databinding.FragmentPlayerBinding import com.lagradost.cloudstream3.databinding.FragmentPlayerTvBinding import com.lagradost.cloudstream3.databinding.FragmentResultBinding @@ -120,6 +122,8 @@ class ExampleInstrumentedTest { testAllLayouts(activity, R.layout.homepage_parent_tv, R.layout.homepage_parent) testAllLayouts(activity, R.layout.homepage_parent_tv, R.layout.homepage_parent) + testAllLayouts(activity, R.layout.fragment_library_tv, R.layout.fragment_library) + testAllLayouts(activity, R.layout.fragment_library_tv, R.layout.fragment_library) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 5595c377..f9fff88c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -543,9 +543,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { navRailView.isVisible = isNavVisible && landscape // Hide library on TV since it is not supported yet :( - val isTrueTv = isTrueTvSettings() - navView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv - navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + //val isTrueTv = isTrueTvSettings() + //navView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv + //navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv // Hide downloads on TV //navView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index a3cc16c9..85f0aedd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -1,38 +1,52 @@ package com.lagradost.cloudstream3.ui.library +import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.content.res.Configuration import android.os.Bundle import android.os.Handler import android.os.Looper +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS +import android.view.ViewGroup.FOCUS_BLOCK_DESCENDANTS import android.view.animation.AlphaAnimation +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast import androidx.annotation.StringRes import androidx.appcompat.widget.SearchView +import androidx.core.view.allViews import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.viewpager2.widget.ViewPager2 +import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentLibraryBinding import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.debugAssert +import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.syncproviders.SyncIdName +import com.lagradost.cloudstream3.ui.AutofitRecyclerView import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_LOAD import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_SHOW_METADATA +import com.lagradost.cloudstream3.ui.settings.SettingsFragment import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.reduceDragSensitivity @@ -80,9 +94,21 @@ class LibraryFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - val localBinding = FragmentLibraryBinding.inflate(inflater, container, false) - binding = localBinding - return localBinding.root + val layout = + if (SettingsFragment.isTvSettings()) R.layout.fragment_library_tv else R.layout.fragment_library + val root = inflater.inflate(layout, container, false) + binding = try { + FragmentLibraryBinding.bind(root) + } catch (t: Throwable) { + CommonActivity.showToast( + txt(R.string.unable_to_inflate, t.message ?: ""), + Toast.LENGTH_LONG + ) + logError(t) + null + } + + return root //return inflater.inflate(R.layout.fragment_library, container, false) } @@ -99,24 +125,16 @@ class LibraryFragment : Fragment() { super.onSaveInstanceState(outState) } + @SuppressLint("ResourceType", "CutPasteId") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) fixPaddingStatusbar(binding?.searchStatusBarPadding) - binding?.sortFab?.setOnClickListener { - val methods = libraryViewModel.sortingMethods.map { - txt(it.stringRes).asString(view.context) - } + binding?.sortFab?.setOnClickListener(sortChangeClickListener) + binding?.librarySort?.setOnClickListener(sortChangeClickListener) - activity?.showBottomDialog(methods, - libraryViewModel.sortingMethods.indexOf(libraryViewModel.currentSortingMethod), - txt(R.string.sort_by).asString(view.context), - false, - {}, - { - val method = libraryViewModel.sortingMethods[it] - libraryViewModel.sort(method) - }) + binding?.libraryRoot?.findViewById(R.id.search_src_text)?.apply { + tag = "tv_no_focus_tag" } binding?.mainSearch?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { @@ -266,7 +284,10 @@ class LibraryFragment : Fragment() { // selects the whole list opener val savedListSelection = getKey("$currentAccount/$LIBRARY_FOLDER", syncName.name) - val savedSelection = getKey("$currentAccount/$LIBRARY_FOLDER", syncId).takeIf { + val savedSelection = getKey( + "$currentAccount/$LIBRARY_FOLDER", + syncId + ).takeIf { it?.openType != LibraryOpenerType.Default } ?: savedListSelection @@ -354,6 +375,12 @@ class LibraryFragment : Fragment() { } (viewpager.adapter as? ViewpagerAdapter)?.pages = pages + //fix focus on the viewpager itself + (viewpager.getChildAt(0) as RecyclerView).apply { + tag = "tv_no_focus_tag" + //isFocusable = false + } + // Using notifyItemRangeChanged keeps the animations when sorting viewpager.adapter?.notifyItemRangeChanged( 0, @@ -396,6 +423,9 @@ class LibraryFragment : Fragment() { viewpager, ) { tab, position -> tab.text = pages.getOrNull(position)?.title?.asStringNull(context) + tab.view.tag = "tv_no_focus_tag" + tab.view.nextFocusDownId = R.id.search_result_root + tab.view.setOnClickListener { val currentItem = binding?.viewpager?.currentItem ?: return@setOnClickListener @@ -418,17 +448,45 @@ class LibraryFragment : Fragment() { } } } - binding?.viewpager?.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + binding?.viewpager?.registerOnPageChangeCallback(object : + ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { - libraryViewModel.currentPage = position + val all = binding?.viewpager?.allViews?.toList() + ?.filterIsInstance() + + all?.forEach { view -> + view.isVisible = view.tag == position + view.isFocusable = view.tag == position + + if (view.tag == position) + view.descendantFocusability = FOCUS_AFTER_DESCENDANTS + else + view.descendantFocusability = FOCUS_BLOCK_DESCENDANTS + } + super.onPageSelected(position) } }) } - override fun onConfigurationChanged(newConfig: Configuration) { (binding?.viewpager?.adapter as? ViewpagerAdapter)?.rebind() super.onConfigurationChanged(newConfig) } + + private val sortChangeClickListener = View.OnClickListener { view -> + val methods = libraryViewModel.sortingMethods.map { + txt(it.stringRes).asString(view.context) + } + + activity?.showBottomDialog(methods, + libraryViewModel.sortingMethods.indexOf(libraryViewModel.currentSortingMethod), + txt(R.string.sort_by).asString(view.context), + false, + {}, + { + val method = libraryViewModel.sortingMethods[it] + libraryViewModel.sort(method) + }) + } } class MenuSearchView(context: Context) : SearchView(context) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index 95fefcbe..76028487 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -25,7 +25,7 @@ class ViewpagerAdapter( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is PageViewHolder -> { - holder.bind(pages[position], unbound.remove(position)) + holder.bind(pages[position], position, unbound.remove(position)) } } } @@ -43,7 +43,8 @@ class ViewpagerAdapter( inner class PageViewHolder(private val binding: LibraryViewpagerPageBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(page: SyncAPI.Page, rebind: Boolean) { + fun bind(page: SyncAPI.Page, position: Int, rebind: Boolean) { + binding.pageRecyclerview.tag = position binding.pageRecyclerview.apply { spanCount = this@PageViewHolder.itemView.context.getSpanCount() ?: 3 diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 985d055d..879ddbd9 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -41,6 +41,20 @@ android:src="@drawable/ic_baseline_extension_24" app:tint="?attr/textColor" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/library_viewpager_page.xml b/app/src/main/res/layout/library_viewpager_page.xml index 7d278cff..aa9745fb 100644 --- a/app/src/main/res/layout/library_viewpager_page.xml +++ b/app/src/main/res/layout/library_viewpager_page.xml @@ -5,5 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" + android:focusable="false" + android:tag="tv_no_focus_tag" tools:listitem="@layout/home_result_grid_expanded" /> From abbad1bc949588009bb1cf4c22405e33d790d09c Mon Sep 17 00:00:00 2001 From: KingLucius Date: Tue, 10 Oct 2023 18:17:18 +0300 Subject: [PATCH 578/888] Delete Focus frame from empty Downloads list & Search TV Layout (#675) * Delete Focus frame in search TV layout * Delete focus frame for empty Downloads list * Chip rounded stroke frame --- .../com/lagradost/cloudstream3/ui/search/SearchFragment.kt | 3 ++- app/src/main/res/layout/fragment_downloads.xml | 1 + app/src/main/res/layout/fragment_search_tv.xml | 2 ++ app/src/main/res/values/styles.xml | 5 +++-- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 0e994be8..ce92d723 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -11,6 +11,7 @@ import android.widget.AbsListView import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.ListView +import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible @@ -221,7 +222,7 @@ class SearchFragment : Fragment() { SearchHelper.handleSearchClickCallback(callback) } - + searchRoot.findViewById(R.id.search_src_text)?.tag = "tv_no_focus_tag" searchAutofitResults.adapter = adapter searchLoadingBar.alpha = 0f } diff --git a/app/src/main/res/layout/fragment_downloads.xml b/app/src/main/res/layout/fragment_downloads.xml index 65f36209..5623bc7e 100644 --- a/app/src/main/res/layout/fragment_downloads.xml +++ b/app/src/main/res/layout/fragment_downloads.xml @@ -137,6 +137,7 @@ android:background="?attr/primaryBlackBackground" android:descendantFocusability="afterDescendants" android:nextFocusLeft="@id/nav_rail_view" + android:tag = "@string/tv_no_focus_tag" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:listitem="@layout/download_header_episode" /> diff --git a/app/src/main/res/layout/fragment_search_tv.xml b/app/src/main/res/layout/fragment_search_tv.xml index b3f88cd2..e34b0ac3 100644 --- a/app/src/main/res/layout/fragment_search_tv.xml +++ b/app/src/main/res/layout/fragment_search_tv.xml @@ -85,6 +85,7 @@ android:nextFocusRight="@id/main_search" android:nextFocusUp="@id/nav_rail_view" android:nextFocusDown="@id/tvtypes_chips_scroll" + android:tag = "@string/tv_no_focus_tag" android:src="@drawable/ic_baseline_tune_24" app:tint="?attr/textColor" /> @@ -141,6 +142,7 @@ android:nextFocusLeft="@id/nav_rail_view" android:nextFocusUp="@id/tvtypes_chips" android:nextFocusDown="@id/search_clear_call_history" + android:tag = "@string/tv_no_focus_tag" android:paddingBottom="50dp" android:visibility="visible" tools:listitem="@layout/search_history_item" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5f7adea4..c00970d3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -86,8 +86,8 @@ From 91b195241e1f6a07a037732376c7007e4cbc3f30 Mon Sep 17 00:00:00 2001 From: self-similarity <137652432+self-similarity@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:19:27 +0000 Subject: [PATCH 579/888] Automatic backups (#592) Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com> --- .../lagradost/cloudstream3/MainActivity.kt | 2 +- .../services/BackupWorkManager.kt | 96 +++++++++++++++++++ .../ui/settings/SettingsUpdates.kt | 37 ++++++- .../cloudstream3/utils/BackupUtils.kt | 52 +++++----- .../lagradost/cloudstream3/utils/UIHelper.kt | 2 +- app/src/main/res/values/array.xml | 22 ++++- app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/settings_updates.xml | 15 ++- 8 files changed, 193 insertions(+), 35 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index f9fff88c..51032a6e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1110,7 +1110,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { if (appVer != lastAppAutoBackup) { setKey("VERSION_NAME", BuildConfig.VERSION_NAME) normalSafeApiCall { - backup() + backup(this) } normalSafeApiCall { // Recompile oat on new version diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt new file mode 100644 index 00000000..6ed7a447 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt @@ -0,0 +1,96 @@ +package com.lagradost.cloudstream3.services + +import android.content.Context +import androidx.core.app.NotificationCompat +import androidx.work.Constraints +import androidx.work.CoroutineWorker +import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.PeriodicWorkRequest +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.utils.AppUtils.createNotificationChannel +import com.lagradost.cloudstream3.utils.BackupUtils +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute +import java.util.concurrent.TimeUnit + +const val BACKUP_CHANNEL_ID = "cloudstream3.backups" +const val BACKUP_WORK_NAME = "work_backup" +const val BACKUP_CHANNEL_NAME = "Backups" +const val BACKUP_CHANNEL_DESCRIPTION = "Notifications for background backups" +const val BACKUP_NOTIFICATION_ID = 938712898 // Random unique + +class BackupWorkManager(val context: Context, workerParams: WorkerParameters) : + CoroutineWorker(context, workerParams) { + companion object { + fun enqueuePeriodicWork(context: Context?, intervalHours: Long) { + if (context == null) return + + if (intervalHours == 0L) { + WorkManager.getInstance(context).cancelUniqueWork(BACKUP_WORK_NAME) + return + } + + val constraints = Constraints.Builder() + .setRequiresStorageNotLow(true) + .build() + + val periodicSyncDataWork = + PeriodicWorkRequest.Builder( + BackupWorkManager::class.java, + intervalHours, + TimeUnit.HOURS + ) + .addTag(BACKUP_WORK_NAME) + .setConstraints(constraints) + .build() + + WorkManager.getInstance(context).enqueueUniquePeriodicWork( + BACKUP_WORK_NAME, + ExistingPeriodicWorkPolicy.UPDATE, + periodicSyncDataWork + ) + + // Uncomment below for testing + +// val oneTimeBackupWork = +// OneTimeWorkRequest.Builder(BackupWorkManager::class.java) +// .addTag(BACKUP_WORK_NAME) +// .setConstraints(constraints) +// .build() +// +// WorkManager.getInstance(context).enqueue(oneTimeBackupWork) + } + } + + private val backupNotificationBuilder = + NotificationCompat.Builder(context, BACKUP_CHANNEL_ID) + .setColorized(true) + .setOnlyAlertOnce(true) + .setSilent(true) + .setAutoCancel(true) + .setContentTitle(context.getString(R.string.pref_category_backup)) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setColor(context.colorFromAttribute(R.attr.colorPrimary)) + .setSmallIcon(R.drawable.ic_cloudstream_monochrome_big) + + override suspend fun doWork(): Result { + context.createNotificationChannel( + BACKUP_CHANNEL_ID, + BACKUP_CHANNEL_NAME, + BACKUP_CHANNEL_DESCRIPTION + ) + + setForeground( + ForegroundInfo( + BACKUP_NOTIFICATION_ID, + backupNotificationBuilder.build() + ) + ) + + BackupUtils.backup(context) + + return Result.success() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 62e46c08..2f796801 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -19,14 +19,16 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.databinding.LogcatBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.network.initClient +import com.lagradost.cloudstream3.services.BackupWorkManager import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.BackupUtils.backup +import com.lagradost.cloudstream3.utils.BackupUtils import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog +import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.VideoDownloadManager @@ -48,7 +50,30 @@ class SettingsUpdates : PreferenceFragmentCompat() { //val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) getPref(R.string.backup_key)?.setOnPreferenceClickListener { - activity?.backup() + BackupUtils.backup(activity) + return@setOnPreferenceClickListener true + } + + getPref(R.string.automatic_backup_key)?.setOnPreferenceClickListener { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) + + val prefNames = resources.getStringArray(R.array.periodic_work_names) + val prefValues = resources.getIntArray(R.array.periodic_work_values) + val current = settingsManager.getInt(getString(R.string.automatic_backup_key), 0) + + activity?.showDialog( + prefNames.toList(), + prefValues.indexOf(current), + getString(R.string.backup_frequency), + true, + {}) { index -> + settingsManager.edit() + .putInt(getString(R.string.automatic_backup_key), prefValues[index]).apply() + BackupWorkManager.enqueuePeriodicWork( + context ?: AcraApplication.context, + prefValues[index].toLong() + ) + } return@setOnPreferenceClickListener true } @@ -65,7 +90,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { val builder = AlertDialog.Builder(pref.context, R.style.AlertDialogCustom) - val binding = LogcatBinding.inflate(layoutInflater,null,false ) + val binding = LogcatBinding.inflate(layoutInflater, null, false) builder.setView(binding.root) val dialog = builder.create() @@ -176,7 +201,8 @@ class SettingsUpdates : PreferenceFragmentCompat() { val settingsManager = PreferenceManager.getDefaultSharedPreferences(it.context) val prefNames = resources.getStringArray(R.array.auto_download_plugin) - val prefValues = enumValues().sortedBy { x -> x.value }.map { x -> x.value } + val prefValues = + enumValues().sortedBy { x -> x.value }.map { x -> x.value } val current = settingsManager.getInt(getString(R.string.auto_download_plugins_key), 0) @@ -186,7 +212,8 @@ class SettingsUpdates : PreferenceFragmentCompat() { getString(R.string.automatic_plugin_download_mode_title), true, {}) { - settingsManager.edit().putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() + settingsManager.edit() + .putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } return@setOnPreferenceClickListener true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 96593769..e50131fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -10,6 +10,7 @@ import androidx.annotation.WorkerThread import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.module.kotlin.readValue +import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError @@ -90,9 +91,11 @@ object BackupUtils { ) @Suppress("UNCHECKED_CAST") - fun Context.getBackup(): BackupFile { - val allData = getSharedPrefs().all.filter { it.key.isTransferable() } - val allSettings = getDefaultSharedPrefs().all.filter { it.key.isTransferable() } + private fun getBackup(context: Context?): BackupFile? { + if (context == null) return null + + val allData = context.getSharedPrefs().all.filter { it.key.isTransferable() } + val allSettings = context.getDefaultSharedPrefs().all.filter { it.key.isTransferable() } val allDataSorted = BackupVars( allData.filter { it.value is Boolean } as? Map, @@ -119,46 +122,50 @@ object BackupUtils { } @WorkerThread - fun Context.restore( + fun restore( + context: Context?, backupFile: BackupFile, restoreSettings: Boolean, restoreDataStore: Boolean ) { + if (context == null) return if (restoreSettings) { - restoreMap(backupFile.settings._Bool, true) - restoreMap(backupFile.settings._Int, true) - restoreMap(backupFile.settings._String, true) - restoreMap(backupFile.settings._Float, true) - restoreMap(backupFile.settings._Long, true) - restoreMap(backupFile.settings._StringSet, true) + context.restoreMap(backupFile.settings._Bool, true) + context.restoreMap(backupFile.settings._Int, true) + context.restoreMap(backupFile.settings._String, true) + context.restoreMap(backupFile.settings._Float, true) + context.restoreMap(backupFile.settings._Long, true) + context.restoreMap(backupFile.settings._StringSet, true) } if (restoreDataStore) { - restoreMap(backupFile.datastore._Bool) - restoreMap(backupFile.datastore._Int) - restoreMap(backupFile.datastore._String) - restoreMap(backupFile.datastore._Float) - restoreMap(backupFile.datastore._Long) - restoreMap(backupFile.datastore._StringSet) + context.restoreMap(backupFile.datastore._Bool) + context.restoreMap(backupFile.datastore._Int) + context.restoreMap(backupFile.datastore._String) + context.restoreMap(backupFile.datastore._Float) + context.restoreMap(backupFile.datastore._Long) + context.restoreMap(backupFile.datastore._StringSet) } } @SuppressLint("SimpleDateFormat") - fun FragmentActivity.backup() = ioSafe { + fun backup(context: Context?) = ioSafe { + if (context == null) return@ioSafe + var fileStream: OutputStream? = null var printStream: PrintWriter? = null try { - if (!checkWrite()) { + if (!context.checkWrite()) { showToast(R.string.backup_failed, Toast.LENGTH_LONG) - requestRW() + context.getActivity()?.requestRW() return@ioSafe } val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) val ext = "txt" val displayName = "CS3_Backup_${date}" - val backupFile = getBackup() - val stream = setupStream(this@backup, displayName, null, ext, false) + val backupFile = getBackup(context) + val stream = setupStream(context, displayName, null, ext, false) fileStream = stream.openNew() printStream = PrintWriter(fileStream) @@ -198,7 +205,8 @@ object BackupUtils { val restoredValue = mapper.readValue(input) - activity.restore( + restore( + activity, restoredValue, restoreSettings = true, restoreDataStore = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 038a2f11..9b40e70e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -71,7 +71,7 @@ object UIHelper { val Int.toDp: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt() val Float.toDp: Float get() = (this / Resources.getSystem().displayMetrics.density) - fun Activity.checkWrite(): Boolean { + fun Context.checkWrite(): Boolean { return (ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 1df7b9d6..b8f0cbf8 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -41,7 +41,7 @@ 0 1 - + @string/disable @@ -126,6 +126,26 @@ 30min + + @string/none + 3h + 6h + 12h + 24h + 3d + 7d + + + + 0 + 3 + 6 + 12 + 24 + 72 + 168 + + 0 60 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 13251c7c..c722f33f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,6 +51,7 @@ primary_color_key restore_key backup_key + automatic_backup_key prefer_media_type_key_2 app_theme_key episode_sync_enabled_key @@ -229,6 +230,7 @@ Automatically sync your current episode progress Restore data from backup Back up data + Backup frequency Loaded backup file Failed to restore data from file %s Data stored diff --git a/app/src/main/res/xml/settings_updates.xml b/app/src/main/res/xml/settings_updates.xml index 9989e47b..e3b36648 100644 --- a/app/src/main/res/xml/settings_updates.xml +++ b/app/src/main/res/xml/settings_updates.xml @@ -9,7 +9,7 @@ android:summaryOn="@string/bug_report_settings_on" android:title="@string/pref_disable_acra" /> - - + + - - + - Date: Tue, 10 Oct 2023 18:05:31 +0200 Subject: [PATCH 580/888] reverted to instant outline --- .../lagradost/cloudstream3/MainActivity.kt | 55 +++++---- app/src/main/res/drawable/outline.xml | 4 +- .../main/res/drawable/outline_drawable.xml | 4 +- .../res/drawable/outline_drawable_less.xml | 2 +- app/src/main/res/layout/fragment_result.xml | 2 +- app/src/main/res/layout/result_episode.xml | 4 +- .../main/res/layout/result_episode_both.xml | 9 -- .../res/layout/result_episode_both_old.xml | 14 +++ .../res/layout/result_episode_both_tv.xml | 21 ---- .../res/layout/result_episode_both_tv_old.xml | 21 ++++ .../main/res/layout/result_episode_large.xml | 1 + .../res/layout/result_episode_large_tv.xml | 111 ----------------- .../layout/result_episode_large_tv_old.xml | 112 ++++++++++++++++++ app/src/main/res/layout/result_episode_tv.xml | 60 ---------- .../main/res/layout/result_episode_tv_old.xml | 59 +++++++++ app/src/main/res/values/styles.xml | 9 +- 16 files changed, 246 insertions(+), 242 deletions(-) delete mode 100644 app/src/main/res/layout/result_episode_both.xml create mode 100644 app/src/main/res/layout/result_episode_both_old.xml delete mode 100644 app/src/main/res/layout/result_episode_both_tv.xml create mode 100644 app/src/main/res/layout/result_episode_both_tv_old.xml delete mode 100644 app/src/main/res/layout/result_episode_large_tv.xml create mode 100644 app/src/main/res/layout/result_episode_large_tv_old.xml delete mode 100644 app/src/main/res/layout/result_episode_tv.xml create mode 100644 app/src/main/res/layout/result_episode_tv_old.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 51032a6e..4e0d93c9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -283,6 +283,7 @@ var app = Requests(responseParser = object : ResponseParser { class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" + const val ANIMATED_OUTLINE : Boolean = false var lastError: String? = null /** @@ -1070,7 +1071,22 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } } - + private fun centerView(view : View?) { + if(view == null) return + try { + Log.v(TAG, "centerView: $view") + val r = Rect(0, 0, 0, 0) + view.getDrawingRect(r) + val x = r.centerX() + val y = r.centerY() + val dx = r.width() / 2 //screenWidth / 2 + val dy = screenHeight / 2 + val r2 = Rect(x - dx, y - dy, x + dx, y + dy) + view.requestRectangleOnScreen(r2, false) + // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) + } catch (_: Throwable) { + } + } override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) @@ -1125,43 +1141,26 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { val newLocalBinding = ActivityMainTvBinding.inflate(layoutInflater, null, false) setContentView(newLocalBinding.root) - if(isTrueTvSettings()) { + if(isTrueTvSettings() && ANIMATED_OUTLINE) { TvFocus.focusOutline = WeakReference(newLocalBinding.focusOutline) + newLocalBinding.root.viewTreeObserver.addOnScrollChangedListener { + TvFocus.updateFocusView(TvFocus.lastFocus.get(), same = true) + } newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> - // println("refocus $oldFocus -> $newFocus") - try { - val r = Rect(0, 0, 0, 0) - newFocus.getDrawingRect(r) - val x = r.centerX() - val y = r.centerY() - val dx = 0 //screenWidth / 2 - val dy = screenHeight / 2 - val r2 = Rect(x - dx, y - dy, x + dx, y + dy) - newFocus.requestRectangleOnScreen(r2, false) - // TvFocus.current =TvFocus.current.copy(y=y.toFloat()) - } catch (_: Throwable) { - } TvFocus.updateFocusView(newFocus) - /*var focus = newFocus - - while(focus != null) { - if(focus is ScrollingView && focus.canScrollVertically()) { - focus.scrollBy() - } - when(focus.parent) { - is View -> focus = newFocus - else -> break - } - }*/ } } else { newLocalBinding.focusOutline.isVisible = false } - newLocalBinding.root.viewTreeObserver.addOnScrollChangedListener { - TvFocus.updateFocusView(TvFocus.lastFocus.get(), same = true) + if(isTrueTvSettings()) { + newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus -> + centerView(newFocus) + } } + + ActivityMainBinding.bind(newLocalBinding.root) // this may crash } else { val newLocalBinding = ActivityMainBinding.inflate(layoutInflater, null, false) diff --git a/app/src/main/res/drawable/outline.xml b/app/src/main/res/drawable/outline.xml index 30077a98..7b436c7d 100644 --- a/app/src/main/res/drawable/outline.xml +++ b/app/src/main/res/drawable/outline.xml @@ -2,11 +2,9 @@ - - \ No newline at end of file diff --git a/app/src/main/res/drawable/outline_drawable.xml b/app/src/main/res/drawable/outline_drawable.xml index 8eec2d0b..16eba83c 100644 --- a/app/src/main/res/drawable/outline_drawable.xml +++ b/app/src/main/res/drawable/outline_drawable.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/outline_drawable_less.xml b/app/src/main/res/drawable/outline_drawable_less.xml index db74a092..aa3a8d0d 100644 --- a/app/src/main/res/drawable/outline_drawable_less.xml +++ b/app/src/main/res/drawable/outline_drawable_less.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index 87de7186..9d748c5a 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -875,7 +875,7 @@ android:descendantFocusability="afterDescendants" android:paddingBottom="100dp" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - tools:listitem="@layout/result_episode_both_tv" /> + tools:listitem="@layout/result_episode" /> diff --git a/app/src/main/res/layout/result_episode.xml b/app/src/main/res/layout/result_episode.xml index 80ff4bec..b56cdb1d 100644 --- a/app/src/main/res/layout/result_episode.xml +++ b/app/src/main/res/layout/result_episode.xml @@ -11,7 +11,9 @@ android:nextFocusRight="@id/download_button" app:cardBackgroundColor="@color/transparent" app:cardCornerRadius="@dimen/rounded_image_radius" - app:cardElevation="0dp"> + app:cardElevation="0dp" + android:foreground="@drawable/outline_drawable" + > diff --git a/app/src/main/res/layout/result_episode_both.xml b/app/src/main/res/layout/result_episode_both.xml deleted file mode 100644 index 61102e84..00000000 --- a/app/src/main/res/layout/result_episode_both.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_both_old.xml b/app/src/main/res/layout/result_episode_both_old.xml new file mode 100644 index 00000000..6472ecc1 --- /dev/null +++ b/app/src/main/res/layout/result_episode_both_old.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_both_tv.xml b/app/src/main/res/layout/result_episode_both_tv.xml deleted file mode 100644 index 13888b7e..00000000 --- a/app/src/main/res/layout/result_episode_both_tv.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_both_tv_old.xml b/app/src/main/res/layout/result_episode_both_tv_old.xml new file mode 100644 index 00000000..f273a118 --- /dev/null +++ b/app/src/main/res/layout/result_episode_both_tv_old.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_large.xml b/app/src/main/res/layout/result_episode_large.xml index 75292965..76e8c434 100644 --- a/app/src/main/res/layout/result_episode_large.xml +++ b/app/src/main/res/layout/result_episode_large.xml @@ -8,6 +8,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="10dp" + android:foreground="@drawable/outline_drawable" android:nextFocusRight="@id/download_button" app:cardBackgroundColor="?attr/boxItemBackground" diff --git a/app/src/main/res/layout/result_episode_large_tv.xml b/app/src/main/res/layout/result_episode_large_tv.xml deleted file mode 100644 index 5a9dee30..00000000 --- a/app/src/main/res/layout/result_episode_large_tv.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_large_tv_old.xml b/app/src/main/res/layout/result_episode_large_tv_old.xml new file mode 100644 index 00000000..3a7cef3c --- /dev/null +++ b/app/src/main/res/layout/result_episode_large_tv_old.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_tv.xml b/app/src/main/res/layout/result_episode_tv.xml deleted file mode 100644 index 53590b6b..00000000 --- a/app/src/main/res/layout/result_episode_tv.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/result_episode_tv_old.xml b/app/src/main/res/layout/result_episode_tv_old.xml new file mode 100644 index 00000000..62546cf9 --- /dev/null +++ b/app/src/main/res/layout/result_episode_tv_old.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c00970d3..c047c749 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -86,8 +86,8 @@ + + + + + + + + + + + + @@ -506,8 +506,8 @@ ?attr/colorPrimary - @android:dimen/dialog_min_width_major - @android:dimen/dialog_min_width_minor + @dimen/abc_dialog_min_width_major + @dimen/abc_dialog_min_width_minor @drawable/dialog__window_background From 35e38a53ad7638ef9407c8f710966ea09d6dac8b Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 25 Mar 2024 05:29:55 +0530 Subject: [PATCH 760/888] refactor: format build date and time and make it copyable (#1002) --- app/build.gradle.kts | 6 +++--- .../ui/settings/SettingsFragment.kt | 17 ++++++++++++----- app/src/main/res/layout/main_settings.xml | 13 +++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c2ba2907..7ba682be 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -70,9 +70,9 @@ android { val localProperties = gradleLocalProperties(rootDir) buildConfigField( - "String", - "BUILDDATE", - "new java.text.SimpleDateFormat(\"yyyy-MM-dd HH:mm\").format(new java.util.Date(" + System.currentTimeMillis() + "L));" + "long", + "BUILD_DATE", + "${System.currentTimeMillis()}" ) buildConfigField( "String", diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 72e22269..dfa84998 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -30,6 +30,11 @@ import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx import java.io.File +import java.text.DateFormat +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale +import java.util.TimeZone class SettingsFragment : Fragment() { companion object { @@ -180,12 +185,14 @@ class SettingsFragment : Fragment() { val appVersion = getString(R.string.app_version) val commitInfo = getString(R.string.commit_hash) - val buildDate = BuildConfig.BUILDDATE + val buildTimestamp = SimpleDateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, + Locale.getDefault() + ).apply { timeZone = TimeZone.getTimeZone("UTC") + }.format(Date(BuildConfig.BUILD_DATE)).replace("UTC", "") - binding?.buildDate?.text = buildDate - - binding?.appVersionInfo?.setOnLongClickListener{ - clipboardHelper(txt(R.string.extension_version), "$appVersion $commitInfo") + binding?.buildDate?.text = buildTimestamp + binding?.appVersionInfo?.setOnLongClickListener { + clipboardHelper(txt(R.string.extension_version), "$appVersion $commitInfo $buildTimestamp") true } } diff --git a/app/src/main/res/layout/main_settings.xml b/app/src/main/res/layout/main_settings.xml index c3bdc17d..2c90d958 100644 --- a/app/src/main/res/layout/main_settings.xml +++ b/app/src/main/res/layout/main_settings.xml @@ -112,9 +112,9 @@ android:orientation="horizontal"> @@ -123,8 +123,6 @@ android:id="@+id/delimiter0" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" - android:padding="10dp" android:text="•" android:textColor="?attr/textColor" /> @@ -132,7 +130,6 @@ android:id="@+id/commit_hash" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" android:padding="10dp" android:text="@string/commit_hash" android:textColor="?attr/textColor" /> @@ -141,9 +138,6 @@ android:id="@+id/delimiter1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_weight="1" - android:gravity="center" - android:padding="10dp" android:text="•" android:textColor="?attr/textColor" /> @@ -151,10 +145,9 @@ android:id="@+id/build_date" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_weight="1" - android:gravity="center" android:padding="10dp" - android:textColor="?attr/textColor" /> + android:textColor="?attr/textColor" + tools:text="21/03/2024 09:02 pm"/> From 22937424fa7e96119a665bb10668df8cb89f7d35 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 25 Mar 2024 05:33:04 +0530 Subject: [PATCH 761/888] feat(ui): authenticate first when enabling security settings (#991) --- app/build.gradle.kts | 2 +- .../lagradost/cloudstream3/MainActivity.kt | 14 ++-- .../ui/account/AccountSelectActivity.kt | 14 ++-- .../ui/settings/SettingsAccount.kt | 67 ++++++++++++++----- .../utils/BiometricAuthenticator.kt | 33 ++++----- app/src/main/res/values/strings.xml | 4 +- build.gradle.kts | 8 +-- 7 files changed, 91 insertions(+), 51 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7ba682be..02946e85 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -154,7 +154,7 @@ repositories { dependencies { // Testing testImplementation("junit:junit:4.13.2") - testImplementation("org.json:json:20231013") + testImplementation("org.json:json:20240303") androidTestImplementation("androidx.test:core") implementation("androidx.test.ext:junit-ktx:1.1.5") androidTestImplementation("androidx.test.ext:junit:1.1.5") diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 67bf19fb..7baac71c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -135,7 +135,10 @@ import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.isAuthEnabled +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.promptInfo import com.lagradost.cloudstream3.utils.BiometricAuthenticator.startBiometricAuthentication import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main @@ -1231,18 +1234,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, changeStatusBarState(isLayout(EMULATOR)) /** Biometric stuff for users without accounts **/ - val authEnabled = settingsManager.getBoolean(getString(R.string.biometric_key), false) val noAccounts = settingsManager.getBoolean( getString(R.string.skip_startup_account_select_key), false ) || accounts.count() <= 1 - if (isLayout(PHONE) && authEnabled && noAccounts) { + if (isLayout(PHONE) && isAuthEnabled(this) && noAccounts) { if (deviceHasPasswordPinLock(this)) { startBiometricAuthentication(this, R.string.biometric_authentication_title, false) - BiometricAuthenticator.promptInfo?.let { promt -> - BiometricAuthenticator.biometricPrompt?.authenticate(promt) + promptInfo?.let { prompt -> + biometricPrompt?.authenticate(prompt) } // hide background while authenticating, Sorry moms & dads 🙏 @@ -1825,6 +1827,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, binding?.navHostFragment?.isInvisible = false } + override fun onAuthenticationError() { + finish() + } + private var backPressedCallback: OnBackPressedCallback? = null private fun attachBackPressedCallback() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt index 41aef176..0b0d83db 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt @@ -23,7 +23,10 @@ import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.isAuthEnabled +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.promptInfo import com.lagradost.cloudstream3.utils.BiometricAuthenticator.startBiometricAuthentication import com.lagradost.cloudstream3.utils.DataStoreHelper.accounts import com.lagradost.cloudstream3.utils.DataStoreHelper.selectedKeyIndex @@ -48,7 +51,6 @@ class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.Biomet ) val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val authEnabled = settingsManager.getBoolean(getString(R.string.biometric_key), false) val skipStartup = settingsManager.getBoolean(getString(R.string.skip_startup_account_select_key), false ) || accounts.count() <= 1 @@ -56,7 +58,7 @@ class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.Biomet fun askBiometricAuth() { - if (isLayout(PHONE) && authEnabled) { + if (isLayout(PHONE) && isAuthEnabled(this)) { if (deviceHasPasswordPinLock(this)) { startBiometricAuthentication( this, @@ -64,8 +66,8 @@ class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.Biomet false ) - BiometricAuthenticator.promptInfo?.let { promt -> - BiometricAuthenticator.biometricPrompt?.authenticate(promt) + promptInfo?.let { prompt -> + biometricPrompt?.authenticate(prompt) } } } @@ -189,4 +191,8 @@ class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.Biomet override fun onAuthenticationSuccess() { Log.i(BiometricAuthenticator.TAG,"Authentication successful in AccountSelectActivity") } + + override fun onAuthenticationError() { + finish() + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 298431ee..f0d402da 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -12,6 +12,7 @@ import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import androidx.preference.SwitchPreferenceCompat import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent @@ -30,6 +31,7 @@ import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref @@ -38,13 +40,20 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setTool import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.BackupUtils +import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.authCallback +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.isAuthEnabled +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.promptInfo +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.startBiometricAuthentication import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogText import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.setImage -class SettingsAccount : PreferenceFragmentCompat() { +class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.BiometricAuthCallback { companion object { /** Used by nginx plugin too */ fun showLoginInfo( @@ -252,6 +261,31 @@ class SettingsAccount : PreferenceFragmentCompat() { } } + private fun updateAuthPreference(enabled: Boolean) { + val biometricKey = getString(R.string.biometric_key) + + PreferenceManager.getDefaultSharedPreferences(context ?: return).edit() + .putBoolean(biometricKey, enabled).apply() + findPreference(biometricKey)?.isChecked = enabled + } + + override fun onAuthenticationError() { + updateAuthPreference(!isAuthEnabled(context ?: return)) + } + + override fun onAuthenticationSuccess() { + if (isAuthEnabled(context?: return)) { + updateAuthPreference(true) + BackupUtils.backup(activity) + activity?.showBottomDialogText( + getString(R.string.biometric_setting), + getString(R.string.biometric_warning).html() + ) { onDialogDismissedEvent } + } else { + updateAuthPreference(false) + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpToolbar(R.string.category_account) @@ -263,22 +297,25 @@ class SettingsAccount : PreferenceFragmentCompat() { hideKeyboard() setPreferencesFromResource(R.xml.settings_account, rootKey) - getPref(R.string.biometric_key)?.setOnPreferenceClickListener { - val authEnabled = PreferenceManager.getDefaultSharedPreferences( - context ?: return@setOnPreferenceClickListener false - ) - .getBoolean(getString(R.string.biometric_key), false) + // hide preference on tvs and emulators + getPref(R.string.biometric_key)?.isEnabled = isLayout(PHONE) - if (authEnabled) { - BackupUtils.backup(activity) - val title = activity?.getString(R.string.biometric_setting) - val warning = activity?.getString(R.string.biometric_warning) - activity?.showBottomDialogText( - title as String, - warning.html() - ) { onDialogDismissedEvent } + getPref(R.string.biometric_key)?.setOnPreferenceClickListener { + val ctx = context ?: return@setOnPreferenceClickListener false + + if (deviceHasPasswordPinLock(ctx)) { + startBiometricAuthentication( + activity?: return@setOnPreferenceClickListener false, + R.string.biometric_authentication_title, + false + ) + promptInfo?.let { + authCallback = this + biometricPrompt?.authenticate(it) + } } - true + + false } val syncApis = diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt index de9b9963..c57600ee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt @@ -12,20 +12,20 @@ import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK import androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL import androidx.biometric.BiometricPrompt import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getString import androidx.fragment.app.FragmentActivity +import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R object BiometricAuthenticator { + const val TAG = "cs3Auth" private const val MAX_FAILED_ATTEMPTS = 3 private var failedAttempts = 0 - const val TAG = "cs3Auth" - private var biometricManager: BiometricManager? = null var biometricPrompt: BiometricPrompt? = null var promptInfo: BiometricPrompt.PromptInfo? = null - var authCallback: BiometricAuthCallback? = null // listen to authentication success private fun initializeBiometrics(activity: Activity) { @@ -37,20 +37,12 @@ object BiometricAuthenticator { activity as FragmentActivity, executor, object : BiometricPrompt.AuthenticationCallback() { - override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) showToast("$errString") Log.e(TAG, "$errorCode") - failedAttempts++ - - if (failedAttempts >= MAX_FAILED_ATTEMPTS) { - failedAttempts = 0 - activity.finish() - } else { - failedAttempts = 0 - activity.finish() - } + authCallback?.onAuthenticationError() + //activity.finish() } override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { @@ -89,7 +81,6 @@ object BiometricAuthenticator { .setDescription(description) .setAllowedAuthenticators(authFlag) .build() - } else { // for apis < 30 promptInfo = BiometricPrompt.PromptInfo.Builder() @@ -98,7 +89,6 @@ object BiometricAuthenticator { .setDeviceCredentialAllowed(true) .build() } - } else { // fallback for A12+ when both fingerprint & Face unlock is absent but PIN is set promptInfo = BiometricPrompt.PromptInfo.Builder() @@ -114,7 +104,6 @@ object BiometricAuthenticator { var result = false if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - when (biometricManager?.canAuthenticate( DEVICE_CREDENTIAL or BIOMETRIC_STRONG or BIOMETRIC_WEAK )) { @@ -126,7 +115,6 @@ object BiometricAuthenticator { BiometricManager.BIOMETRIC_ERROR_UNSUPPORTED -> result = true BiometricManager.BIOMETRIC_STATUS_UNKNOWN -> result = false } - } else { @Suppress("DEPRECATION") when (biometricManager?.canAuthenticate()) { @@ -153,12 +141,11 @@ object BiometricAuthenticator { // function to start authentication in any fragment or activity fun startBiometricAuthentication(activity: Activity, title: Int, setDeviceCred: Boolean) { initializeBiometrics(activity) - + authCallback = activity as? BiometricAuthCallback if (isBiometricHardWareAvailable()) { authCallback = activity as? BiometricAuthCallback authenticationDialog(activity, title, setDeviceCred) promptInfo?.let { biometricPrompt?.authenticate(it) } - } else { if (deviceHasPasswordPinLock(activity)) { authCallback = activity as? BiometricAuthCallback @@ -171,7 +158,15 @@ object BiometricAuthenticator { } } + fun isAuthEnabled(ctx: Context):Boolean { + return ctx.let { + PreferenceManager.getDefaultSharedPreferences(ctx) + .getBoolean(getString(ctx, R.string.biometric_key), false) + } + } + interface BiometricAuthCallback { fun onAuthenticationSuccess() + fun onAuthenticationError() } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5dae57b..ab56a849 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -249,7 +249,7 @@ Search Library Accounts and Security - Updates and backup + Updates and Backup Info Advanced Search Gives you the search results separated by provider @@ -611,7 +611,7 @@ Tracks Audio tracks Video tracks - Apply on Restart + Restart the app to see changes. Restart Stop Safe mode on diff --git a/build.gradle.kts b/build.gradle.kts index 06af44d0..801a3c0f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,3 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() @@ -6,12 +5,9 @@ buildscript { } dependencies { - classpath("com.android.tools.build:gradle:8.2.1") + classpath("com.android.tools.build:gradle:8.2.2") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle.kts files } } @@ -23,7 +19,7 @@ allprojects { } plugins { - id("com.google.devtools.ksp") version "1.9.22-1.0.16" apply false + id("com.google.devtools.ksp") version "1.9.22-1.0.17" apply false } tasks.register("clean") { From 7db7742c734421e2e350448b6e08c0b4e8cfb1d0 Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 00:04:49 +0000 Subject: [PATCH 762/888] chore(locales): fix locale issues --- app/src/main/res/values-af/strings.xml | 2 +- app/src/main/res/values-ajp/strings.xml | 2 +- app/src/main/res/values-am/strings.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-ars/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-eo/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-kn/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-mk/strings.xml | 2 +- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-my/strings.xml | 2 +- app/src/main/res/values-ne/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-nn/strings.xml | 2 +- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-qt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-so/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-tl/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 50 files changed, 50 insertions(+), 50 deletions(-) diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 5c19185c..45e9a1d4 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -106,4 +106,4 @@ Voer lettertipes in deur dit in %s te plaas Rolverdeling: %s Nuwe episode notifikasie - \ No newline at end of file + diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index eb2bf74a..4d1fc074 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -614,4 +614,4 @@ في ارور بالنسخ. پليز نسوخ الـLogcat 🐈 وبعته ل المسؤولين عن دعم الآپ. هلّق نعمل نسخة احتياطية للداتا تبع \"كلود ستريم\". إذا مابق ينفتح ويمشي الآپ، فيك تعمل كلير للداتا تبعه وترَجع الداتا من النسخة الاحتياطية اللي هلّق عملنالك ياها. \nالاحتمال انو مابق ينفتح الآپ احتمالية زغيرة كتير، بس كل جهاز بيتصرف بشكل مختلف، ونحنا منعتذر إذا سببنا أي إزعاج. - \ No newline at end of file + diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index 63f28ba8..7fd3274b 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -108,4 +108,4 @@ ተጨማሪ መረጃ ዓይነቶችን በመጠቀም ይፈልጉ ቅርጸ-ቁምፊዎችን በ%s ውስጥ በማስቀመጥ ያጫኑ - \ No newline at end of file + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2ce9fd22..3140afeb 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -641,4 +641,4 @@ خطأ في الوصول الي حافظة النسخ، برجاء المحاولة مرة اخرى. تم النسخ! خطأ في عملية النسخ، برجاء نسخ ال logcat و ارساله الى مسؤولين دعم التطبيق. - \ No newline at end of file + diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index 530b07c9..f3811d3d 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -352,4 +352,4 @@ وثائقي موقع عنوان مشغل الفيديو بحد أقصى لعدد الأحرف - \ No newline at end of file + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 4a67f8c5..2be08369 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -601,4 +601,4 @@ Покажи предложения Добавя опция за промяна на скоростта в плеъра Този тест е направен за програмисти и не проверява работата на никакви добавки. - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index aa3def8f..867dd4ed 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -229,4 +229,4 @@ আপনার বর্তমান পর্বের অগ্রগতি স্বয়ংক্রিয়ভাবে সিঙ্ক করুন প্লাগইন ডাউনলোড ফিল্টার করতে মোড নির্বাচন করুন লিঙ্ক পুনরায় লোড হয়েছে - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 1a81021a..0cf1bb2c 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -631,4 +631,4 @@ Erro ao acessar a área de transferência. Tente novamente. Nome e URL do repositório Erro ao copiar. Copie o logcat e entre em contato com o suporte do aplicativo. - \ 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 8a11823e..519b05b6 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -633,4 +633,4 @@ Chyba při kopírování, zkopírujte prosím protokol a kontaktujte podporu aplikace. Zkopírováno! Chyba při přístupu ke schránce, zkuste to prosím znovu. - \ 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 7c56787c..5a871217 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -607,4 +607,4 @@ Beim kopieren ist ein Fehler aufgetreten, bitte kopieren sie logical und wenden sich an den Support. Fehler beim zugriff auf die Zwischenablage, bitte erneut versuchen. Repository Name und URL - \ 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 69bc390b..a539f374 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -546,4 +546,4 @@ Επιλέξτε κατάσταση για φιλτράρισμα επεκτάσεων για λήψη Απενεργοποιημένο Τέλος - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 35b04402..275a4bfb 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -127,4 +127,4 @@ Elŝutite Elŝutante Elŝuto Malsukcesite - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d3e90a41..055fc06b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -609,4 +609,4 @@ ¡Copiado! Error al copiar. Por favor, copie el logcat y comuníquese con el soporte de la aplicación. Error al acceder al portapapeles. Inténtelo de nuevo. - \ No newline at end of file + diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 85b65919..486f7a00 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -128,4 +128,4 @@ به پایان رسیده باز کردن در مرورگر برنامه‌ریزی برای تماشا - \ 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 35b93ac6..17f6a667 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -595,4 +595,4 @@ Ce test est destiné uniquement aux développeurs et ne vérifie ni n\'empêche le fonctionnement d\'aucune extension. Copié ! Nom du dépôt et adresse internet - \ No newline at end of file + diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2efe1991..ae3105cf 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -164,4 +164,4 @@ Selecciona o modo para filtrar a descarga dos complementos Instala automáticamente todos os complementos aínda non instalados dos repositorios engadidos. Mostrar actualizacións da aplicación - \ No newline at end of file + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 68bd645e..8ce224b3 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -192,4 +192,4 @@ लिंक पुन्ह खुली वर्तमान पिन दर्ज करें नेटवर्क स्ट्रीम - \ 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 4c31c274..ea6a80eb 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -629,4 +629,4 @@ Lozinka/PIN autentifikacija Ovaj uređaj ne podržava biometrijsku autentifikaciju Ovaj je ekran zatvoren zbog višestrukih neuspjelih pokušaja. Pokrenite aplikaciju ponovo. - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index b27f9df4..5533cdc0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -592,4 +592,4 @@ A PIN 4 karakter hosszú kell legyen Auto elforgatás Az automatikus videó orientáció alapján való képernyő elforgatás bekapcsolása - \ 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 6079d47d..d9a10c61 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -630,4 +630,4 @@ Gagal mengakses Papan Klip, mohon coba lagi. disalin! Gagal menyalin, mohon salin logcat dan hubungi pengembang aplikasi. - \ 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 08a05c35..7b958ad3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -629,4 +629,4 @@ copiato! Errore durante l\'accesso agli Appunti. Riprova. Errore durante la copia. Copia logcat e contatta il supporto dell\'app. - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 79c9e276..da2952a0 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -550,4 +550,4 @@ \nיגרמו לעדיפות הסרטון להיות 10. \n \nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען! - \ 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 index 5c80d77e..acb2cfc3 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -242,4 +242,4 @@ 現在のエピソードが終了したら次のエピソードを開始する 長押しするとデフォルトにリセットされます ダウンロードを再開 - \ 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 1c9d4e4c..f3fb665d 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -130,4 +130,4 @@ Brightness ಅಥವಾ volume ಬದಲಾಯಿಸಲು ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ ಈಗಿನ ಎಪಿಸೋಡ್ ಮುಗಿದಾಗ ಮುಂದಿನ ಎಪಿಸೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ - \ No newline at end of file + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index cb60b51c..1a63050a 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -527,4 +527,4 @@ 구독중 구독 %s 구독 취소 %s - \ No newline at end of file + diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index cf951ab9..f61bcfc0 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -260,4 +260,4 @@ Ar tikrai norite išeiti\? Pašalinti iš žiūrimų Garso takelis - \ No newline at end of file + diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index deacfdca..49b333e3 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -527,4 +527,4 @@ Abonēto šovu atjaunināšana Abonēts Abonēts %s - \ No newline at end of file + diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 814a5ed3..fe82a90b 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -591,4 +591,4 @@ Зачестеност на зачувување на бекап Овозможете автоматско префрлување на ориентацијата на екранот врз основа на видео ориентација Автоматска ротација - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index b4180f23..0ddd8577 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -245,4 +245,4 @@ ഉറവിട പിശക് നിലവിലെ പിൻ നൽകുക ഓഡിയോ ട്രാക്കുകൾ - \ No newline at end of file + diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index b29ca920..ef796f9f 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -550,4 +550,4 @@ သင်နဂိုတည်းကသတ်မှတ်ပြီး လိုက်ဘရီရွေးချယ်ရန် ဖြင့်ဖွင့်မည် - \ No newline at end of file + diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 97bda0a3..1e23f8af 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -85,4 +85,4 @@ स्रोतहरू स्वचालित बग रिपोर्टिङ असक्षम गर्नुहोस् लागू गर्नुहोस् - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 0844c7ec..fc537837 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -608,4 +608,4 @@ Link opnieuw geladen Autoroteer Roteer - \ No newline at end of file + diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 4835bcfb..95c527f9 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -195,4 +195,4 @@ Bilde i bilde Fortsett å sjå Prøv tilkopling på nytt… - \ No newline at end of file + diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index e599c2b0..724f4a63 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -538,4 +538,4 @@ Bruk Hjelp Profilbakgrunn - \ 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 c2e1000a..3e22ba16 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -610,4 +610,4 @@ Błąd dostępu do schowka. Spróbuj ponownie. skopiowano! Błąd podczas kopiowania. Skopiuj logcat i skontaktuj się z pomocą techniczną aplikacji. - \ 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 ff0f952f..b3180fee 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -607,4 +607,4 @@ Desbloqueie a aplicação com impressão digital, ID facial, PIN, padrão e palavra-passe. Esta janela fechar-se-á após algumas tentativas falhadas. Terá de reiniciar a aplicação. Foi feita uma cópia de segurança dos seus dados CloudStream, embora a probabilidade deste caso raro seja muito baixa, mas todos os dispositivos se comportam de forma diferente. No caso de ficar impedido de aceder à aplicação, na pior das hipóteses, limpe totalmente os dados da aplicação e restaure a cópia de segurança. Lamentamos profundamente qualquer inconveniente. - \ 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 583c6e0e..5de97c7d 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -247,4 +247,4 @@ oooooh uuaagh @string/home_play oouuhhh ahhooo-ahah - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 224ba880..d7da44b4 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -593,4 +593,4 @@ Adaugă o opțiune de viteză la player Favoriți/te Frecvența de backup - \ 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 77defab5..16f4449b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -593,4 +593,4 @@ Этот тест предназначен только для разработчиков и не подтверждает или не опровергает работоспособность провайдеров. Добавление настроек скорости в плеер Протестировать всех провайдеров - \ 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 1734b39f..ebaaa2ae 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -355,4 +355,4 @@ Maximálny počet znakov v názve prehrávača Spôsobuje problémy, ak je nastavená príliš vysoko v zariadeniach s malým ukladacím priestorom, ako je napríklad Android TV. Frekvencia zálohovania - \ No newline at end of file + diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index a1739399..7b0d2870 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -485,4 +485,4 @@ Bilowga Bilow isku qasan Qoraalka dhamaadka - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 3c57956e..76508c43 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -604,4 +604,4 @@ Ta bort från favoriter %s \nkvarstår - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 788afc34..e981d05a 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -119,4 +119,4 @@ போஸ்டர் பிரதான போஸ்டர் %1$s Ep %2$d - \ No newline at end of file + diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 0bdc57c1..b4308eb7 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -265,4 +265,4 @@ Mga Subtitle ng Chromecast Mga setting ng mga subtitle ng Chromecast Maglaro ng Trailer - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 06ff7498..7005fd95 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -656,4 +656,4 @@ kopyalandı! Panoya erişimde hata oluştu. Lütfen tekrar deneyin. Kopyalama hatası. Lütfen logcat\'i kopyalayın ve uygulama desteğiyle iletişime geçin. - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 19424fda..130e50af 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -609,4 +609,4 @@ Назва репозиторію та URL Помилка копіювання, будь ласка, скопіюйте logcat й зверніться до служби підтримки застосунку. Помилка доступу до буфера обміну, спробуйте ще раз. - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index c462a7d7..0bcad1cf 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -588,4 +588,4 @@ آغاز پر اکاؤنٹ کا انتخاب چھوڑ دیں ویڈیو واقفیت کی بنیاد پر اسکرین کی سمت بندی کی خودکار سوئچنگ کو فعال کریں خود بخود گھومنا - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 3853f1c8..ad60f597 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -606,4 +606,4 @@ Hiển thị nút xoay màn hình Kích hoạt chế độ xoay màn hình tự động Tự động xoay - \ 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 3dc282c0..0e5e34ea 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -637,4 +637,4 @@ 旋轉 根據影片方向自動切換畫面方向 連結已重新載入 - \ 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 a7c4ebc3..2360a7eb 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -651,4 +651,4 @@ \n剩余 测试所有扩展 已复制! - \ No newline at end of file + From 51d91bf9a79be692dab6964ef84c15fd83497b99 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 25 Mar 2024 05:48:26 +0530 Subject: [PATCH 763/888] feat(ui): add ignore battery optimisation dialog for uniterrupted downloads and notifications (#915) --- .../ui/result/ResultFragmentPhone.kt | 12 ++- .../ui/settings/SettingsGeneral.kt | 19 +++- .../cloudstream3/utils/PowerManagerAPI.kt | 86 +++++++++++++++++++ app/src/main/res/drawable/ic_battery.xml | 12 +++ app/src/main/res/values/strings.xml | 11 +++ app/src/main/res/xml/settings_general.xml | 22 +++-- 6 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt create mode 100644 app/src/main/res/drawable/ic_battery.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 8d0ca37b..fb5160a7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -30,7 +30,7 @@ import com.google.android.gms.cast.framework.CastState import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder.updateHasTrailers -import com.lagradost.cloudstream3.CommonActivity +import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.DubStatus import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent @@ -61,6 +61,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable import com.lagradost.cloudstream3.utils.AppUtils.loadCache import com.lagradost.cloudstream3.utils.AppUtils.openBrowser +import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.openBatteryOptimizationSettings import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogInstant @@ -442,8 +443,9 @@ open class ResultFragmentPhone : FullScreenPlayer() { val name = (viewModel.page.value as? Resource.Success)?.value?.title ?: txt(R.string.no_data).asStringNull(context) ?: "" - CommonActivity.showToast(txt(message, name), Toast.LENGTH_SHORT) + showToast(txt(message, name), Toast.LENGTH_SHORT) } + context?.let { openBatteryOptimizationSettings(it) } } resultFavorite.setOnClickListener { viewModel.toggleFavoriteStatus(context) { newStatus: Boolean? -> @@ -457,7 +459,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { val name = (viewModel.page.value as? Resource.Success)?.value?.title ?: txt(R.string.no_data).asStringNull(context) ?: "" - CommonActivity.showToast(txt(message, name), Toast.LENGTH_SHORT) + showToast(txt(message, name), Toast.LENGTH_SHORT) } } mediaRouteButton.apply { @@ -465,7 +467,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { alpha = if (chromecastSupport) 1f else 0.3f if (!chromecastSupport) { setOnClickListener { - CommonActivity.showToast( + showToast( R.string.no_chromecast_support_toast, Toast.LENGTH_LONG ) @@ -640,6 +642,8 @@ open class ResultFragmentPhone : FullScreenPlayer() { ), null ) { click -> + context?.let { openBatteryOptimizationSettings(it) } + when (click.action) { DOWNLOAD_ACTION_DOWNLOAD -> { viewModel.handleAction( 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 6cf00375..c3d84867 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 @@ -27,11 +27,15 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.ui.EasterEggMonke +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.beneneCount +import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar +import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.isAppRestricted +import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.showBatteryOptimizationDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog @@ -45,7 +49,6 @@ import com.lagradost.safefile.SafeFile // Change local language settings in the app. fun getCurrentLocale(context: Context): String { - // val dm = res.displayMetrics val res = context.resources val conf = res.configuration @@ -204,6 +207,20 @@ class SettingsGeneral : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } + // disable preference on tvs and emulators + getPref(R.string.battery_optimisation_key)?.isEnabled = isLayout(PHONE) + getPref(R.string.battery_optimisation_key)?.setOnPreferenceClickListener { + val ctx = context ?: return@setOnPreferenceClickListener false + + if (isAppRestricted(ctx)) { + showBatteryOptimizationDialog(ctx) + } else { + showToast(R.string.app_unrestricted_toast) + } + + true + } + fun showAdd() { val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } } activity?.showDialog( diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt new file mode 100644 index 00000000..27609730 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt @@ -0,0 +1,86 @@ +package com.lagradost.cloudstream3.utils + +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.PowerManager +import android.provider.Settings +import android.util.Log +import androidx.appcompat.app.AlertDialog +import androidx.preference.PreferenceManager +import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE +import com.lagradost.cloudstream3.ui.settings.Globals.isLayout + +const val packageName = BuildConfig.APPLICATION_ID +const val TAG = "PowerManagerAPI" + +object BatteryOptimizationChecker { + + fun isAppRestricted(context: Context?): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null) { + val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager + return !powerManager.isIgnoringBatteryOptimizations(context.packageName) + } + + return false // below Marshmallow, it's always unrestricted when app is in background + } + + fun openBatteryOptimizationSettings(context: Context) { + if (shouldShowBatteryOptimizationDialog(context)) { + showBatteryOptimizationDialog(context) + } + } + + fun showBatteryOptimizationDialog(context: Context) { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) + + try { + context.let { + AlertDialog.Builder(it) + .setTitle(R.string.battery_dialog_title) + .setIcon(R.drawable.ic_battery) + .setMessage(R.string.battery_dialog_message) + .setPositiveButton(R.string.ok) { _, _ -> + intentOpenAppInfo(it) + } + .setNegativeButton(R.string.cancel) { _, _ -> + settingsManager.edit() + .putBoolean(context.getString(R.string.battery_optimisation_key), false) + .apply() + } + .show() + } + } catch (t: Throwable) { + Log.e(TAG, "Error showing battery optimization dialog", t) + } + } + + private fun shouldShowBatteryOptimizationDialog(context: Context): Boolean { + val isRestricted = isAppRestricted(context) + val isOptimizedNotShown = PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.battery_optimisation_key), true) + return isRestricted && isOptimizedNotShown && isLayout(PHONE) + } + + private fun intentOpenAppInfo(context: Context) { + val intent = Intent() + try { + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) + .setData(Uri.fromParts("package", packageName, null)) + context.startActivity(intent, Bundle()) + } catch (t: Throwable) { + Log.e(TAG, "Unable to invoke any intent", t) + if (t is ActivityNotFoundException) { + showToast("Exception: Activity Not Found") + } else { + showToast(R.string.app_info_intent_error) + } + } + } +} diff --git a/app/src/main/res/drawable/ic_battery.xml b/app/src/main/res/drawable/ic_battery.xml new file mode 100644 index 00000000..24d0a77f --- /dev/null +++ b/app/src/main/res/drawable/ic_battery.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d88489a4..378fa16a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -654,6 +654,17 @@ Are you sure you want to exit\? Yes No + OK + Disable Battery optimization + To ensure uninterrupted downloads and notifications for subscribed + TV shows, CloudStream needs permission to run in background. By pressing "OK", you\'ll be directed to App info. + There, scroll to 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 and set battery usage to 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Please note, this permission + does not mean CS3 will drain your battery. It will only operate in the background when necessary, such as + when receiving notifications or downloading videos from official extensions. If you choose to cancel, + you can adjust this setting later in 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. + battery_optimisation + App battery usage is already set to unrestricted + Unable to open CloudStream\'s App info. Downloading app update… Installing app update… Could not install the new version of the app diff --git a/app/src/main/res/xml/settings_general.xml b/app/src/main/res/xml/settings_general.xml index c4900bca..cdda6d85 100644 --- a/app/src/main/res/xml/settings_general.xml +++ b/app/src/main/res/xml/settings_general.xml @@ -6,10 +6,7 @@ android:title="@string/app_language" android:icon="@drawable/ic_baseline_language_24" /> - + + android:title="@string/title_downloads"> + + + + + + + + Date: Mon, 25 Mar 2024 01:38:39 +0100 Subject: [PATCH 764/888] New TvTypes + General fixes --- .../com/lagradost/cloudstream3/MainAPI.kt | 6 ++- .../lagradost/cloudstream3/ui/BaseAdapter.kt | 2 +- .../ui/home/HomeParentItemAdapter.kt | 4 ++ .../ui/result/ResultViewModel2.kt | 37 ++++++++++++------- app/src/main/res/values/strings.xml | 3 ++ 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 273e267b..ecbdcbbc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -865,7 +865,11 @@ enum class TvType(value: Int?) { AsianDrama(9), Live(10), NSFW(11), - Others(12) + Others(12), + Music(13), + AudioBook(14), + /** Wont load the built in player, make your own interaction */ + CustomMedia(15), } public enum class AutoDownloadMode(val value: Int) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt index 7439bfdf..d90177f5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt @@ -85,7 +85,7 @@ abstract class BaseAdapter< AsyncDifferConfig.Builder(diffCallback).build() ) - fun submitList(list: List?) { + open fun submitList(list: List?) { // deep copy at least the top list, because otherwise adapter can go crazy mDiffer.submitList(list?.let { CopyOnWriteArrayList(it) }) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index fb75e772..4b0360d7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -63,6 +63,10 @@ open class ParentItemAdapter( } } + override fun submitList(list: List?) { + super.submitList(list?.sortedBy { it.list.list.isEmpty() }) + } + override fun onUpdateContent( holder: ViewHolderState, item: HomeViewModel.ExpandableHomepageList, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index c90e01d0..8bf743be 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -246,6 +246,9 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData { TvType.Live -> R.string.live_singular TvType.Others -> R.string.other_singular TvType.NSFW -> R.string.nsfw_singular + TvType.Music -> R.string.music_singlar + TvType.AudioBook -> R.string.audio_book_singular + TvType.CustomMedia -> R.string.custom_media_singluar } ), yearText = txt(year?.toString()), @@ -1759,20 +1762,28 @@ class ResultViewModel2 : ViewModel() { val data = currentResponse?.syncData?.toList() ?: emptyList() val list = HashMap().apply { putAll(data) } - - activity?.navigate( - R.id.global_to_navigation_player, - GeneratorPlayer.newInstance( - generator?.also { - it.getAll() // I know kinda shit to iterate all, but it is 100% sure to work - ?.indexOfFirst { value -> value is ResultEpisode && value.id == click.data.id } - ?.let { index -> - if (index >= 0) - it.goto(index) - } - } ?: return, list + generator?.also { + it.getAll() // I know kinda shit to iterate all, but it is 100% sure to work + ?.indexOfFirst { value -> value is ResultEpisode && value.id == click.data.id } + ?.let { index -> + if (index >= 0) + it.goto(index) + } + } + if (currentResponse?.type == TvType.CustomMedia) { + generator?.generateLinks( + clearCache = true, + LoadType.Unknown, + callback = {}, + subtitleCallback = {}) + } else { + activity?.navigate( + R.id.global_to_navigation_player, + GeneratorPlayer.newInstance( + generator ?: return, list + ) ) - ) + } } ACTION_MARK_AS_WATCHED -> { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 378fa16a..c2136b4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -764,4 +764,7 @@ Unlock the app with Fingerprint, Face ID, PIN, Pattern and Password. This screen was closed due to multiple failed attempts. Please restart the application. Your CloudStream data has been backed up now. Although the possibility of this is very low, all devices can behave differently. In the rare case, that you get locked out from accessing the app, clear the app data completely and restore from a backup. We are very sorry for any inconvenience arising from this. + Music + Audio Book + Media \ No newline at end of file From 0a24661e4cf301fac304ce6f28f32b718fdc81b1 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Mon, 25 Mar 2024 01:48:23 +0100 Subject: [PATCH 765/888] fix latest commit --- .../com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 8bf743be..84b8cf48 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -630,6 +630,9 @@ class ResultViewModel2 : ViewModel() { TvType.Live -> "LiveStreams" TvType.NSFW -> "NSFW" TvType.Others -> "Others" + TvType.Music -> "Music" + TvType.AudioBook -> "AudioBooks" + TvType.CustomMedia -> "Media" } } From a74563d003ba0d4e5f2cc48b527b53c801b90ee4 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 8 Apr 2024 04:02:02 +0200 Subject: [PATCH 766/888] Translated using Weblate (Russian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Russian) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Russian) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Vietnamese) Currently translated at 75.0% (3 of 4 strings) Translated using Weblate (Vietnamese) Currently translated at 98.7% (688 of 697 strings) Translated using Weblate (French) Currently translated at 96.8% (675 of 697 strings) Translated using Weblate (Arabic (Levantine)) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Persian) Currently translated at 34.7% (242 of 697 strings) Translated using Weblate (Vietnamese) Currently translated at 98.8% (689 of 697 strings) Translated using Weblate (Russian) Currently translated at 97.1% (677 of 697 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Malayalam) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Malayalam) Currently translated at 48.4% (338 of 697 strings) Translated using Weblate (Indonesian) Currently translated at 99.8% (696 of 697 strings) Translated using Weblate (Maltese) Currently translated at 100.0% (4 of 4 strings) Translated using Weblate (Maltese) Currently translated at 32.1% (224 of 697 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (697 of 697 strings) Added translation using Weblate (Maltese) Translated using Weblate (Spanish) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.1% (684 of 697 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Polish) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Italian) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Czech) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (697 of 697 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (697 of 697 strings) Merge remote-tracking branch 'origin/master' Translated using Weblate (Spanish) Currently translated at 99.4% (690 of 694 strings) Translated using Weblate (Odia) Currently translated at 37.5% (258 of 688 strings) Co-authored-by: Andre Costa Co-authored-by: Anonymous Co-authored-by: Argo Carpathians Co-authored-by: Clxff H3r4ld0 <123844876+clxf12@users.noreply.github.com> Co-authored-by: Colgrave Co-authored-by: Fjuro Co-authored-by: Fqwe1 Co-authored-by: Gnkalk Co-authored-by: Herderson Riker Co-authored-by: Hosted Weblate Co-authored-by: Joshua Joseph Co-authored-by: Long Kim Co-authored-by: Massimo Pissarello Co-authored-by: Matthaiks Co-authored-by: Michael John Scerri Co-authored-by: Mika Co-authored-by: Pizza Party Co-authored-by: Rex_sa Co-authored-by: Thanh Co-authored-by: aleksej0R Co-authored-by: gallegonovato Co-authored-by: kaajjo Co-authored-by: maxim Co-authored-by: samwiaba Co-authored-by: Ömer Faruk Sancak Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/apc/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ar/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/cs/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/es/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fa/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/fr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/id/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/it/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ml/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/mt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/or/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pl/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/tr/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/uk/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/vi/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/app/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/ml/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/mt/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/ru/ Translate-URL: https://hosted.weblate.org/projects/cloudstream/fastlane/vi/ Translation: Cloudstream/App Translation: Cloudstream/Fastlane --- app/src/main/res/values-ajp/strings.xml | 14 +- app/src/main/res/values-ar/strings.xml | 13 +- app/src/main/res/values-bp/strings.xml | 18 ++- app/src/main/res/values-cs/strings.xml | 12 +- app/src/main/res/values-es/strings.xml | 12 +- app/src/main/res/values-fa/strings.xml | 75 ++++++++++- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 14 +- app/src/main/res/values-it/strings.xml | 12 +- app/src/main/res/values-ml/strings.xml | 63 +++++++-- app/src/main/res/values-mt/strings.xml | 126 ++++++++++++++++++ app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 16 ++- app/src/main/res/values-pt/strings.xml | 18 ++- app/src/main/res/values-ru/strings.xml | 33 ++++- app/src/main/res/values-tr/strings.xml | 14 +- app/src/main/res/values-uk/strings.xml | 12 +- app/src/main/res/values-vi/strings.xml | 39 ++++-- app/src/main/res/values-zh/strings.xml | 10 +- .../metadata/android/ml-IN/changelogs/2.txt | 1 + .../android/ml-IN/full_description.txt | 10 ++ .../android/ml-IN/short_description.txt | 1 + fastlane/metadata/android/ml-IN/title.txt | 1 + fastlane/metadata/android/mt/changelogs/2.txt | 1 + .../metadata/android/mt/full_description.txt | 10 ++ .../metadata/android/mt/short_description.txt | 1 + fastlane/metadata/android/mt/title.txt | 1 + .../metadata/android/ru-RU/changelogs/2.txt | 1 + .../android/ru-RU/full_description.txt | 10 ++ .../android/ru-RU/short_description.txt | 1 + fastlane/metadata/android/ru-RU/title.txt | 1 + fastlane/metadata/android/vi/title.txt | 2 +- 32 files changed, 477 insertions(+), 71 deletions(-) create mode 100644 app/src/main/res/values-mt/strings.xml create mode 100644 fastlane/metadata/android/ml-IN/changelogs/2.txt create mode 100644 fastlane/metadata/android/ml-IN/full_description.txt create mode 100644 fastlane/metadata/android/ml-IN/short_description.txt create mode 100644 fastlane/metadata/android/ml-IN/title.txt create mode 100644 fastlane/metadata/android/mt/changelogs/2.txt create mode 100644 fastlane/metadata/android/mt/full_description.txt create mode 100644 fastlane/metadata/android/mt/short_description.txt create mode 100644 fastlane/metadata/android/mt/title.txt create mode 100644 fastlane/metadata/android/ru-RU/changelogs/2.txt create mode 100644 fastlane/metadata/android/ru-RU/full_description.txt create mode 100644 fastlane/metadata/android/ru-RU/short_description.txt create mode 100644 fastlane/metadata/android/ru-RU/title.txt diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index 4d1fc074..e4e17942 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -143,7 +143,7 @@ لودينگ… شيل بَعِد مَعلومات - التجديد والنسخات الاحتياطية + التجديدات والنسخات الاحتياطية خبي هيدي الجودات من نتائج التنبيش موقف موقتًا كلود ستريم @@ -448,7 +448,7 @@ التلخيص إِيه الرئيسي - طبّق وقتما سكّر الآپ + سكر الآپ حتى تطبق التغيرات ساعدوني عوز هيدا إذا عم بتبين الترجمة %d ميلي ثانية بعدما لازم ما نلاقا الآپ @@ -614,4 +614,12 @@ في ارور بالنسخ. پليز نسوخ الـLogcat 🐈 وبعته ل المسؤولين عن دعم الآپ. هلّق نعمل نسخة احتياطية للداتا تبع \"كلود ستريم\". إذا مابق ينفتح ويمشي الآپ، فيك تعمل كلير للداتا تبعه وترَجع الداتا من النسخة الاحتياطية اللي هلّق عملنالك ياها. \nالاحتمال انو مابق ينفتح الآپ احتمالية زغيرة كتير، بس كل جهاز بيتصرف بشكل مختلف، ونحنا منعتذر إذا سببنا أي إزعاج. - + أوكي + وقف اپتميزايشن بطارية جهازك + بطارية الآپ اصلًا محطوطة ع «غير مقيد» \"Unrestricted\" + ما قدرنا نفتح معلومات الآپ تبع \"كلود ستريم\". + موسيقى + أوديو بوك + الميديا + لتضمن عدم انقطاع التنزيلات والنوتيفيكايشنات للبرامج التلفزيونية يلي مشتركلها، الآپ \"كلود ستريم\" بده إذن ليمشي بـ الباكگروند. ازا كبست أوكي، رح تتوجه ع صفحة معلومات التطبيق. هونيك، نزال حتى توصل ل «استخدام بطارية التطبيق» \"App battery usage\" وحط استخدام البطارية ع «غير مقيد» \"Unrestricted\". ملاحظة إنو هيدا الإذن ما بيعني إنو \"كلود ستريم 3\" رح تستنزف البطارية. ومش رح يشتغل الآن بـ الباكگروند إلّا عند الضرورة، متل لمّا تتلقا نوتيفيكايشن أو تنزل ڤيديو من الريپو الاصلي. فيك ترجع ترد هيدا الستنگ بـ«الإعدادات العامة» \"General settings\"، إزا غيرت رأيك. + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3140afeb..2ac4d973 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -440,7 +440,7 @@ المسارات مسار الصوت مسار الفيديو - تطبيق بعد إعادة التشغيل + أعد تشغيل التطبيق لرؤية التغييرات. الوضع الآمن قيد التشغيل تم إيقاف تشغيل جميع الملحقات بسبب عطل لمساعدتك في العثور على الإضافة التي تسبب مشكلة. عرض بيانات الاعطال @@ -641,4 +641,13 @@ خطأ في الوصول الي حافظة النسخ، برجاء المحاولة مرة اخرى. تم النسخ! خطأ في عملية النسخ، برجاء نسخ ال logcat و ارساله الى مسؤولين دعم التطبيق. - + تعطيل تحسين البطارية + تم ضبط استخدام بطارية التطبيق بالفعل على غير مقيد + غير قادر على فتح معلومات تطبيق CloudStream. + كتاب صوتي + حسناً + لضمان عدم انقطاع التنزيلات والإشعارات للبرامج التلفزيونية المشتركة، يحتاج CloudStream إلى إذن للتشغيل في الخلفية. بالضغط على موافق، سيتم توجيهك إلى معلومات التطبيق. هناك، انتقل إلى استخدام بطارية التطبيق +\nواضبط استخدام البطارية على غير مقيد. يرجى ملاحظة أن هذا الإذن لا يعني أن CS3 سوف يستنزف البطارية. ولن يعمل إلا في الخلفية عند الضرورة، كما هو الحال عند تلقي الإشعارات أو تنزيل مقاطع الفيديو من الملحقات الرسمية. إذا اخترت الإلغاء، فيمكنك ضبط هذا الإعداد لاحقًا في الإعدادات العامة. + موسيقى + الوسائط + \ No newline at end of file diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 0cf1bb2c..e4f47749 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -50,7 +50,7 @@ Fontes Legendas Tentando conectar novamente… - Voltar + Volte Reproduzir episódio Download @@ -145,7 +145,7 @@ Erro no backup de %s Procurar Contas e Segurança - Atualizações e backup + Atualizações e Backup Info Procura Avançada Mostrar resultados separados por fornecedor @@ -473,7 +473,7 @@ Conteúdo +18 Ajuda Processo de configuração de Redo - Não pudemos instalar a nova versão do App + Não foi possível instalar a nova versão do aplicativo instalador de pacotes Organizar por Votação (Alta para Baixa) @@ -541,7 +541,7 @@ MPV Abrindo mistura VLC - Aplicar quando reiniciar + Reinicie o aplicativo para ver as alterações. Visualização info de crash Faixas de áudio Adicionado em (novo para antigo) @@ -631,4 +631,12 @@ Erro ao acessar a área de transferência. Tente novamente. Nome e URL do repositório Erro ao copiar. Copie o logcat e entre em contato com o suporte do aplicativo. - + Para garantir downloads e notificações ininterruptos para programas de TV assinados, o CloudStream precisa de permissão para ser executado em segundo plano. Ao pressionar OK, você será direcionado para as informações do aplicativo. Lá, vá até Uso da bateria do aplicativo e defina o uso da bateria como Irrestrito. Observe que esta permissão não significa que o CS3 irá descarregar sua bateria. Ele só funcionará em segundo plano quando necessário, como ao receber notificações ou baixar vídeos de extensões oficiais. Se você optar por cancelar, poderá ajustar essa configuração posteriormente nas Configurações Gerais. + Ok + Desativar otimização de bateria + O uso da bateria do app já está definido como irrestrito + Não foi possível abrir as informações do aplicativo CloudStream. + Música + Áudio-livro + Mídia + \ 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 519b05b6..cc357373 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -383,7 +383,7 @@ Staženo: %d Zvukové stopy Videostopy - Použít při restartu + Restartujte aplikaci pro použití změn. Bezpečný režim povolen Velikost Autoři @@ -633,4 +633,12 @@ Chyba při kopírování, zkopírujte prosím protokol a kontaktujte podporu aplikace. Zkopírováno! Chyba při přístupu ke schránce, zkuste to prosím znovu. - + OK + Využití baterie aplikací je již nastaveno na neomezené + Nepodařilo se otevřít informace o aplikaci CloudStream. + Hudba + Média + Zakažte optimalizace baterie + Aby bylo zajištěno nepřetržité stahování a upozornění na odebírané seriály, potřebuje aplikace CloudStream povolení ke spuštění na pozadí. Stisknutím tlačítka OK budete přesměrováni na informace o aplikaci. Tam přejděte na položku Využití baterie aplikací a nastavte možnost Využití baterie na hodnotu Neomezené. Upozorňujeme, že toto povolení neznamená, že CS3 bude vybíjet baterii. Na pozadí bude pracovat pouze v případě potřeby, například při přijímání oznámení nebo stahování videí z oficiálních rozšíření. Pokud se rozhodnete toto nastavení zrušit, můžete jej později upravit v Obecných nastaveních. + Audiokniha + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 055fc06b..bcff5139 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -281,7 +281,7 @@ Omitir configuración Qué quieres ver Poner en MAYÚSCULAS todos los subtítulos - Se aplicarán los cambios al reiniciar la App + Se aplicarán los cambios al reiniciar la App. Reproductor interno Idioma Legacy (método antiguo) @@ -609,4 +609,12 @@ ¡Copiado! Error al copiar. Por favor, copie el logcat y comuníquese con el soporte de la aplicación. Error al acceder al portapapeles. Inténtelo de nuevo. - + De acuerdo + Desactivar optimización de batería + Música + El uso de la batería de la aplicación está configurado sin restricciones + No se puede abrir la información de la aplicación CloudStream. + Media + Audiolibro + Para garantizar descargas y notificaciones ininterrumpidas para programas de televisión suscritos, CloudStream necesita permiso para ejecutarse en segundo plano. Al presionar OK, se le dirigirá a información de la aplicación. Allí, desplácese hasta Uso de la batería de la aplicación y establezca el uso de la batería en Sin restricciones. Tenga en cuenta que este permiso no significa que CS3 agotará su batería. Solo funcionará en segundo plano cuando sea necesario, como cuando reciba notificaciones o descargue videos de extensiones oficiales. Si decide cancelar, puede ajustar esta configuración más adelante en los ajustes generales. + \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 486f7a00..e9847af6 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -33,16 +33,16 @@ %1$dساعت %2$dدقیقه %dدقیقه پوستر اصلی - تورنت + تورنت‌ها آزاد - مستند ها + مستند‌ها انیمیشن ویدیویی اصلی حداکثر فیلم‌ها سریال های تلویزیونی - درام های آسیایی + درام‌های آسیایی انیمه - کارتونها + کارتون‌ها استفاده شده برنامه بازگشت @@ -52,7 +52,7 @@ اطلاعات بیشتر شرح زبان زیرنویس - زیرنویس + زیرنویس‌ها حذف بارگیری آغاز شد غیرفعال کردن گذارش باگ خودکار @@ -128,4 +128,67 @@ به پایان رسیده باز کردن در مرورگر برنامه‌ریزی برای تماشا - + برای بازنشانی به پیشفرض نگه‌دارید + کتابخانه + درادامه + این فرآیند بطور کامل %s را حذف می‌کند +\nآیا از این کار اطمینان دارید؟ + نام مخزن و نشانی + رونویسی شد! + درباره + قلم + اندازه قلم + برای تغییر تنظیمات بکشید + برای تغییر میزان روشنایی یا صدا در سمت چپ و راست به بالا یا پایین بکشید + بروزرسانی خودکار افزونه + آغاز + زبان برنامه + پخش قسمت + سال + فیلم + سریال + انیمه + رنگ حاشیه متن + دکمه تغییر‌اندازه پخش‌کننده + افزودن گزینه سرعت در پخش‌کننده + بروزرسانی‌ و پشتیبانی + نمایش پوستر از طریق Kitsu + جستجوی پیشرفته + فصل + قسمت + ف + ق + ویدئو + خطای منبع + گزارش + حذف حاشیه سیاه + تنظیمات زیرنویس پخش‌کننده + حساب‌ها و امنیت + نمایش گزارش‌پیوسته 🐈 + پیوند در بریده‌دان رونویسی شد + هیچ پیوندی یافت‌نشد + درام آسیایی + بارگیری خودکار افزونه‌ها + مستند + سرعت پخش + هیچ قسمتی یافت‌نشد + امتیاز: %.1f + قلم‌ها را با گذاشتن در %s وارد کنید + ادامه + بازگردانی به مقدار پیشفرض + −۳۰ + +۳۰ + حذف پرونده + نمایش پیش‌پرده‌ها + قسمت‌ها + %dد +\nباقی‌مانده + گیتهاب + نهان کردن کیفیت ویدئو انتخابی در نتایج جستجو + لغو + %s +\nباقی‌مانده + پیش‌فرض + کارتون + تورنت + \ 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 17f6a667..1370ff2b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -279,7 +279,7 @@ Permissions de stockage manquantes. Veuillez réessayer. Erreur de sauvegarde %s Recherche - Comptes + Comptes et Sécurité Mises à jour et sauvegarde Info Recherche avancée @@ -595,4 +595,4 @@ Ce test est destiné uniquement aux développeurs et ne vérifie ni n\'empêche le fonctionnement d\'aucune extension. Copié ! Nom du dépôt et adresse internet - + \ 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 d9a10c61..c3b55ba2 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -138,7 +138,7 @@ Error saat mencadang %s Cari Akun dan Keamanan - Update dan cadangan + Update dan Cadangan Info Pencarian Lanjutan Memberikan hasil pencarian yang dipisahkan berdasarkan provider @@ -432,7 +432,7 @@ Semua Umur %s (Tidak aktif) Trek - Terapkan saat dimuat ulang + Terapkan saat dimuat ulang untuk melihat perubahan. Keterangan Versi Status @@ -630,4 +630,12 @@ Gagal mengakses Papan Klip, mohon coba lagi. disalin! Gagal menyalin, mohon salin logcat dan hubungi pengembang aplikasi. - + Oke + Matikan pengoptimalan Baterai + Pemakaian baterai untuk aplikasi ini sudah diatur menjadi tidak dibatasi + Gagal membuka info aplikasi CloudStream. + Musik + Buku Audio + Media + Untuk memastikan unduhan dan pemberitahuan tanpa gangguan untuk acara TV berlangganan, CloudStream memerlukan izin untuk berjalan di latar belakang. Dengan menekan OK, Anda akan diarahkan ke Info aplikasi. Di sana, gulir ke Penggunaan baterai aplikasi dan atur penggunaan baterai ke Tidak Terbatas. Harap dicatat, izin ini tidak berarti CS3 akan menguras baterai Anda. Ini hanya akan beroperasi di latar belakang ketika diperlukan, seperti ketika menerima pemberitahuan atau mengunduh video dari ekstensi resmi. Jika Anda memilih untuk membatalkannya, Anda dapat menyesuaikan pengaturan ini nanti di Pengaturan Umum. + \ 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 7b958ad3..01031297 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -432,7 +432,7 @@ Tracce Traccia audio Traccia video - Applica al riavvio + Riavvia app per visualizzare le modifiche. Safe mode attiva Tutte le estensioni sono state disabilitate a causa di un arresto anomalo per aiutarti a trovare l\'estensione che causa il problema. Vedi informazioni del crash @@ -629,4 +629,12 @@ copiato! Errore durante l\'accesso agli Appunti. Riprova. Errore durante la copia. Copia logcat e contatta il supporto dell\'app. - + OK + Disabilita ottimizzazione della batteria + Impossibile aprire le informazioni sull\'app CloudStream. + Media + Per garantire download e notifiche ininterrotti per i programmi TV sottoscritti, CloudStream necessita dell\'autorizzazione per l\'esecuzione in background. Premendo OK, verrai indirizzato alle informazioni sull\'app. Successivamente, scorri fino a \"Utilizzo della batteria\" e imposta l\'utilizzo della batteria su \"Senza restrizioni\". Tieni presente che questa autorizzazione non significa che CS3 scaricherà la batteria. Funzionerà in background solo quando necessario, ad esempio quando si ricevono notifiche o si scaricano video da estensioni ufficiali. Se scegli di annullare, puoi modificare questa impostazione più tardi in \"Impostazioni generali\". + L\'utilizzo della batteria dell\'app è già impostato su \"Senza restrizioni\" + Musica + Audiolibro + \ No newline at end of file diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 0ddd8577..a26f902b 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -3,14 +3,14 @@ വേഗം (%.2fx) റേറ്റിംഗ്: %.1f - പുതിയ അപ്ഡേറ്റ് + പുതിയ അപ്ഡേറ്റ്! \n%1$s -> %2$s - CloudStream + ക്ലൗഡ് സ്ട്രീം ഹോം തിരയുക ഡൗൺലോഡ്സ് സെറ്റിങ്‌സ് - തിരയുക + തിരയുക… ടാറ്റ ലഭ്യമല്ല കൂടുതൽ ഓപ്ഷൻസ് അടുത്ത എപ്പിസോഡ് @@ -167,11 +167,11 @@ ഔചിത്യ വീഡിയോ ക്വാളിറ്റി ചരിത്രം കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക - %1$d%2$d - yg5t4r%dujyhtg + %d ദിവസങ്ങൾ %d മണിക്കൂർ %d മിനിറ്റ് + അധ്യായം%dൽ റിലീസ് ചെയ്യും %1$d മണിക്കൂർ %2$d മിനിറ്റ് - %1$sghj%2$d - rtf:% + %1$sഅധ്യാ%2$d + കാസ്റ്റ്:%s അക്കൗണ്ട് ഉണ്ടാക്കുക പുറത്ത്പോകുന്നതോടുകൂടി ആപ് അപ്ഡേറ്റ് ആവുന്നതാണ് ലൈബ്രറി തിരഞ്ഞെടുക്കുക @@ -179,8 +179,8 @@ ട്രെയിലർ പ്ലേ ചെയ്യുക ലൈവ് സ്ട്രീം പ്ലേ ചെയ്യുക ഫില്ലർ - %d min - ക്ലൗഡ് സ്ട്രീം ഉപയോഗിച്ച് കളിക്കുക + %d മിനിറ്റ് + ക്ലൗഡ് സ്ട്രീം ഉപയോഗിച്ച് പ്രവർത്തിപ്പിക്കുക അടുത്ത ക്രമരഹിതമായ എപ്പിസോഡ് പോസ്റ്റർ അപ്ഡേറ്റ് ആരംഭിച്ചു @@ -188,7 +188,7 @@ പോസ്റ്റർ ലോഡിംഗ് ഒഴിവാക്കുക തിരയുക %s… - %dm + %dമിനിറ്റ് മടങ്ങിപ്പോവുക പശ്ചാത്തല പ്രിവ്യൂ പോസ്റ്റർ @@ -202,8 +202,6 @@ പൊതു പട്ടിക CloudStream-ന് സ്ഥിരസ്ഥിതിയായി സൈറ്റുകളൊന്നും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. നിങ്ങൾ റിപ്പോസിറ്ററികളിൽ നിന്ന് സൈറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. \n -\nസ്‌കൈ യുകെ ലിമിറ്റഡിലെ ഡോഗ്‌ഷിറ്റ് ആളുകളിൽ നിന്ന് DMCA നീക്കം ചെയ്‌തതിനാൽ 🤮 ഞങ്ങൾക്ക് ആപ്പിൽ റിപ്പോസിറ്ററി സൈറ്റ് ലിങ്ക് ചെയ്യാൻ കഴിയില്ല. -\n \nഞങ്ങളുടെ ഡിസ്കോർഡിൽ ചേരുക അല്ലെങ്കിൽ ഓൺലൈനിൽ തിരയുക. പകർത്തുക എല്ലാ സബ്‌ടൈറ്റിലുകളും വലിയക്ഷരമാക്കുക @@ -214,7 +212,7 @@ അക്കൗണ്ടുകൾ കൈകാര്യം ചെയ്യുക ഉടൻ വരുന്നു… പുനരാരംഭിക്കുമ്പോൾ പ്രയോഗിക്കുക - അക്കൗണ്ട് എഡിറ്റ് ചെയ്യുക + അക്കൗണ്ട് തിരുത്തുക തെറ്റായ പിൻ. ദയവായി വീണ്ടും ശ്രമിക്കുക. നിർത്തുക ട്രാക്കുകൾ @@ -245,4 +243,41 @@ ഉറവിട പിശക് നിലവിലെ പിൻ നൽകുക ഓഡിയോ ട്രാക്കുകൾ - + ചിത്രം-ഇൻ-ചിത്രം + പുതുക്കിയത് (പഴയത് മുതൽ പുതിയത് വരെ) + റേറ്റിംഗ് (ഉയർന്നത് മുതൽ താഴ്ന്നത്) + പാരമ്പര്യം + വിൻഡോ നിറം + ക്ലിയർ + ലോഗ് + ശുപാർശകൾ കാണിക്കുക + %s ആയി ലോഗിൻ ചെയ്തു + ഇങ്ങനെ അടുക്കുക + അടുക്കുക + തിരുത്തുക + പുതുക്കിയത് (പുതിയത് മുതൽ പഴയത് വരെ) + NSFW + ആപ്പ് അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു… + അപ്ഡേറ്റുകളും ഒപ്പം ബാക്കപ്പും + %s(അപ്രാപ്തമാക്കി) + റേറ്റിംഗ് (താഴ്ന്നത് മുതൽ ഉയർന്നത് വരെ) + വാചക നിറം + ആപ്പിൻ്റെ പുതിയ പതിപ്പ് ഇൻസ്റ്റാൾ ചെയ്യാനായില്ല + പാക്കേജ് ഇൻസ്റ്റാളർ + അക്ഷരമാലാക്രമം (A മുതൽ Z വരെ) + അക്ഷരമാലാക്രമം (Z മുതൽ A വരെ) + ഈ ലിസ്റ്റ് ശൂന്യമാണ്. മറ്റൊന്നിലേക്ക് മാറാൻ ശ്രമിക്കുക. + ചരിത്രം മായ്ക്കുക + ലോഗ്കാറ്റ് കാണിക്കുക 🐈 + നിങ്ങളുടെ ലൈബ്രറി ശൂന്യമാണ് :( +\nഒരു ലൈബ്രറി അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്യുക അല്ലെങ്കിൽ നിങ്ങളുടെ പ്രാദേശിക ലൈബ്രറിയിലേക്ക് ഷോകൾ ചേർക്കുക. + വീഡിയോ + റിപ്പോസിറ്ററി നാമവും URL ഉം + പകർത്തി! + പുതിയ എപ്പിസോഡ് അറിയിപ്പ് + മറ്റ് വിപുലീകരണങ്ങളിൽ തിരയുക + ഉപശീർഷകം ക്രമീകരണങ്ങൾ + എഡ്ജ് തരം + ഔട്ട്ലൈൻ നിറം + പശ്ചാത്തല നിറം + \ No newline at end of file diff --git a/app/src/main/res/values-mt/strings.xml b/app/src/main/res/values-mt/strings.xml new file mode 100644 index 00000000..356a2caa --- /dev/null +++ b/app/src/main/res/values-mt/strings.xml @@ -0,0 +1,126 @@ + + + Preferenzi tas-sottotitli + Kulur tal-kitba + Kulur tat-Tieqa + Fittex bl-użu ta \'tipi + Importa fonts billi tpoġġihom ġo %s + Dan il-fornitur huwa torrent, VPN huwa rakkomandat + Atturi: %s + L-episodju %d ha johrog fil + %1$dh %2$dm + %dm + Kartellun + Kartellun + Kartellun tal-episodju + Kartellun Principali + Li jmiss bl\'addoċċ + Ibdel Il-fornitur + veloċità (%.2fx) + Klassifikazzjoni: %.1f + Aġġornament ġdid misjub! +\n%1$s -> %2$s + %d min + CloudStream + Ara bil-CloudStream + Dar + Fittex + Imnizzel + Preferenzi + Fittex… + Fittex%s… + Bla dejta + Iktar Preferenzi + L-episodju li\'jmiss + Ġeneri + Aqsam + Iftah fil-brawser + Brawser + Aqbez it-tagħbija + Tagħbija… + Jaraw + Stenna ftit + Lest + Imwaqqa + Pjana biex tara + Terġa\' tara + Ibda t-trejler + Ibda l-livestream + Stream Torrent + Sorsi + Erġa\' pprova l-konnessjoni… + Mur lura + Ibda l-episodju + Tniżżila ppawzata + Qed jinżlu + Imniżżel + Tniżżil ikkanċellat + Lest it-tniżżil + Beda l-aġġornament + Network stream + Tagħbija tal-Links falliet + Links regaw gew mogħbija + Ħażna Interna + Dub + Ibda + Info + Issettja l-istatus ta-rajtux + Applika + Ikkopja + Għalaq + Neħħi + Issevja + Isem tar-repożitorju u URL + Ikkupjat! + Notifika ta\' episodju ġdid + Fittex f\'estensjonijiet oħra + Uri r-rakkomandazzjonijiet + Veloċità tal-Plejer + Kulur tal-Kontorn + Kulur tal-Isfond + Tip tat-tarf + Elevazzjoni tas-Sottotitolu + Font + Daqs tal-font + Fittex bl-użu ta\' fornituri + %d Benenes mogħtija lil devs + Ebda Benenes mogħtija + Agħżel il-Lingwa Awtomatikament + Niżżel Lingwi + Lingwa tas-sottotitolu + Żomm biex tirrisettja għal default + Kompli Ara + Neħħi + Iktar informazzjoni + \@string/home_play + Jista\' jkun hemm bżonn ta\' VPN biex dan il-fornitur jaħdem b\'mod korrett + Il-metadata mhix ipprovduta mis-sit, it-tagħbija tal-vidjo se tfalli jekk ma teżistix fuq is-sit. + Deskrizzjoni + Lebda Plot misjub + Lebda Deskrizzjoni misjuba + Uri Logcat 🐈 + ġurnal + Stampa f-istampa + Ikompli d-daqq fi player minjatura fuq apps oħra + %1$s Ep %2$d + %1$dd %2$dh %3$dm + Mur Lura + Ara l\'isfond + Mili + Ibda l-film + Sottotitli + Sut + Ibda l-fajl + Niżżel + Hassar il-fajl + Kompli Nizzel + Ieqaf Nizzel + Iddiżattiva r-rappurtar awtomatiku tal-bugs + Iktar Informazzjoni + Aħbi + Iffiltra l-Bookmarks + Beda t-tniżżil + Bookmarks + Neħħi + Falla t-tniżżil + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index bdc55780..4bf0f565 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -159,4 +159,4 @@ କୌଣସି ତଥ୍ୟ ନାହିଁ %1$s ଅ %2$d ଆଦ୍ୟ ବାଦ୍ ଦିଅ - + \ 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 3e22ba16..b80c1b79 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -137,7 +137,7 @@ Błąd tworzenia kopii zapasowej %s Szukaj Konta i zabezpieczenia - Aktualizacje i kopia zapasowa + Aktualizacje i kopie zapasowe Informacje Zaawansowane wyszukiwanie Szukaj z podziałem na źródła @@ -278,7 +278,7 @@ Pokaż przycisk do losowania na stronie głównej i w bibliotece Języki rozszerzeń Układ aplikacji - Preferowane media + Preferowane multimedia Włącz NSFW w obsługiwanych rozszerzeniach Kodowanie napisów Źródła @@ -405,7 +405,7 @@ Ścieżki Ścieżki audio Ścieżki wideo - Zastosuj po ponownym uruchomieniu + Uruchom ponownie aplikację, aby zobaczyć zmiany. Tryb bezpieczny włączony Z powodu wystąpienia błędu wszystkie rozszerzenia zostały wyłączone, aby ułatwić wykrycie tego wadliwego. Wyświetl informacje o błędzie @@ -610,4 +610,12 @@ Błąd dostępu do schowka. Spróbuj ponownie. skopiowano! Błąd podczas kopiowania. Skopiuj logcat i skontaktuj się z pomocą techniczną aplikacji. - + Wyłącz optymalizację akumulatora + Nie można otworzyć informacji o aplikacji CloudStream. + Muzyka + Audiobook + OK + Multimedia + Użycie akumulatora przez aplikację jest już ustawione na nieograniczone + Aby zapewnić nieprzerwane pobieranie i powiadomienia o subskrybowanych programach telewizyjnych, CloudStream potrzebuje pozwolenia na działanie w tle. Naciskając OK, zostaniesz przekierowany do informacji o aplikacji. Tam przewiń do użycia akumulatora przez aplikację i ustaw je na nieograniczone. Pamiętaj, że to pozwolenie nie oznacza, że CS3 będzie zużywać akumulator. Będzie działać w tle tylko wtedy, gdy będzie to konieczne, na przykład podczas odbierania powiadomień lub pobierania filmów z oficjalnych rozszerzeń. Jeśli zdecydujesz się anulować, możesz dostosować to ustawienie później w ustawieniach głównych. + \ 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 b3180fee..82054b6f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -143,7 +143,7 @@ Erro no backup de %s Procurar Contas e segurança - Atualizações e backup + Atualizações e cópias de segurança Info Procura Avançada Mostra resultados separados por fornecedor @@ -458,7 +458,7 @@ Inscrição cancelada em %s Final misto Avaliações (Decrescente) - Aplicar ao reiniciar + Reinicie a aplicação para ver as alterações. Referenciador (opcional) Player oculto - Quantidade de Busca Proxy do GitHub @@ -605,6 +605,14 @@ Autenticação por palavra-passe/PIN A autenticação biométrica não é suportada neste dispositivo Desbloqueie a aplicação com impressão digital, ID facial, PIN, padrão e palavra-passe. - Esta janela fechar-se-á após algumas tentativas falhadas. Terá de reiniciar a aplicação. - Foi feita uma cópia de segurança dos seus dados CloudStream, embora a probabilidade deste caso raro seja muito baixa, mas todos os dispositivos se comportam de forma diferente. No caso de ficar impedido de aceder à aplicação, na pior das hipóteses, limpe totalmente os dados da aplicação e restaure a cópia de segurança. Lamentamos profundamente qualquer inconveniente. - + Este ecrã foi encerrado devido a várias tentativas falhadas. Reinicie a aplicação. + Os dados do seu CloudStream já foram copiados. Embora a possibilidade de isto acontecer ser muito baixa, todos os dispositivos podem comportar-se de forma diferente. No caso raro de ficar impedido de aceder à aplicação, limpe completamente os dados da aplicação e restaure a partir de uma cópia de segurança. Lamentamos qualquer incómodo causado por esta situação. + OK + A utilização da bateria da aplicação já está definida como sem restrições + Não é possível abrir a informação da aplicação CloudStream. + Música + Livro Aúdio + Multimédia + Desativar a otimização da bateria + Para garantir descarregamentos ininterruptos e notificações de programas de TV subscritos, o CloudStream precisa de permissão para ser executado em segundo plano. Ao premir OK, será direcionado para informações da aplicação. Aí, desloque-se para utilização da bateria da aplicação e defina a utilização da bateria para sem restrições. Tenha em atenção que esta permissão não significa que o CS3 irá esgotar a sua bateria. Este só funcionará em segundo plano quando necessário, como ao receber notificações ou baixar vídeos de extensões oficiais. Se optar por cancelar, pode ajustar esta definição mais tarde em definições gerais. + \ 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 16f4449b..a71cc71b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -39,7 +39,7 @@ Заполнитель CloudStream Убирать - %1$s Серия %2$d + %1$s Ep %2$d Смотреть с CloudStream Главная Поиск @@ -148,8 +148,8 @@ Загружена резервная копия Не удалось восстановить данные из %s Отсутствует разрешение на хранение. Пожалуйста попробуйте снова. - Аккаунты - Обновления и резервное копирование + Аккаунты и Безопасность + Обновления и Резервное копирование Информация Расширенный поиск Показывать трейлеры @@ -457,7 +457,7 @@ Загрузить из интернета Загрузка обновления приложения… Недопустимый URL - Будет применено при перезапуске + Перезапустите приложение, чтобы увидеть изменения. Отчеты ошибках Что вы хотите увидеть Смотрите видео на этих языках @@ -593,4 +593,27 @@ Этот тест предназначен только для разработчиков и не подтверждает или не опровергает работоспособность провайдеров. Добавление настроек скорости в плеер Протестировать всех провайдеров - + скопировано! + ОК + Имя репозитория и URL адрес + Ошибка доступа к буферу обмена, пожалуйста, попробуйте ещё раз + Ошибка при копировании, пожалуйста, скопируйте лог и свяжитесь с технической поддержкой. + Нелюбимое + Разблокировать CloudStream + Любимое + Использование батареи приложением уже настроено на неограниченное + Не удается открыть информацию о приложении CloudStream. + Заблокировать биометрией + Музыка + Аудиокнига + Медиа + Разблокируйте приложение с помощью отпечатка пальца, Face ID, PIN-кода, шаблона и пароля. + %s +\nосталось + Отключить оптимизацию батареи + Аутентификация по паролю/PIN-коду + Биометрическая аутентификация на этом устройстве не поддерживается + Этот экран был закрыт из-за нескольких неудачных попыток. Пожалуйста, перезапустите приложение. + Ваши данные в CloudStream были скопированы. Хотя вероятность этого очень мала, все устройства могут вести себя по-разному. В редких случаях, когда доступ к приложению заблокирован, полностью удалите данные приложения и восстановите их из резервной копии. Мы приносим свои извинения за любые неудобства, связанные с этим. + Чтобы обеспечить бесперебойную загрузку и получение уведомлений о телепередачах, на которые вы подписаны, CloudStream необходимо разрешение на запуск в фоновом режиме. Нажав OK, вы перейдете к информации о приложении. Там перейдите к разделу 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 и установите значение \"Использование батареи\" 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Пожалуйста, обратите внимание, что это разрешение не означает, что CS3 разрядит вашу батарею. Он будет работать в фоновом режиме только при необходимости, например, при получении уведомлений или загрузке видео с официальных расширений. Если вы решите отменить, вы можете изменить эту настройку позже в 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 7005fd95..3a5170a3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -162,7 +162,7 @@ %s yedeklenirken hata Ara Hesaplar ve Güvenlik - Güncellemeler ve yedekleme + Güncellemeler ve Yedekleme Bilgi Gelişmiş arama Arama sonuçlarını sağlayıcıya göre ayırır @@ -466,7 +466,7 @@ Parçalar Ses parçaları Video parçaları - Yeniden başlatmada uygula + Değişiklikleri görmek için uygulamayı yeniden başlatın. Güvenli mod açık Çöküşe neden olan eklentiyi bulmaya yardımcı olabilmek için tüm eklentiler kapatıldı. Çökme bilgisini göster @@ -656,4 +656,12 @@ kopyalandı! Panoya erişimde hata oluştu. Lütfen tekrar deneyin. Kopyalama hatası. Lütfen logcat\'i kopyalayın ve uygulama desteğiyle iletişime geçin. - + Tamam + Pil optimizasyonunu devre dışı bırak + CloudStream\'in Uygulama bilgileri açılamıyor. + Müzik + Sesli Kitap + Medya + Abone olunan TV şovları için kesintisiz indirmeleri ve bildirimleri sağlamak için, CloudStream\'in arka planda çalışmasına izin vermeniz gerekmektedir. Tamam\'a basarak Uygulama bilgilerine yönlendirileceksiniz. Orada, 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 (Uygulama pil kullanımı) kısmına gidip pil kullanımını 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙 (Sınırsız) olarak ayarlayın. Bu iznin CS3\'ün pilinizi hızlıca tüketeceği anlamına gelmediğini lütfen unutmayın. Sadece gerektiğinde, resmi eklentilerden bildirim almak veya videoları indirmek gibi durumlarda arka planda çalışacaktır. İptal etmeyi seçerseniz, bu ayarı daha sonra 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨 (Genel Ayarlar) bölümünden ayarlayabilirsiniz. + Uygulama pil kullanımı zaten sınırsız olarak ayarlanmış + \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 130e50af..981ac19b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -433,7 +433,7 @@ Усі субтитри у верхньому регістрі %s (Вимкнено) Відео доріжки - Застосується при перезавантаженні + Перезапустіть застосунок, щоб побачити зміни. Переглянути інформацію про збій Рейтинг: %s Опис @@ -609,4 +609,12 @@ Назва репозиторію та URL Помилка копіювання, будь ласка, скопіюйте logcat й зверніться до служби підтримки застосунку. Помилка доступу до буфера обміну, спробуйте ще раз. - + Добре + Вимкнути оптимізацію батареї + Щоб забезпечити безперебійне завантаження та повідомлення про підписані телепередачі, CloudStream потребує дозволу на роботу у фоновому режимі. Натиснувши \"Добре\", вас буде перенаправлено до інформації про застосунок. Там прокрутіть до \"Споживання батареї застосунком\" й встановіть використання батареї на \"Без обмежень\". Зверніть увагу, що цей дозвіл не означає, що CS3 розряджатиме вашу батарею. Він працюватиме у фоновому режимі лише за необхідності, наприклад, під час отримання повідомлень або завантаження відео з офіційних розширень. Якщо ви вирішите скасувати дозвіл, ви зможете змінити це налаштування пізніше в загальних налаштуваннях. + Споживання батареї застосунком вже налаштовано на без обмежень + Не вдається відкрити інформацію про застосунок CloudStream. + Аудіо книга + Музика + Медіа + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index ad60f597..202af75c 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -123,7 +123,7 @@ Cài đặt phụ đề Phụ đề Chromecast Cài đặt phụ đề Chromecast - Chỉnh tốc độ phim + Tốc độ phát Vuốt để tua nhanh Vuốt sang trái hoặc phải để tua video Vuốt để chỉnh độ sáng và âm lượng @@ -147,8 +147,8 @@ Thiếu quyền truy cập bộ nhớ, hãy thử lại. Lỗi khi sao lưu %s Tìm kiếm - Tài khoản - Cập nhật và sao lưu + Tài khoản và Bảo mật + Cập nhật và Sao lưu Thông tin Tìm kiếm nâng cao Cho phép tìm kiếm theo bộ lọc từng nhà cung cấp @@ -286,7 +286,7 @@ Disclaimer Tổng quan Nút ngẫu nhiên - Hiện nút ngẫu nhiên trên trang chủ + Hiện nút ngẫu nhiên trên Trang chủ và Thư viện Ngôn ngữ nguồn phim Giao diện App Thể loại ưu tiên @@ -307,7 +307,7 @@ Tài khoản Email 127.0.0.1 - Địa chỉ trang web + Địa chỉ trang web­ https://example.com Mã ngôn ngữ (vi) %1$s %2$s @@ -431,7 +431,7 @@ Thêm Âm thanh Chất lượng Video - Áp dụng khi khởi động lại + Áp dụng khi khởi động lại. Chế độ an toàn được bật Đã xảy ra sự cố và chúng tôi đã tự động tắt tất cả các tiện ích mở rộng, hãy tìm và xóa tiện ích mở rộng đang gây ra sự cố. Xem thông tin sự cố @@ -535,7 +535,7 @@ \nKhông tải bất cứ tiện ích mở rộng nào khi khởi động cho đến khi loại bỏ tệp. Đảo ngược lại Đang cập nhật các phim đã đăng kí - Bỏ qua chặn GitHub bằng cách dùng jsDelivr. Có thể gây ra việc cập nhật bị chậm vài ngày. + Bỏ qua chặn đường link GitHub bằng cách dùng jsDelivr. Có thể gây ra việc cập nhật bị chậm vài ngày. Lượng tua thêm được sử dụng khi trình phát ẩn Lượng tua thêm Lượng tua thêm được sử dụng khi trình phát hiện lên @@ -606,4 +606,27 @@ Hiển thị nút xoay màn hình Kích hoạt chế độ xoay màn hình tự động Tự động xoay - + đã sao chép! + Vấn đề truy cập Bảng ghi tạm, Hãy thử lại. + Lỗi sao chép, Hãy sao chép logcat và liên hệ hỗ trợ ứng dụng. + Yêu thích + OK + Vô hiệu Tối ưu pin + Không thể mở thông tin ứng dụng của CloudStream. + Không thích + Mở khóa Cloudstream + Nhạc + Sách nói + Khóa với sinh trắc học + %s +\ncòn lại + Xác thực bằng sinh trắc học không được hỗ trợ trên thiết bị này + Mật khẩu/PIN Xác thực + Dữ liệu CloudStream của bạn đã được sao lưu. Dù khả năng rất thấp, nhưng mỗi thiết bị có thể hoạt động khác nhau. Trong trường hợp thiểu số, bạn sẽ bị khóa khỏi ứng dụng, hãy xóa dữ liệu ứng dụng và khởi tạo từ bản sao lưu. Chúng tôi rất xin lỗi vì bất kỳ sự bất tiện nào. + Mở khóa ứng dụng bằng Vân tay, Khuôn mặt, PIN, Hình vẽ và Mật khẩu. + Màn hình bị đóng sau nhiều lần thử thất bại. Hãy khởi động lại ứng dụng. + Phần kiểm thử này chỉ dành cho nhà phát triển và không xác nhận hay từ chối việc hoạt động của nguồn phim. + Chế độ tiêu thụ pin của ứng dụng đã được đặt ở mức không giới hạn + …  +\n——— + \ 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 2360a7eb..4423f20f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -651,4 +651,12 @@ \n剩余 测试所有扩展 已复制! - + 访问剪贴板出错,请重试。 + 应用程序电池使用量已设置为不受限制 + 有声书 + 媒体 + 禁用电池最佳化 + 音乐 + 无法打开 CloudStream 的应用程序信息。 + 使用指纹、面部 ID、PIN 码、图案和密码解锁应用程序。 + \ No newline at end of file diff --git a/fastlane/metadata/android/ml-IN/changelogs/2.txt b/fastlane/metadata/android/ml-IN/changelogs/2.txt new file mode 100644 index 00000000..f7523831 --- /dev/null +++ b/fastlane/metadata/android/ml-IN/changelogs/2.txt @@ -0,0 +1 @@ +-ചേഞ്ച്ലോഗ് ചേർത്തു! diff --git a/fastlane/metadata/android/ml-IN/full_description.txt b/fastlane/metadata/android/ml-IN/full_description.txt new file mode 100644 index 00000000..218f9f98 --- /dev/null +++ b/fastlane/metadata/android/ml-IN/full_description.txt @@ -0,0 +1,10 @@ +ക്ലൗഡ് സ്ട്രീം-3 സിനിമകൾ, ടിവി സീരീസ്, ആനിമേഷൻ എന്നിവ സ്ട്രീം ചെയ്യാനും ഡൗൺലോഡ് ചെയ്യാനും നിങ്ങളെ അനുവദിക്കുന്നു. + +പരസ്യങ്ങളും അനലിറ്റിക്‌സും കൂടാതെ ആപ്പ് വരുന്നു ഒപ്പം +ഒന്നിലധികം ട്രെയിലർ, മൂവി സൈറ്റുകൾ എന്നിവയും മറ്റും പിന്തുണയ്ക്കുന്നു, ഉദാഹരണം + +ബുക്ക്മാർക്കുകൾ + +ഉപശീർഷകം ഡൗൺലോഡുകൾ + +ക്രോംകാസ്റ്റ് പിന്തുണ diff --git a/fastlane/metadata/android/ml-IN/short_description.txt b/fastlane/metadata/android/ml-IN/short_description.txt new file mode 100644 index 00000000..f12fe5b5 --- /dev/null +++ b/fastlane/metadata/android/ml-IN/short_description.txt @@ -0,0 +1 @@ +സ്ട്രീം ഒപ്പം ഡൗൺലോഡ് സിനിമകളും, ടിവി സീരീസുകളും, ആനിമേഷനും . diff --git a/fastlane/metadata/android/ml-IN/title.txt b/fastlane/metadata/android/ml-IN/title.txt new file mode 100644 index 00000000..8e89348a --- /dev/null +++ b/fastlane/metadata/android/ml-IN/title.txt @@ -0,0 +1 @@ +ക്ലൗഡ് സ്ട്രീം diff --git a/fastlane/metadata/android/mt/changelogs/2.txt b/fastlane/metadata/android/mt/changelogs/2.txt new file mode 100644 index 00000000..66bbca8f --- /dev/null +++ b/fastlane/metadata/android/mt/changelogs/2.txt @@ -0,0 +1 @@ +- Changelog miżjud! diff --git a/fastlane/metadata/android/mt/full_description.txt b/fastlane/metadata/android/mt/full_description.txt new file mode 100644 index 00000000..da507aae --- /dev/null +++ b/fastlane/metadata/android/mt/full_description.txt @@ -0,0 +1,10 @@ +CloudStream-3 iħallik tistrimja u tniżżel Films, Serje TV u Anime. + +L-app tiġi mingħajr reklami u analytics u +jappoġġja siti multipli ta' trejlers u films, u aktar, eż. + +Bookmarks + +Downloads tas-sottotitli + +Appoġġ tal-Chromecast diff --git a/fastlane/metadata/android/mt/short_description.txt b/fastlane/metadata/android/mt/short_description.txt new file mode 100644 index 00000000..542b8614 --- /dev/null +++ b/fastlane/metadata/android/mt/short_description.txt @@ -0,0 +1 @@ +Tistrimja u tniżżel films, serje tat-TV u Anime. diff --git a/fastlane/metadata/android/mt/title.txt b/fastlane/metadata/android/mt/title.txt new file mode 100644 index 00000000..dde89d58 --- /dev/null +++ b/fastlane/metadata/android/mt/title.txt @@ -0,0 +1 @@ +CloudStream diff --git a/fastlane/metadata/android/ru-RU/changelogs/2.txt b/fastlane/metadata/android/ru-RU/changelogs/2.txt new file mode 100644 index 00000000..4b9464b6 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/2.txt @@ -0,0 +1 @@ +- Добавлен список изменений! diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt new file mode 100644 index 00000000..1790888e --- /dev/null +++ b/fastlane/metadata/android/ru-RU/full_description.txt @@ -0,0 +1,10 @@ +CloudStream-3 позволяет транслировать и скачивать фильмы, сериалы и аниме. + +Приложение поставляется без рекламы и аналитики и +поддерживает множество сайтов с трейлерами и фильмами, а также многое другое, например + +Книжные закладки + +Загрузка субтитров + +Поддержка Chromecast diff --git a/fastlane/metadata/android/ru-RU/short_description.txt b/fastlane/metadata/android/ru-RU/short_description.txt new file mode 100644 index 00000000..a43bc8a1 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/short_description.txt @@ -0,0 +1 @@ +Транслируйте и скачивайте фильмы, сериалы и аниме. diff --git a/fastlane/metadata/android/ru-RU/title.txt b/fastlane/metadata/android/ru-RU/title.txt new file mode 100644 index 00000000..3c0406a6 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/title.txt @@ -0,0 +1 @@ +Облачный поток diff --git a/fastlane/metadata/android/vi/title.txt b/fastlane/metadata/android/vi/title.txt index dde89d58..0afff90c 100644 --- a/fastlane/metadata/android/vi/title.txt +++ b/fastlane/metadata/android/vi/title.txt @@ -1 +1 @@ -CloudStream +double_tap_seek_time_key2 From d8f89df16363b17945b24c77f5777bdeb5d068bc Mon Sep 17 00:00:00 2001 From: KingLucius Date: Wed, 10 Apr 2024 17:14:47 +0200 Subject: [PATCH 767/888] Show player controls on pressing Pad Down (#1031) --- .../com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 1 + 1 file changed, 1 insertion(+) 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 d79c44b7..56983190 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 @@ -1159,6 +1159,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } } + KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_DPAD_UP -> { if (!isShowing) { onClickChange() From ff0dea3fbb4d17e05d0077db55407981b8b83abd Mon Sep 17 00:00:00 2001 From: KingLucius Date: Wed, 10 Apr 2024 17:16:04 +0200 Subject: [PATCH 768/888] Fix focus for Tracks selection on TV (#1030) --- .../main/res/layout/player_select_tracks.xml | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/app/src/main/res/layout/player_select_tracks.xml b/app/src/main/res/layout/player_select_tracks.xml index d32e1b4e..94e09d60 100644 --- a/app/src/main/res/layout/player_select_tracks.xml +++ b/app/src/main/res/layout/player_select_tracks.xml @@ -38,21 +38,20 @@ android:requiresFadingEdge="vertical" android:id="@+id/video_tracks_list" android:layout_width="match_parent" - android:layout_height="match_parent" android:layout_rowWeight="1" android:background="?attr/primaryBlackBackground" - android:nextFocusLeft="@id/sort_subtitles" - android:nextFocusRight="@id/apply_btt" + android:nextFocusRight="@id/audio_tracks_holder" + tools:listitem="@layout/sort_bottom_single_choice" /> + android:id="@+id/audio_tracks_holder" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="50" + android:orientation="vertical"> @@ -107,17 +106,16 @@ + android:requiresFadingEdge="vertical" + android:id="@+id/auto_tracks_list" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_rowWeight="1" + android:background="?attr/primaryBlackBackground" + android:nextFocusRight="@id/apply_btt" + android:nextFocusLeft="@id/video_tracks_list" + tools:listfooter="@layout/sort_bottom_footer_add_choice" + tools:listitem="@layout/sort_bottom_single_choice" /> @@ -132,11 +130,12 @@ + style="@style/WhiteButton" + android:layout_gravity="center_vertical|end" + android:text="@string/sort_apply" + android:id="@+id/apply_btt" + android:nextFocusLeft="@id/auto_tracks_list" + android:layout_width="wrap_content" /> Date: Wed, 10 Apr 2024 20:54:15 +0530 Subject: [PATCH 769/888] Created vtbe and EPlay Extractor (#1014) --- .../cloudstream3/extractors/EPlay.kt | 28 +++++++++++++ .../lagradost/cloudstream3/extractors/Vtbe.kt | 40 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 6 ++- 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt new file mode 100644 index 00000000..565a2680 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt @@ -0,0 +1,28 @@ +package com.lagradost.cloudstream3.extractors + +import android.util.Log +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson + +open class EPlayExtractor : ExtractorApi() { + override var name = "EPlay" + override var mainUrl = "https://eplayvid.net" + override val requiresReferer = true + + override suspend fun getUrl(url: String, referer: String?): List? { + val response = app.get(url).document + val trueUrl = response.select("source").attr("src") + return listOf( + ExtractorLink( + this.name, + this.name, + trueUrl, + mainUrl, + getQualityFromName(""), // this needs to be auto + false + ) + ) + } +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt new file mode 100644 index 00000000..65af01ec --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt @@ -0,0 +1,40 @@ +package com.lagradost.cloudstream3.extractors + +import android.util.Log +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson +import com.lagradost.cloudstream3.utils.JsUnpacker +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.getQualityFromName +import java.net.URI + + +open class Vtbe : ExtractorApi() { + override var name = "Vtbe" + override var mainUrl = "https://vtbe.to" + override val requiresReferer = true + + override suspend fun getUrl(url: String, referer: String?): List? { + val response = app.get(url,referer=mainUrl).document + val extractedpack =response.selectFirst("script:containsData(function(p,a,c,k,e,d))")?.data().toString() + JsUnpacker(extractedpack).unpack()?.let { unPacked -> + Regex("sources:\\[\\{file:\"(.*?)\"").find(unPacked)?.groupValues?.get(1)?.let { link -> + return listOf( + ExtractorLink( + this.name, + this.name, + link, + referer ?: "", + Qualities.Unknown.value, + URI(link).path.endsWith(".m3u8") + ) + ) + } + } + return null + } +} 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 637f65b9..e5d82d39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -217,6 +217,8 @@ import com.lagradost.cloudstream3.extractors.Zorofile import com.lagradost.cloudstream3.extractors.Zplayer import com.lagradost.cloudstream3.extractors.ZplayerV2 import com.lagradost.cloudstream3.extractors.Ztreamhub +import com.lagradost.cloudstream3.extractors.EPlayExtractor +import com.lagradost.cloudstream3.extractors.Vtbe import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import kotlinx.coroutines.delay @@ -864,7 +866,9 @@ val extractorApis: MutableList = arrayListOf( Megacloud(), VidhideExtractor(), StreamWishExtractor(), - EmturbovidExtractor() + EmturbovidExtractor(), + Vtbe(), + EPlayExtractor() ) From ffa7b0248a86b8e2dcc8aa13c742741d7ff99b6d Mon Sep 17 00:00:00 2001 From: "recloudstream[bot]" <111277985+recloudstream[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:26:36 +0000 Subject: [PATCH 770/888] chore(locales): fix locale issues --- .../com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt | 1 + app/src/main/res/values-ajp/strings.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bp/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-mt/strings.xml | 4 ++-- app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 20 files changed, 21 insertions(+), 20 deletions(-) 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 c3d84867..ff891c43 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 @@ -98,6 +98,7 @@ val appLanguages = arrayListOf( Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), Triple("", "bahasa Melayu", "ms"), + Triple("", "Malti", "mt"), Triple("", "ဗမာစာ", "my"), Triple("", "नेपाली", "ne"), Triple("", "Nederlands", "nl"), diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index e4e17942..734d5644 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -622,4 +622,4 @@ أوديو بوك الميديا لتضمن عدم انقطاع التنزيلات والنوتيفيكايشنات للبرامج التلفزيونية يلي مشتركلها، الآپ \"كلود ستريم\" بده إذن ليمشي بـ الباكگروند. ازا كبست أوكي، رح تتوجه ع صفحة معلومات التطبيق. هونيك، نزال حتى توصل ل «استخدام بطارية التطبيق» \"App battery usage\" وحط استخدام البطارية ع «غير مقيد» \"Unrestricted\". ملاحظة إنو هيدا الإذن ما بيعني إنو \"كلود ستريم 3\" رح تستنزف البطارية. ومش رح يشتغل الآن بـ الباكگروند إلّا عند الضرورة، متل لمّا تتلقا نوتيفيكايشن أو تنزل ڤيديو من الريپو الاصلي. فيك ترجع ترد هيدا الستنگ بـ«الإعدادات العامة» \"General settings\"، إزا غيرت رأيك. - \ No newline at end of file + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2ac4d973..8681398d 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -650,4 +650,4 @@ \nواضبط استخدام البطارية على غير مقيد. يرجى ملاحظة أن هذا الإذن لا يعني أن CS3 سوف يستنزف البطارية. ولن يعمل إلا في الخلفية عند الضرورة، كما هو الحال عند تلقي الإشعارات أو تنزيل مقاطع الفيديو من الملحقات الرسمية. إذا اخترت الإلغاء، فيمكنك ضبط هذا الإعداد لاحقًا في الإعدادات العامة. موسيقى الوسائط - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index e4f47749..40847edf 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -639,4 +639,4 @@ Música Áudio-livro Mídia - \ 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 cc357373..0a8cf997 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -641,4 +641,4 @@ Zakažte optimalizace baterie Aby bylo zajištěno nepřetržité stahování a upozornění na odebírané seriály, potřebuje aplikace CloudStream povolení ke spuštění na pozadí. Stisknutím tlačítka OK budete přesměrováni na informace o aplikaci. Tam přejděte na položku Využití baterie aplikací a nastavte možnost Využití baterie na hodnotu Neomezené. Upozorňujeme, že toto povolení neznamená, že CS3 bude vybíjet baterii. Na pozadí bude pracovat pouze v případě potřeby, například při přijímání oznámení nebo stahování videí z oficiálních rozšíření. Pokud se rozhodnete toto nastavení zrušit, můžete jej později upravit v Obecných nastaveních. Audiokniha - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index bcff5139..20484cd9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -617,4 +617,4 @@ Media Audiolibro Para garantizar descargas y notificaciones ininterrumpidas para programas de televisión suscritos, CloudStream necesita permiso para ejecutarse en segundo plano. Al presionar OK, se le dirigirá a información de la aplicación. Allí, desplácese hasta Uso de la batería de la aplicación y establezca el uso de la batería en Sin restricciones. Tenga en cuenta que este permiso no significa que CS3 agotará su batería. Solo funcionará en segundo plano cuando sea necesario, como cuando reciba notificaciones o descargue videos de extensiones oficiales. Si decide cancelar, puede ajustar esta configuración más adelante en los ajustes generales. - \ No newline at end of file + diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index e9847af6..db432a61 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -191,4 +191,4 @@ پیش‌فرض کارتون تورنت - \ 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 1370ff2b..77c3db15 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -595,4 +595,4 @@ Ce test est destiné uniquement aux développeurs et ne vérifie ni n\'empêche le fonctionnement d\'aucune extension. Copié ! Nom du dépôt et adresse internet - \ 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 c3b55ba2..d537a1d5 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -638,4 +638,4 @@ Buku Audio Media Untuk memastikan unduhan dan pemberitahuan tanpa gangguan untuk acara TV berlangganan, CloudStream memerlukan izin untuk berjalan di latar belakang. Dengan menekan OK, Anda akan diarahkan ke Info aplikasi. Di sana, gulir ke Penggunaan baterai aplikasi dan atur penggunaan baterai ke Tidak Terbatas. Harap dicatat, izin ini tidak berarti CS3 akan menguras baterai Anda. Ini hanya akan beroperasi di latar belakang ketika diperlukan, seperti ketika menerima pemberitahuan atau mengunduh video dari ekstensi resmi. Jika Anda memilih untuk membatalkannya, Anda dapat menyesuaikan pengaturan ini nanti di Pengaturan Umum. - \ 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 01031297..040b0f31 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -637,4 +637,4 @@ L\'utilizzo della batteria dell\'app è già impostato su \"Senza restrizioni\" Musica Audiolibro - \ No newline at end of file + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index a26f902b..279f5511 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -280,4 +280,4 @@ എഡ്ജ് തരം ഔട്ട്ലൈൻ നിറം പശ്ചാത്തല നിറം - \ No newline at end of file + diff --git a/app/src/main/res/values-mt/strings.xml b/app/src/main/res/values-mt/strings.xml index 356a2caa..b2c0356a 100644 --- a/app/src/main/res/values-mt/strings.xml +++ b/app/src/main/res/values-mt/strings.xml @@ -92,7 +92,7 @@ Kompli Ara Neħħi Iktar informazzjoni - \@string/home_play + @string/home_play Jista\' jkun hemm bżonn ta\' VPN biex dan il-fornitur jaħdem b\'mod korrett Il-metadata mhix ipprovduta mis-sit, it-tagħbija tal-vidjo se tfalli jekk ma teżistix fuq is-sit. Deskrizzjoni @@ -123,4 +123,4 @@ Bookmarks Neħħi Falla t-tniżżil - \ No newline at end of file + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 4bf0f565..bdc55780 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -159,4 +159,4 @@ କୌଣସି ତଥ୍ୟ ନାହିଁ %1$s ଅ %2$d ଆଦ୍ୟ ବାଦ୍ ଦିଅ - \ 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 b80c1b79..c61f0104 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -618,4 +618,4 @@ Multimedia Użycie akumulatora przez aplikację jest już ustawione na nieograniczone Aby zapewnić nieprzerwane pobieranie i powiadomienia o subskrybowanych programach telewizyjnych, CloudStream potrzebuje pozwolenia na działanie w tle. Naciskając OK, zostaniesz przekierowany do informacji o aplikacji. Tam przewiń do użycia akumulatora przez aplikację i ustaw je na nieograniczone. Pamiętaj, że to pozwolenie nie oznacza, że CS3 będzie zużywać akumulator. Będzie działać w tle tylko wtedy, gdy będzie to konieczne, na przykład podczas odbierania powiadomień lub pobierania filmów z oficjalnych rozszerzeń. Jeśli zdecydujesz się anulować, możesz dostosować to ustawienie później w ustawieniach głównych. - \ 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 82054b6f..06e2352c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -615,4 +615,4 @@ Multimédia Desativar a otimização da bateria Para garantir descarregamentos ininterruptos e notificações de programas de TV subscritos, o CloudStream precisa de permissão para ser executado em segundo plano. Ao premir OK, será direcionado para informações da aplicação. Aí, desloque-se para utilização da bateria da aplicação e defina a utilização da bateria para sem restrições. Tenha em atenção que esta permissão não significa que o CS3 irá esgotar a sua bateria. Este só funcionará em segundo plano quando necessário, como ao receber notificações ou baixar vídeos de extensões oficiais. Se optar por cancelar, pode ajustar esta definição mais tarde em definições gerais. - \ 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 a71cc71b..cf456f56 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -616,4 +616,4 @@ Этот экран был закрыт из-за нескольких неудачных попыток. Пожалуйста, перезапустите приложение. Ваши данные в CloudStream были скопированы. Хотя вероятность этого очень мала, все устройства могут вести себя по-разному. В редких случаях, когда доступ к приложению заблокирован, полностью удалите данные приложения и восстановите их из резервной копии. Мы приносим свои извинения за любые неудобства, связанные с этим. Чтобы обеспечить бесперебойную загрузку и получение уведомлений о телепередачах, на которые вы подписаны, CloudStream необходимо разрешение на запуск в фоновом режиме. Нажав OK, вы перейдете к информации о приложении. Там перейдите к разделу 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 и установите значение \"Использование батареи\" 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Пожалуйста, обратите внимание, что это разрешение не означает, что CS3 разрядит вашу батарею. Он будет работать в фоновом режиме только при необходимости, например, при получении уведомлений или загрузке видео с официальных расширений. Если вы решите отменить, вы можете изменить эту настройку позже в 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3a5170a3..c3e5959a 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -664,4 +664,4 @@ Medya Abone olunan TV şovları için kesintisiz indirmeleri ve bildirimleri sağlamak için, CloudStream\'in arka planda çalışmasına izin vermeniz gerekmektedir. Tamam\'a basarak Uygulama bilgilerine yönlendirileceksiniz. Orada, 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 (Uygulama pil kullanımı) kısmına gidip pil kullanımını 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙 (Sınırsız) olarak ayarlayın. Bu iznin CS3\'ün pilinizi hızlıca tüketeceği anlamına gelmediğini lütfen unutmayın. Sadece gerektiğinde, resmi eklentilerden bildirim almak veya videoları indirmek gibi durumlarda arka planda çalışacaktır. İptal etmeyi seçerseniz, bu ayarı daha sonra 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨 (Genel Ayarlar) bölümünden ayarlayabilirsiniz. Uygulama pil kullanımı zaten sınırsız olarak ayarlanmış - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 981ac19b..403640b9 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -617,4 +617,4 @@ Аудіо книга Музика Медіа - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 202af75c..a12570ad 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -629,4 +629,4 @@ Chế độ tiêu thụ pin của ứng dụng đã được đặt ở mức không giới hạn …  \n——— - \ 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 4423f20f..828703d1 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -659,4 +659,4 @@ 音乐 无法打开 CloudStream 的应用程序信息。 使用指纹、面部 ID、PIN 码、图案和密码解锁应用程序。 - \ No newline at end of file + From e6c111532dd0db555393c78b94bde5c047a168d0 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 13 Apr 2024 19:51:39 +0200 Subject: [PATCH 771/888] Defaults Play button to first unwatched Episode (#1035) --- .../com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 69f8e8aa..6a83f396 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -33,6 +33,7 @@ import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup import com.lagradost.cloudstream3.ui.player.ExtractorLinkGenerator import com.lagradost.cloudstream3.ui.player.GeneratorPlayer +import com.lagradost.cloudstream3.ui.player.NEXT_WATCH_EPISODE_PERCENTAGE import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment import com.lagradost.cloudstream3.ui.result.ResultFragment.getStoredData import com.lagradost.cloudstream3.ui.result.ResultFragment.updateUIEvent @@ -782,7 +783,7 @@ class ResultFragmentTv : Fragment() { // resultEpisodeLoading.isVisible = episodes is Resource.Loading if (episodes is Resource.Success) { - val lastWatchedIndex = episodes.value.indexOfLast { ep -> ep.videoWatchState == VideoWatchState.Watched } + val lastWatchedIndex = episodes.value.indexOfLast { ep -> ep.getWatchProgress() >= NEXT_WATCH_EPISODE_PERCENTAGE.toFloat() / 100.0f } val firstUnwatched = episodes.value.getOrElse(lastWatchedIndex + 1) { episodes.value.firstOrNull() } if (firstUnwatched != null) { From afdc4988ac5fa54060c6fae4dc56abdf7679b08f Mon Sep 17 00:00:00 2001 From: Rushikesh Chavan <66415100+rushi-chavan@users.noreply.github.com> Date: Sat, 13 Apr 2024 10:52:08 -0700 Subject: [PATCH 772/888] Extractor: Update Vidplay Extractor (#1036) --- .../main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt index b9a07a6d..d5d0fb32 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt @@ -66,7 +66,7 @@ open class Vidplay : ExtractorApi() { } private suspend fun callFutoken(id: String, url: String): String? { - val script = app.get("$mainUrl/futoken").text + val script = app.get("$mainUrl/futoken", referer = url).text val k = "k='(\\S+)'".toRegex().find(script)?.groupValues?.get(1) ?: return null val a = mutableListOf(k) for (i in id.indices) { From aa8972870ccbaf1362be32ba134115463259fe5a Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:45:58 +0000 Subject: [PATCH 773/888] Show download size on videos (#1038) --- .../ui/result/ResultViewModel2.kt | 9 +++++-- .../cloudstream3/utils/ExtractorApi.kt | 26 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 84b8cf48..37a905a7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -5,6 +5,7 @@ import android.content.* import android.net.Uri import android.os.Build import android.os.Bundle +import android.text.format.Formatter.formatFileSize import android.util.Log import android.widget.Toast import androidx.annotation.MainThread @@ -20,7 +21,6 @@ import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.getId import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.APIHolder.unixTimeMS -import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.activity import com.lagradost.cloudstream3.CommonActivity.getCastSession @@ -1280,9 +1280,14 @@ class ResultViewModel2 : ViewModel() { callback: (Pair) -> Unit, ) { loadLinks(result, isVisible = true, type) { links -> + // Could not find a better way to do this + val context = AcraApplication.context postPopup( text, - links.links.map { txt("${it.name} ${Qualities.getStringByInt(it.quality)}") }) { + links.links.apmap { + val size = it.getVideoSize()?.let { size -> " " + formatFileSize(context, size) } ?: "" + txt("${it.name} ${Qualities.getStringByInt(it.quality)}$size") + }) { callback.invoke(links to (it ?: return@postPopup)) } } 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 e5d82d39..5a845326 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -404,9 +404,29 @@ open class ExtractorLink constructor( open val extractorData: String? = null, open val type: ExtractorLinkType, ) : VideoDownloadManager.IDownloadableMinimum { - val isM3u8 : Boolean get() = type == ExtractorLinkType.M3U8 - val isDash : Boolean get() = type == ExtractorLinkType.DASH - + val isM3u8: Boolean get() = type == ExtractorLinkType.M3U8 + val isDash: Boolean get() = type == ExtractorLinkType.DASH + + // Cached video size + private var videoSize: Long? = null + + /** + * Get video size in bytes with one head request. Only available for ExtractorLinkType.Video + * @param timeoutSeconds timeout of the head request. + */ + suspend fun getVideoSize(timeoutSeconds: Long = 3L): Long? { + // Content-Length is not applicable to other types of formats + if (this.type != ExtractorLinkType.VIDEO) return null + + videoSize = videoSize ?: runCatching { + val response = + app.head(this.url, headers = headers, referer = referer, timeout = timeoutSeconds) + response.headers["Content-Length"]?.toLong() + }.getOrNull() + + return videoSize + } + @JsonIgnore fun getAllHeaders() : Map { if (referer.isBlank()) { From 5db541d7ccdc6e305002e2169fa84c56aa0018ab Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Sun, 14 Apr 2024 02:13:12 +0200 Subject: [PATCH 774/888] feat(ui): added reset button to subtitle delay (#1040) --- .../cloudstream3/ui/player/FullScreenPlayer.kt | 14 ++++++-------- app/src/main/res/layout/subtitle_offset.xml | 7 +++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) 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 56983190..c357ce9c 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 @@ -14,13 +14,7 @@ import android.os.Bundle import android.provider.Settings import android.text.Editable import android.text.format.DateUtils -import android.view.KeyEvent -import android.view.LayoutInflater -import android.view.MotionEvent -import android.view.Surface -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager +import android.view.* import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES import android.view.animation.AlphaAnimation import android.view.animation.Animation @@ -50,7 +44,6 @@ import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.ui.settings.SettingsFragment import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog @@ -498,6 +491,11 @@ open class FullScreenPlayer : AbstractPlayerFragment() { dialog.dismissSafe(activity) player.seekTime(1L) } + resetBtt.setOnClickListener { + subtitleDelay = 0 + dialog.dismissSafe(activity) + player.seekTime(1L) + } cancelBtt.setOnClickListener { subtitleDelay = beforeOffset dialog.dismissSafe(activity) diff --git a/app/src/main/res/layout/subtitle_offset.xml b/app/src/main/res/layout/subtitle_offset.xml index c17c5eff..d5e303b6 100644 --- a/app/src/main/res/layout/subtitle_offset.xml +++ b/app/src/main/res/layout/subtitle_offset.xml @@ -113,6 +113,13 @@ + + Music Audio Book Media + Reset \ No newline at end of file From 6df3ef14f66dd3cfc038ee922c563684eb84ce4e Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:07:28 +0000 Subject: [PATCH 775/888] First steps for multiplatform API (#1003) * First steps for multiplatform api * Buildconfig testing * Fix publishing and classes.jar * Update build.gradle.kts --- .idea/gradle.xml | 7 +- app/build.gradle.kts | 34 ++++++++-- .../com/lagradost/cloudstream3/MainAPI.kt | 2 - .../lagradost/cloudstream3/mvvm/Lifecycle.kt | 16 +++++ build.gradle.kts | 8 ++- library/build.gradle.kts | 68 +++++++++++++++++++ library/src/androidMain/AndroidManifest.xml | 2 + .../kotlin/com/lagradost/api/Log.kt | 21 ++++++ .../kotlin/com/lagradost/api/Log.kt | 8 +++ .../com/lagradost/cloudstream3/MainApi.kt | 3 + .../cloudstream3/mvvm/ArchComponentExt.kt | 35 +++------- .../jvmMain/kotlin/com/lagradost/api/Log.kt | 19 ++++++ settings.gradle.kts | 3 +- 13 files changed, 185 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/mvvm/Lifecycle.kt create mode 100644 library/build.gradle.kts create mode 100644 library/src/androidMain/AndroidManifest.xml create mode 100644 library/src/androidMain/kotlin/com/lagradost/api/Log.kt create mode 100644 library/src/commonMain/kotlin/com/lagradost/api/Log.kt create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt (86%) create mode 100644 library/src/jvmMain/kotlin/com/lagradost/api/Log.kt diff --git a/.idea/gradle.xml b/.idea/gradle.xml index c5c0ff3b..d7c08c9c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,17 +4,16 @@ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 02946e85..e07162d7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,5 +1,6 @@ import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties import org.jetbrains.dokka.gradle.DokkaTask +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.io.ByteArrayOutputStream import java.net.URL @@ -13,6 +14,7 @@ plugins { val tmpFilePath = System.getProperty("user.home") + "/work/_temp/keystore/" val prereleaseStoreFile: File? = File(tmpFilePath).listFiles()?.first() +var isLibraryDebug = false fun String.execute() = ByteArrayOutputStream().use { baot -> if (project.exec { @@ -103,6 +105,7 @@ android { ) } debug { + isLibraryDebug = true isDebuggable = true applicationIdSuffix = ".debug" proguardFiles( @@ -232,18 +235,37 @@ dependencies { implementation("androidx.work:work-runtime:2.9.0") implementation("androidx.work:work-runtime-ktx:2.9.0") implementation("com.github.Blatzar:NiceHttp:0.4.11") // HTTP Lib + + implementation(project(":library") { + this.extra.set("isDebug", isLibraryDebug) + }) } -tasks.register("androidSourcesJar", Jar::class) { +tasks.register("androidSourcesJar") { archiveClassifier.set("sources") from(android.sourceSets.getByName("main").java.srcDirs) // Full Sources } -// For GradLew Plugin -tasks.register("makeJar", Copy::class) { - from("build/intermediates/compile_app_classes_jar/prereleaseDebug") - into("build") - include("classes.jar") +tasks.register("copyJar") { + from( + "build/intermediates/compile_app_classes_jar/prereleaseDebug", + "../library/build/libs" + ) + into("build/app-classes") + include("classes.jar", "library-jvm*.jar") + // Remove the version + rename("library-jvm.*.jar", "library-jvm.jar") +} + +// Merge the app classes and the library classes into classes.jar +tasks.register("makeJar") { + dependsOn(tasks.getByName("copyJar")) + from( + zipTree("build/app-classes/classes.jar"), + zipTree("build/app-classes/library-jvm.jar") + ) + destinationDirectory.set(layout.buildDirectory) + archivesName = "classes" } tasks.withType { diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index ecbdcbbc..7b1b5775 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -743,8 +743,6 @@ fun base64Encode(array: ByteArray): String { } } -class ErrorLoadingException(message: String? = null) : Exception(message) - fun MainAPI.fixUrlNull(url: String?): String? { if (url.isNullOrEmpty()) { return null diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/Lifecycle.kt b/app/src/main/java/com/lagradost/cloudstream3/mvvm/Lifecycle.kt new file mode 100644 index 00000000..3df5197c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/mvvm/Lifecycle.kt @@ -0,0 +1,16 @@ +package com.lagradost.cloudstream3.mvvm + +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LiveData + +/** NOTE: Only one observer at a time per value */ +fun LifecycleOwner.observe(liveData: LiveData, action: (t: T) -> Unit) { + liveData.removeObservers(this) + liveData.observe(this) { it?.let { t -> action(t) } } +} + +/** NOTE: Only one observer at a time per value */ +fun LifecycleOwner.observeNullable(liveData: LiveData, action: (t: T) -> Unit) { + liveData.removeObservers(this) + liveData.observe(this) { action(it) } +} diff --git a/build.gradle.kts b/build.gradle.kts index 801a3c0f..ab1918fe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,6 +8,8 @@ buildscript { classpath("com.android.tools.build:gradle:8.2.2") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") + // Universal build config + classpath("com.codingfeline.buildkonfig:buildkonfig-gradle-plugin:0.15.1") } } @@ -22,6 +24,6 @@ plugins { id("com.google.devtools.ksp") version "1.9.22-1.0.17" apply false } -tasks.register("clean") { - delete(rootProject.layout.buildDirectory) -} +//tasks.register("clean") { +// delete(rootProject.layout.buildDirectory) +//} diff --git a/library/build.gradle.kts b/library/build.gradle.kts new file mode 100644 index 00000000..42a8c943 --- /dev/null +++ b/library/build.gradle.kts @@ -0,0 +1,68 @@ +import com.codingfeline.buildkonfig.compiler.FieldSpec + +plugins { + kotlin("multiplatform") + id("maven-publish") + id("com.android.library") + id("com.codingfeline.buildkonfig") +} + +kotlin { + version = "1.0.0" + androidTarget() + jvm() + + sourceSets { + commonMain.dependencies { + implementation("com.github.Blatzar:NiceHttp:0.4.11") // HTTP Lib + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") /* JSON Parser + ^ Don't Bump Jackson above 2.13.1 , Crashes on Android TV's and FireSticks that have Min API + Level 25 or Less. */ + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0") + } + } +} + +repositories { + mavenLocal() + maven("https://jitpack.io") +} + +tasks.withType { + kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() +} + +buildkonfig { + packageName = "com.lagradost.api" + exposeObjectWithName = "BuildConfig" + + defaultConfigs { + val isDebug = kotlin.runCatching { extra.get("isDebug") }.getOrNull() == true + buildConfigField(FieldSpec.Type.BOOLEAN, "DEBUG", isDebug.toString()) + } +} + +android { + compileSdk = 34 + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + + defaultConfig { + minSdk = 21 + targetSdk = 33 + } + + // If this is the same com.lagradost.cloudstream3.R stops working + namespace = "com.lagradost.api" + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} +publishing { + publications { + withType { + groupId = "com.lagradost.api" + } + } +} \ No newline at end of file diff --git a/library/src/androidMain/AndroidManifest.xml b/library/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..568741e5 --- /dev/null +++ b/library/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/library/src/androidMain/kotlin/com/lagradost/api/Log.kt b/library/src/androidMain/kotlin/com/lagradost/api/Log.kt new file mode 100644 index 00000000..12524411 --- /dev/null +++ b/library/src/androidMain/kotlin/com/lagradost/api/Log.kt @@ -0,0 +1,21 @@ +package com.lagradost.api + +import android.util.Log + +actual object Log { + actual fun d(tag: String, message: String) { + Log.d(tag, message) + } + + actual fun i(tag: String, message: String) { + Log.i(tag, message) + } + + actual fun w(tag: String, message: String) { + Log.w(tag, message) + } + + actual fun e(tag: String, message: String) { + Log.e(tag, message) + } +} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/api/Log.kt b/library/src/commonMain/kotlin/com/lagradost/api/Log.kt new file mode 100644 index 00000000..4b8e6329 --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/api/Log.kt @@ -0,0 +1,8 @@ +package com.lagradost.api + +expect object Log { + fun d(tag: String, message: String) + fun i(tag: String, message: String) + fun w(tag: String, message: String) + fun e(tag: String, message: String) +} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt new file mode 100644 index 00000000..87ee4815 --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt @@ -0,0 +1,3 @@ +package com.lagradost.cloudstream3 + +class ErrorLoadingException(message: String? = null) : Exception(message) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt similarity index 86% rename from app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt index 817d7db3..d3b4999a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/mvvm/ArchComponentExt.kt @@ -1,10 +1,7 @@ package com.lagradost.cloudstream3.mvvm -import android.util.Log -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.LiveData -import com.bumptech.glide.load.HttpException -import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.api.BuildConfig +import com.lagradost.api.Log import com.lagradost.cloudstream3.ErrorLoadingException import kotlinx.coroutines.* import java.io.InterruptedIOException @@ -49,18 +46,6 @@ inline fun debugWarning(assert: () -> Boolean, message: () -> String) { } } -/** NOTE: Only one observer at a time per value */ -fun LifecycleOwner.observe(liveData: LiveData, action: (t: T) -> Unit) { - liveData.removeObservers(this) - liveData.observe(this) { it?.let { t -> action(t) } } -} - -/** NOTE: Only one observer at a time per value */ -fun LifecycleOwner.observeNullable(liveData: LiveData, action: (t: T) -> Unit) { - liveData.removeObservers(this) - liveData.observe(this) { action(it) } -} - sealed class Resource { data class Success(val value: T) : Resource() data class Failure( @@ -158,14 +143,14 @@ fun throwAbleToResource( "Connection Timeout\nPlease try again later." ) } - is HttpException -> { - Resource.Failure( - false, - throwable.statusCode, - null, - throwable.message ?: "HttpException" - ) - } +// is HttpException -> { +// Resource.Failure( +// false, +// throwable.statusCode, +// null, +// throwable.message ?: "HttpException" +// ) +// } is UnknownHostException -> { Resource.Failure(true, null, null, "Cannot connect to server, try again later.\n${throwable.message}") } diff --git a/library/src/jvmMain/kotlin/com/lagradost/api/Log.kt b/library/src/jvmMain/kotlin/com/lagradost/api/Log.kt new file mode 100644 index 00000000..e9a0e6b4 --- /dev/null +++ b/library/src/jvmMain/kotlin/com/lagradost/api/Log.kt @@ -0,0 +1,19 @@ +package com.lagradost.api + +actual object Log { + actual fun d(tag: String, message: String) { + println("DEBUG $tag: $message") + } + + actual fun i(tag: String, message: String) { + println("INFO $tag: $message") + } + + actual fun w(tag: String, message: String) { + println("WARNING $tag: $message") + } + + actual fun e(tag: String, message: String) { + println("ERROR $tag: $message") + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 17070047..eabd9f0e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,4 @@ rootProject.name = "CloudStream" -include(":app") \ No newline at end of file +include(":app") +include(":library") \ No newline at end of file From 9a18ef641136cf9335c830145cf5b1bc4a62f8e3 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Wed, 17 Apr 2024 23:48:33 +0200 Subject: [PATCH 776/888] bugfix: fixing regex special chars break it (#1047) --- .../main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt index 153dbd3e..d9f0b382 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt @@ -50,7 +50,7 @@ class JsUnpacker(packedJS: String?) { throw Exception("Unknown p.a.c.k.e.r. encoding") } val unbase = Unbase(radix) - p = Pattern.compile("\\b\\w+\\b") + p = Pattern.compile("""\b[a-zA-Z0-9_]+\b""") m = p.matcher(payload) val decoded = StringBuilder(payload) var replaceOffset = 0 From 6cef9f7ea257f4af8ed3f739f79c1d01b1b3b36e Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 20 Apr 2024 22:18:49 +0200 Subject: [PATCH 777/888] Filtering first unwatched episode respects watched state (#1049) --- .../com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 6a83f396..13621cda 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -783,7 +783,10 @@ class ResultFragmentTv : Fragment() { // resultEpisodeLoading.isVisible = episodes is Resource.Loading if (episodes is Resource.Success) { - val lastWatchedIndex = episodes.value.indexOfLast { ep -> ep.getWatchProgress() >= NEXT_WATCH_EPISODE_PERCENTAGE.toFloat() / 100.0f } + val lastWatchedIndex = episodes.value.indexOfLast { ep -> + ep.getWatchProgress() >= NEXT_WATCH_EPISODE_PERCENTAGE.toFloat() / 100.0f || ep.videoWatchState == VideoWatchState.Watched + } + val firstUnwatched = episodes.value.getOrElse(lastWatchedIndex + 1) { episodes.value.firstOrNull() } if (firstUnwatched != null) { From e01ff4d843810467660add2a8464973a673daa08 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Mon, 22 Apr 2024 01:13:55 +0200 Subject: [PATCH 778/888] Fix NewPipeExtractor lib path (#1050) --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e07162d7..f854865d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -202,7 +202,7 @@ dependencies { // PlayBack implementation("com.jaredrummler:colorpicker:1.1.0") // Subtitle Color Picker implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Custom FF-MPEG Lib for Audio Codecs - implementation("com.github.teamnewpipe:NewPipeExtractor:6dc25f7") /* For Trailers + implementation("com.github.TeamNewPipe.NewPipeExtractor:NewPipeExtractor:6dc25f7b97") /* For Trailers ^ Update to Latest Commits if Trailers Misbehave, github.com/TeamNewPipe/NewPipeExtractor/commits/dev */ implementation("com.github.albfernandez:juniversalchardet:2.4.0") // Subtitle Decoding From 4399a612dfa0672acefc7de17c37884ee64331c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Sancak?= Date: Mon, 22 Apr 2024 02:14:36 +0300 Subject: [PATCH 779/888] Update Vidmoly.kt (#1051) --- .../java/com/lagradost/cloudstream3/extractors/Vidmoly.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt index 615cfd74..979fd8c5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt @@ -25,9 +25,13 @@ open class Vidmoly : ExtractorApi() { subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - + val headers = mapOf( + "User-Agent" to "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36", + "Sec-Fetch-Dest" to "iframe" + ) val script = app.get( url, + headers = headers, referer = referer, ).document.select("script") .find { it.data().contains("sources:") }?.data() @@ -66,4 +70,4 @@ open class Vidmoly : ExtractorApi() { @JsonProperty("kind") val kind: String? = null, ) -} \ No newline at end of file +} From 0744189020fb3132ebf0debed899e522ab4df246 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:18:54 +0530 Subject: [PATCH 780/888] feat(ui): show account name and image on main settings page (#1001) --- .../ui/settings/SettingsFragment.kt | 52 ++++++++++++++----- app/src/main/res/drawable/rounded_outline.xml | 13 +++++ app/src/main/res/layout/main_settings.xml | 9 ++-- 3 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/drawable/rounded_outline.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index dfa84998..443eeda7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -1,13 +1,13 @@ package com.lagradost.cloudstream3.ui.settings import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.annotation.StringRes import androidx.core.view.children -import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.preference.Preference @@ -18,12 +18,14 @@ import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.MainSettingsBinding import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers import com.lagradost.cloudstream3.ui.home.HomeFragment import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.clipboardHelper import com.lagradost.cloudstream3.utils.UIHelper.navigate @@ -133,7 +135,6 @@ class SettingsFragment : Fragment() { val localBinding = MainSettingsBinding.inflate(inflater, container, false) binding = localBinding return localBinding.root - //return inflater.inflate(R.layout.main_settings, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -141,21 +142,44 @@ class SettingsFragment : Fragment() { activity?.navigate(id, Bundle()) } - // used to debug leaks showToast(activity,"${VideoDownloadManager.downloadStatusEvent.size} : ${VideoDownloadManager.downloadProgressEvent.size}") + /** used to debug leaks + showToast(activity,"${VideoDownloadManager.downloadStatusEvent.size} : + ${VideoDownloadManager.downloadProgressEvent.size}") **/ - for (syncApi in accountManagers) { - val login = syncApi.loginInfo() - val pic = login?.profilePicture ?: continue - if (binding?.settingsProfilePic?.setImage( - pic, - errorImageDrawable = HomeFragment.errorProfilePic - ) == true - ) { - binding?.settingsProfileText?.text = login.name - binding?.settingsProfile?.isVisible = true - break + fun hasProfilePictureFromAccountManagers(accountManagers: List): Boolean { + for (syncApi in accountManagers) { + val login = syncApi.loginInfo() + val pic = login?.profilePicture ?: continue + + if (binding?.settingsProfilePic?.setImage( + pic, + errorImageDrawable = HomeFragment.errorProfilePic + ) == true + ) { + binding?.settingsProfileText?.text = login.name + return true // sync profile exists + } } + return false // not syncing } + + // display local account information if not syncing + if (!hasProfilePictureFromAccountManagers(accountManagers)) { + val activity = activity ?: return + val currentAccount = try { + DataStoreHelper.accounts.firstOrNull { + it.keyIndex == DataStoreHelper.selectedKeyIndex + } ?: activity.let { DataStoreHelper.getDefaultAccount(activity) } + + } catch (t: IllegalStateException) { + Log.e("AccountManager", "Activity not found", t) + null + } + + binding?.settingsProfilePic?.setImage(currentAccount?.image) + binding?.settingsProfileText?.text = currentAccount?.name + } + binding?.apply { listOf( settingsGeneral to R.id.action_navigation_global_to_navigation_settings_general, diff --git a/app/src/main/res/drawable/rounded_outline.xml b/app/src/main/res/drawable/rounded_outline.xml new file mode 100644 index 00000000..b85ace8e --- /dev/null +++ b/app/src/main/res/drawable/rounded_outline.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/main_settings.xml b/app/src/main/res/layout/main_settings.xml index 2c90d958..0b931843 100644 --- a/app/src/main/res/layout/main_settings.xml +++ b/app/src/main/res/layout/main_settings.xml @@ -24,7 +24,6 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:padding="20dp" - android:visibility="gone" tools:visibility="visible"> + android:scaleType="centerCrop" + android:foreground="@drawable/rounded_outline" + tools:src="@drawable/profile_bg_orange" + android:contentDescription="@string/account"/> + + tools:text="Quick Brown Fox" /> Date: Mon, 22 Apr 2024 16:59:14 +0200 Subject: [PATCH 781/888] Trakt meta provider for extensions (#1026) --- .../metaproviders/TraktProvider.kt | 430 ++++++++++++++++++ 1 file changed, 430 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt new file mode 100644 index 00000000..98e12bcd --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -0,0 +1,430 @@ +package com.lagradost.cloudstream3.metaproviders + +import android.net.Uri +import com.lagradost.cloudstream3.* +import com.fasterxml.jackson.annotation.JsonAlias +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId +import com.lagradost.cloudstream3.LoadResponse.Companion.addTMDbId +import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.utils.AppUtils.parseJson +import com.lagradost.cloudstream3.utils.AppUtils.toJson +import java.util.Locale +import java.text.SimpleDateFormat +import kotlin.math.roundToInt + +open class TraktProvider : MainAPI() { + override var name = "Trakt" + override val hasMainPage = true + override val providerType = ProviderType.MetaProvider + override val supportedTypes = setOf( + TvType.Movie, + TvType.TvSeries, + TvType.Anime, + ) + + private val traktClientId = base64Decode("N2YzODYwYWQzNGI4ZTZmOTdmN2I5MTA0ZWQzMzEwOGI0MmQ3MTdlMTM0MmM2NGMxMTg5NGE1MjUyYTQ3NjE3Zg==") + private val traktApiUrl = base64Decode("aHR0cHM6Ly9hcGl6LnRyYWt0LnR2") + + override val mainPage = mainPageOf( + "$traktApiUrl/movies/trending" to "Trending Movies", //Most watched movies right now + "$traktApiUrl/movies/popular" to "Popular Movies", //The most popular movies for all time + "$traktApiUrl/shows/trending" to "Trending Shows", //Most watched Shows right now + "$traktApiUrl/shows/popular" to "Popular Shows", //The most popular Shows for all time + ) + + override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse { + + val apiResponse = getApi("${request.data}?extended=cloud9,full&page=$page") + + val results = parseJson>(apiResponse).map { element -> + element.toSearchResponse() + } + return newHomePageResponse(request.name, results) + } + + private fun MediaDetails.toSearchResponse(): SearchResponse { + + val media = this.media ?: this + val mediaType = if (media.ids?.tvdb == null) TvType.Movie else TvType.TvSeries + val poster = media.images?.poster?.firstOrNull() + + if (mediaType == TvType.Movie) { + return newMovieSearchResponse( + name = media.title!!, + url = Data( + type = mediaType, + mediaDetails = media, + ).toJson(), + type = TvType.Movie, + ) { + posterUrl = fixPath(poster) + } + } else { + return newTvSeriesSearchResponse( + name = media.title!!, + url = Data( + type = mediaType, + mediaDetails = media, + ).toJson(), + type = TvType.TvSeries, + ) { + this.posterUrl = fixPath(poster) + } + } + } + + override suspend fun search(query: String): List? { + val apiResponse = getApi("$traktApiUrl/search/movie,show?extended=cloud9,full&limit=20&page=1&query=$query") + + val results = parseJson>(apiResponse).map { element -> + element.toSearchResponse() + } + + return results + } + override suspend fun load(url: String): LoadResponse { + + val data = parseJson(url) + val mediaDetails = data.mediaDetails + val moviesOrShows = if (data.type == TvType.Movie) "movies" else "shows" + + val posterUrl = mediaDetails?.images?.poster?.firstOrNull() + val backDropUrl = mediaDetails?.images?.fanart?.firstOrNull() + + val resActor = getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/people?extended=cloud9,full") + + val actors = parseJson(resActor).cast?.map { + ActorData( + Actor( + name = it.person?.name!!, + image = getWidthImageUrl(it.person.images?.headshot?.firstOrNull(), "w500") + ), + roleString = it.character + ) + } + + val resRelated = getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/related?extended=cloud9,full&limit=20") + + val relatedMedia = parseJson>(resRelated).map { it.toSearchResponse() } + + val isCartoon = mediaDetails?.genres?.contains("animation") == true || mediaDetails?.genres?.contains("anime") == true + val isAnime = isCartoon && (mediaDetails?.language == "zh" || mediaDetails?.language == "ja") + val isAsian = !isAnime && (mediaDetails?.language == "zh" || mediaDetails?.language == "ko") + val isBollywood = mediaDetails?.country == "in" + + if (data.type == TvType.Movie) { + + val linkData = LinkData( + id = mediaDetails?.ids?.tmdb, + imdbId = mediaDetails?.ids?.imdb.toString(), + tvdbId = mediaDetails?.ids?.tvdb, + type = data.type.toString(), + title = mediaDetails?.title, + year = mediaDetails?.year, + orgTitle = mediaDetails?.title, + isAnime = isAnime, + //jpTitle = later if needed as it requires another network request, + airedDate = mediaDetails?.released + ?: mediaDetails?.firstAired, + isAsian = isAsian, + isBollywood = isBollywood, + ).toJson() + + return newMovieLoadResponse( + name = mediaDetails?.title!!, + url = data.toJson(), + dataUrl = linkData.toJson(), + type = if (isAnime) TvType.AnimeMovie else TvType.Movie, + ) { + this.name = mediaDetails.title + this.apiName = "Trakt" + this.type = if (isAnime) TvType.AnimeMovie else TvType.Movie + this.posterUrl = getOriginalWidthImageUrl(posterUrl) + this.year = mediaDetails.year + this.plot = mediaDetails.overview + this.rating = mediaDetails.rating?.times(1000)?.roundToInt() + this.tags = mediaDetails.genres + this.duration = mediaDetails.runtime + this.recommendations = relatedMedia + this.actors = actors + this.comingSoon = isUpcoming(mediaDetails.released) + //posterHeaders + this.backgroundPosterUrl = getOriginalWidthImageUrl(backDropUrl) + this.contentRating = mediaDetails.certification + addTrailer(mediaDetails.trailer) + addImdbId(mediaDetails.ids?.imdb) + addTMDbId(mediaDetails.ids?.tmdb.toString()) + } + } else { + + val resSeasons = getApi("$traktApiUrl/shows/${mediaDetails?.ids?.trakt.toString()}/seasons?extended=cloud9,full,episodes") + val episodes = mutableListOf() + val seasons = parseJson>(resSeasons) + val seasonsNames = mutableListOf() + + seasons.forEach { season -> + + seasonsNames.add( + SeasonData( + season.number!!, + season.title + ) + ) + + season.episodes?.map { episode -> + + val linkData = LinkData( + id = mediaDetails?.ids?.tmdb, + imdbId = mediaDetails?.ids?.imdb.toString(), + tvdbId = mediaDetails?.ids?.tvdb, + type = data.type.toString(), + season = episode.season, + episode = episode.number, + title = mediaDetails?.title, + year = mediaDetails?.year, + orgTitle = mediaDetails?.title, + isAnime = isAnime, + airedYear = mediaDetails?.year, + lastSeason = seasons.size, + epsTitle = episode.title, + //jpTitle = later if needed as it requires another network request, + date = episode.firstAired, + airedDate = episode.firstAired, + isAsian = isAsian, + isBollywood = isBollywood, + isCartoon = isCartoon + ).toJson() + + episodes.add( + Episode( + data = linkData.toJson(), + name = episode.title, + season = episode.season, + episode = episode.number, + posterUrl = fixPath(episode.images?.screenshot?.firstOrNull()), + rating = episode.rating?.times(10)?.roundToInt(), + description = episode.overview, + ).apply { + this.addDate(episode.firstAired) + } + ) + } + } + + return newTvSeriesLoadResponse( + name = mediaDetails?.title!!, + url = data.toJson(), + type = if (isAnime) TvType.Anime else TvType.TvSeries, + episodes = episodes + ) { + this.name = mediaDetails.title + this.apiName = "Trakt" + this.type = if (isAnime) TvType.Anime else TvType.TvSeries + this.episodes = episodes + this.posterUrl = getOriginalWidthImageUrl(posterUrl) + this.year = mediaDetails.year + this.plot = mediaDetails.overview + this.showStatus = getStatus(mediaDetails.status) + this.rating = mediaDetails.rating?.times(1000)?.roundToInt() + this.tags = mediaDetails.genres + this.duration = mediaDetails.runtime + this.recommendations = relatedMedia + this.actors = actors + this.comingSoon = isUpcoming(mediaDetails.released) + //posterHeaders + this.seasonNames = seasonsNames + this.backgroundPosterUrl = getOriginalWidthImageUrl(backDropUrl) + this.contentRating = mediaDetails.certification + addTrailer(mediaDetails.trailer) + addImdbId(mediaDetails.ids?.imdb) + addTMDbId(mediaDetails.ids?.tmdb.toString()) + } + } + } + + private suspend fun getApi(url: String) : String { + return app.get( + url = url, + headers = mapOf( + "Content-Type" to "application/json", + "trakt-api-version" to "2", + "trakt-api-key" to traktClientId, + ) + ).toString() + } + + private fun isUpcoming(dateString: String?): Boolean { + return try { + val format = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) + val dateTime = dateString?.let { format.parse(it)?.time } ?: return false + APIHolder.unixTimeMS < dateTime + } catch (t: Throwable) { + logError(t) + false + } + } + + private fun getStatus(t: String?): ShowStatus { + return when (t) { + "returning series" -> ShowStatus.Ongoing + "continuing" -> ShowStatus.Ongoing + else -> ShowStatus.Completed + } + } + + private fun fixPath(url: String?): String? { + url ?: return null + return "https://$url" + } + + private fun getWidthImageUrl(path: String?, width: String) : String? { + if (path == null) return null + if (!path.contains("image.tmdb.org")) return fixPath(path) + val fileName = Uri.parse(path).lastPathSegment ?: return null + return "https://image.tmdb.org/t/p/${width}/${fileName}" + } + + private fun getOriginalWidthImageUrl(path: String?) : String? { + if (path == null) return null + if (!path.contains("image.tmdb.org")) return fixPath(path) + return getWidthImageUrl(path, "original") + } + + data class Data( + val type: TvType? = null, + val mediaDetails: MediaDetails? = null, + ) + + data class MediaDetails( + @JsonProperty("title") val title: String? = null, + @JsonProperty("year") val year: Int? = null, + @JsonProperty("ids") val ids: Ids? = null, + @JsonProperty("tagline") val tagline: String? = null, + @JsonProperty("overview") val overview: String? = null, + @JsonProperty("released") val released: String? = null, + @JsonProperty("runtime") val runtime: Int? = null, + @JsonProperty("country") val country: String? = null, + @JsonProperty("updatedAt") val updatedAt: String? = null, + @JsonProperty("trailer") val trailer: String? = null, + @JsonProperty("homepage") val homepage: String? = null, + @JsonProperty("status") val status: String? = null, + @JsonProperty("rating") val rating: Double? = null, + @JsonProperty("votes") val votes: Long? = null, + @JsonProperty("comment_count") val commentCount: Long? = null, + @JsonProperty("language") val language: String? = null, + @JsonProperty("languages") val languages: List? = null, + @JsonProperty("available_translations") val availableTranslations: List? = null, + @JsonProperty("genres") val genres: List? = null, + @JsonProperty("certification") val certification: String? = null, + @JsonProperty("aired_episodes") val airedEpisodes: Int? = null, + @JsonProperty("first_aired") val firstAired: String? = null, + @JsonProperty("airs") val airs: Airs? = null, + @JsonProperty("network") val network: String? = null, + @JsonProperty("images") val images: Images? = null, + @JsonProperty("movie") @JsonAlias("show") val media: MediaDetails? = null + ) + + data class Airs( + @JsonProperty("day") val day: String? = null, + @JsonProperty("time") val time: String? = null, + @JsonProperty("timezone") val timezone: String? = null, + ) + + data class Ids( + @JsonProperty("trakt") val trakt: Int? = null, + @JsonProperty("slug") val slug: String? = null, + @JsonProperty("tvdb") val tvdb: Int? = null, + @JsonProperty("imdb") val imdb: String? = null, + @JsonProperty("tmdb") val tmdb: Int? = null, + @JsonProperty("tvrage") val tvrage: String? = null, + ) + + data class Images( + @JsonProperty("fanart") val fanart: List? = null, + @JsonProperty("poster") val poster: List? = null, + @JsonProperty("logo") val logo: List? = null, + @JsonProperty("clearart") val clearart: List? = null, + @JsonProperty("banner") val banner: List? = null, + @JsonProperty("thumb") val thumb: List? = null, + @JsonProperty("screenshot") val screenshot: List? = null, + @JsonProperty("headshot") val headshot: List? = null, + ) + + data class People( + @JsonProperty("cast") val cast: List? = null, + ) + + data class Cast( + @JsonProperty("character") val character: String? = null, + @JsonProperty("characters") val characters: List? = null, + @JsonProperty("episode_count") val episodeCount: Long? = null, + @JsonProperty("person") val person: Person? = null, + @JsonProperty("images") val images: Images? = null, + ) + + data class Person( + @JsonProperty("name") val name: String? = null, + @JsonProperty("ids") val ids: Ids? = null, + @JsonProperty("images") val images: Images? = null, + ) + + data class Seasons( + @JsonProperty("aired_episodes") val airedEpisodes: Int? = null, + @JsonProperty("episode_count") val episodeCount: Int? = null, + @JsonProperty("episodes") val episodes: List? = null, + @JsonProperty("first_aired") val firstAired: String? = null, + @JsonProperty("ids") val ids: Ids? = null, + @JsonProperty("images") val images: Images? = null, + @JsonProperty("network") val network: String? = null, + @JsonProperty("number") val number: Int? = null, + @JsonProperty("overview") val overview: String? = null, + @JsonProperty("rating") val rating: Double? = null, + @JsonProperty("title") val title: String? = null, + @JsonProperty("updated_at") val updatedAt: String? = null, + @JsonProperty("votes") val votes: Int? = null, + ) + + data class TraktEpisode( + @JsonProperty("available_translations") val availableTranslations: List? = null, + @JsonProperty("comment_count") val commentCount: Int? = null, + @JsonProperty("episode_type") val episodeType: String? = null, + @JsonProperty("first_aired") val firstAired: String? = null, + @JsonProperty("ids") val ids: Ids? = null, + @JsonProperty("images") val images: Images? = null, + @JsonProperty("number") val number: Int? = null, + @JsonProperty("number_abs") val numberAbs: Int? = null, + @JsonProperty("overview") val overview: String? = null, + @JsonProperty("rating") val rating: Double? = null, + @JsonProperty("runtime") val runtime: Int? = null, + @JsonProperty("season") val season: Int? = null, + @JsonProperty("title") val title: String? = null, + @JsonProperty("updated_at") val updatedAt: String? = null, + @JsonProperty("votes") val votes: Int? = null, + ) + + data class LinkData( + val id: Int? = null, + val imdbId: String? = null, + val tvdbId: Int? = null, + val type: String? = null, + val season: Int? = null, + val episode: Int? = null, + val aniId: String? = null, + val animeId: String? = null, + val title: String? = null, + val year: Int? = null, + val orgTitle: String? = null, + val isAnime: Boolean = false, + val airedYear: Int? = null, + val lastSeason: Int? = null, + val epsTitle: String? = null, + val jpTitle: String? = null, + val date: String? = null, + val airedDate: String? = null, + val isAsian: Boolean = false, + val isBollywood: Boolean = false, + val isCartoon: Boolean = false, + ) +} \ No newline at end of file From e6b9d621f96beba6e427aa092d09bb448caf8d93 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Mon, 22 Apr 2024 17:00:27 +0200 Subject: [PATCH 782/888] feat(ui): added option to reset sub delay (#1041) --- .../ui/player/AbstractPlayerFragment.kt | 14 ++++++++------ .../lagradost/cloudstream3/ui/player/CS3IPlayer.kt | 3 +++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index cfa6682d..0865b220 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -1,7 +1,10 @@ package com.lagradost.cloudstream3.ui.player import android.annotation.SuppressLint -import android.content.* +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.graphics.drawable.AnimatedImageDrawable import android.graphics.drawable.AnimatedVectorDrawable import android.media.metrics.PlaybackErrorEvent @@ -24,11 +27,7 @@ import androidx.fragment.app.Fragment import androidx.media3.common.PlaybackException import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession -import androidx.media3.ui.AspectRatioFrameLayout -import androidx.media3.ui.DefaultTimeBar -import androidx.media3.ui.PlayerView -import androidx.media3.ui.SubtitleView -import androidx.media3.ui.TimeBar +import androidx.media3.ui.* import androidx.preference.PreferenceManager import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat import com.github.rubensousa.previewseekbar.PreviewBar @@ -442,6 +441,9 @@ abstract class AbstractPlayerFragment( is VideoEndedEvent -> { context?.let { ctx -> + // Resets subtitle delay on ended video + player.setSubtitleOffset(0) + // Only play next episode if autoplay is on (default) if (PreferenceManager.getDefaultSharedPreferences(ctx) ?.getBoolean( 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 210bfdca..31adbc87 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 @@ -1118,6 +1118,9 @@ class CS3IPlayer : IPlayer { } Player.STATE_ENDED -> { + // Resets subtitle delay on ended video + setSubtitleOffset(0) + // Only play next episode if autoplay is on (default) if (PreferenceManager.getDefaultSharedPreferences(context) ?.getBoolean( From e2946cad6b0eb2ef602174f8da38ab1a289ac8e2 Mon Sep 17 00:00:00 2001 From: b4byhuey <60543438+b4byhuey@users.noreply.github.com> Date: Sun, 28 Apr 2024 00:00:40 +0800 Subject: [PATCH 783/888] Added Vidguard Extractor (#1053) --- .../cloudstream3/extractors/Vidguard.kt | 101 ++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 4 +- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt new file mode 100644 index 00000000..230a9e1a --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt @@ -0,0 +1,101 @@ +package com.lagradost.cloudstream3.extractors + +import android.util.Log +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.INFER_TYPE +import com.lagradost.cloudstream3.utils.Qualities +import org.mozilla.javascript.Context +import org.mozilla.javascript.NativeJSON +import org.mozilla.javascript.NativeObject +import org.mozilla.javascript.Scriptable +import java.util.Base64 + +open class Vidguardto : ExtractorApi() { + override val name = "Vidguard" + override val mainUrl = "https://vidguard.to" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val res = app.get(url) + val resc = res.document.select("script:containsData(eval)").firstOrNull()?.data() + resc?.let { + val jsonStr2 = AppUtils.parseJson(runJS2(it)) + val watchlink = sigDecode(jsonStr2.stream) + + callback.invoke( + ExtractorLink( + this.name, + name, + watchlink, + this.mainUrl, + Qualities.Unknown.value, + INFER_TYPE + ) + ) + } + } + + private fun sigDecode(url: String): String { + val sig = url.split("sig=")[1].split("&")[0] + var t = "" + for (v in sig.chunked(2)) { + val byteValue = Integer.parseInt(v, 16) xor 2 + t += byteValue.toChar() + } + val padding = when (t.length % 4) { + 2 -> "==" + 3 -> "=" + else -> "" + } + val decoded = Base64.getDecoder().decode((t + padding).toByteArray(Charsets.UTF_8)) + t = String(decoded).dropLast(5).reversed() + val charArray = t.toCharArray() + for (i in 0 until charArray.size - 1 step 2) { + val temp = charArray[i] + charArray[i] = charArray[i + 1] + charArray[i + 1] = temp + } + val modifiedSig = String(charArray).dropLast(5) + return url.replace(sig, modifiedSig) + } + + private fun runJS2(hideMyHtmlContent: String): String { + Log.d("runJS", "start") + val rhino = Context.enter() + rhino.initSafeStandardObjects() + rhino.optimizationLevel = -1 + val scope: Scriptable = rhino.initSafeStandardObjects() + scope.put("window", scope, scope) + var result = "" + try { + Log.d("runJS", "Executing JavaScript: $hideMyHtmlContent") + rhino.evaluateString(scope, hideMyHtmlContent, "JavaScript", 1, null) + val svgObject = scope.get("svg", scope) + result = if (svgObject is NativeObject) { + NativeJSON.stringify(Context.getCurrentContext(), scope, svgObject, null, null).toString() + } else { + Context.toString(svgObject) + } + Log.d("runJS", "Result: $result") + } catch (e: Exception) { + Log.e("runJS", "Error executing JavaScript", e) + } finally { + Context.exit() + } + return result + } + + data class SvgObject( + val stream: String, + val hash: String + ) +} 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 5a845326..592dc6f9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -186,6 +186,7 @@ import com.lagradost.cloudstream3.extractors.VideoVard import com.lagradost.cloudstream3.extractors.VideovardSX import com.lagradost.cloudstream3.extractors.Vidgomunime import com.lagradost.cloudstream3.extractors.Vidgomunimesb +import com.lagradost.cloudstream3.extractors.Vidguardto import com.lagradost.cloudstream3.extractors.VidhideExtractor import com.lagradost.cloudstream3.extractors.Vidmoly import com.lagradost.cloudstream3.extractors.Vidmolyme @@ -888,7 +889,8 @@ val extractorApis: MutableList = arrayListOf( StreamWishExtractor(), EmturbovidExtractor(), Vtbe(), - EPlayExtractor() + EPlayExtractor(), + Vidguardto() ) From 004c481a5eb8ac8bb0c5a486f2e1f5b35e414f52 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 27 Apr 2024 19:11:22 +0300 Subject: [PATCH 784/888] feat(ui): Episode Air date & Upcoming countdown (#1058) --- .../cloudstream3/ui/result/EpisodeAdapter.kt | 34 ++++++++++++++++++- .../cloudstream3/ui/result/ResultFragment.kt | 5 ++- .../ui/result/ResultViewModel2.kt | 6 ++-- app/src/main/res/drawable/hourglass_24.xml | 9 +++++ .../main/res/layout/result_episode_large.xml | 23 +++++++++++-- app/src/main/res/values/strings.xml | 1 + 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable/hourglass_24.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index fad349c8..2019aa50 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -9,9 +9,11 @@ import androidx.core.view.isVisible import androidx.preference.PreferenceManager import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.ResultEpisodeBinding import com.lagradost.cloudstream3.databinding.ResultEpisodeLargeBinding +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.secondsToReadable import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_DOWNLOAD import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_LONG_CLICK import com.lagradost.cloudstream3.ui.download.DownloadClickEvent @@ -23,6 +25,8 @@ import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.VideoDownloadHelper +import java.text.DateFormat +import java.text.SimpleDateFormat import java.util.* const val ACTION_PLAY_EPISODE_IN_PLAYER = 1 @@ -104,7 +108,7 @@ class EpisodeAdapter( override fun getItemViewType(position: Int): Int { val item = getItem(position) - return if (item.poster.isNullOrBlank()) 0 else 1 + return if (item.poster.isNullOrBlank() && item.description.isNullOrBlank()) 0 else 1 } @@ -260,6 +264,33 @@ class EpisodeAdapter( } } + if (card.airDate != null) { + val isUpcoming = unixTimeMS < card.airDate + + if (isUpcoming) { + episodePlayIcon.isVisible = false + episodeUpcomingIcon.isVisible = !episodePoster.isVisible + episodeDate.setText( + txt( + R.string.episode_upcoming_format, + secondsToReadable(card.airDate.minus(unixTimeMS).div(1000).toInt(), "") + ) + ) + } else { + episodeUpcomingIcon.isVisible = false + + val formattedAirDate = SimpleDateFormat.getDateInstance( + DateFormat.LONG, + Locale.getDefault() + ).apply { + }.format(Date(card.airDate)) + + episodeDate.setText(txt(formattedAirDate)) + } + } else { + episodeDate.isVisible = false + } + if (isLayout(EMULATOR or PHONE)) { episodePoster.setOnClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) @@ -271,6 +302,7 @@ class EpisodeAdapter( } } } + itemView.setOnClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index a1574eec..1d3f5a08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -50,6 +50,7 @@ data class ResultEpisode( val videoWatchState: VideoWatchState, /** Sum of all previous season episode counts + episode */ val totalEpisodeIndex: Int? = null, + val airDate: Long? = null, ) fun ResultEpisode.getRealPosition(): Long { @@ -85,6 +86,7 @@ fun buildResultEpisode( tvType: TvType, parentId: Int, totalEpisodeIndex: Int? = null, + airDate: Long? = null, ): ResultEpisode { val posDur = getViewPos(id) val videoWatchState = getVideoWatchState(id) ?: VideoWatchState.None @@ -107,7 +109,8 @@ fun buildResultEpisode( tvType, parentId, videoWatchState, - totalEpisodeIndex + totalEpisodeIndex, + airDate, ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 37a905a7..499fced2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -2277,7 +2277,8 @@ class ResultViewModel2 : ViewModel() { fillers.getOrDefault(episode, false), loadResponse.type, mainId, - totalIndex + totalIndex, + airDate = i.date ) val season = eps.seasonIndex ?: 0 @@ -2326,7 +2327,8 @@ class ResultViewModel2 : ViewModel() { null, loadResponse.type, mainId, - totalIndex + totalIndex, + airDate = episode.date ) val season = ep.seasonIndex ?: 0 diff --git a/app/src/main/res/drawable/hourglass_24.xml b/app/src/main/res/drawable/hourglass_24.xml new file mode 100644 index 00000000..7bd1ebbd --- /dev/null +++ b/app/src/main/res/drawable/hourglass_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/result_episode_large.xml b/app/src/main/res/layout/result_episode_large.xml index 76e8c434..e5a6881a 100644 --- a/app/src/main/res/layout/result_episode_large.xml +++ b/app/src/main/res/layout/result_episode_large.xml @@ -43,14 +43,26 @@ android:foreground="?android:attr/selectableItemBackgroundBorderless" android:nextFocusRight="@id/download_button" android:scaleType="centerCrop" - tools:src="@drawable/example_poster" /> + tools:src="@drawable/example_poster" + tools:visibility="invisible"/> + android:src="@drawable/play_button" + tools:visibility="invisible"/> + + + + Episodes %1$d-%2$d %1$d %2$s + Upcoming in %s S E No Episodes found From 138e1a1f0ea4515c33274ac4fa3805e9595dd85e Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 28 Apr 2024 04:40:15 +0800 Subject: [PATCH 785/888] Don't check year when checking duplicates if year is empty (#1060) Some sources don't use year which makes this not match when it really should match --- .../com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 499fced2..de339aee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1099,13 +1099,14 @@ class ResultViewModel2 : ViewModel() { val duplicateEntries = data.filter { it: DataStoreHelper.LibrarySearchResponse -> val librarySyncData = it.syncData + val yearCheck = year == it.year || year == null || it.year == null val checks = listOf( { imdbId != null && getImdbIdFromSyncData(librarySyncData) == imdbId }, { tmdbId != null && getTMDbIdFromSyncData(librarySyncData) == tmdbId }, { malId != null && librarySyncData?.get(AccountManager.malApi.idPrefix) == malId }, { aniListId != null && librarySyncData?.get(AccountManager.aniListApi.idPrefix) == aniListId }, - { normalizedName == normalizeString(it.name) && year == it.year } + { normalizedName == normalizeString(it.name) && yearCheck } ) checks.any { it() } From ff1ffbeb836a1bc94d002044ba1863e93fd654dc Mon Sep 17 00:00:00 2001 From: b4byhuey <60543438+b4byhuey@users.noreply.github.com> Date: Mon, 29 Apr 2024 03:42:38 +0800 Subject: [PATCH 786/888] Update Voe.kt (#1062) --- .../lagradost/cloudstream3/extractors/Voe.kt | 66 ++++++++++++++++--- .../cloudstream3/utils/ExtractorApi.kt | 10 ++- 2 files changed, 66 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt index 2c6998de..67fd7eea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt @@ -1,19 +1,46 @@ package com.lagradost.cloudstream3.extractors +import android.util.Base64 +import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper class Tubeless : Voe() { - override var mainUrl = "https://tubelessceliolymph.com" + override val name = "Tubeless" + override val mainUrl = "https://tubelessceliolymph.com" +} + +class Simpulumlamerop : Voe() { + override val name = "Simplum" + override var mainUrl = "https://simpulumlamerop.com" +} + +class Urochsunloath : Voe() { + override val name = "Uroch" + override var mainUrl = "https://urochsunloath.com" +} + +class Yipsu : Voe() { + override val name = "Yipsu" + override var mainUrl = "https://yip.su" +} + +class MetaGnathTuggers : Voe() { + override val name = "Metagnath" + override val mainUrl = "https://metagnathtuggers.com" } open class Voe : ExtractorApi() { override val name = "Voe" override val mainUrl = "https://voe.sx" override val requiresReferer = true + + private val linkRegex = "(http|https)://([\\w_-]+(?:\\.[\\w_-]+)+)([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])".toRegex() + private val base64Regex = Regex("'.*'") override suspend fun getUrl( url: String, @@ -25,12 +52,33 @@ open class Voe : ExtractorApi() { val script = res.select("script").find { it.data().contains("sources =") }?.data() val link = Regex("[\"']hls[\"']:\\s*[\"'](.*)[\"']").find(script ?: return)?.groupValues?.get(1) - M3u8Helper.generateM3u8( - name, - link ?: return, - "$mainUrl/", - headers = mapOf("Origin" to "$mainUrl/") - ).forEach(callback) - + val videoLinks = mutableListOf() + + if (!link.isNullOrBlank()) { + videoLinks.add( + when { + linkRegex.matches(link) -> link + else -> String(Base64.decode(link, Base64.DEFAULT)) + } + ) + } else { + val link2 = base64Regex.find(script)?.value ?: return + val decoded = Base64.decode(link2, Base64.DEFAULT).toString() + val videoLinkDTO = AppUtils.parseJson(decoded) + videoLinkDTO.let { videoLinks.add(it.toString()) } + } + + videoLinks.forEach { videoLink -> + M3u8Helper.generateM3u8( + name, + videoLink, + "$mainUrl/", + headers = mapOf("Origin" to "$mainUrl/") + ).forEach(callback) + } } -} \ No newline at end of file + + data class WcoSources( + @JsonProperty("VideoLinkDTO") val VideoLinkDTO: String, + ) +} 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 592dc6f9..75dceb54 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -83,6 +83,7 @@ import com.lagradost.cloudstream3.extractors.Maxstream import com.lagradost.cloudstream3.extractors.Mcloud import com.lagradost.cloudstream3.extractors.Megacloud import com.lagradost.cloudstream3.extractors.Meownime +import com.lagradost.cloudstream3.extractors.MetaGnathTuggers import com.lagradost.cloudstream3.extractors.Minoplres import com.lagradost.cloudstream3.extractors.MixDrop import com.lagradost.cloudstream3.extractors.MixDropBz @@ -139,6 +140,7 @@ import com.lagradost.cloudstream3.extractors.Sbspeed import com.lagradost.cloudstream3.extractors.Sbthe import com.lagradost.cloudstream3.extractors.Sendvid import com.lagradost.cloudstream3.extractors.ShaveTape +import com.lagradost.cloudstream3.extractors.Simpulumlamerop import com.lagradost.cloudstream3.extractors.Solidfiles import com.lagradost.cloudstream3.extractors.Ssbstream import com.lagradost.cloudstream3.extractors.StreamM4u @@ -175,6 +177,7 @@ import com.lagradost.cloudstream3.extractors.UpstreamExtractor import com.lagradost.cloudstream3.extractors.Uqload import com.lagradost.cloudstream3.extractors.Uqload1 import com.lagradost.cloudstream3.extractors.Uqload2 +import com.lagradost.cloudstream3.extractors.Urochsunloath import com.lagradost.cloudstream3.extractors.Userload import com.lagradost.cloudstream3.extractors.Userscloud import com.lagradost.cloudstream3.extractors.Uservideo @@ -208,6 +211,7 @@ import com.lagradost.cloudstream3.extractors.Watchx import com.lagradost.cloudstream3.extractors.WcoStream import com.lagradost.cloudstream3.extractors.Wibufile import com.lagradost.cloudstream3.extractors.XStreamCdn +import com.lagradost.cloudstream3.extractors.Yipsu import com.lagradost.cloudstream3.extractors.YourUpload import com.lagradost.cloudstream3.extractors.YoutubeExtractor import com.lagradost.cloudstream3.extractors.YoutubeMobileExtractor @@ -890,7 +894,11 @@ val extractorApis: MutableList = arrayListOf( EmturbovidExtractor(), Vtbe(), EPlayExtractor(), - Vidguardto() + Vidguardto(), + Simpulumlamerop(), + Urochsunloath(), + Yipsu(), + MetaGnathTuggers() ) From 949b5830b644d3ac23216dd533d40943ab5f6347 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Wed, 1 May 2024 20:29:49 +0300 Subject: [PATCH 787/888] feat(ui): Fix downloads focus on TV (#1066) --- .../cloudstream3/ui/download/DownloadChildFragment.kt | 3 ++- .../cloudstream3/ui/download/DownloadFragment.kt | 3 +++ .../java/com/lagradost/cloudstream3/utils/UIHelper.kt | 10 ++++++++++ app/src/main/res/layout/download_child_episode.xml | 5 ++++- app/src/main/res/layout/download_header_episode.xml | 6 +++++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index c3ec2bbd..d138a1e6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -15,6 +15,7 @@ import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKeys import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager import kotlinx.coroutines.Dispatchers @@ -89,9 +90,9 @@ class DownloadChildFragment : Fragment() { setNavigationOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() } + setAppBarNoScrollFlagsOnTV() } - val adapter: RecyclerView.Adapter = DownloadChildAdapter( ArrayList(), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index e08eb772..31790b0f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -41,6 +41,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate +import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager import java.net.URI @@ -97,6 +98,8 @@ class DownloadFragment : Fragment() { super.onViewCreated(view, savedInstanceState) hideKeyboard() + binding?.downloadStorageAppbar?.setAppBarNoScrollFlagsOnTV() + observe(downloadsViewModel.noDownloadsText) { binding?.textNoDownloads?.text = it } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index eedb626a..cb527020 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -45,6 +45,7 @@ import androidx.core.view.marginBottom import androidx.core.view.marginLeft import androidx.core.view.marginRight import androidx.core.view.marginTop +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.navigation.fragment.NavHostFragment @@ -58,6 +59,7 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions.bitmapTransform import com.bumptech.glide.request.target.Target +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipDrawable import com.google.android.material.chip.ChipGroup @@ -208,6 +210,14 @@ object UIHelper { } } + fun View?.setAppBarNoScrollFlagsOnTV() { + if (isLayout(Globals.TV or EMULATOR)) { + this?.updateLayoutParams { + scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL + } + } + } + fun Activity.hideKeyboard() { window?.decorView?.clearFocus() this.findViewById(android.R.id.content)?.rootView?.let { diff --git a/app/src/main/res/layout/download_child_episode.xml b/app/src/main/res/layout/download_child_episode.xml index fd845ee8..4974a027 100644 --- a/app/src/main/res/layout/download_child_episode.xml +++ b/app/src/main/res/layout/download_child_episode.xml @@ -9,6 +9,7 @@ android:layout_height="50dp" android:layout_marginBottom="5dp" android:foreground="@drawable/outline_drawable" + android:focusable="true" android:nextFocusLeft="@id/nav_rail_view" android:nextFocusRight="@id/download_button" app:cardBackgroundColor="@color/transparent" @@ -84,7 +85,9 @@ android:layout_height="@dimen/download_size" android:layout_gravity="center_vertical|end" android:layout_marginStart="-50dp" - android:background="?selectableItemBackgroundBorderless" + android:foreground="@drawable/outline_drawable" + android:focusable="true" + android:nextFocusLeft="@id/download_child_episode_holder" android:padding="10dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/download_header_episode.xml b/app/src/main/res/layout/download_header_episode.xml index 226c1632..21f79ca6 100644 --- a/app/src/main/res/layout/download_header_episode.xml +++ b/app/src/main/res/layout/download_header_episode.xml @@ -9,6 +9,8 @@ android:layout_marginTop="10dp" android:layout_marginEnd="10dp" android:foreground="@drawable/outline_drawable" + android:focusable="true" + android:nextFocusRight="@id/download_button" app:cardBackgroundColor="?attr/boxItemBackground" app:cardCornerRadius="@dimen/rounded_image_radius"> @@ -71,7 +73,9 @@ android:layout_height="@dimen/download_size" android:layout_gravity="center_vertical|end" android:layout_marginStart="-50dp" - android:background="?selectableItemBackgroundBorderless" + android:foreground="@drawable/outline_drawable" + android:focusable="true" + android:nextFocusLeft="@id/episode_holder" android:padding="10dp" /> \ No newline at end of file From c07e6d3222123ce9b711cafa8827f682f9ad9516 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Thu, 2 May 2024 23:58:32 +0200 Subject: [PATCH 788/888] hotfix: Remove resume information (#1063) --- .../cloudstream3/ui/download/button/PieFetchButton.kt | 4 ++++ .../com/lagradost/cloudstream3/utils/VideoDownloadManager.kt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt index a729f33a..f1031c24 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt @@ -13,6 +13,8 @@ import androidx.annotation.MainThread import androidx.core.content.ContextCompat import androidx.core.view.isGone import androidx.core.view.isVisible +import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_DELETE_FILE @@ -25,6 +27,7 @@ import com.lagradost.cloudstream3.ui.download.DownloadClickEvent import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIcons import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager +import com.lagradost.cloudstream3.utils.VideoDownloadManager.KEY_RESUME_PACKAGES open class PieFetchButton(context: Context, attributeSet: AttributeSet) : @@ -167,6 +170,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : this.setPersistentId(card.id) view.setOnClickListener { if (isZeroBytes) { + removeKey(KEY_RESUME_PACKAGES, card.id.toString()) callback(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, card)) //callback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, data)) } else { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 50a8df02..7d4d5d98 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -187,7 +187,7 @@ object VideoDownloadManager { private val DOWNLOAD_BAD_CONFIG = DownloadStatus(retrySame = false, tryNext = false, success = false) - private const val KEY_RESUME_PACKAGES = "download_resume" + const val KEY_RESUME_PACKAGES = "download_resume" const val KEY_DOWNLOAD_INFO = "download_info" private const val KEY_RESUME_QUEUE_PACKAGES = "download_q_resume" From d3828eeafed0fd4fbeb32c4d37dee2126296b564 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Thu, 2 May 2024 23:59:05 +0200 Subject: [PATCH 789/888] refact: rename logcat file (#1061) Rename logcat file to prevent override --- .../cloudstream3/ui/settings/SettingsUpdates.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index fb24c185..4aaa5e12 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -35,6 +35,9 @@ import okhttp3.internal.closeQuietly import java.io.BufferedReader import java.io.InputStreamReader import java.io.OutputStream +import java.lang.System.currentTimeMillis +import java.text.SimpleDateFormat +import java.util.* class SettingsUpdates : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -125,12 +128,12 @@ class SettingsUpdates : PreferenceFragmentCompat() { } binding.saveBtt.setOnClickListener { + val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) var fileStream: OutputStream? = null try { - fileStream = - VideoDownloadManager.setupStream( + fileStream = VideoDownloadManager.setupStream( it.context, - "logcat", + "logcat_${date}", null, "txt", false From c28a3cb9873d64634b1e7bb131ef648ab40fd22e Mon Sep 17 00:00:00 2001 From: RowdyRushya <66415100+rushi-chavan@users.noreply.github.com> Date: Sat, 4 May 2024 04:15:34 -0700 Subject: [PATCH 790/888] Extractor: new VidSrcTo extractor (#1044) --- .../cloudstream3/extractors/VidSrcTo.kt | 65 +++++++++++++++++++ .../cloudstream3/extractors/Vidplay.kt | 4 ++ .../metaproviders/TmdbProvider.kt | 2 + .../cloudstream3/utils/ExtractorApi.kt | 2 + 4 files changed, 73 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt new file mode 100644 index 00000000..b9065688 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt @@ -0,0 +1,65 @@ +package com.lagradost.cloudstream3.extractors + +import android.util.Base64 +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.amap +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import java.net.URLDecoder +import javax.crypto.Cipher +import javax.crypto.spec.SecretKeySpec + +class VidSrcTo : ExtractorApi() { + override val name = "VidSrcTo" + override val mainUrl = "https://vidsrc.to" + override val requiresReferer = true + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val mediaId = app.get(url).document.selectFirst("ul.episodes li a")?.attr("data-id") ?: return + val res = app.get("$mainUrl/ajax/embed/episode/$mediaId/sources").parsedSafe() ?: return + if (res.status != 200) return + res.result?.amap { source -> + val embedRes = app.get("$mainUrl/ajax/embed/source/${source.id}").parsedSafe() ?: return@amap + val finalUrl = DecryptUrl(embedRes.result.encUrl) + if(finalUrl.equals(embedRes.result.encUrl)) return@amap + when (source.title) { + "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) + "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) + } + } + } + + private fun DecryptUrl(encUrl: String): String { + var data = encUrl.toByteArray() + data = Base64.decode(data, Base64.URL_SAFE) + val rc4Key = SecretKeySpec("WXrUARXb1aDLaZjI".toByteArray(), "RC4") + val cipher = Cipher.getInstance("RC4") + cipher.init(Cipher.DECRYPT_MODE, rc4Key, cipher.parameters) + data = cipher.doFinal(data) + return URLDecoder.decode(data.toString(Charsets.UTF_8), "utf-8") + } + + data class VidsrctoEpisodeSources( + @JsonProperty("status") val status: Int, + @JsonProperty("result") val result: List? + ) + + data class VidsrctoResult( + @JsonProperty("id") val id: String, + @JsonProperty("title") val title: String + ) + + data class VidsrctoEmbedSource( + @JsonProperty("status") val status: Int, + @JsonProperty("result") val result: VidsrctoUrl + ) + + data class VidsrctoUrl(@JsonProperty("url") val encUrl: String) +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt index d5d0fb32..c5e01552 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt @@ -13,6 +13,10 @@ import javax.crypto.spec.SecretKeySpec // Code found in https://github.com/KillerDogeEmpire/vidplay-keys // special credits to @KillerDogeEmpire for providing key +class AnyVidplay(hostUrl: String) : Vidplay() { + override val mainUrl = hostUrl +} + class MyCloud : Vidplay() { override val name = "MyCloud" override val mainUrl = "https://mcloud.bz" diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TmdbProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TmdbProvider.kt index 50301e22..c5b4d453 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TmdbProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TmdbProvider.kt @@ -105,6 +105,7 @@ open class TmdbProvider : MainAPI() { this.id, episode.episode_number, episode.season_number, + this.name ?: this.original_name, ).toJson(), episode.name, episode.season_number, @@ -122,6 +123,7 @@ open class TmdbProvider : MainAPI() { this.id, episodeNum, season.season_number, + this.name ?: this.original_name, ).toJson(), season = season.season_number ) 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 75dceb54..6106845e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -185,6 +185,7 @@ import com.lagradost.cloudstream3.extractors.Vanfem import com.lagradost.cloudstream3.extractors.Vicloud import com.lagradost.cloudstream3.extractors.VidSrcExtractor import com.lagradost.cloudstream3.extractors.VidSrcExtractor2 +import com.lagradost.cloudstream3.extractors.VidSrcTo import com.lagradost.cloudstream3.extractors.VideoVard import com.lagradost.cloudstream3.extractors.VideovardSX import com.lagradost.cloudstream3.extractors.Vidgomunime @@ -876,6 +877,7 @@ val extractorApis: MutableList = arrayListOf( Streamlare(), VidSrcExtractor(), VidSrcExtractor2(), + VidSrcTo(), PlayLtXyz(), AStreamHub(), Vidplay(), From 83c473d9f801cc43c0716453bea79afc539a1fea Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 4 May 2024 14:16:09 +0300 Subject: [PATCH 791/888] More external Ids in Trakt meta provider (#1075) --- .../cloudstream3/metaproviders/TraktProvider.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 98e12bcd..37c6be1b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -118,8 +118,12 @@ open class TraktProvider : MainAPI() { val linkData = LinkData( id = mediaDetails?.ids?.tmdb, + traktId = mediaDetails?.ids?.trakt, + traktSlug = mediaDetails?.ids?.slug, + tmdbId = mediaDetails?.ids?.tmdb, imdbId = mediaDetails?.ids?.imdb.toString(), tvdbId = mediaDetails?.ids?.tvdb, + tvrageId = mediaDetails?.ids?.tvrage, type = data.type.toString(), title = mediaDetails?.title, year = mediaDetails?.year, @@ -139,7 +143,6 @@ open class TraktProvider : MainAPI() { type = if (isAnime) TvType.AnimeMovie else TvType.Movie, ) { this.name = mediaDetails.title - this.apiName = "Trakt" this.type = if (isAnime) TvType.AnimeMovie else TvType.Movie this.posterUrl = getOriginalWidthImageUrl(posterUrl) this.year = mediaDetails.year @@ -177,8 +180,12 @@ open class TraktProvider : MainAPI() { val linkData = LinkData( id = mediaDetails?.ids?.tmdb, + traktId = mediaDetails?.ids?.trakt, + traktSlug = mediaDetails?.ids?.slug, + tmdbId = mediaDetails?.ids?.tmdb, imdbId = mediaDetails?.ids?.imdb.toString(), tvdbId = mediaDetails?.ids?.tvdb, + tvrageId = mediaDetails?.ids?.tvrage, type = data.type.toString(), season = episode.season, episode = episode.number, @@ -220,7 +227,6 @@ open class TraktProvider : MainAPI() { episodes = episodes ) { this.name = mediaDetails.title - this.apiName = "Trakt" this.type = if (isAnime) TvType.Anime else TvType.TvSeries this.episodes = episodes this.posterUrl = getOriginalWidthImageUrl(posterUrl) @@ -406,8 +412,12 @@ open class TraktProvider : MainAPI() { data class LinkData( val id: Int? = null, + val traktId: Int? = null, + val traktSlug: String? = null, + val tmdbId: Int? = null, val imdbId: String? = null, val tvdbId: Int? = null, + val tvrageId: String? = null, val type: String? = null, val season: Int? = null, val episode: Int? = null, From 71bd48f4930d255beabe6f86b7e4057b732dc70e Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 4 May 2024 14:17:52 +0300 Subject: [PATCH 792/888] feat(ui): Hide Downloads & Settings Back button on TV (#1074) --- .../ui/download/DownloadChildFragment.kt | 11 ++++++++--- .../ui/quicksearch/QuickSearchFragment.kt | 12 ++++++++++-- .../ui/settings/SettingsFragment.kt | 19 ++++++++++++------- app/src/main/res/layout/quick_search.xml | 7 +++---- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index d138a1e6..f54c8698 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -11,6 +11,9 @@ import com.lagradost.cloudstream3.databinding.FragmentChildDownloadsBinding import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.ui.result.FOCUS_SELF import com.lagradost.cloudstream3.ui.result.setLinearListLayout +import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE +import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKeys @@ -86,9 +89,11 @@ class DownloadChildFragment : Fragment() { binding?.downloadChildToolbar?.apply { title = name - setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) - setNavigationOnClickListener { - activity?.onBackPressedDispatcher?.onBackPressed() + if (isLayout(PHONE or EMULATOR)) { + setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) + setNavigationOnClickListener { + activity?.onBackPressedDispatcher?.onBackPressed() + } } setAppBarNoScrollFlagsOnTV() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt index e9e00736..85e20d1c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt @@ -34,6 +34,9 @@ import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.ui.search.SearchViewModel +import com.lagradost.cloudstream3.ui.settings.Globals +import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.AppUtils.ownShow @@ -274,8 +277,13 @@ class QuickSearchFragment : Fragment() { // UIHelper.showInputMethod(view.findFocus()) // } //} - binding?.quickSearchBack?.setOnClickListener { - activity?.popCurrentPage() + if (isLayout(PHONE or EMULATOR)) { + binding?.quickSearchBack?.apply { + isVisible = true + setOnClickListener { + activity?.popCurrentPage() + } + } } if (isLayout(TV)) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 443eeda7..8ac17928 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.account import com.lagradost.cloudstream3.ui.home.HomeFragment import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.DataStoreHelper @@ -84,9 +85,11 @@ class SettingsFragment : Fragment() { settingsToolbar.apply { setTitle(title) - setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) - setNavigationOnClickListener { - activity?.onBackPressedDispatcher?.onBackPressed() + if (isLayout(PHONE or EMULATOR)) { + setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) + setNavigationOnClickListener { + activity?.onBackPressedDispatcher?.onBackPressed() + } } } UIHelper.fixPaddingStatusbar(settingsToolbar) @@ -98,10 +101,12 @@ class SettingsFragment : Fragment() { settingsToolbar.apply { setTitle(title) - setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) - children.firstOrNull { it is ImageView }?.tag = getString(R.string.tv_no_focus_tag) - setNavigationOnClickListener { - activity?.onBackPressedDispatcher?.onBackPressed() + if (isLayout(PHONE or EMULATOR)) { + setNavigationIcon(R.drawable.ic_baseline_arrow_back_24) + children.firstOrNull { it is ImageView }?.tag = getString(R.string.tv_no_focus_tag) + setNavigationOnClickListener { + activity?.onBackPressedDispatcher?.onBackPressed() + } } } UIHelper.fixPaddingStatusbar(settingsToolbar) diff --git a/app/src/main/res/layout/quick_search.xml b/app/src/main/res/layout/quick_search.xml index 12d94aaa..84f2c548 100644 --- a/app/src/main/res/layout/quick_search.xml +++ b/app/src/main/res/layout/quick_search.xml @@ -23,11 +23,10 @@ android:background="?android:attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_baseline_arrow_back_24" app:tint="@android:color/white" - android:focusable="true" + android:visibility="gone" android:layout_width="25dp" - android:layout_height="wrap_content"> - - + android:layout_height="wrap_content" + tools:visibility="visible"> Date: Sun, 5 May 2024 04:30:42 +0530 Subject: [PATCH 793/888] Updates and Chillx Extractor Updated (#1065) --- .../cloudstream3/extractors/Chillx.kt | 48 ++++++++++--------- .../cloudstream3/extractors/EPlay.kt | 1 - .../lagradost/cloudstream3/extractors/Vtbe.kt | 1 - 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt index f03a5525..26567c7a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -2,9 +2,7 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.extractors.helper.* import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler -import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper @@ -28,30 +26,39 @@ open class Chillx : ExtractorApi() { override val name = "Chillx" override val mainUrl = "https://chillx.top" override val requiresReferer = true - private var key: String? = null + companion object { + private var key: String? = null + + suspend fun fetchKey(): String { + return if (key != null) { + key!! + } else { + val fetch = app.get("https://raw.githubusercontent.com/rushi-chavan/multi-keys/keys/keys.json").parsedSafe()?.key?.get(0) ?: throw ErrorLoadingException("Unable to get key") + key = fetch + key!! + } + } + } + + @Suppress("NAME_SHADOWING") override suspend fun getUrl( url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit ) { - val master = Regex("\\s*=\\s*'([^']+)").find( + val master = Regex("""JScript[\w+]?\s*=\s*'([^']+)""").find( app.get( url, - referer = referer ?: "", - headers = mapOf( - "Accept" to "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", - "Accept-Language" to "en-US,en;q=0.5", - ) + referer = url, ).text )?.groupValues?.get(1) - val decrypt = cryptoAESHandler(master ?: return, getKey().toByteArray(), false)?.replace("\\", "") ?: throw ErrorLoadingException("failed to decrypt") - + val key = fetchKey() + val decrypt = cryptoAESHandler(master ?: "", key.toByteArray(), false)?.replace("\\", "") ?: throw ErrorLoadingException("failed to decrypt") val source = Regex(""""?file"?:\s*"([^"]+)""").find(decrypt)?.groupValues?.get(1) - val subtitles = Regex("""subtitle"?:\s*"([^"]+)""").find(decrypt)?.groupValues?.get(1) - val subtitlePattern = """\[(.*?)\](https?://[^\s,]+)""".toRegex() + val subtitlePattern = """\[(.*?)](https?://[^\s,]+)""".toRegex() val matches = subtitlePattern.findAll(subtitles ?: "") val languageUrlPairs = matches.map { matchResult -> val (language, url) = matchResult.destructured @@ -83,23 +90,18 @@ open class Chillx : ExtractorApi() { headers = headers ).forEach(callback) } - + private fun decodeUnicodeEscape(input: String): String { val regex = Regex("u([0-9a-fA-F]{4})") return regex.replace(input) { it.groupValues[1].toInt(16).toChar().toString() } } - - suspend fun getKey() = key ?: fetchKey().also { key = it } - private suspend fun fetchKey(): String { - return app.get("https://raw.githubusercontent.com/Sofie99/Resources/main/chillix_key.json").parsed() - } - data class Tracks( - @JsonProperty("file") val file: String? = null, - @JsonProperty("label") val label: String? = null, - @JsonProperty("kind") val kind: String? = null, + + data class Keys( + @JsonProperty("chillx") val key: List ) + } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt index 565a2680..2cb12e16 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt index 65af01ec..919a9cbd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* From 3874cb9f9d3a2b0894c59346b92fb6eec4fa2b2e Mon Sep 17 00:00:00 2001 From: b4byhuey <60543438+b4byhuey@users.noreply.github.com> Date: Thu, 9 May 2024 23:06:33 +0800 Subject: [PATCH 794/888] Update Dailymotion Extractor (#1081) --- .../cloudstream3/extractors/Dailymotion.kt | 23 +++++++++++++------ .../cloudstream3/utils/ExtractorApi.kt | 5 +++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt index 0df93dc5..2343a92e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt @@ -9,10 +9,16 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 import java.net.URL +class Geodailymotion : Dailymotion() { + override val name = "GeoDailymotion" + override val mainUrl = "https://geo.dailymotion.com" +} + open class Dailymotion : ExtractorApi() { override val mainUrl = "https://www.dailymotion.com" override val name = "Dailymotion" override val requiresReferer = false + private val baseUrl = "https://www.dailymotion.com" @Suppress("RegExpSimplifiable") private val videoIdRegex = "^[kx][a-zA-Z0-9]+\$".toRegex() @@ -34,7 +40,7 @@ open class Dailymotion : ExtractorApi() { val dmV1st = config.dmInternalData.v1st val dmTs = config.dmInternalData.ts val embedder = config.context.embedder - val metaDataUrl = "$mainUrl/player/metadata/video/$id?embedder=$embedder&locale=en-US&dmV1st=$dmV1st&dmTs=$dmTs&is_native_app=0" + val metaDataUrl = "$baseUrl/player/metadata/video/$id?embedder=$embedder&locale=en-US&dmV1st=$dmV1st&dmTs=$dmTs&is_native_app=0" val metaData = app.get(metaDataUrl, referer = embedUrl, cookies = req.cookies) .parsedSafe() ?: return metaData.qualities.forEach { (_, video) -> @@ -45,16 +51,19 @@ open class Dailymotion : ExtractorApi() { } private fun getEmbedUrl(url: String): String? { - if (url.contains("/embed/")) { - return url - } - val vid = getVideoId(url) ?: return null - return "$mainUrl/embed/video/$vid" + if (url.contains("/embed/") || url.contains("/video/")) { + return url } + if (url.contains("geo.dailymotion.com")) { + val videoId = url.substringAfter("video=") + return "$baseUrl/embed/video/$videoId" + } + return null + } private fun getVideoId(url: String): String? { val path = URL(url).path - val id = path.substringAfter("video/") + val id = path.substringAfter("/video/") if (id.matches(videoIdRegex)) { return id } 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 6106845e..0e4dc870 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -53,6 +53,7 @@ import com.lagradost.cloudstream3.extractors.FileMoonIn import com.lagradost.cloudstream3.extractors.FileMoonSx import com.lagradost.cloudstream3.extractors.Filesim import com.lagradost.cloudstream3.extractors.Fplayer +import com.lagradost.cloudstream3.extractors.Geodailymotion import com.lagradost.cloudstream3.extractors.GMPlayer import com.lagradost.cloudstream3.extractors.Gdriveplayer import com.lagradost.cloudstream3.extractors.Gdriveplayerapi @@ -900,7 +901,9 @@ val extractorApis: MutableList = arrayListOf( Simpulumlamerop(), Urochsunloath(), Yipsu(), - MetaGnathTuggers() + MetaGnathTuggers(), + Geodailymotion(), + ) From f1cc4db89cc6c1a2cd6316e81340206b56a72ad6 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 9 May 2024 18:08:18 +0300 Subject: [PATCH 795/888] Show Season number for next airing episode (#1071) --- .../com/lagradost/cloudstream3/MainAPI.kt | 17 +++++++-- .../ui/result/ResultViewModel2.kt | 6 +++- .../main/res/layout/fragment_result_tv.xml | 36 +++++++++---------- app/src/main/res/values/strings.xml | 1 + 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 7b1b5775..699159b5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -1448,11 +1448,24 @@ fun TvType?.isEpisodeBased(): Boolean { return (this == TvType.TvSeries || this == TvType.Anime || this == TvType.AsianDrama) } - data class NextAiring( val episode: Int, val unixTime: Long, -) + val season: Int? = null, +) { + /** + * Secondary constructor for backwards compatibility without season. + * TODO Remove this constructor after there is a new stable release and extensions are updated to support season. + */ + constructor( + episode: Int, + unixTime: Long, + ) : this ( + episode, + unixTime, + null + ) +} /** * @param season To be mapped with episode season, not shown in UI if displaySeason is defined diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index de339aee..61b65bc2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -197,7 +197,11 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData { else -> null }?.also { - nextAiringEpisode = txt(R.string.next_episode_format, airing.episode) + nextAiringEpisode = when (airing.season) { + + null -> txt(R.string.next_episode_format, airing.episode) + else -> txt(R.string.next_season_episode_format, airing.season, airing.episode) + } } } } diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 2ec2ae0a..893c19ff 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -178,42 +178,40 @@ https://developer.android.com/design/ui/tv/samples/jet-fit android:textStyle="bold" tools:text="The Perfect Run The Perfect Run" /> + + - - + android:orientation="horizontal"> + android:layout_marginEnd="5dp" + tools:text="Season 2 Episode 1022 will be released in" /> %1$s Ep %2$d Cast: %s Episode %d will be released in + Season %1$d Episode %2$d will be released in %1$dd %2$dh %3$dm %1$dh %2$dm %dm From ee4d1dedc5adb1be656a05d1ee0f41b11f9d0a84 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Thu, 9 May 2024 19:46:54 +0000 Subject: [PATCH 796/888] Add basic fcast support (#1084) --- .../lagradost/cloudstream3/MainActivity.kt | 3 + .../cloudstream3/ui/player/IGenerator.kt | 10 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 2 + .../ui/result/ResultViewModel2.kt | 44 ++++++ .../cloudstream3/utils/ExtractorApi.kt | 13 +- .../cloudstream3/utils/fcast/FcastManager.kt | 135 ++++++++++++++++++ .../cloudstream3/utils/fcast/FcastSession.kt | 60 ++++++++ .../cloudstream3/utils/fcast/Packets.kt | 62 ++++++++ app/src/main/res/values/strings.xml | 3 + 9 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastManager.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastSession.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/fcast/Packets.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 7baac71c..56322b73 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -161,6 +161,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.requestRW import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.USER_PROVIDER_API import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API +import com.lagradost.cloudstream3.utils.fcast.FcastManager import com.lagradost.nicehttp.Requests import com.lagradost.nicehttp.ResponseParser import com.lagradost.safefile.SafeFile @@ -1756,6 +1757,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, runAutoUpdate() } + FcastManager().init(this, false) + APIRepository.dubStatusActive = getApiDubstatusSettings() try { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt index af74cb57..c5de1a1c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt @@ -10,7 +10,8 @@ enum class LoadType { InAppDownload, ExternalApp, Browser, - Chromecast + Chromecast, + Fcast } fun LoadType.toSet() : Set { @@ -29,12 +30,17 @@ fun LoadType.toSet() : Set { ExtractorLinkType.VIDEO, ExtractorLinkType.M3U8 ) - LoadType.ExternalApp, LoadType.Unknown -> ExtractorLinkType.values().toSet() + LoadType.ExternalApp, LoadType.Unknown -> ExtractorLinkType.entries.toSet() LoadType.Chromecast -> setOf( ExtractorLinkType.VIDEO, ExtractorLinkType.DASH, ExtractorLinkType.M3U8 ) + LoadType.Fcast -> setOf( + ExtractorLinkType.VIDEO, + ExtractorLinkType.DASH, + ExtractorLinkType.M3U8 + ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 2019aa50..e4fd0559 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -55,6 +55,8 @@ const val ACTION_PLAY_EPISODE_IN_WEB_VIDEO = 16 const val ACTION_PLAY_EPISODE_IN_MPV = 17 const val ACTION_MARK_AS_WATCHED = 18 +const val ACTION_FCAST = 19 + const val TV_EP_SIZE_LARGE = 400 const val TV_EP_SIZE_SMALL = 300 data class EpisodeClickEvent(val action: Int, val data: ResultEpisode) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 61b65bc2..a32942f6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -83,6 +83,10 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.setVideoWatchState import com.lagradost.cloudstream3.utils.DataStoreHelper.updateSubscribedData import com.lagradost.cloudstream3.utils.UIHelper.clipboardHelper import com.lagradost.cloudstream3.utils.UIHelper.navigate +import com.lagradost.cloudstream3.utils.fcast.FcastManager +import com.lagradost.cloudstream3.utils.fcast.FcastSession +import com.lagradost.cloudstream3.utils.fcast.Opcode +import com.lagradost.cloudstream3.utils.fcast.PlayMessage import kotlinx.coroutines.* import java.io.File import java.util.concurrent.TimeUnit @@ -1519,6 +1523,13 @@ class ResultViewModel2 : ViewModel() { ) ) } + + if (FcastManager.currentDevices.isNotEmpty()) { + options.add( + txt(R.string.player_settings_play_in_fcast) to ACTION_FCAST + ) + } + options.add(txt(R.string.episode_action_play_in_app) to ACTION_PLAY_EPISODE_IN_PLAYER) for (app in apps) { @@ -1694,6 +1705,39 @@ class ResultViewModel2 : ViewModel() { } } + ACTION_FCAST -> { + val devices = FcastManager.currentDevices.toList() + postPopup( + txt(R.string.player_settings_select_cast_device), + devices.map { txt(it.name) }) { index -> + if (index == null) return@postPopup + val device = devices.getOrNull(index) + + acquireSingleLink( + click.data, + LoadType.Fcast, + txt(R.string.episode_action_cast_mirror) + ) { (result, index) -> + val host = device?.host ?: return@acquireSingleLink + val link = result.links.firstOrNull() ?: return@acquireSingleLink + + FcastSession(host).use { session -> + session.sendMessage( + Opcode.Play, + PlayMessage( + link.type.getMimeType(), + link.url, + headers = mapOf( + "referer" to link.referer, + "user-agent" to USER_AGENT + ) + link.headers + ) + ) + } + } + } + } + ACTION_PLAY_EPISODE_IN_BROWSER -> acquireSingleLink( click.data, LoadType.Browser, 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 0e4dc870..61cdd26a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -308,7 +308,18 @@ enum class ExtractorLinkType { /** No support at the moment */ TORRENT, /** No support at the moment */ - MAGNET, + MAGNET; + + // See https://www.iana.org/assignments/media-types/media-types.xhtml + fun getMimeType(): String { + return when (this) { + VIDEO -> "video/mp4" + M3U8 -> "application/x-mpegURL" + DASH -> "application/dash+xml" + TORRENT -> "application/x-bittorrent" + MAGNET -> "application/x-bittorrent" + } + } } private fun inferTypeFromUrl(url: String): ExtractorLinkType { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastManager.kt new file mode 100644 index 00000000..9ff5cc08 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastManager.kt @@ -0,0 +1,135 @@ +package com.lagradost.cloudstream3.utils.fcast + +import android.content.Context +import android.net.nsd.NsdManager +import android.net.nsd.NsdManager.ResolveListener +import android.net.nsd.NsdServiceInfo +import android.os.Build +import android.util.Log +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe + +class FcastManager { + private var nsdManager: NsdManager? = null + + // Used for receiver + private val registrationListenerTcp = DefaultRegistrationListener() + private fun getDeviceName(): String { + return "${Build.MANUFACTURER}-${Build.MODEL}" + } + + /** + * Start the fcast service + * @param registerReceiver If true will register the app as a compatible fcast receiver for discovery in other app + */ + fun init(context: Context, registerReceiver: Boolean) = ioSafe { + nsdManager = context.getSystemService(Context.NSD_SERVICE) as NsdManager + val serviceType = "_fcast._tcp" + + if (registerReceiver) { + val serviceName = "$APP_PREFIX-${getDeviceName()}" + + val serviceInfo = NsdServiceInfo().apply { + this.serviceName = serviceName + this.serviceType = serviceType + this.port = TCP_PORT + } + + nsdManager?.registerService( + serviceInfo, + NsdManager.PROTOCOL_DNS_SD, + registrationListenerTcp + ) + } + + nsdManager?.discoverServices( + serviceType, + NsdManager.PROTOCOL_DNS_SD, + DefaultDiscoveryListener() + ) + } + + fun stop() { + nsdManager?.unregisterService(registrationListenerTcp) + } + + inner class DefaultDiscoveryListener : NsdManager.DiscoveryListener { + val tag = "DiscoveryListener" + override fun onStartDiscoveryFailed(serviceType: String?, errorCode: Int) { + Log.d(tag, "Discovery failed: $serviceType, error code: $errorCode") + } + + override fun onStopDiscoveryFailed(serviceType: String?, errorCode: Int) { + Log.d(tag, "Stop discovery failed: $serviceType, error code: $errorCode") + } + + override fun onDiscoveryStarted(serviceType: String?) { + Log.d(tag, "Discovery started: $serviceType") + } + + override fun onDiscoveryStopped(serviceType: String?) { + Log.d(tag, "Discovery stopped: $serviceType") + } + + override fun onServiceFound(serviceInfo: NsdServiceInfo?) { + if (serviceInfo == null) return + nsdManager?.resolveService(serviceInfo, object : ResolveListener { + override fun onResolveFailed(serviceInfo: NsdServiceInfo?, errorCode: Int) { + } + + override fun onServiceResolved(serviceInfo: NsdServiceInfo?) { + if (serviceInfo == null) return + + currentDevices.add(PublicDeviceInfo(serviceInfo)) + + Log.d( + tag, + "Service found: ${serviceInfo.serviceName}, Net: ${serviceInfo.host.hostAddress}" + ) + } + }) + } + + override fun onServiceLost(serviceInfo: NsdServiceInfo?) { + if (serviceInfo == null) return + + // May remove duplicates, but net and port is null here, preventing device specific identification + currentDevices.removeAll { + it.rawName == serviceInfo.serviceName + } + + Log.d(tag, "Service lost: ${serviceInfo.serviceName}") + } + } + + companion object { + const val APP_PREFIX = "CloudStream" + val currentDevices: MutableList = mutableListOf() + + class DefaultRegistrationListener : NsdManager.RegistrationListener { + val tag = "DiscoveryService" + override fun onServiceRegistered(serviceInfo: NsdServiceInfo) { + Log.d(tag, "Service registered: ${serviceInfo.serviceName}") + } + + override fun onRegistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + Log.e(tag, "Service registration failed: errorCode=$errorCode") + } + + override fun onServiceUnregistered(serviceInfo: NsdServiceInfo) { + Log.d(tag, "Service unregistered: ${serviceInfo.serviceName}") + } + + override fun onUnregistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) { + Log.e(tag, "Service unregistration failed: errorCode=$errorCode") + } + } + + const val TCP_PORT = 46899 + } +} + +class PublicDeviceInfo(serviceInfo: NsdServiceInfo) { + val rawName: String = serviceInfo.serviceName + val host: String? = serviceInfo.host.hostAddress + val name = rawName.replace("-", " ") + host?.let { " $it" } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastSession.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastSession.kt new file mode 100644 index 00000000..1f33bca4 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/FcastSession.kt @@ -0,0 +1,60 @@ +package com.lagradost.cloudstream3.utils.fcast + +import android.util.Log +import androidx.annotation.WorkerThread +import com.lagradost.cloudstream3.utils.AppUtils.toJson +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.safefile.closeQuietly +import java.io.DataOutputStream +import java.net.Socket +import kotlin.jvm.Throws + +class FcastSession(private val hostAddress: String): AutoCloseable { + val tag = "FcastSession" + + private var socket: Socket? = null + @Throws + @WorkerThread + fun open(): Socket { + val socket = Socket(hostAddress, FcastManager.TCP_PORT) + this.socket = socket + return socket + } + + override fun close() { + socket?.closeQuietly() + socket = null + } + + @Throws + private fun acquireSocket(): Socket { + return socket ?: open() + } + + fun ping() { + sendMessage(Opcode.Ping, null) + } + + fun sendMessage(opcode: Opcode, message: T) { + ioSafe { + val socket = acquireSocket() + val outputStream = DataOutputStream(socket.getOutputStream()) + + val json = message?.toJson() + val content = json?.toByteArray() ?: ByteArray(0) + + // Little endian starting from 1 + // https://gitlab.com/futo-org/fcast/-/wikis/Protocol-version-1 + val size = content.size + 1 + + val sizeArray = ByteArray(4) { num -> + (size shr 8 * num and 0xff).toByte() + } + + Log.d(tag, "Sending message with size: $size, opcode: $opcode") + outputStream.write(sizeArray) + outputStream.write(ByteArray(1) { opcode.value }) + outputStream.write(content) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/Packets.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/Packets.kt new file mode 100644 index 00000000..61c00d6e --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/fcast/Packets.kt @@ -0,0 +1,62 @@ +package com.lagradost.cloudstream3.utils.fcast + +// See https://gitlab.com/futo-org/fcast/-/wikis/Protocol-version-1 +enum class Opcode(val value: Byte) { + None(0), + Play(1), + Pause(2), + Resume(3), + Stop(4), + Seek(5), + PlaybackUpdate(6), + VolumeUpdate(7), + SetVolume(8), + PlaybackError(9), + SetSpeed(10), + Version(11), + Ping(12), + Pong(13); +} + + +data class PlayMessage( + val container: String, + val url: String? = null, + val content: String? = null, + val time: Double? = null, + val speed: Double? = null, + val headers: Map? = null +) + +data class SeekMessage( + val time: Double +) + +data class PlaybackUpdateMessage( + val generationTime: Long, + val time: Double, + val duration: Double, + val state: Int, + val speed: Double +) + +data class VolumeUpdateMessage( + val generationTime: Long, + val volume: Double +) + +data class PlaybackErrorMessage( + val message: String +) + +data class SetSpeedMessage( + val speed: Double +) + +data class SetVolumeMessage( + val volume: Double +) + +data class VersionMessage( + val version: Long +) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9bd2426c..a8108623 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -357,6 +357,7 @@ Download error, check storage permissions Chromecast episode Chromecast mirror + Cast mirror Play in app Play in %s Play in browser @@ -634,7 +635,9 @@ VLC MPV Web Video Cast + Fcast Web browser + Select cast device App not found All Languages Skip %s From af828de8d5264e7d2c3a6d6954b0a2a228ca2264 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 18 May 2024 14:41:37 +0300 Subject: [PATCH 797/888] feat(TV UI: Fix online subtitles dialog focus (#1085) --- app/src/main/res/layout/dialog_online_subtitles.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/dialog_online_subtitles.xml b/app/src/main/res/layout/dialog_online_subtitles.xml index 7803e261..d480bd34 100644 --- a/app/src/main/res/layout/dialog_online_subtitles.xml +++ b/app/src/main/res/layout/dialog_online_subtitles.xml @@ -40,7 +40,7 @@ android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="center_vertical" - android:layout_marginEnd="30dp"> + android:layout_marginEnd="40dp"> @@ -106,7 +107,7 @@ android:layout_margin="10dp" android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/change_providers_img_des" - android:nextFocusLeft="@id/main_search" + android:nextFocusLeft="@id/year_btt" android:nextFocusRight="@id/main_search" android:nextFocusUp="@id/nav_rail_view" android:nextFocusDown="@id/search_autofit_results" From 4d5cd288abd07c74fc88900c58e119c27f1b7867 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Sat, 18 May 2024 11:47:12 +0000 Subject: [PATCH 798/888] Ported more files for multiplatform (#1056) --- .../lagradost/cloudstream3/CommonActivity.kt | 1 + .../com/lagradost/cloudstream3/MainAPI.kt | 114 ++++++++-- .../lagradost/cloudstream3/MainActivity.kt | 197 ++++++++---------- .../ui/result/ResultViewModel2.kt | 10 +- .../cloudstream3/utils/Coroutines.android.kt | 11 + .../lagradost/cloudstream3/MainActivity.kt | 35 ++++ .../com/lagradost/cloudstream3/MainApi.kt | 3 + .../lagradost/cloudstream3/ParCollections.kt | 0 .../cloudstream3/utils/Coroutines.kt | 8 +- .../lagradost/cloudstream3/utils/JsHunter.kt | 0 .../cloudstream3/utils/JsUnpacker.kt | 0 .../cloudstream3/utils/Coroutines.jvm.kt | 5 + 12 files changed, 243 insertions(+), 141 deletions(-) create mode 100644 library/src/androidMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.android.kt create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/ParCollections.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/Coroutines.kt (90%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/JsHunter.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/JsUnpacker.kt (100%) create mode 100644 library/src/jvmMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.jvm.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 4dc78dc7..82e985db 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -29,6 +29,7 @@ import com.google.android.material.chip.ChipGroup import com.google.android.material.navigationrail.NavigationRailView import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey +import com.lagradost.cloudstream3.MainActivity.Companion.resumeApps import com.lagradost.cloudstream3.databinding.ToastBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.PlayerEventType diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 699159b5..07a82583 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -31,19 +31,16 @@ import java.text.SimpleDateFormat import java.util.* import kotlin.math.absoluteValue -const val USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" - -//val baseHeader = mapOf("User-Agent" to USER_AGENT) -val mapper = JsonMapper.builder().addModule(kotlinModule()) - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build()!! - /** * Defines the constant for the all languages preference, if this is set then it is * the equivalent of all languages being set **/ const val AllLanguagesName = "universal" +//val baseHeader = mapOf("User-Agent" to USER_AGENT) +val mapper = JsonMapper.builder().addModule(kotlinModule()) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build()!! + object APIHolder { val unixTime: Long get() = System.currentTimeMillis() / 1000L @@ -121,7 +118,8 @@ object APIHolder { fun LoadResponse.getId(): Int { // this fixes an issue with outdated api as getLoadResponseIdFromUrl might be fucked - return (if (this is ResultViewModel2.LoadResponseFromSearch) this.id else null) ?: getLoadResponseIdFromUrl(url, apiName) + return (if (this is ResultViewModel2.LoadResponseFromSearch) this.id else null) + ?: getLoadResponseIdFromUrl(url, apiName) } /** @@ -222,10 +220,15 @@ object APIHolder { } ?: false val matchingTypes = types?.any { it.name.equals(media.format, true) } == true - if(lessAccurate) matchingTitles || matchingTypes && matchingYears else matchingTitles && matchingTypes && matchingYears + if (lessAccurate) matchingTitles || matchingTypes && matchingYears else matchingTitles && matchingTypes && matchingYears } ?: return null - Tracker(res.idMal, res.id.toString(), res.coverImage?.extraLarge ?: res.coverImage?.large, res.bannerImage) + Tracker( + res.idMal, + res.id.toString(), + res.coverImage?.extraLarge ?: res.coverImage?.large, + res.bannerImage + ) } catch (t: Throwable) { logError(t) null @@ -866,6 +869,7 @@ enum class TvType(value: Int?) { Others(12), Music(13), AudioBook(14), + /** Wont load the built in player, make your own interaction */ CustomMedia(15), } @@ -1253,13 +1257,15 @@ interface LoadResponse { fun LoadResponse.getImdbId(): String? { return normalSafeApiCall { - SimklApi.readIdFromString(this.syncData[simklIdPrefix])?.get(SimklApi.Companion.SyncServices.Imdb) + SimklApi.readIdFromString(this.syncData[simklIdPrefix]) + ?.get(SimklApi.Companion.SyncServices.Imdb) } } fun LoadResponse.getTMDbId(): String? { return normalSafeApiCall { - SimklApi.readIdFromString(this.syncData[simklIdPrefix])?.get(SimklApi.Companion.SyncServices.Tmdb) + SimklApi.readIdFromString(this.syncData[simklIdPrefix]) + ?.get(SimklApi.Companion.SyncServices.Tmdb) } } @@ -1556,8 +1562,26 @@ data class TorrentLoadResponse( posterHeaders: Map? = null, backgroundPosterUrl: String? = null, ) : this( - name, url, apiName, magnet, torrent, plot, type, posterUrl, year, rating, tags, duration, trailers, - recommendations, actors, comingSoon, syncData, posterHeaders, backgroundPosterUrl, null + name, + url, + apiName, + magnet, + torrent, + plot, + type, + posterUrl, + year, + rating, + tags, + duration, + trailers, + recommendations, + actors, + comingSoon, + syncData, + posterHeaders, + backgroundPosterUrl, + null ) } @@ -1609,7 +1633,8 @@ data class AnimeLoadResponse( return this.episodes.maxOf { (_, episodes) -> episodes.count { episodeData -> // Prioritize display season as actual season may be something random to fit multiple seasons into one. - val episodeSeason = displayMap[episodeData.season] ?: episodeData.season ?: Int.MIN_VALUE + val episodeSeason = + displayMap[episodeData.season] ?: episodeData.season ?: Int.MIN_VALUE // Count all episodes from season 1 to below the current season. episodeSeason in 1..? = null, backgroundPosterUrl: String? = null, ) : this( - engName, japName, name, url, apiName, type, posterUrl, year, episodes, showStatus, plot, tags, - synonyms, rating, duration, trailers, recommendations, actors, comingSoon, syncData, posterHeaders, - nextAiring, seasonNames, backgroundPosterUrl, null + engName, + japName, + name, + url, + apiName, + type, + posterUrl, + year, + episodes, + showStatus, + plot, + tags, + synonyms, + rating, + duration, + trailers, + recommendations, + actors, + comingSoon, + syncData, + posterHeaders, + nextAiring, + seasonNames, + backgroundPosterUrl, + null ) } @@ -1780,7 +1827,7 @@ data class MovieLoadResponse( backgroundPosterUrl: String? = null, ) : this( name, url, apiName, type, dataUrl, posterUrl, year, plot, rating, tags, duration, trailers, - recommendations, actors, comingSoon, syncData, posterHeaders, backgroundPosterUrl,null + recommendations, actors, comingSoon, syncData, posterHeaders, backgroundPosterUrl, null ) } @@ -1923,7 +1970,8 @@ data class TvSeriesLoadResponse( return episodes.count { episodeData -> // Prioritize display season as actual season may be something random to fit multiple seasons into one. - val episodeSeason = displayMap[episodeData.season] ?: episodeData.season ?: Int.MIN_VALUE + val episodeSeason = + displayMap[episodeData.season] ?: episodeData.season ?: Int.MIN_VALUE // Count all episodes from season 1 to below the current season. episodeSeason in 1..? = null, backgroundPosterUrl: String? = null, ) : this( - name, url, apiName, type, episodes, posterUrl, year, plot, showStatus, rating, tags, duration, - trailers, recommendations, actors, comingSoon, syncData, posterHeaders, nextAiring, seasonNames, - backgroundPosterUrl, null + name, + url, + apiName, + type, + episodes, + posterUrl, + year, + plot, + showStatus, + rating, + tags, + duration, + trailers, + recommendations, + actors, + comingSoon, + syncData, + posterHeaders, + nextAiring, + seasonNames, + backgroundPosterUrl, + null ) } @@ -2022,6 +2089,7 @@ data class AniSearch( @JsonProperty("extraLarge") var extraLarge: String? = null, @JsonProperty("large") var large: String? = null, ) + data class Title( @JsonProperty("romaji") var romaji: String? = null, @JsonProperty("english") var english: String? = null, diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 56322b73..1ff0575b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -174,7 +174,6 @@ import java.net.URLDecoder import java.nio.charset.Charset import kotlin.math.abs import kotlin.math.absoluteValue -import kotlin.reflect.KClass import kotlin.system.exitProcess //https://github.com/videolan/vlc-android/blob/3706c4be2da6800b3d26344fc04fab03ffa4b860/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt#L1898 @@ -187,117 +186,93 @@ import kotlin.system.exitProcess //https://github.com/jellyfin/jellyfin-android/blob/6cbf0edf84a3da82347c8d59b5d5590749da81a9/app/src/main/java/org/jellyfin/mobile/bridge/ExternalPlayer.kt#L225 -const val VLC_PACKAGE = "org.videolan.vlc" -const val MPV_PACKAGE = "is.xyz.mpv" -const val WEB_VIDEO_CAST_PACKAGE = "com.instantbits.cast.webvideo" - -val VLC_COMPONENT = ComponentName(VLC_PACKAGE, "$VLC_PACKAGE.gui.video.VideoPlayerActivity") -val MPV_COMPONENT = ComponentName(MPV_PACKAGE, "$MPV_PACKAGE.MPVActivity") - -//TODO REFACTOR AF -open class ResultResume( - val packageString: String, - val action: String = Intent.ACTION_VIEW, - val position: String? = null, - val duration: String? = null, - var launcher: ActivityResultLauncher? = null, -) { - val defaultTime = -1L - - val lastId get() = "${packageString}_last_open_id" - suspend fun launch(id: Int?, callback: suspend Intent.() -> Unit) { - val intent = Intent(action) - - if (id != null) - setKey(lastId, id) - else - removeKey(lastId) - - intent.setPackage(packageString) - callback.invoke(intent) - launcher?.launch(intent) - } - - open fun getPosition(intent: Intent?): Long { - return defaultTime - } - - open fun getDuration(intent: Intent?): Long { - return defaultTime - } -} - -val VLC = object : ResultResume( - VLC_PACKAGE, - // Android 13 intent restrictions fucks up specifically launching the VLC player - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { - "org.videolan.vlc.player.result" - } else { - Intent.ACTION_VIEW - }, - "extra_position", - "extra_duration", -) { - override fun getPosition(intent: Intent?): Long { - return intent?.getLongExtra(this.position, defaultTime) ?: defaultTime - } - - override fun getDuration(intent: Intent?): Long { - return intent?.getLongExtra(this.duration, defaultTime) ?: defaultTime - } -} - -val MPV = object : ResultResume( - MPV_PACKAGE, - //"is.xyz.mpv.MPVActivity.result", // resume not working :pensive: - position = "position", - duration = "duration", -) { - override fun getPosition(intent: Intent?): Long { - return intent?.getIntExtra(this.position, defaultTime.toInt())?.toLong() ?: defaultTime - } - - override fun getDuration(intent: Intent?): Long { - return intent?.getIntExtra(this.duration, defaultTime.toInt())?.toLong() ?: defaultTime - } -} - -val WEB_VIDEO = ResultResume(WEB_VIDEO_CAST_PACKAGE) - -val resumeApps = arrayOf( - VLC, MPV, WEB_VIDEO -) - -// Short name for requests client to make it nicer to use - -var app = Requests(responseParser = object : ResponseParser { - val mapper: ObjectMapper = jacksonObjectMapper().configure( - DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, - false - ) - - override fun parse(text: String, kClass: KClass): T { - return mapper.readValue(text, kClass.java) - } - - override fun parseSafe(text: String, kClass: KClass): T? { - return try { - mapper.readValue(text, kClass.java) - } catch (e: Exception) { - null - } - } - - override fun writeValueAsString(obj: Any): String { - return mapper.writeValueAsString(obj) - } -}).apply { - defaultHeaders = mapOf("user-agent" to USER_AGENT) -} - class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricAuthenticator.BiometricAuthCallback { companion object { + const val VLC_PACKAGE = "org.videolan.vlc" + const val MPV_PACKAGE = "is.xyz.mpv" + const val WEB_VIDEO_CAST_PACKAGE = "com.instantbits.cast.webvideo" + + val VLC_COMPONENT = ComponentName(VLC_PACKAGE, "$VLC_PACKAGE.gui.video.VideoPlayerActivity") + val MPV_COMPONENT = ComponentName(MPV_PACKAGE, "$MPV_PACKAGE.MPVActivity") + + //TODO REFACTOR AF + open class ResultResume( + val packageString: String, + val action: String = Intent.ACTION_VIEW, + val position: String? = null, + val duration: String? = null, + var launcher: ActivityResultLauncher? = null, + ) { + val defaultTime = -1L + + val lastId get() = "${packageString}_last_open_id" + suspend fun launch(id: Int?, callback: suspend Intent.() -> Unit) { + val intent = Intent(action) + + if (id != null) + setKey(lastId, id) + else + removeKey(lastId) + + intent.setPackage(packageString) + callback.invoke(intent) + launcher?.launch(intent) + } + + open fun getPosition(intent: Intent?): Long { + return defaultTime + } + + open fun getDuration(intent: Intent?): Long { + return defaultTime + } + } + + val VLC = object : ResultResume( + VLC_PACKAGE, + // Android 13 intent restrictions fucks up specifically launching the VLC player + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + "org.videolan.vlc.player.result" + } else { + Intent.ACTION_VIEW + }, + "extra_position", + "extra_duration", + ) { + override fun getPosition(intent: Intent?): Long { + return intent?.getLongExtra(this.position, defaultTime) ?: defaultTime + } + + override fun getDuration(intent: Intent?): Long { + return intent?.getLongExtra(this.duration, defaultTime) ?: defaultTime + } + } + + val MPV = object : ResultResume( + MPV_PACKAGE, + //"is.xyz.mpv.MPVActivity.result", // resume not working :pensive: + position = "position", + duration = "duration", + ) { + override fun getPosition(intent: Intent?): Long { + return intent?.getIntExtra(this.position, defaultTime.toInt())?.toLong() + ?: defaultTime + } + + override fun getDuration(intent: Intent?): Long { + return intent?.getIntExtra(this.duration, defaultTime.toInt())?.toLong() + ?: defaultTime + } + } + + val WEB_VIDEO = ResultResume(WEB_VIDEO_CAST_PACKAGE) + + val resumeApps = arrayOf( + VLC, MPV, WEB_VIDEO + ) + + const val TAG = "MAINACT" const val ANIMATED_OUTLINE: Boolean = false var lastError: String? = null @@ -1403,7 +1378,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, } } - observe(viewModel.watchStatus,::setWatchStatus) + observe(viewModel.watchStatus, ::setWatchStatus) observe(syncViewModel.userData, ::setUserData) observeNullable(viewModel.subscribeStatus, ::setSubscribeStatus) @@ -1831,7 +1806,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, } override fun onAuthenticationError() { - finish() + finish() } private var backPressedCallback: OnBackPressedCallback? = null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index a32942f6..0af01ca8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -29,6 +29,14 @@ import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.LoadResponse.Companion.getAniListId import com.lagradost.cloudstream3.LoadResponse.Companion.getMalId import com.lagradost.cloudstream3.LoadResponse.Companion.isMovie +import com.lagradost.cloudstream3.MainActivity.Companion.MPV +import com.lagradost.cloudstream3.MainActivity.Companion.MPV_COMPONENT +import com.lagradost.cloudstream3.MainActivity.Companion.MPV_PACKAGE +import com.lagradost.cloudstream3.MainActivity.Companion.VLC +import com.lagradost.cloudstream3.MainActivity.Companion.VLC_COMPONENT +import com.lagradost.cloudstream3.MainActivity.Companion.VLC_PACKAGE +import com.lagradost.cloudstream3.MainActivity.Companion.WEB_VIDEO +import com.lagradost.cloudstream3.MainActivity.Companion.WEB_VIDEO_CAST_PACKAGE import com.lagradost.cloudstream3.metaproviders.SyncRedirector import com.lagradost.cloudstream3.mvvm.* import com.lagradost.cloudstream3.syncproviders.AccountManager @@ -1354,7 +1362,7 @@ class ResultViewModel2 : ViewModel() { private fun launchActivity( activity: Activity?, - resumeApp: ResultResume, + resumeApp: MainActivity.Companion.ResultResume, id: Int? = null, work: suspend (Intent.(Activity) -> Unit) ): Job? { diff --git a/library/src/androidMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.android.kt b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.android.kt new file mode 100644 index 00000000..48a709eb --- /dev/null +++ b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.android.kt @@ -0,0 +1,11 @@ +package com.lagradost.cloudstream3.utils + +import android.os.Handler +import android.os.Looper + +actual fun runOnMainThreadNative(work: () -> Unit) { + val mainHandler = Handler(Looper.getMainLooper()) + mainHandler.post { + work() + } +} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt new file mode 100644 index 00000000..6502cc83 --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainActivity.kt @@ -0,0 +1,35 @@ +package com.lagradost.cloudstream3 + +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.lagradost.nicehttp.Requests +import com.lagradost.nicehttp.ResponseParser +import kotlin.reflect.KClass + +// Short name for requests client to make it nicer to use + +var app = Requests(responseParser = object : ResponseParser { + val mapper: ObjectMapper = jacksonObjectMapper().configure( + DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, + false + ) + + override fun parse(text: String, kClass: KClass): T { + return mapper.readValue(text, kClass.java) + } + + override fun parseSafe(text: String, kClass: KClass): T? { + return try { + mapper.readValue(text, kClass.java) + } catch (e: Exception) { + null + } + } + + override fun writeValueAsString(obj: Any): String { + return mapper.writeValueAsString(obj) + } +}).apply { + defaultHeaders = mapOf("user-agent" to USER_AGENT) +} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt index 87ee4815..160ff098 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt @@ -1,3 +1,6 @@ package com.lagradost.cloudstream3 +const val USER_AGENT = + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" + class ErrorLoadingException(message: String? = null) : Exception(message) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/ParCollections.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/ParCollections.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/ParCollections.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/Coroutines.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.kt similarity index 90% rename from app/src/main/java/com/lagradost/cloudstream3/utils/Coroutines.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.kt index c3b244c2..f87ddc6a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/Coroutines.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.kt @@ -1,12 +1,11 @@ package com.lagradost.cloudstream3.utils -import android.os.Handler -import android.os.Looper import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.mvvm.logError import kotlinx.coroutines.* import java.util.Collections.synchronizedList +expect fun runOnMainThreadNative(work: (() -> Unit)) object Coroutines { fun T.main(work: suspend ((T) -> Unit)): Job { val value = this @@ -50,10 +49,7 @@ object Coroutines { } fun runOnMainThread(work: (() -> Unit)) { - val mainHandler = Handler(Looper.getMainLooper()) - mainHandler.post { - work() - } + runOnMainThreadNative(work) } /** diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/JsHunter.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/JsHunter.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/utils/JsHunter.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/JsHunter.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/JsUnpacker.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/utils/JsUnpacker.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/JsUnpacker.kt diff --git a/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.jvm.kt b/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.jvm.kt new file mode 100644 index 00000000..0a9667cb --- /dev/null +++ b/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/utils/Coroutines.jvm.kt @@ -0,0 +1,5 @@ +package com.lagradost.cloudstream3.utils + +actual fun runOnMainThreadNative(work: () -> Unit) { + work.invoke() +} \ No newline at end of file From 469a71236b6e78018f3f72c83f0b051bdab189c3 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 18 May 2024 19:15:23 +0300 Subject: [PATCH 799/888] SubDL subtitles provider (#1082) --- .../subtitles/AbstractSubtitleEntities.kt | 6 +- .../syncproviders/AccountManager.kt | 5 +- .../providers/IndexSubtitleApi.kt | 2 +- .../providers/OpenSubtitlesApi.kt | 2 +- .../syncproviders/providers/Subdl.kt | 102 ++++++++++++++++++ .../ui/player/FullScreenPlayer.kt | 3 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 18 +++- .../ui/player/PlayerGeneratorViewModel.kt | 4 + .../ui/result/ResultTrailerPlayer.kt | 3 +- .../ui/result/ResultViewModel2.kt | 3 +- 10 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt index f6424c4c..ed4ccb74 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.subtitles +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.TvType class AbstractSubtitleEntities { @@ -19,8 +20,11 @@ class AbstractSubtitleEntities { data class SubtitleSearch( var query: String = "", - var imdb: Long? = null, var lang: String? = null, + var imdbId: String? = null, + var tmdbId: Int? = null, + var malId: Int? = null, + var aniListId: Int? = null, var epNumber: Int? = null, var seasonNumber: Int? = null, var year: Int? = null diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index bae8a5df..55418890 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.syncproviders import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey -import com.lagradost.cloudstream3.syncproviders.providers.SubScene import com.lagradost.cloudstream3.syncproviders.providers.* import java.util.concurrent.TimeUnit @@ -16,6 +15,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val indexSubtitlesApi = IndexSubtitleApi() val addic7ed = Addic7ed() val subScene = SubScene() + val subDl = SubDL() val localListApi = LocalList() // used to login via app intent @@ -44,7 +44,8 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { openSubtitlesApi, indexSubtitlesApi, // they got anti scraping measures in place :( addic7ed, - subScene + subScene, + subDl ) const val appString = "cloudstreamapp" diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt index 1adecce9..5ca3f3d5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt @@ -98,7 +98,7 @@ class IndexSubtitleApi : AbstractSubApi { } override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List { - val imdbId = query.imdb ?: 0 + val imdbId = query.imdbId?.replace("tt", "")?.toLong() ?: 0 val lang = query.lang val queryLang = SubtitleHelper.fromTwoLettersToLanguage(lang.toString()) val queryText = query.query diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt index 4030649d..7d0514d1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt @@ -185,7 +185,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi throwIfCantDoRequest() val fixedLang = fixLanguage(query.lang) - val imdbId = query.imdb ?: 0 + val imdbId = query.imdbId?.replace("tt", "")?.toInt() ?: 0 val queryText = query.query val epNum = query.epNumber ?: 0 val seasonNum = query.seasonNumber ?: 0 diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt new file mode 100644 index 00000000..d25d3f22 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt @@ -0,0 +1,102 @@ +package com.lagradost.cloudstream3.syncproviders.providers + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.subtitles.AbstractSubProvider +import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities +import com.lagradost.cloudstream3.subtitles.SubtitleResource + +class SubDL : AbstractSubProvider { + //API Documentation: https://subdl.com/api-doc + val mainUrl = "https://subdl.com/" + val name = "SubDL" + override val idPrefix = "subdl" + companion object { + const val APIKEY = "zRJl5QA-8jNA2i0pE8cxANbEukANp7IM" + const val APIENDPOINT = "https://api.subdl.com/api/v1/subtitles" + const val DOWNLOADENDPOINT = "https://dl.subdl.com" + } + + override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List? { + + val queryText = query.query + val epNum = query.epNumber ?: 0 + val seasonNum = query.seasonNumber ?: 0 + val yearNum = query.year ?: 0 + + val idQuery = when { + query.imdbId != null -> "&imdb_id=${query.imdbId}" + query.tmdbId != null -> "&tmdb_id=${query.tmdbId}" + else -> null + } + + val epQuery = if (epNum > 0) "&episode_number=$epNum" else "" + val seasonQuery = if (seasonNum > 0) "&season_number=$seasonNum" else "" + val yearQuery = if (yearNum > 0) "&year=$yearNum" else "" + + val searchQueryUrl = when (idQuery) { + //Use imdb/tmdb id to search if its valid + null -> "$APIENDPOINT?api_key=$APIKEY&film_name=$queryText&languages=${query.lang}$epQuery$seasonQuery$yearQuery" + else -> "$APIENDPOINT?api_key=$APIKEY$idQuery&languages=${query.lang}$epQuery$seasonQuery$yearQuery" + } + + val req = app.get( + url = searchQueryUrl, + headers = mapOf( + "Accept" to "application/json" + ) + ) + + return req.parsedSafe()?.subtitles?.map { subtitle -> + val name = subtitle.releaseName + val lang = subtitle.lang.replaceFirstChar { it.uppercase() } + val resEpNum = subtitle.episode ?: query.epNumber + val resSeasonNum = subtitle.season ?: query.seasonNumber + val type = if ((resSeasonNum ?: 0) > 0) TvType.TvSeries else TvType.Movie + + AbstractSubtitleEntities.SubtitleEntity( + idPrefix = this.idPrefix, + name = name, + lang = lang, + data = "${DOWNLOADENDPOINT}${subtitle.url}", + type = type, + source = this.name, + epNumber = resEpNum, + seasonNumber = resSeasonNum, + ) + } + } + + override suspend fun SubtitleResource.getResources(data: AbstractSubtitleEntities.SubtitleEntity) { + this.addZipUrl(data.data) { name, _ -> + name + } + } + + data class ApiResponse( + @JsonProperty("status") val status: Boolean? = null, + @JsonProperty("results") val results: List? = null, + @JsonProperty("subtitles") val subtitles: List? = null, + ) + + data class Result( + @JsonProperty("sd_id") val sdId: Int? = null, + @JsonProperty("type") val type: String? = null, + @JsonProperty("name") val name: String? = null, + @JsonProperty("imdb_id") val imdbId: String? = null, + @JsonProperty("tmdb_id") val tmdbId: Long? = null, + @JsonProperty("first_air_date") val firstAirDate: String? = null, + @JsonProperty("year") val year: Int? = null, + ) + + data class Subtitle( + @JsonProperty("release_name") val releaseName: String, + @JsonProperty("name") val name: String, + @JsonProperty("lang") val lang: String, + @JsonProperty("author") val author: String? = null, + @JsonProperty("url") val url: String? = null, + @JsonProperty("season") val season: Int? = null, + @JsonProperty("episode") val episode: Int? = null, + ) +} \ No newline at end of file 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 c357ce9c..aa25157b 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 @@ -32,6 +32,7 @@ import com.lagradost.cloudstream3.CommonActivity.keyEventListener import com.lagradost.cloudstream3.CommonActivity.playerEventListener import com.lagradost.cloudstream3.CommonActivity.screenHeight import com.lagradost.cloudstream3.CommonActivity.screenWidth +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.PlayerCustomLayoutBinding import com.lagradost.cloudstream3.databinding.SubtitleOffsetBinding @@ -177,7 +178,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { open fun openOnlineSubPicker( context: Context, - imdbId: Long?, + loadResponse: LoadResponse?, dismissCallback: (() -> Unit) ) { throw NotImplementedError() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 7ff56886..c77f9404 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -25,6 +25,10 @@ import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.LoadResponse.Companion.getAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.getImdbId +import com.lagradost.cloudstream3.LoadResponse.Companion.getMalId +import com.lagradost.cloudstream3.LoadResponse.Companion.getTMDbId import com.lagradost.cloudstream3.databinding.DialogOnlineSubtitlesBinding import com.lagradost.cloudstream3.databinding.FragmentPlayerBinding import com.lagradost.cloudstream3.databinding.PlayerSelectSourceAndSubsBinding @@ -39,7 +43,6 @@ import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSub import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.ui.player.source_priority.QualityProfileDialog import com.lagradost.cloudstream3.ui.result.* -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout @@ -258,6 +261,7 @@ class GeneratorPlayer : FullScreenPlayer() { var episode: Int? = null, var season: Int? = null, var name: String? = null, + var imdbId: String? = null, ) private fun getMetaData(): TempMetaData { @@ -284,7 +288,7 @@ class GeneratorPlayer : FullScreenPlayer() { } override fun openOnlineSubPicker( - context: Context, imdbId: Long?, dismissCallback: (() -> Unit) + context: Context, loadResponse: LoadResponse?, dismissCallback: (() -> Unit) ) { val providers = subsProviders val isSingleProvider = subsProviders.size == 1 @@ -377,6 +381,7 @@ class GeneratorPlayer : FullScreenPlayer() { } val currentTempMeta = getMetaData() + // bruh idk why it is not correct val color = ColorStateList.valueOf(context.colorFromAttribute(R.attr.colorAccent)) binding.searchLoadingBar.progressTintList = color @@ -424,7 +429,10 @@ class GeneratorPlayer : FullScreenPlayer() { val search = AbstractSubtitleEntities.SubtitleSearch( query = query ?: return@ioSafe, - imdb = imdbId, + imdbId = loadResponse?.getImdbId(), + tmdbId = loadResponse?.getTMDbId()?.toInt(), + malId = loadResponse?.getMalId()?.toInt(), + aniListId = loadResponse?.getAniListId()?.toInt(), epNumber = currentTempMeta.episode, seasonNumber = currentTempMeta.season, lang = currentLanguageTwoLetters.ifBlank { null }, @@ -633,6 +641,8 @@ class GeneratorPlayer : FullScreenPlayer() { } if (subsProvidersIsActive) { + val currentLoadResponse = viewModel.getLoadResponse() + val loadFromOpenSubsFooter: TextView = layoutInflater.inflate( R.layout.sort_bottom_footer_add_choice, null ) as TextView @@ -643,7 +653,7 @@ class GeneratorPlayer : FullScreenPlayer() { loadFromOpenSubsFooter.setOnClickListener { shouldDismiss = false sourceDialog.dismissSafe(activity) - openOnlineSubPicker(it.context, null) { + openOnlineSubPicker(it.context, currentLoadResponse) { dismiss() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index 0d98f205..ee44567f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.mvvm.logError @@ -111,6 +112,9 @@ class PlayerGeneratorViewModel : ViewModel() { } } } + fun getLoadResponse(): LoadResponse? { + return normalSafeApiCall { (generator as? RepoLinkGenerator?)?.page } + } fun getMeta(): Any? { return normalSafeApiCall { generator?.getCurrent() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index ef3db0b4..135dc530 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -12,6 +12,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import com.lagradost.cloudstream3.CommonActivity.screenHeight import com.lagradost.cloudstream3.CommonActivity.screenWidth +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.CSPlayerEvent import com.lagradost.cloudstream3.ui.player.PlayerEventSource @@ -110,7 +111,7 @@ open class ResultTrailerPlayer : ResultFragmentPhone() { override fun openOnlineSubPicker( context: Context, - imdbId: Long?, + loadResponse: LoadResponse?, dismissCallback: () -> Unit ) { } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 0af01ca8..e1a52074 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -27,6 +27,7 @@ import com.lagradost.cloudstream3.CommonActivity.getCastSession import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.LoadResponse.Companion.getAniListId +import com.lagradost.cloudstream3.LoadResponse.Companion.getImdbId import com.lagradost.cloudstream3.LoadResponse.Companion.getMalId import com.lagradost.cloudstream3.LoadResponse.Companion.isMovie import com.lagradost.cloudstream3.MainActivity.Companion.MPV @@ -2417,7 +2418,7 @@ class ResultViewModel2 : ViewModel() { null, loadResponse.type, mainId, - null + null, ) ) } From db2bf5e7be3f952e440e02989a0c0878c4bc4b15 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 19 May 2024 18:43:46 +0800 Subject: [PATCH 800/888] Remove subscene (#1096) subscene.com just shows a "Subscene is closed" message now. --- .../syncproviders/AccountManager.kt | 2 - .../syncproviders/providers/SubScene.kt | 118 ------------------ 2 files changed, 120 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubScene.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index 55418890..e96499f0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -14,7 +14,6 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val simklApi = SimklApi(0) val indexSubtitlesApi = IndexSubtitleApi() val addic7ed = Addic7ed() - val subScene = SubScene() val subDl = SubDL() val localListApi = LocalList() @@ -44,7 +43,6 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { openSubtitlesApi, indexSubtitlesApi, // they got anti scraping measures in place :( addic7ed, - subScene, subDl ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubScene.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubScene.kt deleted file mode 100644 index fbe05026..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubScene.kt +++ /dev/null @@ -1,118 +0,0 @@ -package com.lagradost.cloudstream3.syncproviders.providers - -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.mvvm.debugPrint -import com.lagradost.cloudstream3.subtitles.AbstractSubProvider -import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities -import com.lagradost.cloudstream3.subtitles.SubtitleResource -import com.lagradost.cloudstream3.syncproviders.providers.IndexSubtitleApi.Companion.getOrdinal -import com.lagradost.cloudstream3.utils.SubtitleHelper - -class SubScene : AbstractSubProvider { - val mainUrl = "https://subscene.com" - val name = "Subscene" - override val idPrefix = "subscene" - - override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List? { - val seasonName = - query.seasonNumber?.let { number -> - // Need to translate "7" to "Seventh Season" - getOrdinal(number)?.let { words -> " - $words Season" } - } ?: "" - - val fullQuery = query.query + seasonName - - val doc = app.post( - "$mainUrl/subtitles/searchbytitle", - data = mapOf("query" to fullQuery, "l" to "") - ).document - - return doc.select("div.title a").map { element -> - val href = "$mainUrl${element.attr("href")}" - val title = element.text() - - AbstractSubtitleEntities.SubtitleEntity( - idPrefix = idPrefix, - name = title, - source = name, - data = href, - lang = query.lang ?: "en", - epNumber = query.epNumber - ) - }.distinctBy { it.data } - } - - override suspend fun SubtitleResource.getResources(data: AbstractSubtitleEntities.SubtitleEntity) { - val resultDoc = app.get(data.data).document - val queryLanguage = SubtitleHelper.fromTwoLettersToLanguage(data.lang) ?: "English" - - val results = resultDoc.select("table tbody tr").mapNotNull { element -> - val anchor = element.select("a") - val href = anchor.attr("href") ?: return@mapNotNull null - val fixedHref = "$mainUrl${href}" - val spans = anchor.select("span") - val language = spans.firstOrNull()?.text() - val title = spans.getOrNull(1)?.text() - val isPositive = anchor.select("span.positive-icon").isNotEmpty() - - TableElement(title, language, fixedHref, isPositive) - }.sortedBy { - it.getScore(queryLanguage, data.epNumber) - } - - debugPrint { "$name found subtitles: ${results.takeLast(3)}" } - // Last = highest score - val selectedResult = results.lastOrNull() ?: return - - val subtitleDocument = app.get(selectedResult.href).document - val subtitleDownloadUrl = - "$mainUrl${subtitleDocument.select("div.download a").attr("href")}" - - this.addZipUrl(subtitleDownloadUrl) { name, _ -> - name - } - } - - /** - * Class to manage the various different subtitle results and rank them. - */ - data class TableElement( - val title: String?, - val language: String?, - val href: String, - val isPositive: Boolean - ) { - private fun matchesLanguage(other: String): Boolean { - return language != null && (language.contains(other, ignoreCase = true) || - other.contains(language, ignoreCase = true)) - } - - /** - * Scores in this order: - * Preferred Language > Episode number > Positive rating > English Language - */ - fun getScore(queryLanguage: String, episodeNum: Int?): Int { - var score = 0 - if (this.matchesLanguage(queryLanguage)) { - score += 8 - } - // Matches Episode 7 using "E07" with any number of leading zeroes - if (episodeNum != null && title != null && title.contains( - Regex( - """E0*${episodeNum}""", - RegexOption.IGNORE_CASE - ) - ) - ) { - score += 4 - } - if (isPositive) { - score += 2 - } - if (this.matchesLanguage("English")) { - score += 1 - } - return score - } - } -} \ No newline at end of file From e697bf75544d0777e21f67c5af3bef8392bbd35b Mon Sep 17 00:00:00 2001 From: KingLucius Date: Tue, 21 May 2024 23:06:28 +0300 Subject: [PATCH 801/888] Next Airing episode support in Trakt meta provider (#1072) --- .../cloudstream3/metaproviders/TraktProvider.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 37c6be1b..07c9f316 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -4,6 +4,7 @@ import android.net.Uri import com.lagradost.cloudstream3.* import com.fasterxml.jackson.annotation.JsonAlias import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId import com.lagradost.cloudstream3.LoadResponse.Companion.addTMDbId import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer @@ -166,6 +167,7 @@ open class TraktProvider : MainAPI() { val episodes = mutableListOf() val seasons = parseJson>(resSeasons) val seasonsNames = mutableListOf() + var nextAir: NextAiring? = null seasons.forEach { season -> @@ -215,6 +217,13 @@ open class TraktProvider : MainAPI() { description = episode.overview, ).apply { this.addDate(episode.firstAired) + if (nextAir == null && this.date != null && this.date!! > unixTimeMS) { + nextAir = NextAiring( + episode = this.episode!!, + unixTime = this.date!!.div(1000L), + season = if (this.season == 1) null else this.season, + ) + } } ) } @@ -240,6 +249,7 @@ open class TraktProvider : MainAPI() { this.actors = actors this.comingSoon = isUpcoming(mediaDetails.released) //posterHeaders + this.nextAiring = nextAir this.seasonNames = seasonsNames this.backgroundPosterUrl = getOriginalWidthImageUrl(backDropUrl) this.contentRating = mediaDetails.certification From d0852449a50f548f88cd72785c338f2a5ad45184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Sancak?= Date: Mon, 27 May 2024 16:54:25 +0300 Subject: [PATCH 802/888] Extractor: Added FourPichive (#1103) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🕊 --- .../cloudstream3/extractors/HotlingerExtractor.kt | 7 ++++++- .../java/com/lagradost/cloudstream3/utils/ExtractorApi.kt | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt index b557a53e..db721108 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt @@ -20,4 +20,9 @@ class PlayRu : ContentX() { class FourPlayRu : ContentX() { override var name = "FourPlayRu" override var mainUrl = "https://four.playru.net" -} \ No newline at end of file +} + +class FourPichive : ContentX() { + override var name = "FourPichive" + override var mainUrl = "https://four.pichive.online" +} 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 61cdd26a..c6cad804 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -110,6 +110,7 @@ import com.lagradost.cloudstream3.extractors.Hotlinger import com.lagradost.cloudstream3.extractors.FourCX import com.lagradost.cloudstream3.extractors.PlayRu import com.lagradost.cloudstream3.extractors.FourPlayRu +import com.lagradost.cloudstream3.extractors.FourPichive import com.lagradost.cloudstream3.extractors.HDMomPlayer import com.lagradost.cloudstream3.extractors.HDPlayerSystem import com.lagradost.cloudstream3.extractors.VideoSeyred @@ -748,6 +749,7 @@ val extractorApis: MutableList = arrayListOf( FourCX(), PlayRu(), FourPlayRu(), + FourPichive(), HDMomPlayer(), HDPlayerSystem(), VideoSeyred(), From 960f8449b7eda687f70b9cebbbfd76502cffa398 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Mon, 27 May 2024 13:54:51 +0000 Subject: [PATCH 803/888] Update ResultViewModel2.kt (#1102) --- .../com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index e1a52074..4285feb1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -1728,7 +1728,7 @@ class ResultViewModel2 : ViewModel() { txt(R.string.episode_action_cast_mirror) ) { (result, index) -> val host = device?.host ?: return@acquireSingleLink - val link = result.links.firstOrNull() ?: return@acquireSingleLink + val link = result.links.getOrNull(index) ?: return@acquireSingleLink FcastSession(host).use { session -> session.sendMessage( From 5502e478c4f9227e6da2f785b436e9c599d06fdf Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 27 May 2024 19:35:56 +0530 Subject: [PATCH 804/888] chore: update material,kotlin compiler,newpipe extractor,rhino-js,guava,corektx (#1091) --- app/build.gradle.kts | 12 +++++------- .../java/com/lagradost/cloudstream3/MainActivity.kt | 2 +- .../ui/player/DownloadedPlayerActivity.kt | 2 +- build.gradle.kts | 2 +- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f854865d..61a0634f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -164,7 +164,7 @@ dependencies { androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") // Android Core & Lifecycle - implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.appcompat:appcompat:1.6.1") implementation("androidx.navigation:navigation-ui-ktx:2.7.7") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0") @@ -174,7 +174,7 @@ dependencies { // Design & UI implementation("jp.wasabeef:glide-transformations:4.3.0") implementation("androidx.preference:preference-ktx:1.2.1") - implementation("com.google.android.material:material:1.11.0") + implementation("com.google.android.material:material:1.12.0") implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") @@ -185,7 +185,7 @@ dependencies { // For KSP -> Official Annotation Processors are Not Yet Supported for KSP ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") - implementation("com.google.guava:guava:32.1.3-android") + implementation("com.google.guava:guava:33.2.0-android") implementation("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") // Media 3 (ExoPlayer) @@ -202,7 +202,7 @@ dependencies { // PlayBack implementation("com.jaredrummler:colorpicker:1.1.0") // Subtitle Color Picker implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Custom FF-MPEG Lib for Audio Codecs - implementation("com.github.TeamNewPipe.NewPipeExtractor:NewPipeExtractor:6dc25f7b97") /* For Trailers + implementation("com.github.teamnewpipe:NewPipeExtractor:fafd471") /* For Trailers ^ Update to Latest Commits if Trailers Misbehave, github.com/TeamNewPipe/NewPipeExtractor/commits/dev */ implementation("com.github.albfernandez:juniversalchardet:2.4.0") // Subtitle Decoding @@ -219,9 +219,7 @@ dependencies { implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") // SeekBar Preview // Extensions & Other Libs - implementation("org.mozilla:rhino:1.7.13") /* run JavaScript - ^ Don't Bump RhinoJS to 1.7.14,`NoClassDefFoundError` Occurs and Trailers won't play (even with Desugaring) - NewPipeExtractor Issue */ + implementation("org.mozilla:rhino:1.7.15") // run JavaScript implementation("me.xdrop:fuzzywuzzy:1.4.0") // Library/Ext Searching with Levenshtein Distance implementation("com.github.LagradOst:SafeFile:0.0.6") // To Prevent the URI File Fu*kery implementation("org.conscrypt:conscrypt-android:2.5.2") // To Fix SSL Fu*kery on Android 9 diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 1ff0575b..cc2c99de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -652,7 +652,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, } } - override fun dispatchKeyEvent(event: KeyEvent?): Boolean { + override fun dispatchKeyEvent(event: KeyEvent): Boolean { val response = CommonActivity.dispatchKeyEvent(this, event) if (response != null) return response diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 1e2ea540..4d8860f8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -17,7 +17,7 @@ import com.lagradost.safefile.SafeFile const val DTAG = "PlayerActivity" class DownloadedPlayerActivity : AppCompatActivity() { - override fun dispatchKeyEvent(event: KeyEvent?): Boolean { + override fun dispatchKeyEvent(event: KeyEvent): Boolean { CommonActivity.dispatchKeyEvent(this, event)?.let { return it } diff --git a/build.gradle.kts b/build.gradle.kts index ab1918fe..34f141b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle:8.2.2") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") // Universal build config classpath("com.codingfeline.buildkonfig:buildkonfig-gradle-plugin:0.15.1") From dff56026de873d0f35cdd134decd1fa1008c0f5f Mon Sep 17 00:00:00 2001 From: KingLucius Date: Wed, 29 May 2024 23:39:55 +0300 Subject: [PATCH 805/888] SubDL Account login support (#1101) --- .../syncproviders/AccountManager.kt | 11 +- .../syncproviders/providers/Subdl.kt | 167 ++++++++++++++++-- .../ui/settings/SettingsAccount.kt | 2 + .../cloudstream3/utils/BackupUtils.kt | 2 + app/src/main/res/drawable/subdl_logo_big.xml | 10 ++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/settings_account.xml | 4 + 7 files changed, 182 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable/subdl_logo_big.xml diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index e96499f0..1fd7900f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -14,7 +14,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val simklApi = SimklApi(0) val indexSubtitlesApi = IndexSubtitleApi() val addic7ed = Addic7ed() - val subDl = SubDL() + val subDlApi = SubDlApi(0) val localListApi = LocalList() // used to login via app intent @@ -26,7 +26,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { // this needs init with context and can be accessed in settings val accountManagers get() = listOf( - malApi, aniListApi, openSubtitlesApi, simklApi //nginxApi + malApi, aniListApi, openSubtitlesApi, subDlApi, simklApi //nginxApi ) // used for active syncing @@ -36,14 +36,17 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { ) val inAppAuths - get() = listOf(openSubtitlesApi)//, nginxApi) + get() = listOf( + openSubtitlesApi, + subDlApi + )//, nginxApi) val subtitleProviders get() = listOf( openSubtitlesApi, indexSubtitlesApi, // they got anti scraping measures in place :( addic7ed, - subDl + subDlApi ) const val appString = "cloudstreamapp" diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt index d25d3f22..29544e65 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Subdl.kt @@ -1,21 +1,80 @@ package com.lagradost.cloudstream3.syncproviders.providers import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.AcraApplication.Companion.getKey +import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey +import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.ErrorLoadingException +import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.subtitles.AbstractSubProvider +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.subtitles.AbstractSubApi import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities import com.lagradost.cloudstream3.subtitles.SubtitleResource +import com.lagradost.cloudstream3.syncproviders.AuthAPI.LoginInfo +import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI +import com.lagradost.cloudstream3.syncproviders.InAppAuthAPIManager -class SubDL : AbstractSubProvider { - //API Documentation: https://subdl.com/api-doc - val mainUrl = "https://subdl.com/" - val name = "SubDL" +class SubDlApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi { override val idPrefix = "subdl" + override val name = "SubDL" + override val icon = R.drawable.subdl_logo_big + override val requiresPassword = true + override val requiresEmail = true + override val createAccountUrl = "https://subdl.com/login" + companion object { - const val APIKEY = "zRJl5QA-8jNA2i0pE8cxANbEukANp7IM" - const val APIENDPOINT = "https://api.subdl.com/api/v1/subtitles" + const val APIURL = "https://api.subdl.com" + const val APIENDPOINT = "$APIURL/api/v1/subtitles" const val DOWNLOADENDPOINT = "https://dl.subdl.com" + const val SUBDL_SUBTITLES_USER_KEY: String = "subdl_user" + var currentSession: SubtitleOAuthEntity? = null + } + + override suspend fun initialize() { + currentSession = getAuthKey() + } + + override fun logOut() { + setAuthKey(null) + removeAccountKeys() + currentSession = getAuthKey() + } + override suspend fun login(data: InAppAuthAPI.LoginData): Boolean { + val email = data.email ?: throw ErrorLoadingException("Requires Email") + val password = data.password ?: throw ErrorLoadingException("Requires Password") + switchToNewAccount() + try { + if (initLogin(email, password)) { + registerAccount() + return true + } + } catch (e: Exception) { + logError(e) + switchToOldAccount() + } + switchToOldAccount() + return false + } + + override fun getLatestLoginData(): InAppAuthAPI.LoginData? { + val current = getAuthKey() ?: return null + return InAppAuthAPI.LoginData( + email = current.userEmail, + password = current.pass + ) + } + + override fun loginInfo(): LoginInfo? { + getAuthKey()?.let { user -> + return LoginInfo( + profilePicture = null, + name = user.name ?: user.userEmail, + accountIndex = accountIndex + ) + } + return null } override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List? { @@ -37,8 +96,8 @@ class SubDL : AbstractSubProvider { val searchQueryUrl = when (idQuery) { //Use imdb/tmdb id to search if its valid - null -> "$APIENDPOINT?api_key=$APIKEY&film_name=$queryText&languages=${query.lang}$epQuery$seasonQuery$yearQuery" - else -> "$APIENDPOINT?api_key=$APIKEY$idQuery&languages=${query.lang}$epQuery$seasonQuery$yearQuery" + null -> "$APIENDPOINT?api_key=${currentSession?.apiKey}&film_name=$queryText&languages=${query.lang}$epQuery$seasonQuery$yearQuery" + else -> "$APIENDPOINT?api_key=${currentSession?.apiKey}$idQuery&languages=${query.lang}$epQuery$seasonQuery$yearQuery" } val req = app.get( @@ -49,7 +108,7 @@ class SubDL : AbstractSubProvider { ) return req.parsedSafe()?.subtitles?.map { subtitle -> - val name = subtitle.releaseName + val lang = subtitle.lang.replaceFirstChar { it.uppercase() } val resEpNum = subtitle.episode ?: query.epNumber val resSeasonNum = subtitle.season ?: query.seasonNumber @@ -57,13 +116,14 @@ class SubDL : AbstractSubProvider { AbstractSubtitleEntities.SubtitleEntity( idPrefix = this.idPrefix, - name = name, + name = subtitle.releaseName, lang = lang, data = "${DOWNLOADENDPOINT}${subtitle.url}", type = type, source = this.name, epNumber = resEpNum, seasonNumber = resSeasonNum, + isHearingImpaired = subtitle.hearingImpaired ?: false, ) } } @@ -74,6 +134,88 @@ class SubDL : AbstractSubProvider { } } + private suspend fun initLogin(useremail: String, password: String): Boolean { + + val tokenResponse = app.post( + url = "$APIURL/login", + data = mapOf( + "email" to useremail, + "password" to password + ) + ).parsedSafe() + + if (tokenResponse?.token == null) return false + + val apiResponse = app.get( + url = "$APIURL/user/userApi", + headers = mapOf( + "Authorization" to "Bearer ${tokenResponse.token}" + ) + ).parsedSafe() + + if (apiResponse?.ok == false) return false + + setAuthKey( + SubtitleOAuthEntity( + userEmail = useremail, + pass = password, + name = tokenResponse.userData?.username ?: tokenResponse.userData?.name, + accessToken = tokenResponse.token, + apiKey = apiResponse?.apiKey + ) + ) + return true + } + + private fun getAuthKey(): SubtitleOAuthEntity? { + return getKey(accountId, SUBDL_SUBTITLES_USER_KEY) + } + + private fun setAuthKey(data: SubtitleOAuthEntity?) { + if (data == null) removeKey( + accountId, + SUBDL_SUBTITLES_USER_KEY + ) + currentSession = data + setKey(accountId, SUBDL_SUBTITLES_USER_KEY, data) + } + + data class SubtitleOAuthEntity( + @JsonProperty("userEmail") var userEmail: String, + @JsonProperty("pass") var pass: String, + @JsonProperty("name") var name: String? = null, + @JsonProperty("accessToken") var accessToken: String? = null, + @JsonProperty("apiKey") var apiKey: String? = null, + ) + + data class OAuthTokenResponse( + @JsonProperty("token") val token: String? = null, + @JsonProperty("userData") val userData: UserData? = null, + @JsonProperty("status") val status: Boolean? = null, + @JsonProperty("message") val message: String? = null, + ) + + data class UserData( + @JsonProperty("email") val email: String, + @JsonProperty("name") val name: String, + @JsonProperty("country") val country: String, + @JsonProperty("scStepCode") val scStepCode: String, + @JsonProperty("scVerified") val scVerified: Boolean, + @JsonProperty("username") val username: String? = null, + @JsonProperty("scUsername") val scUsername: String, + ) + + data class ApiKeyResponse( + @JsonProperty("ok") val ok: Boolean? = false, + @JsonProperty("api_key") val apiKey: String? = null, + @JsonProperty("usage") val usage: Usage? = null, + ) + + data class Usage( + @JsonProperty("total") val total: Long? = 0, + @JsonProperty("today") val today: Long? = 0, + ) + data class ApiResponse( @JsonProperty("status") val status: Boolean? = null, @JsonProperty("results") val results: List? = null, @@ -96,7 +238,10 @@ class SubDL : AbstractSubProvider { @JsonProperty("lang") val lang: String, @JsonProperty("author") val author: String? = null, @JsonProperty("url") val url: String? = null, + @JsonProperty("subtitlePage") val subtitlePage: String? = null, @JsonProperty("season") val season: Int? = null, @JsonProperty("episode") val episode: Int? = null, + @JsonProperty("language") val language: String? = null, + @JsonProperty("hi") val hearingImpaired: Boolean? = null, ) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index f0d402da..27233525 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -27,6 +27,7 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniList import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.openSubtitlesApi import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.subDlApi import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API @@ -324,6 +325,7 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome R.string.anilist_key to aniListApi, R.string.simkl_key to simklApi, R.string.opensubtitles_key to openSubtitlesApi, + R.string.subdl_key to subDlApi, ) for ((key, api) in syncApis) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 279a0cb5..1d23e503 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -26,6 +26,7 @@ import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_T import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_UNIXTIME_KEY import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_USER_KEY import com.lagradost.cloudstream3.syncproviders.providers.OpenSubtitlesApi.Companion.OPEN_SUBTITLES_USER_KEY +import com.lagradost.cloudstream3.syncproviders.providers.SubDlApi.Companion.SUBDL_SUBTITLES_USER_KEY import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main @@ -64,6 +65,7 @@ object BackupUtils { PLUGINS_KEY_LOCAL, OPEN_SUBTITLES_USER_KEY, + SUBDL_SUBTITLES_USER_KEY, DOWNLOAD_EPISODE_CACHE, diff --git a/app/src/main/res/drawable/subdl_logo_big.xml b/app/src/main/res/drawable/subdl_logo_big.xml new file mode 100644 index 00000000..a6cbb311 --- /dev/null +++ b/app/src/main/res/drawable/subdl_logo_big.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8108623..44171dc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -471,6 +471,7 @@ simkl_key mal_key opensubtitles_key + subdl_key nginx_key password123 Username diff --git a/app/src/main/res/xml/settings_account.xml b/app/src/main/res/xml/settings_account.xml index 5cde06c4..d1d18a0f 100644 --- a/app/src/main/res/xml/settings_account.xml +++ b/app/src/main/res/xml/settings_account.xml @@ -17,6 +17,10 @@ android:icon="@drawable/open_subtitles_icon" android:key="@string/opensubtitles_key" /> + + Date: Sat, 1 Jun 2024 19:16:42 +0300 Subject: [PATCH 806/888] feat(TV UI): Account switch focus fix (#1112) --- app/src/main/res/layout/account_managment.xml | 14 +++++---- app/src/main/res/layout/account_single.xml | 29 ++++++++++--------- app/src/main/res/layout/account_switch.xml | 22 +++++++------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/layout/account_managment.xml b/app/src/main/res/layout/account_managment.xml index 389a3406..e7afb382 100644 --- a/app/src/main/res/layout/account_managment.xml +++ b/app/src/main/res/layout/account_managment.xml @@ -62,14 +62,16 @@ + android:id="@+id/account_switch_account" + android:text="@string/switch_account" + style="@style/SettingsItem" + android:focusable="true"/> + android:id="@+id/account_logout" + android:text="@string/logout" + style="@style/SettingsItem" + android:focusable="true"> diff --git a/app/src/main/res/layout/account_single.xml b/app/src/main/res/layout/account_single.xml index cbfb9f18..c4f7fa39 100644 --- a/app/src/main/res/layout/account_single.xml +++ b/app/src/main/res/layout/account_single.xml @@ -1,10 +1,11 @@ + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:foreground="?android:attr/selectableItemBackgroundBorderless" + android:orientation="horizontal" + android:layout_height="wrap_content" + android:layout_width="match_parent" + android:focusable="true"> + android:id="@+id/account_profile_picture" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:ignore="ContentDescription" /> + android:foreground="@null" + android:id="@+id/account_name" + tools:text="Account 1" + style="@style/SettingsItem" /> diff --git a/app/src/main/res/layout/account_switch.xml b/app/src/main/res/layout/account_switch.xml index 659ad840..5153f0e3 100644 --- a/app/src/main/res/layout/account_switch.xml +++ b/app/src/main/res/layout/account_switch.xml @@ -7,18 +7,20 @@ android:layout_height="match_parent"> + android:id="@+id/account_list" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + android:background="?attr/primaryBlackBackground" + tools:listitem="@layout/account_single" + android:layout_width="match_parent" + android:layout_rowWeight="1" + android:layout_height="wrap_content" + android:focusable="true"/> + android:id="@+id/account_add" + android:text="@string/add_account" + style="@style/SettingsItem" + android:focusable="true"> From b3e3dadc72e61cd9925f721749578b074026f745 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 1 Jun 2024 19:17:41 +0300 Subject: [PATCH 807/888] Remove IndexSubtitles provider (#1111) --- .../syncproviders/AccountManager.kt | 2 - .../providers/IndexSubtitleApi.kt | 265 ------------------ 2 files changed, 267 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index 1fd7900f..a14f8438 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -12,7 +12,6 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val aniListApi = AniListApi(0) val openSubtitlesApi = OpenSubtitlesApi(0) val simklApi = SimklApi(0) - val indexSubtitlesApi = IndexSubtitleApi() val addic7ed = Addic7ed() val subDlApi = SubDlApi(0) val localListApi = LocalList() @@ -44,7 +43,6 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val subtitleProviders get() = listOf( openSubtitlesApi, - indexSubtitlesApi, // they got anti scraping measures in place :( addic7ed, subDlApi ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt deleted file mode 100644 index 5ca3f3d5..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/IndexSubtitleApi.kt +++ /dev/null @@ -1,265 +0,0 @@ -package com.lagradost.cloudstream3.syncproviders.providers - -import android.util.Log -import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.imdbUrlToIdNullable -import com.lagradost.cloudstream3.subtitles.AbstractSubApi -import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities -import com.lagradost.cloudstream3.utils.SubtitleHelper - -class IndexSubtitleApi : AbstractSubApi { - override val name = "IndexSubtitle" - override val idPrefix = "indexsubtitle" - override val requiresLogin = false - override val icon: Nothing? = null - override val createAccountUrl: Nothing? = null - - override fun loginInfo(): Nothing? = null - - override fun logOut() {} - - - companion object { - const val host = "https://indexsubtitle.com" - const val TAG = "INDEXSUBS" - - fun getOrdinal(num: Int?): String? { - return when (num) { - 1 -> "First" - 2 -> "Second" - 3 -> "Third" - 4 -> "Fourth" - 5 -> "Fifth" - 6 -> "Sixth" - 7 -> "Seventh" - 8 -> "Eighth" - 9 -> "Ninth" - 10 -> "Tenth" - 11 -> "Eleventh" - 12 -> "Twelfth" - 13 -> "Thirteenth" - 14 -> "Fourteenth" - 15 -> "Fifteenth" - 16 -> "Sixteenth" - 17 -> "Seventeenth" - 18 -> "Eighteenth" - 19 -> "Nineteenth" - 20 -> "Twentieth" - 21 -> "Twenty-First" - 22 -> "Twenty-Second" - 23 -> "Twenty-Third" - 24 -> "Twenty-Fourth" - 25 -> "Twenty-Fifth" - 26 -> "Twenty-Sixth" - 27 -> "Twenty-Seventh" - 28 -> "Twenty-Eighth" - 29 -> "Twenty-Ninth" - 30 -> "Thirtieth" - 31 -> "Thirty-First" - 32 -> "Thirty-Second" - 33 -> "Thirty-Third" - 34 -> "Thirty-Fourth" - 35 -> "Thirty-Fifth" - else -> null - } - } - } - - private fun fixUrl(url: 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 host + url - } - return "$host/$url" - } - } - - private fun isRightEps(text: String, seasonNum: Int?, epNum: Int?): Boolean { - val FILTER_EPS_REGEX = - Regex("(?i)((Chapter\\s?0?${epNum})|((Season)?\\s?0?${seasonNum}?\\s?(Episode)\\s?0?${epNum}[^0-9]))|(?i)((S?0?${seasonNum}?E0?${epNum}[^0-9])|(0?${seasonNum}[a-z]0?${epNum}[^0-9]))") - return text.contains(FILTER_EPS_REGEX) - } - - private fun haveEps(text: String): Boolean { - val HAVE_EPS_REGEX = - Regex("(?i)((Chapter\\s?0?\\d)|((Season)?\\s?0?\\d?\\s?(Episode)\\s?0?\\d))|(?i)((S?0?\\d?E0?\\d)|(0?\\d[a-z]0?\\d))") - return text.contains(HAVE_EPS_REGEX) - } - - override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List { - val imdbId = query.imdbId?.replace("tt", "")?.toLong() ?: 0 - val lang = query.lang - val queryLang = SubtitleHelper.fromTwoLettersToLanguage(lang.toString()) - val queryText = query.query - val epNum = query.epNumber ?: 0 - val seasonNum = query.seasonNumber ?: 0 - val yearNum = query.year ?: 0 - - val urlItems = ArrayList() - - fun cleanResources( - results: MutableList, - name: String, - link: String - ) { - results.add( - AbstractSubtitleEntities.SubtitleEntity( - idPrefix = idPrefix, - name = name, - lang = queryLang.toString(), - data = link, - source = this.name, - type = if (seasonNum > 0) TvType.TvSeries else TvType.Movie, - epNumber = epNum, - seasonNumber = seasonNum, - year = yearNum, - ) - ) - } - - val document = app.get("$host/?search=$queryText").document - - document.select("div.my-3.p-3 div.media").map { block -> - if (seasonNum > 0) { - val name = block.select("strong.text-primary, strong.text-info").text().trim() - val season = getOrdinal(seasonNum) - if ((block.selectFirst("a")?.attr("href") - ?.contains( - "$season", - ignoreCase = true - )!! || name.contains( - "$season", - ignoreCase = true - )) && name.contains(queryText, ignoreCase = true) - ) { - block.select("div.media").mapNotNull { - urlItems.add( - fixUrl( - it.selectFirst("a")!!.attr("href") - ) - ) - } - } - } else { - if (block.selectFirst("strong")!!.text().trim() - .matches(Regex("(?i)^$queryText\$")) - ) { - if (block.select("span[title=Release]").isNullOrEmpty()) { - block.select("div.media").mapNotNull { - val urlItem = fixUrl( - it.selectFirst("a")!!.attr("href") - ) - val itemDoc = app.get(urlItem).document - val id = imdbUrlToIdNullable( - itemDoc.selectFirst("div.d-flex span.badge.badge-primary")?.parent() - ?.attr("href") - )?.toLongOrNull() - val year = itemDoc.selectFirst("div.d-flex span.badge.badge-success") - ?.ownText() - ?.trim().toString() - Log.i(TAG, "id => $id \nyear => $year||$yearNum") - if (imdbId > 0) { - if (id == imdbId) { - urlItems.add(urlItem) - } - } else { - if (year.contains("$yearNum")) { - urlItems.add(urlItem) - } - } - } - } else { - if (block.select("span[title=Release]").text().trim() - .contains("$yearNum") - ) { - block.select("div.media").mapNotNull { - urlItems.add( - fixUrl( - it.selectFirst("a")!!.attr("href") - ) - ) - } - } - } - } - } - } - Log.i(TAG, "urlItems => $urlItems") - val results = mutableListOf() - - urlItems.forEach { url -> - val request = app.get(url) - if (request.isSuccessful) { - request.document.select("div.my-3.p-3 div.media").map { block -> - if (block.select("span.d-block span[data-original-title=Language]").text() - .trim() - .contains("$queryLang") - ) { - var name = block.select("strong.text-primary, strong.text-info").text().trim() - val link = fixUrl(block.selectFirst("a")!!.attr("href")) - if (seasonNum > 0) { - when { - isRightEps(name, seasonNum, epNum) -> { - cleanResources(results, name, link) - } - !(haveEps(name)) -> { - name = "$name (S${seasonNum}:E${epNum})" - cleanResources(results, name, link) - } - } - } else { - cleanResources(results, name, link) - } - } - } - } - } - return results - } - - override suspend fun load(data: AbstractSubtitleEntities.SubtitleEntity): String? { - val seasonNum = data.seasonNumber - val epNum = data.epNumber - - val req = app.get(data.data) - - if (req.isSuccessful) { - val document = req.document - val link = if (document.select("div.my-3.p-3 div.media").size == 1) { - fixUrl( - document.selectFirst("div.my-3.p-3 div.media a")!!.attr("href") - ) - } else { - document.select("div.my-3.p-3 div.media").firstNotNullOf { block -> - val name = - block.selectFirst("strong.d-block")?.text()?.trim().toString() - if (seasonNum!! > 0) { - if (isRightEps(name, seasonNum, epNum)) { - fixUrl(block.selectFirst("a")!!.attr("href")) - } else { - null - } - } else { - fixUrl(block.selectFirst("a")!!.attr("href")) - } - } - } - return link - } - - return null - - } - -} \ No newline at end of file From 9bebfe459005021970e25bd5ca38816fa5a66ba4 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Wed, 5 Jun 2024 23:07:54 +0200 Subject: [PATCH 808/888] feature(ui): hide NSFW plugins (#1117) Hide NSFW plugins if Settings / Providers NSFW is disabled --- .../cloudstream3/ui/settings/extensions/PluginsViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt index 151c8d57..2b026e0d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt @@ -9,6 +9,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.MainAPI.Companion.settingsForProvider import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.amap @@ -181,8 +182,11 @@ class PluginsViewModel : ViewModel() { } private suspend fun updatePluginListPrivate(context: Context, repositoryUrl: String) { + val isAdult = settingsForProvider.enableAdult val plugins = getPlugins(repositoryUrl) - val list = plugins.map { plugin -> + val list = plugins.filter { + return@filter !(it.second.tvTypes?.contains("NSFW") == true && !isAdult) + }.map { plugin -> PluginViewData(plugin, isDownloaded(context, plugin.second.internalName, plugin.first)) } From 0391a3b89cb3d4266afc1e1a710366b9266f1241 Mon Sep 17 00:00:00 2001 From: int3debug <164035730+int3debug@users.noreply.github.com> Date: Wed, 5 Jun 2024 23:09:05 +0200 Subject: [PATCH 809/888] feature(ui): added wikipedia to links (#1119) --- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/settings_general.xml | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 44171dc5..deee5ad2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -774,4 +774,5 @@ Audio Book Media Reset + CloudStream Wiki \ No newline at end of file diff --git a/app/src/main/res/xml/settings_general.xml b/app/src/main/res/xml/settings_general.xml index cdda6d85..853bbda1 100644 --- a/app/src/main/res/xml/settings_general.xml +++ b/app/src/main/res/xml/settings_general.xml @@ -86,6 +86,14 @@ android:action="android.intent.action.VIEW" android:data="https://discord.gg/5Hus6fM" /> + + + \ No newline at end of file From 358a20eb7786daa661ef60d20caca67d8eec105f Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Thu, 6 Jun 2024 02:48:33 +0530 Subject: [PATCH 810/888] chore: refactor gradlelocalproperties and update gradle plugin (#957) --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 61a0634f..21f22dd1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,7 +69,7 @@ android { resValue("bool", "is_prerelease", "false") // Reads local.properties - val localProperties = gradleLocalProperties(rootDir) + val localProperties = gradleLocalProperties(rootDir, providers) buildConfigField( "long", diff --git a/build.gradle.kts b/build.gradle.kts index 34f141b4..ba87b6f4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath("com.android.tools.build:gradle:8.2.2") + classpath("com.android.tools.build:gradle:8.4.0") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") // Universal build config diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fc2d0f86..2968a1b2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Apr 30 17:11:15 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 7eec0eff02b1e7f8bd18a948515adae5fdc13f9e Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Wed, 5 Jun 2024 23:41:06 +0200 Subject: [PATCH 811/888] Revert "chore: refactor gradlelocalproperties and update gradle plugin (#957)" (#1120) This reverts commit 358a20eb7786daa661ef60d20caca67d8eec105f. --- app/build.gradle.kts | 2 +- build.gradle.kts | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 21f22dd1..61a0634f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,7 +69,7 @@ android { resValue("bool", "is_prerelease", "false") // Reads local.properties - val localProperties = gradleLocalProperties(rootDir, providers) + val localProperties = gradleLocalProperties(rootDir) buildConfigField( "long", diff --git a/build.gradle.kts b/build.gradle.kts index ba87b6f4..34f141b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath("com.android.tools.build:gradle:8.4.0") + classpath("com.android.tools.build:gradle:8.2.2") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23") classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.9.10") // Universal build config diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2968a1b2..fc2d0f86 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Apr 30 17:11:15 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From f775c1725d30d6f105dc114c8e6ecbfc6d2d56d9 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 8 Jun 2024 22:07:33 +0300 Subject: [PATCH 812/888] feat(TV UI): Subtitles Filter button focus fix (#1125) --- app/src/main/res/layout/dialog_online_subtitles.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/dialog_online_subtitles.xml b/app/src/main/res/layout/dialog_online_subtitles.xml index d480bd34..e0eac5e0 100644 --- a/app/src/main/res/layout/dialog_online_subtitles.xml +++ b/app/src/main/res/layout/dialog_online_subtitles.xml @@ -107,6 +107,7 @@ android:layout_margin="10dp" android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/change_providers_img_des" + android:focusable="true" android:nextFocusLeft="@id/year_btt" android:nextFocusRight="@id/main_search" android:nextFocusUp="@id/nav_rail_view" From 607a4510b6d941293fd29115818d79deb9b03681 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sat, 8 Jun 2024 22:08:35 +0300 Subject: [PATCH 813/888] feat(Extensions): Trakt season names remove (#1124) --- .../cloudstream3/metaproviders/TraktProvider.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 07c9f316..8d149888 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -166,18 +166,10 @@ open class TraktProvider : MainAPI() { val resSeasons = getApi("$traktApiUrl/shows/${mediaDetails?.ids?.trakt.toString()}/seasons?extended=cloud9,full,episodes") val episodes = mutableListOf() val seasons = parseJson>(resSeasons) - val seasonsNames = mutableListOf() var nextAir: NextAiring? = null seasons.forEach { season -> - seasonsNames.add( - SeasonData( - season.number!!, - season.title - ) - ) - season.episodes?.map { episode -> val linkData = LinkData( @@ -250,7 +242,6 @@ open class TraktProvider : MainAPI() { this.comingSoon = isUpcoming(mediaDetails.released) //posterHeaders this.nextAiring = nextAir - this.seasonNames = seasonsNames this.backgroundPosterUrl = getOriginalWidthImageUrl(backDropUrl) this.contentRating = mediaDetails.certification addTrailer(mediaDetails.trailer) From 3345326cb2987b98b87db0d93e291aa0d0b27b7e Mon Sep 17 00:00:00 2001 From: RowdyRushya <66415100+rushi-chavan@users.noreply.github.com> Date: Sat, 8 Jun 2024 12:19:29 -0700 Subject: [PATCH 814/888] Extractor: VidSrcTo: better handling of runtime errors (#1121) --- .../cloudstream3/extractors/VidSrcTo.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt index b9065688..2655670d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import java.net.URLDecoder @@ -26,12 +27,16 @@ class VidSrcTo : ExtractorApi() { val res = app.get("$mainUrl/ajax/embed/episode/$mediaId/sources").parsedSafe() ?: return if (res.status != 200) return res.result?.amap { source -> - val embedRes = app.get("$mainUrl/ajax/embed/source/${source.id}").parsedSafe() ?: return@amap - val finalUrl = DecryptUrl(embedRes.result.encUrl) - if(finalUrl.equals(embedRes.result.encUrl)) return@amap - when (source.title) { - "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) - "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) + try { + val embedRes = app.get("$mainUrl/ajax/embed/source/${source.id}").parsedSafe() ?: return@amap + val finalUrl = DecryptUrl(embedRes.result.encUrl) + if(finalUrl.equals(embedRes.result.encUrl)) return@amap + when (source.title) { + "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) + "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) + } + } catch (e: Exception) { + logError(e) } } } From 4c95610238d671cd8e11c3e85786a53e0db003c7 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Sun, 9 Jun 2024 17:38:08 +0300 Subject: [PATCH 815/888] feat(UI): Hide Platform's not related settings (#1128) --- .../ui/settings/SettingsAccount.kt | 6 ++--- .../ui/settings/SettingsFragment.kt | 25 +++++++++++++++++++ .../ui/settings/SettingsGeneral.kt | 7 +++--- .../ui/settings/SettingsPlayer.kt | 19 +++++++++++++- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/settings_player.xml | 6 +++-- 6 files changed, 55 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 27233525..3ec47648 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -36,6 +36,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar @@ -298,10 +299,7 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome hideKeyboard() setPreferencesFromResource(R.xml.settings_account, rootKey) - // hide preference on tvs and emulators - getPref(R.string.biometric_key)?.isEnabled = isLayout(PHONE) - - getPref(R.string.biometric_key)?.setOnPreferenceClickListener { + getPref(R.string.biometric_key)?.hideOn(TV or EMULATOR)?.setOnPreferenceClickListener { val ctx = context ?: return@setOnPreferenceClickListener false if (deviceHasPasswordPinLock(ctx)) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 8ac17928..6ba93c0f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -26,6 +26,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.clipboardHelper @@ -53,6 +54,30 @@ class SettingsFragment : Fragment() { } } + /** + * Hide many Preferences on selected layouts. + **/ + fun PreferenceFragmentCompat?.hidePrefs(ids: List, layoutFlags: Int) { + if (this == null) return + + try { + ids.forEach { + getPref(it)?.isVisible = !isLayout(layoutFlags) + } + } catch (e: Exception) { + logError(e) + } + } + + /** + * Hide the Preference on selected layouts. + **/ + fun Preference?.hideOn(layoutFlags: Int): Preference? { + if (this == null) return null + this.isVisible = !isLayout(layoutFlags) + return this + } + /** * On TV you cannot properly scroll to the bottom of settings, this fixes that. * */ 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 ff891c43..22a7e098 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 @@ -27,10 +27,13 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.ui.EasterEggMonke +import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE +import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.beneneCount import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar @@ -208,9 +211,7 @@ class SettingsGeneral : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } - // disable preference on tvs and emulators - getPref(R.string.battery_optimisation_key)?.isEnabled = isLayout(PHONE) - getPref(R.string.battery_optimisation_key)?.setOnPreferenceClickListener { + getPref(R.string.battery_optimisation_key)?.hideOn(TV or EMULATOR)?.setOnPreferenceClickListener { val ctx = context ?: return@setOnPreferenceClickListener false if (isAppRestricted(ctx)) { 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 3d0bcb1f..20279cd1 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 @@ -7,8 +7,14 @@ import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE +import com.lagradost.cloudstream3.ui.settings.Globals.TV +import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn +import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hidePrefs import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar @@ -31,6 +37,18 @@ class SettingsPlayer : PreferenceFragmentCompat() { setPreferencesFromResource(R.xml.settings_player, rootKey) val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) + //Hide specific prefs on TV/EMULATOR + hidePrefs( + listOf( + R.string.pref_category_gestures_key, + R.string.rotate_video_key, + R.string.auto_rotate_video_key + ), + TV or EMULATOR + ) + + getPref(R.string.pref_category_android_tv_key)?.hideOn(PHONE) + getPref(R.string.video_buffer_length_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.video_buffer_length_names) val prefValues = resources.getIntArray(R.array.video_buffer_length_values) @@ -227,6 +245,5 @@ class SettingsPlayer : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } } - } } \ 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 deee5ad2..fad44ad4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -438,7 +438,9 @@ Actions Cache Android TV + pref_category_android_tv_key Gestures + pref_category_gestures_key Player features Subtitles Layout diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml index 82505511..5d5b11d0 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -101,7 +101,8 @@ + android:title="@string/pref_category_gestures" + app:key="@string/pref_category_gestures_key"> + android:title="@string/pref_category_android_tv" + android:key="@string/pref_category_android_tv_key" > Date: Sat, 15 Jun 2024 21:47:30 +0000 Subject: [PATCH 816/888] goodstream (#1133) --- .../extractors/GoodstreamExtractor.kt | 37 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 2 + 2 files changed, 39 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt new file mode 100644 index 00000000..9f6ba611 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt @@ -0,0 +1,37 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +class GoodstreamExtractor : ExtractorApi() { + override var name = "Goodstream" + override val mainUrl = "https://goodstream.uno" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + app.get(url).document.select("script").map { script -> + if (script.data().contains(Regex("file|player"))) { + val urlRegex = Regex("file: \"(https:\\/\\/[a-z0-9.\\/-_?=&]+)\",") + urlRegex.find(script.data())?.groupValues?.get(1).let { link -> + callback.invoke( + ExtractorLink( + name, + name, + link!!, + mainUrl, + Qualities.Unknown.value, + ) + ) + } + } + } + } +} \ 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 c6cad804..5d696d33 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -67,6 +67,7 @@ import com.lagradost.cloudstream3.extractors.Gdriveplayerorg import com.lagradost.cloudstream3.extractors.Gdriveplayerus import com.lagradost.cloudstream3.extractors.Gofile import com.lagradost.cloudstream3.extractors.GuardareStream +import com.lagradost.cloudstream3.extractors.GoodstreamExtractor import com.lagradost.cloudstream3.extractors.Guccihide import com.lagradost.cloudstream3.extractors.Hxfile import com.lagradost.cloudstream3.extractors.JWPlayer @@ -879,6 +880,7 @@ val extractorApis: MutableList = arrayListOf( Gdriveplayerorg(), Gdriveplayerus(), Gdriveplayerco(), + GoodstreamExtractor(), Gdriveplayer(), DatabaseGdrive(), DatabaseGdrive2(), From 30d223cfe3c65b8f104245d58056087e7913adbd Mon Sep 17 00:00:00 2001 From: KingLucius Date: Mon, 17 Jun 2024 04:01:14 +0300 Subject: [PATCH 817/888] feat(UI): Reorganize Settings (#1137) - Accounts Section & Remove "account" from title. - Security Section for Biometric that is hidden on TV. - Move "send logs" to "Action" section. --- .../ui/settings/SettingsAccount.kt | 6 +- app/src/main/res/values/strings.xml | 3 + app/src/main/res/xml/settings_account.xml | 66 +++++++++++-------- app/src/main/res/xml/settings_updates.xml | 14 ++-- 4 files changed, 53 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 3ec47648..a8358d0d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -299,6 +299,9 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome hideKeyboard() setPreferencesFromResource(R.xml.settings_account, rootKey) + //Hides the security category on TV as it's only Biometric for now + getPref(R.string.pref_category_security_key)?.hideOn(TV or EMULATOR) + getPref(R.string.biometric_key)?.hideOn(TV or EMULATOR)?.setOnPreferenceClickListener { val ctx = context ?: return@setOnPreferenceClickListener false @@ -328,8 +331,7 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome for ((key, api) in syncApis) { getPref(key)?.apply { - title = - getString(R.string.login_format).format(api.name, getString(R.string.account)) + title = api.name setOnPreferenceClickListener { val info = api.loginInfo() if (info != null) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fad44ad4..d9317ccd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -441,6 +441,9 @@ pref_category_android_tv_key Gestures pref_category_gestures_key + Security + pref_category_security_key + Accounts Player features Subtitles Layout diff --git a/app/src/main/res/xml/settings_account.xml b/app/src/main/res/xml/settings_account.xml index d1d18a0f..d165cd87 100644 --- a/app/src/main/res/xml/settings_account.xml +++ b/app/src/main/res/xml/settings_account.xml @@ -1,37 +1,49 @@ - + - + - + - + - + - + - + - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/settings_updates.xml b/app/src/main/res/xml/settings_updates.xml index e3b36648..102f8ee4 100644 --- a/app/src/main/res/xml/settings_updates.xml +++ b/app/src/main/res/xml/settings_updates.xml @@ -1,13 +1,6 @@ - @@ -80,5 +73,12 @@ android:icon="@drawable/ic_baseline_construction_24" android:title="@string/redo_setup_process" app:key="@string/redo_setup_key" /> + From 7a0cd07dc19f3d1523292ef0569338b326cb1784 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Tue, 18 Jun 2024 06:02:32 +0300 Subject: [PATCH 818/888] feat(TV UI): Press Right to focus save on Logcat (#1136) --- app/src/main/res/layout/logcat.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/logcat.xml b/app/src/main/res/layout/logcat.xml index caa8c5cb..5cbb3f53 100644 --- a/app/src/main/res/layout/logcat.xml +++ b/app/src/main/res/layout/logcat.xml @@ -6,20 +6,20 @@ android:layout_height="match_parent"> + android:layout_marginBottom="60dp" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:nextFocusRight="@id/save_btt"> + android:id="@+id/text1" + android:padding="15dp" + android:textSize="15sp" + android:textColor="?attr/textColor" + android:layout_width="match_parent" + android:layout_rowWeight="1" + tools:text="Test" + android:layout_height="wrap_content"/> Date: Wed, 19 Jun 2024 00:24:35 +0300 Subject: [PATCH 819/888] feat(Extensions): Consider time zone in Trakt durations (#1140) --- .../metaproviders/TraktProvider.kt | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 8d149888..736e05f2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -1,18 +1,39 @@ package com.lagradost.cloudstream3.metaproviders import android.net.Uri -import com.lagradost.cloudstream3.* import com.fasterxml.jackson.annotation.JsonAlias import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder.unixTimeMS +import com.lagradost.cloudstream3.Actor +import com.lagradost.cloudstream3.ActorData +import com.lagradost.cloudstream3.Episode +import com.lagradost.cloudstream3.HomePageResponse +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.LoadResponse.Companion.addImdbId import com.lagradost.cloudstream3.LoadResponse.Companion.addTMDbId import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer +import com.lagradost.cloudstream3.MainAPI +import com.lagradost.cloudstream3.MainPageRequest +import com.lagradost.cloudstream3.NextAiring +import com.lagradost.cloudstream3.ProviderType +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.ShowStatus +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.addDate +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Decode +import com.lagradost.cloudstream3.mainPageOf import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.newHomePageResponse +import com.lagradost.cloudstream3.newMovieLoadResponse +import com.lagradost.cloudstream3.newMovieSearchResponse +import com.lagradost.cloudstream3.newTvSeriesLoadResponse +import com.lagradost.cloudstream3.newTvSeriesSearchResponse import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.toJson -import java.util.Locale import java.text.SimpleDateFormat +import java.util.Locale import kotlin.math.roundToInt open class TraktProvider : MainAPI() { @@ -25,7 +46,8 @@ open class TraktProvider : MainAPI() { TvType.Anime, ) - private val traktClientId = base64Decode("N2YzODYwYWQzNGI4ZTZmOTdmN2I5MTA0ZWQzMzEwOGI0MmQ3MTdlMTM0MmM2NGMxMTg5NGE1MjUyYTQ3NjE3Zg==") + private val traktClientId = + base64Decode("N2YzODYwYWQzNGI4ZTZmOTdmN2I5MTA0ZWQzMzEwOGI0MmQ3MTdlMTM0MmM2NGMxMTg5NGE1MjUyYTQ3NjE3Zg==") private val traktApiUrl = base64Decode("aHR0cHM6Ly9hcGl6LnRyYWt0LnR2") override val mainPage = mainPageOf( @@ -77,7 +99,8 @@ open class TraktProvider : MainAPI() { } override suspend fun search(query: String): List? { - val apiResponse = getApi("$traktApiUrl/search/movie,show?extended=cloud9,full&limit=20&page=1&query=$query") + val apiResponse = + getApi("$traktApiUrl/search/movie,show?extended=cloud9,full&limit=20&page=1&query=$query") val results = parseJson>(apiResponse).map { element -> element.toSearchResponse() @@ -85,6 +108,7 @@ open class TraktProvider : MainAPI() { return results } + override suspend fun load(url: String): LoadResponse { val data = parseJson(url) @@ -94,7 +118,8 @@ open class TraktProvider : MainAPI() { val posterUrl = mediaDetails?.images?.poster?.firstOrNull() val backDropUrl = mediaDetails?.images?.fanart?.firstOrNull() - val resActor = getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/people?extended=cloud9,full") + val resActor = + getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/people?extended=cloud9,full") val actors = parseJson(resActor).cast?.map { ActorData( @@ -106,12 +131,15 @@ open class TraktProvider : MainAPI() { ) } - val resRelated = getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/related?extended=cloud9,full&limit=20") + val resRelated = + getApi("$traktApiUrl/$moviesOrShows/${mediaDetails?.ids?.trakt}/related?extended=cloud9,full&limit=20") val relatedMedia = parseJson>(resRelated).map { it.toSearchResponse() } - val isCartoon = mediaDetails?.genres?.contains("animation") == true || mediaDetails?.genres?.contains("anime") == true - val isAnime = isCartoon && (mediaDetails?.language == "zh" || mediaDetails?.language == "ja") + val isCartoon = + mediaDetails?.genres?.contains("animation") == true || mediaDetails?.genres?.contains("anime") == true + val isAnime = + isCartoon && (mediaDetails?.language == "zh" || mediaDetails?.language == "ja") val isAsian = !isAnime && (mediaDetails?.language == "zh" || mediaDetails?.language == "ko") val isBollywood = mediaDetails?.country == "in" @@ -163,10 +191,11 @@ open class TraktProvider : MainAPI() { } } else { - val resSeasons = getApi("$traktApiUrl/shows/${mediaDetails?.ids?.trakt.toString()}/seasons?extended=cloud9,full,episodes") + val resSeasons = + getApi("$traktApiUrl/shows/${mediaDetails?.ids?.trakt.toString()}/seasons?extended=cloud9,full,episodes") val episodes = mutableListOf() val seasons = parseJson>(resSeasons) - var nextAir: NextAiring? = null + var nextAir: NextAiring? = null seasons.forEach { season -> @@ -208,7 +237,7 @@ open class TraktProvider : MainAPI() { rating = episode.rating?.times(10)?.roundToInt(), description = episode.overview, ).apply { - this.addDate(episode.firstAired) + this.addDate(episode.firstAired, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") if (nextAir == null && this.date != null && this.date!! > unixTimeMS) { nextAir = NextAiring( episode = this.episode!!, @@ -251,7 +280,7 @@ open class TraktProvider : MainAPI() { } } - private suspend fun getApi(url: String) : String { + private suspend fun getApi(url: String): String { return app.get( url = url, headers = mapOf( @@ -286,14 +315,14 @@ open class TraktProvider : MainAPI() { return "https://$url" } - private fun getWidthImageUrl(path: String?, width: String) : String? { + private fun getWidthImageUrl(path: String?, width: String): String? { if (path == null) return null if (!path.contains("image.tmdb.org")) return fixPath(path) val fileName = Uri.parse(path).lastPathSegment ?: return null return "https://image.tmdb.org/t/p/${width}/${fileName}" } - private fun getOriginalWidthImageUrl(path: String?) : String? { + private fun getOriginalWidthImageUrl(path: String?): String? { if (path == null) return null if (!path.contains("image.tmdb.org")) return fixPath(path) return getWidthImageUrl(path, "original") From b702b7b1ecfc254dd9b3f8a408a8092452c0cf7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Misael=20Jim=C3=A9nez?= Date: Wed, 19 Jun 2024 07:40:23 -0600 Subject: [PATCH 820/888] Fix DoodExtractor. (#1134) Fix StreamWishExtractor --- .../cloudstream3/extractors/DoodExtractor.kt | 19 +++++- .../extractors/StreamWishExtractor.kt | 60 +++++++++++++------ .../cloudstream3/utils/ExtractorApi.kt | 15 +++++ 3 files changed, 72 insertions(+), 22 deletions(-) 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 8dcfb859..370dcaca 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt @@ -7,6 +7,18 @@ import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.getQualityFromName import kotlinx.coroutines.delay +class D0000d : DoodLaExtractor() { + override var mainUrl = "https://d0000d.com" +} + +class D000dCom : DoodLaExtractor() { + override var mainUrl = "https://d000d.com" +} + +class DoodstreamCom : DoodLaExtractor() { + override var mainUrl = "https://doodstream.com" +} + class Dooood : DoodLaExtractor() { override var mainUrl = "https://dooood.com" } @@ -56,9 +68,10 @@ open class DoodLaExtractor : ExtractorApi() { } override suspend fun getUrl(url: String, referer: String?): List? { - val response0 = app.get(url).text // html of DoodStream page to look for /pass_md5/... - val md5 =mainUrl+(Regex("/pass_md5/[^']*").find(response0)?.value ?: return null) // get https://dood.ws/pass_md5/... - val trueUrl = app.get(md5, referer = url).text + "zUEJeL3mUN?token=" + md5.substringAfterLast("/") //direct link to extract (zUEJeL3mUN is random) + val newUrl= url.replace(mainUrl, "https://d0000d.com") + val response0 = app.get(newUrl).text // html of DoodStream page to look for /pass_md5/... + val md5 ="https://d0000d.com"+(Regex("/pass_md5/[^']*").find(response0)?.value ?: return null) // get https://dood.ws/pass_md5/... + val trueUrl = app.get(md5, referer = newUrl).text + "zUEJeL3mUN?token=" + md5.substringAfterLast("/") //direct link to extract (zUEJeL3mUN is random) val quality = Regex("\\d{3,4}p").find(response0.substringAfter("").substringBefore(""))?.groupValues?.get(0) return listOf( ExtractorLink( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt index 77d98e49..551d1ef6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt @@ -1,34 +1,56 @@ package com.lagradost.cloudstream3.extractors +import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.network.WebViewResolver import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.getQualityFromName + +class WishembedPro : StreamWishExtractor() { + override val mainUrl = "https://wishembed.pro" +} +class CdnwishCom : StreamWishExtractor() { + override val mainUrl = "https://cdnwish.com" +} +class FlaswishCom : StreamWishExtractor() { + override val mainUrl = "https://flaswish.com" +} +class SfastwishCom : StreamWishExtractor() { + override val mainUrl = "https://sfastwish.com" +} open class StreamWishExtractor : ExtractorApi() { override var name = "StreamWish" - override var mainUrl = "https://streamwish.to" + override val mainUrl = "https://streamwish.to" override val requiresReferer = false - override suspend fun getUrl(url: String, referer: String?): List? { - val response = app.get( - url, referer = referer ?: "$mainUrl/", interceptor = WebViewResolver( - Regex("""master\.m3u8""") - ) - ) - val sources = mutableListOf() - if (response.url.contains("m3u8")) - sources.add( + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val doc = app.get( + url, + referer = referer, + allowRedirects = false + ).document + var script = doc.select("script").find { + it.html().contains("jwplayer(\"vplayer\").setup(") + } + var scriptContent = script?.html() + val extractedurl = Regex("""sources: \[\{file:"(.*?)"""").find(scriptContent ?: "")?.groupValues?.get(1) + if (!extractedurl.isNullOrBlank()) { + callback( ExtractorLink( - source = name, - name = name, - url = response.url, - referer = referer ?: "$mainUrl/", - quality = Qualities.Unknown.value, - isM3u8 = true + this.name, + this.name, + extractedurl, + referer ?: "$mainUrl/", + getQualityFromName(""), + extractedurl.contains("m3u8") ) ) - return sources + } } } \ 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 5d696d33..1302453a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -17,6 +17,7 @@ import com.lagradost.cloudstream3.extractors.BullStream import com.lagradost.cloudstream3.extractors.ByteShare import com.lagradost.cloudstream3.extractors.Cda import com.lagradost.cloudstream3.extractors.Cdnplayer +import com.lagradost.cloudstream3.extractors.CdnwishCom import com.lagradost.cloudstream3.extractors.Chillx import com.lagradost.cloudstream3.extractors.CineGrabber import com.lagradost.cloudstream3.extractors.Cinestart @@ -106,6 +107,9 @@ import com.lagradost.cloudstream3.extractors.Odnoklassniki import com.lagradost.cloudstream3.extractors.TauVideo import com.lagradost.cloudstream3.extractors.SibNet import com.lagradost.cloudstream3.extractors.ContentX +import com.lagradost.cloudstream3.extractors.D0000d +import com.lagradost.cloudstream3.extractors.D000dCom +import com.lagradost.cloudstream3.extractors.DoodstreamCom import com.lagradost.cloudstream3.extractors.EmturbovidExtractor import com.lagradost.cloudstream3.extractors.Hotlinger import com.lagradost.cloudstream3.extractors.FourCX @@ -227,7 +231,10 @@ import com.lagradost.cloudstream3.extractors.Zplayer import com.lagradost.cloudstream3.extractors.ZplayerV2 import com.lagradost.cloudstream3.extractors.Ztreamhub import com.lagradost.cloudstream3.extractors.EPlayExtractor +import com.lagradost.cloudstream3.extractors.FlaswishCom +import com.lagradost.cloudstream3.extractors.SfastwishCom import com.lagradost.cloudstream3.extractors.Vtbe +import com.lagradost.cloudstream3.extractors.WishembedPro import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import kotlinx.coroutines.delay @@ -777,6 +784,9 @@ val extractorApis: MutableList = arrayListOf( DoodSoExtractor(), DoodLaExtractor(), Dooood(), + D0000d(), + D000dCom(), + DoodstreamCom(), DoodWsExtractor(), DoodShExtractor(), DoodWatchExtractor(), @@ -854,6 +864,7 @@ val extractorApis: MutableList = arrayListOf( Guccihide(), FileMoon(), FileMoonSx(), + Vido(), Linkbox(), Acefile(), @@ -909,6 +920,10 @@ val extractorApis: MutableList = arrayListOf( Megacloud(), VidhideExtractor(), StreamWishExtractor(), + WishembedPro(), + CdnwishCom(), + FlaswishCom(), + SfastwishCom(), EmturbovidExtractor(), Vtbe(), EPlayExtractor(), From afa178a63a7173316cc04fbbd3fb989f77a06515 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Wed, 19 Jun 2024 17:06:08 +0300 Subject: [PATCH 821/888] feat(TV UI): Accounts PIN login support (#1123) --- app/build.gradle.kts | 1 + .../cloudstream3/syncproviders/OAuth2API.kt | 16 ++ .../syncproviders/providers/AniListApi.kt | 1 + .../syncproviders/providers/DropboxApi.kt | 1 + .../syncproviders/providers/LocalList.kt | 1 + .../syncproviders/providers/MALApi.kt | 1 + .../syncproviders/providers/SimklApi.kt | 55 +++++++ .../cloudstream3/ui/result/UiText.kt | 13 ++ .../ui/settings/SettingsAccount.kt | 141 +++++++++++++++--- app/src/main/res/drawable/cloud_2_solid.xml | 8 + app/src/main/res/drawable/example_qr.png | Bin 0 -> 46354 bytes app/src/main/res/layout/device_auth.xml | 59 ++++++++ app/src/main/res/values/strings.xml | 6 + 13 files changed, 286 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/drawable/cloud_2_solid.xml create mode 100644 app/src/main/res/drawable/example_qr.png create mode 100644 app/src/main/res/layout/device_auth.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 61a0634f..fc2e9131 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -217,6 +217,7 @@ dependencies { implementation("com.github.discord:OverlappingPanels:0.1.5") // Gestures implementation ("androidx.biometric:biometric:1.2.0-alpha05") // Fingerprint Authentication implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") // SeekBar Preview + implementation("io.github.g0dkar:qrcode-kotlin:4.1.1") // QR code for PIN Auth on TV // Extensions & Other Libs implementation("org.mozilla:rhino:1.7.15") // run JavaScript diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt index ef74edfc..3d0bb940 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/OAuth2API.kt @@ -5,7 +5,23 @@ import androidx.fragment.app.FragmentActivity interface OAuth2API : AuthAPI { val key: String val redirectUrl: String + val supportDeviceAuth: Boolean suspend fun handleRedirect(url: String) : Boolean fun authenticate(activity: FragmentActivity?) + suspend fun getDevicePin() : PinAuthData? { + return null + } + + suspend fun handleDeviceAuth(pinAuthData: PinAuthData) : Boolean { + return false + } + + data class PinAuthData( + val deviceCode: String, + val userCode: String, + val verificationUrl: String, + val expiresIn: Int, + val interval: Int, + ) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 5c02e7f7..0551fe6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -32,6 +32,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { override val redirectUrl = "anilistlogin" override val idPrefix = "anilist" override var requireLibraryRefresh = true + override val supportDeviceAuth = false override var mainUrl = "https://anilist.co" override val icon = R.drawable.ic_anilist_icon override val requiresLogin = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt index 7ec168da..94537ea3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/DropboxApi.kt @@ -11,6 +11,7 @@ class Dropbox : OAuth2API { override val key = "zlqsamadlwydvb2" override val redirectUrl = "dropboxlogin" override val requiresLogin = true + override val supportDeviceAuth = false override val createAccountUrl: String? = null override val icon: Int diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt index 7552fe9d..00f8d00c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt @@ -21,6 +21,7 @@ class LocalList : SyncAPI { override val name = "Local" override val icon: Int = R.drawable.ic_baseline_storage_24 override val requiresLogin = false + override val supportDeviceAuth = false override val createAccountUrl: Nothing? = null override val idPrefix = "local" override var requireLibraryRefresh = true 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 fdbe763a..4249f949 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 @@ -40,6 +40,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { private val apiUrl = "https://api.myanimelist.net" override val icon = R.drawable.mal_logo override val requiresLogin = false + override val supportDeviceAuth = false override val syncIdName = SyncIdName.MyAnimeList override var requireLibraryRefresh = true override val createAccountUrl = "$mainUrl/register.php" diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index 08c8588b..4385fa5e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.AuthAPI +import com.lagradost.cloudstream3.syncproviders.OAuth2API import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.syncproviders.SyncIdName import com.lagradost.cloudstream3.ui.SyncWatchType @@ -45,6 +46,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { override var name = "Simkl" override val key = "simkl-key" override val redirectUrl = "simkl" + override val supportDeviceAuth = true override val idPrefix = "simkl" override var requireLibraryRefresh = true override var mainUrl = "https://api.simkl.com" @@ -267,6 +269,21 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { ) } + data class PinAuthResponse( + @JsonProperty("result") val result: String, + @JsonProperty("device_code") val deviceCode: String, + @JsonProperty("user_code") val userCode: String, + @JsonProperty("verification_url") val verificationUrl: String, + @JsonProperty("expires_in") val expiresIn: Int, + @JsonProperty("interval") val interval: Int, + ) + + data class PinExchangeResponse( + @JsonProperty("result") val result: String, + @JsonProperty("message") val message: String? = null, + @JsonProperty("access_token") val accessToken: String? = null, + ) + // ------------------- data class ActivitiesResponse( val all: String?, @@ -1045,6 +1062,44 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { return simklUrlRegex.find(url)?.groupValues?.get(1) ?: "" } + override suspend fun getDevicePin(): OAuth2API.PinAuthData? { + val pinAuthResp = app.get( + "$mainUrl/oauth/pin?client_id=$clientId&redirect_uri=$appString://${redirectUrl}" + ).parsedSafe() ?: return null + + return OAuth2API.PinAuthData( + deviceCode = pinAuthResp.deviceCode, + userCode = pinAuthResp.userCode, + verificationUrl = pinAuthResp.verificationUrl, + expiresIn = pinAuthResp.expiresIn, + interval = pinAuthResp.interval + ) + } + + override suspend fun handleDeviceAuth(pinAuthData: OAuth2API.PinAuthData): Boolean { + val pinAuthResp = app.get( + "$mainUrl/oauth/pin/${pinAuthData.userCode}?client_id=$clientId" + ).parsedSafe() ?: return false + + if (pinAuthResp.accessToken != null) { + switchToNewAccount() + setKey(accountId, SIMKL_TOKEN_KEY, pinAuthResp.accessToken) + + val user = getUser() + if (user == null) { + removeKey(accountId, SIMKL_TOKEN_KEY) + switchToOldAccount() + return false + } + + setKey(accountId, SIMKL_USER_KEY, user) + registerAccount() + requireLibraryRefresh = true + return true + } + return false + } + override suspend fun handleRedirect(url: String): Boolean { val uri = url.toUri() val state = uri.getQueryParameter("state") diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt index 0e8160db..e0762cc5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.result import android.content.Context +import android.graphics.Bitmap import android.util.Log import android.widget.ImageView import android.widget.TextView @@ -84,12 +85,14 @@ sealed class UiImage { ) : UiImage() data class Drawable(@DrawableRes val resId: Int) : UiImage() + data class Bitmap(val bitmap: android.graphics.Bitmap) : UiImage() } fun ImageView?.setImage(value: UiImage?, fadeIn: Boolean = true) { when (value) { is UiImage.Image -> setImageImage(value, fadeIn) is UiImage.Drawable -> setImageDrawable(value) + is UiImage.Bitmap -> setImageBitmap(value) null -> { this?.isVisible = false } @@ -107,6 +110,12 @@ fun ImageView?.setImageDrawable(value: UiImage.Drawable) { this.setImage(UiImage.Drawable(value.resId)) } +fun ImageView?.setImageBitmap(value: UiImage.Bitmap) { + if (this == null) return + this.isVisible = true + this.setImageBitmap(value.bitmap) +} + @JvmName("imgNull") fun img( url: String?, @@ -129,6 +138,10 @@ fun img(@DrawableRes drawable: Int): UiImage { return UiImage.Drawable(drawable) } +fun img(bitmap: Bitmap): UiImage { + return UiImage.Bitmap(bitmap) +} + fun txt(value: String): UiText { return UiText.DynamicString(value) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index a8358d0d..d227f9f6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -1,12 +1,16 @@ package com.lagradost.cloudstream3.ui.settings +import android.graphics.Bitmap import android.os.Bundle +import android.os.CountDownTimer import android.view.View -import android.view.View.* +import android.view.View.FOCUS_DOWN import android.view.inputmethod.EditorInfo import android.widget.TextView import androidx.annotation.UiThread import androidx.appcompat.app.AlertDialog +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmapOrNull import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity @@ -21,6 +25,7 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.AccountManagmentBinding import com.lagradost.cloudstream3.databinding.AccountSwitchBinding import com.lagradost.cloudstream3.databinding.AddAccountInputBinding +import com.lagradost.cloudstream3.databinding.DeviceAuthBinding import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi @@ -31,6 +36,10 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.subDlAp import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.OAuth2API +import com.lagradost.cloudstream3.ui.result.img +import com.lagradost.cloudstream3.ui.result.setImage +import com.lagradost.cloudstream3.ui.result.setText +import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV @@ -51,9 +60,13 @@ import com.lagradost.cloudstream3.utils.BiometricAuthenticator.promptInfo import com.lagradost.cloudstream3.utils.BiometricAuthenticator.startBiometricAuthentication import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogText +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.setImage +import com.lagradost.cloudstream3.utils.UIHelper.toPx +import qrcode.QRCode +import java.io.ByteArrayOutputStream class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.BiometricAuthCallback { companion object { @@ -134,7 +147,109 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome try { when (api) { is OAuth2API -> { - api.authenticate(activity) + if (isLayout(PHONE) || !api.supportDeviceAuth) { + api.authenticate(activity) + } else if (api.supportDeviceAuth && activity != null) { + + val binding: DeviceAuthBinding = + DeviceAuthBinding.inflate(activity.layoutInflater, null, false) + + val builder = + AlertDialog.Builder(activity) + .setView(binding.root) + + builder.apply { + setNegativeButton(R.string.cancel) { _, _ -> } + setPositiveButton(R.string.auth_locally) { _, _ -> + api.authenticate(activity) + } + } + + val dialog = builder.create() + + ioSafe { + try { + val pinCodeData = api.getDevicePin() + if (pinCodeData == null) { + showToast(R.string.device_pin_error_message) + api.authenticate(activity) + return@ioSafe + } + + /*val logoBytes = ContextCompat.getDrawable( + activity, + R.drawable.cloud_2_solid + )?.toBitmapOrNull()?.let { bitmap -> + val csLogo = ByteArrayOutputStream() + bitmap.compress(Bitmap.CompressFormat.PNG, 100, csLogo) + csLogo.toByteArray() + }*/ + + val qrCodeImage = QRCode.ofRoundedSquares() + .withColor(activity.colorFromAttribute(R.attr.textColor)) + .withBackgroundColor(activity.colorFromAttribute(R.attr.primaryBlackBackground)) + //.withLogo(logoBytes, 200.toPx, 200.toPx) //For later if logo needed anytime + .build(pinCodeData.verificationUrl) + .render().nativeImage() as Bitmap + + activity.runOnUiThread { + dialog.show() + binding.apply { + devicePinCode.setText(txt(pinCodeData.userCode)) + deviceAuthMessage.setText( + txt( + R.string.device_pin_url_message, + pinCodeData.verificationUrl + ) + ) + deviceAuthQrcode.setImage( + img(qrCodeImage) + ) + } + + val expirationMillis = + pinCodeData.expiresIn.times(1000).toLong() + + object : CountDownTimer(expirationMillis, 1000) { + + override fun onTick(millisUntilFinished: Long) { + val secondsUntilFinished = + millisUntilFinished.div(1000).toInt() + + binding.deviceAuthValidationCounter.setText( + txt( + R.string.device_pin_counter_text, + secondsUntilFinished.div(60), + secondsUntilFinished.rem(60) + ) + ) + + ioSafe { + if (secondsUntilFinished.rem(pinCodeData.interval) == 0 && api.handleDeviceAuth(pinCodeData)) { + showToast( + txt( + R.string.authenticated_user, + api.name + ) + ) + dialog.dismissSafe(activity) + cancel() + } + } + } + + override fun onFinish() { + showToast(R.string.device_pin_expired_message) + dialog.dismissSafe(activity) + } + + }.start() + } + } catch (e: Exception) { + logError(e) + } + } + } } is InAppAuthAPI -> { @@ -227,23 +342,15 @@ class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.Biome server = if (api.requiresServer) binding.loginServerInput.text?.toString() else null, ) ioSafe { - val isSuccessful = try { - api.login(loginData) + try { + showToast( + txt( + if (api.login(loginData)) R.string.authenticated_user else R.string.authenticated_user_fail, + api.name + ) + ) } catch (e: Exception) { logError(e) - false - } - activity.runOnUiThread { - try { - showToast( - activity.getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail) - .format( - api.name - ) - ) - } catch (e: Exception) { - logError(e) // format might fail - } } } dialog.dismissSafe(activity) diff --git a/app/src/main/res/drawable/cloud_2_solid.xml b/app/src/main/res/drawable/cloud_2_solid.xml new file mode 100644 index 00000000..3810b4bf --- /dev/null +++ b/app/src/main/res/drawable/cloud_2_solid.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/example_qr.png b/app/src/main/res/drawable/example_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..18decbac49533dcd2890ac8112305b19d05cfa11 GIT binary patch literal 46354 zcmeFa3pmtk_cxv~gJ$H^FvwvhVn_xlr-X5?90nDoCgqfBqm !=O#FGnJfjN;>Qk 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 + + + + + + + + + + + \ 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 d9317ccd..f16ca7d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -497,6 +497,7 @@ account Log out Log in + Auth Locally Switch account Add account Create account @@ -562,6 +563,7 @@ SDR Web Poster Image + QR Code Image Player Resolution and title Title @@ -780,4 +782,8 @@ Media Reset CloudStream Wiki + Visit %s on your smartphone or computer and enter the above code + Can\'t get the device PIN code, try local authentication + PIN code is now expired ! + Code expires in %1$dm %2$ds \ No newline at end of file From c71d5d8add602ba0be84ddf197da1918c6f65970 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Wed, 19 Jun 2024 20:06:40 +0530 Subject: [PATCH 822/888] feat(ui): new dialog on adding repository and auto redirection (#1025) --- .../lagradost/cloudstream3/MainActivity.kt | 5 +- .../ui/account/AccountSelectActivity.kt | 3 +- .../ui/settings/SettingsAccount.kt | 4 +- .../settings/extensions/ExtensionsFragment.kt | 6 +-- .../ui/settings/extensions/PluginsFragment.kt | 9 +++- .../lagradost/cloudstream3/utils/AppUtils.kt | 50 ++++++++++++------- .../utils/BiometricAuthenticator.kt | 10 ++-- app/src/main/res/menu/repository.xml | 3 +- .../main/res/navigation/mobile_navigation.xml | 21 ++++++++ app/src/main/res/values/strings.xml | 12 +++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 11 files changed, 84 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index cc2c99de..8d312ceb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -134,7 +134,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup -import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock import com.lagradost.cloudstream3.utils.BiometricAuthenticator.isAuthEnabled @@ -186,8 +186,7 @@ import kotlin.system.exitProcess //https://github.com/jellyfin/jellyfin-android/blob/6cbf0edf84a3da82347c8d59b5d5590749da81a9/app/src/main/java/org/jellyfin/mobile/bridge/ExternalPlayer.kt#L225 -class MainActivity : AppCompatActivity(), ColorPickerDialogListener, - BiometricAuthenticator.BiometricAuthCallback { +class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCallback { companion object { const val VLC_PACKAGE = "org.videolan.vlc" const val MPV_PACKAGE = "is.xyz.mpv" diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt index 0b0d83db..0da69f9c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt @@ -23,6 +23,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock import com.lagradost.cloudstream3.utils.BiometricAuthenticator.isAuthEnabled @@ -33,7 +34,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.selectedKeyIndex import com.lagradost.cloudstream3.utils.DataStoreHelper.setAccount import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute -class AccountSelectActivity : AppCompatActivity(), BiometricAuthenticator.BiometricAuthCallback { +class AccountSelectActivity : AppCompatActivity(), BiometricCallback { lateinit var viewModel: AccountViewModel diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index d227f9f6..67a2a15b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -51,7 +51,7 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setTool import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.utils.AppUtils.html import com.lagradost.cloudstream3.utils.BackupUtils -import com.lagradost.cloudstream3.utils.BiometricAuthenticator +import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback import com.lagradost.cloudstream3.utils.BiometricAuthenticator.authCallback import com.lagradost.cloudstream3.utils.BiometricAuthenticator.biometricPrompt import com.lagradost.cloudstream3.utils.BiometricAuthenticator.deviceHasPasswordPinLock @@ -68,7 +68,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.toPx import qrcode.QRCode import java.io.ByteArrayOutputStream -class SettingsAccount : PreferenceFragmentCompat(), BiometricAuthenticator.BiometricAuthCallback { +class SettingsAccount : PreferenceFragmentCompat(), BiometricCallback { companion object { /** Used by nginx plugin too */ fun showLoginInfo( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index ebd3260f..1364c376 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -33,7 +33,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.AppUtils.downloadAllPluginsDialog +import com.lagradost.cloudstream3.utils.AppUtils.addRepositoryDialog import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main @@ -273,9 +273,9 @@ class ExtensionsFragment : Fragment() { if (plugins.isNullOrEmpty()) { showToast(R.string.no_plugins_found_error, Toast.LENGTH_LONG) } else { - this@ExtensionsFragment.activity?.downloadAllPluginsDialog( + this@ExtensionsFragment.activity?.addRepositoryDialog( + fixedName, url, - fixedName ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index acfbc584..3bdcb251 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName +import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.databinding.FragmentPluginsBinding @@ -70,6 +71,8 @@ class PluginsFragment : Fragment() { val name = arguments?.getString(PLUGINS_BUNDLE_NAME) val url = arguments?.getString(PLUGINS_BUNDLE_URL) val isLocal = arguments?.getBoolean(PLUGINS_BUNDLE_LOCAL) == true + // download all extensions button + val downloadAllButton = binding?.settingsToolbar?.menu?.findItem(R.id.download_all) if (url == null || name == null) { activity?.onBackPressedDispatcher?.onBackPressed() @@ -171,7 +174,7 @@ class PluginsFragment : Fragment() { if (isLocal) { // No download button and no categories on local - binding?.settingsToolbar?.menu?.findItem(R.id.download_all)?.isVisible = false + downloadAllButton?.isVisible = false binding?.settingsToolbar?.menu?.findItem(R.id.lang_filter)?.isVisible = false pluginViewModel.updatePluginListLocal() @@ -179,6 +182,10 @@ class PluginsFragment : Fragment() { } else { pluginViewModel.updatePluginList(context, url) binding?.tvtypesChipsScroll?.root?.isVisible = true + // not needed for users but may be useful for devs + downloadAllButton?.isVisible = BuildConfig.DEBUG + + bindChips( binding?.tvtypesChipsScroll?.tvtypesChips, 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 ff27b192..626eca12 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -62,7 +62,8 @@ import com.lagradost.cloudstream3.syncproviders.providers.Kitsu import com.lagradost.cloudstream3.ui.WebviewFragment import com.lagradost.cloudstream3.ui.result.ResultFragment import com.lagradost.cloudstream3.ui.settings.Globals -import com.lagradost.cloudstream3.ui.settings.extensions.PluginsViewModel.Companion.downloadAll +import com.lagradost.cloudstream3.ui.settings.extensions.ExtensionsFragment +import com.lagradost.cloudstream3.ui.settings.extensions.PluginsFragment import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main @@ -386,7 +387,7 @@ object AppUtils { ) } afterRepositoryLoadedEvent.invoke(true) - downloadAllPluginsDialog(url, repo.name) + addRepositoryDialog(repo.name, url) } } @@ -429,25 +430,36 @@ object AppUtils { } } + fun Activity.addRepositoryDialog( + repositoryName: String, + repositoryURL: String, + ) { + val repos = RepositoryManager.getRepositories() - fun Activity.downloadAllPluginsDialog(repositoryUrl: String, repositoryName: String) { - runOnUiThread { - val context = this - val builder: AlertDialog.Builder = AlertDialog.Builder(this) - builder.setTitle( - repositoryName - ) - builder.setMessage( - R.string.download_all_plugins_from_repo - ) - builder.apply { - setPositiveButton(R.string.download) { _, _ -> - downloadAll(context, repositoryUrl, null) - } - - setNegativeButton(R.string.no) { _, _ -> } + // navigate to newly added repository on pressing Open Repository + fun openAddedRepo() { + if (repos.isNotEmpty()) { + navigate( + R.id.global_to_navigation_settings_plugins, + PluginsFragment.newInstance( + repositoryName, + repositoryURL, + false, + ) + ) + } + } + + runOnUiThread { + AlertDialog.Builder(this).apply { + setTitle(repositoryName) + setMessage(R.string.download_all_plugins_from_repo) + setPositiveButton(R.string.open_downloaded_repo) { _, _ -> + openAddedRepo() + } + setNegativeButton(R.string.dismiss, null) + show().setDefaultFocus() } - builder.show().setDefaultFocus() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt index c57600ee..45acbab4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BiometricAuthenticator.kt @@ -26,7 +26,7 @@ object BiometricAuthenticator { private var biometricManager: BiometricManager? = null var biometricPrompt: BiometricPrompt? = null var promptInfo: BiometricPrompt.PromptInfo? = null - var authCallback: BiometricAuthCallback? = null // listen to authentication success + var authCallback: BiometricCallback? = null // listen to authentication success private fun initializeBiometrics(activity: Activity) { val executor = ContextCompat.getMainExecutor(activity) @@ -141,14 +141,14 @@ object BiometricAuthenticator { // function to start authentication in any fragment or activity fun startBiometricAuthentication(activity: Activity, title: Int, setDeviceCred: Boolean) { initializeBiometrics(activity) - authCallback = activity as? BiometricAuthCallback + authCallback = activity as? BiometricCallback if (isBiometricHardWareAvailable()) { - authCallback = activity as? BiometricAuthCallback + authCallback = activity as? BiometricCallback authenticationDialog(activity, title, setDeviceCred) promptInfo?.let { biometricPrompt?.authenticate(it) } } else { if (deviceHasPasswordPinLock(activity)) { - authCallback = activity as? BiometricAuthCallback + authCallback = activity as? BiometricCallback authenticationDialog(activity, R.string.password_pin_authentication_title, true) promptInfo?.let { biometricPrompt?.authenticate(it) } @@ -165,7 +165,7 @@ object BiometricAuthenticator { } } - interface BiometricAuthCallback { + interface BiometricCallback { fun onAuthenticationSuccess() fun onAuthenticationError() } diff --git a/app/src/main/res/menu/repository.xml b/app/src/main/res/menu/repository.xml index be99b1a8..7aa1f200 100644 --- a/app/src/main/res/menu/repository.xml +++ b/app/src/main/res/menu/repository.xml @@ -21,5 +21,6 @@ android:id="@+id/download_all" android:icon="@drawable/netflix_download" android:title="@string/batch_download" - app:showAsAction="collapseActionView|ifRoom" /> + app:showAsAction="collapseActionView|ifRoom" + android:visible="false"/> \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index d0df339b..fafb6968 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -111,6 +111,27 @@ app:argType="boolean" /> + + + + + + Livestream NSFW Video + Music + Audio Book + Media Source error Remote error Renderer error @@ -617,7 +620,7 @@ View community repositories Public list Uppercase all subtitles - Download all plugins from this repository? + Warning: CloudStream 3 does not take any responsibility for using third-party extensions and does not provide any support for them! %s (Disabled) Tracks Audio tracks @@ -668,6 +671,8 @@ Yes No OK + Dismiss + Open repository Disable Battery optimization To ensure uninterrupted downloads and notifications for subscribed TV shows, CloudStream needs permission to run in background. By pressing "OK", you\'ll be directed to App info. @@ -775,11 +780,8 @@ Password/PIN Authentication Biometric authentication is not supported on this device Unlock the app with Fingerprint, Face ID, PIN, Pattern and Password. - This screen was closed due to multiple failed attempts. Please restart the application. + After a few failed attempts, the prompt will close. Simply restart the app to try again. Your CloudStream data has been backed up now. Although the possibility of this is very low, all devices can behave differently. In the rare case, that you get locked out from accessing the app, clear the app data completely and restore from a backup. We are very sorry for any inconvenience arising from this. - Music - Audio Book - Media Reset CloudStream Wiki Visit %s on your smartphone or computer and enter the above code diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fc2d0f86..2968a1b2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Apr 30 17:11:15 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From b9746c2b17be02f2d33c12d20907cb9301a8815c Mon Sep 17 00:00:00 2001 From: "imgbot[bot]" <31301654+imgbot[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 19:03:55 +0200 Subject: [PATCH 823/888] [ImgBot] Optimize images (#1144) /app/src/main/res/drawable/example_qr.png -- 45.27kb -> 1.28kb (97.17%) Signed-off-by: ImgBotApp Co-authored-by: ImgBotApp --- app/src/main/res/drawable/example_qr.png | Bin 46354 -> 1313 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/drawable/example_qr.png b/app/src/main/res/drawable/example_qr.png index 18decbac49533dcd2890ac8112305b19d05cfa11..764cb9660e4edb5e3957576e4e0f24ed3b412d6d 100644 GIT binary patch literal 1313 zcmeAS@N?(olHy`uVBq!ia0y~yVEzxnj6eZ~eU*;CffP%+qpu?a!^VE@KZ&eBzCyA` zkS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKYGZ+}e3+C(!v;j&mC3(BMFfiWj5?%u2 zv6p!Iy0X7u6Xw$p*=CmM3^ZHQ)5S5Q;?~={j(N8Y1XwR{?s;*^{X<~QmM0mOUHuPI z#TsvNbVyB-@(P=<$l-6ApoE}l-Mu=VlN$fG<$)auG!_O7{?>L*oi%-5U5#CBUES{= zH8bRWy64%8pZWUQ|Nm4gm@*h`(oifFAJVW=Z{uRV$o5NrSzr=SxR> zpnaFoEqmbS5IOt838g7Vnb7sgGo1O`|F`G(oC#~V(6zl|Uh~dy=CApy+TVwsek<4~ zf8z<7{tx$=+pfB63vG3GFYqB6zA=?atMO=t^`LPXFxcWq7i3-p7u$9I5}hUK=Q) z+tZQ7?HT-6ZOREX6D2dggA(rz(N(O--dbN`?PB(N8t3O0H19mv$herX=h?IgpXUko zU2S-emlP+YI-x}y!-S*af&2g6an(31*mri7@iYv1HIwjD9O^iZEs9gx|GcEoD?PS-&EcidXet;Aq~nsMYMnOS+P^OQvi-L^ z#h`qP1c2VC*{4*wcgjIc$@O=eT%CfLk5&61DF89$q&Li2-_a4PEaRMbq(~aw83*_d z#C&dgHsxI1vBx*mRZJ6pilQ07uv>Ui$+5*#)^~d>;&PC3P%)N6S7H5a#+O4|{IZSZ zZY#^6N%r$fgng^JRnM`)-QpD=JDO}m(RbVB_3P0@8S?fs9;*!tnzmqn98gNN#5JNM zC9x#cD!C{XNHG{07@6oAnCTi?h8UVy8Jk-fn`s*uSQ!|^y#8;Cq9HdwB{QuOw+7v9 R?u{VJJzf1=);T3K0RSlGT`~Xw literal 46354 zcmeFa3pmtk_cxv~gJ$H^FvwvhVn_xlr-X5?90nDoCgqfBqm !=O#FGnJfjN;>Qk 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 Date: Mon, 24 Jun 2024 12:04:45 -0600 Subject: [PATCH 824/888] Downloads: performance improvements and merge adapters (#1145) --- .../ui/download/DownloadAdapter.kt | 223 ++++++++++++++ .../ui/download/DownloadButtonSetup.kt | 2 - .../ui/download/DownloadChildAdapter.kt | 94 ------ .../ui/download/DownloadChildFragment.kt | 56 ++-- .../ui/download/DownloadFragment.kt | 289 ++++++++---------- .../ui/download/DownloadHeaderAdapter.kt | 149 --------- .../ui/download/DownloadViewModel.kt | 58 ++-- .../cloudstream3/ui/result/EpisodeAdapter.kt | 36 +-- .../ui/result/ResultFragmentPhone.kt | 24 +- .../ui/result/ResultViewModel2.kt | 46 +-- .../cloudstream3/ui/search/SearchHelper.kt | 20 +- .../cloudstream3/utils/VideoDownloadHelper.kt | 12 +- .../res/layout/download_header_episode.xml | 6 +- 13 files changed, 488 insertions(+), 527 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt new file mode 100644 index 00000000..8f496b3c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt @@ -0,0 +1,223 @@ +package com.lagradost.cloudstream3.ui.download + +import android.annotation.SuppressLint +import android.text.format.Formatter.formatShortFileSize +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.isVisible +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding +import com.lagradost.cloudstream3.databinding.DownloadHeaderEpisodeBinding +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.utils.AppUtils.getNameFull +import com.lagradost.cloudstream3.utils.DataStoreHelper +import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual +import com.lagradost.cloudstream3.utils.UIHelper.setImage +import com.lagradost.cloudstream3.utils.VideoDownloadHelper + +const val DOWNLOAD_ACTION_PLAY_FILE = 0 +const val DOWNLOAD_ACTION_DELETE_FILE = 1 +const val DOWNLOAD_ACTION_RESUME_DOWNLOAD = 2 +const val DOWNLOAD_ACTION_PAUSE_DOWNLOAD = 3 +const val DOWNLOAD_ACTION_DOWNLOAD = 4 +const val DOWNLOAD_ACTION_LONG_CLICK = 5 + +abstract class VisualDownloadCached( + open val currentBytes: Long, + open val totalBytes: Long, + open val data: VideoDownloadHelper.DownloadCached +) { + + // Just to be extra-safe with areContentsTheSame + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is VisualDownloadCached) return false + + if (currentBytes != other.currentBytes) return false + if (totalBytes != other.totalBytes) return false + if (data != other.data) return false + + return true + } + + override fun hashCode(): Int { + var result = currentBytes.hashCode() + result = 31 * result + totalBytes.hashCode() + result = 31 * result + data.hashCode() + return result + } +} + +data class VisualDownloadChildCached( + override val currentBytes: Long, + override val totalBytes: Long, + override val data: VideoDownloadHelper.DownloadEpisodeCached, +): VisualDownloadCached(currentBytes, totalBytes, data) + +data class VisualDownloadHeaderCached( + override val currentBytes: Long, + override val totalBytes: Long, + override val data: VideoDownloadHelper.DownloadHeaderCached, + val child: VideoDownloadHelper.DownloadEpisodeCached?, + val currentOngoingDownloads: Int, + val totalDownloads: Int, +): VisualDownloadCached(currentBytes, totalBytes, data) + +data class DownloadClickEvent( + val action: Int, + val data: VideoDownloadHelper.DownloadEpisodeCached +) + +data class DownloadHeaderClickEvent( + val action: Int, + val data: VideoDownloadHelper.DownloadHeaderCached +) + +class DownloadAdapter( + private val clickCallback: (DownloadHeaderClickEvent) -> Unit, + private val mediaClickCallback: (DownloadClickEvent) -> Unit, +) : ListAdapter(DiffCallback()) { + + companion object { + private const val VIEW_TYPE_HEADER = 0 + private const val VIEW_TYPE_CHILD = 1 + } + + inner class DownloadViewHolder( + private val binding: ViewBinding, + private val clickCallback: (DownloadHeaderClickEvent) -> Unit, + private val mediaClickCallback: (DownloadClickEvent) -> Unit, + ) : RecyclerView.ViewHolder(binding.root) { + + @SuppressLint("SetTextI18n") + fun bind(card: VisualDownloadCached?) { + when (binding) { + is DownloadHeaderEpisodeBinding -> binding.apply { + if (card == null || card !is VisualDownloadHeaderCached) return@apply + val d = card.data + + downloadHeaderPoster.apply { + setImage(d.poster) + setOnClickListener { + clickCallback.invoke(DownloadHeaderClickEvent(1, d)) + } + } + + downloadHeaderTitle.text = d.name + val mbString = formatShortFileSize(itemView.context, card.totalBytes) + + if (card.child != null) { + downloadHeaderGotoChild.isVisible = false + + downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, mediaClickCallback) + downloadButton.isVisible = true + + episodeHolder.setOnClickListener { + mediaClickCallback.invoke( + DownloadClickEvent( + DOWNLOAD_ACTION_PLAY_FILE, + card.child + ) + ) + } + } else { + downloadButton.isVisible = false + downloadHeaderGotoChild.isVisible = true + + try { + downloadHeaderInfo.text = + downloadHeaderInfo.context.getString(R.string.extra_info_format) + .format( + card.totalDownloads, + if (card.totalDownloads == 1) downloadHeaderInfo.context.getString( + R.string.episode + ) else downloadHeaderInfo.context.getString( + R.string.episodes + ), + mbString + ) + } catch (t: Throwable) { + // You probably formatted incorrectly + downloadHeaderInfo.text = "Error" + logError(t) + } + + episodeHolder.setOnClickListener { + clickCallback.invoke(DownloadHeaderClickEvent(0, d)) + } + } + } + + is DownloadChildEpisodeBinding -> binding.apply { + if (card == null || card !is VisualDownloadChildCached) return@apply + val d = card.data + + val posDur = DataStoreHelper.getViewPos(d.id) + downloadChildEpisodeProgress.apply { + if (posDur != null) { + val visualPos = posDur.fixVisual() + max = (visualPos.duration / 1000).toInt() + progress = (visualPos.position / 1000).toInt() + isVisible = true + } else isVisible = false + } + + downloadButton.setDefaultClickListener(card.data, downloadChildEpisodeTextExtra, mediaClickCallback) + + downloadChildEpisodeText.apply { + text = context.getNameFull(d.name, d.episode, d.season) + isSelected = true // Needed for text repeating + } + + downloadChildEpisodeHolder.setOnClickListener { + mediaClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d)) + } + } + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DownloadViewHolder { + val binding = when (viewType) { + VIEW_TYPE_HEADER -> { + DownloadHeaderEpisodeBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + } + VIEW_TYPE_CHILD -> { + DownloadChildEpisodeBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + } + else -> throw IllegalArgumentException("Invalid view type") + } + return DownloadViewHolder(binding, clickCallback, mediaClickCallback) + } + + override fun onBindViewHolder(holder: DownloadViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + override fun getItemViewType(position: Int): Int { + val card = getItem(position) + return if (card is VisualDownloadChildCached) VIEW_TYPE_CHILD else VIEW_TYPE_HEADER + } + + class DiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: VisualDownloadCached, newItem: VisualDownloadCached): Boolean { + return oldItem.data.id == newItem.data.id + } + + override fun areContentsTheSame(oldItem: VisualDownloadCached, newItem: VisualDownloadCached): Boolean { + return oldItem == newItem + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt index 10ce67a7..880d5f6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.download -import android.app.Activity import android.content.DialogInterface import android.widget.Toast import androidx.appcompat.app.AlertDialog @@ -22,7 +21,6 @@ import com.lagradost.cloudstream3.utils.VideoDownloadManager object DownloadButtonSetup { fun handleDownloadClick(click: DownloadClickEvent) { val id = click.data.id - if (click.data !is VideoDownloadHelper.DownloadEpisodeCached) return when (click.action) { DOWNLOAD_ACTION_DELETE_FILE -> { activity?.let { ctx -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt deleted file mode 100644 index 1d7b5a83..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.lagradost.cloudstream3.ui.download - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull -import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual -import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos -import com.lagradost.cloudstream3.utils.VideoDownloadHelper - -const val DOWNLOAD_ACTION_PLAY_FILE = 0 -const val DOWNLOAD_ACTION_DELETE_FILE = 1 -const val DOWNLOAD_ACTION_RESUME_DOWNLOAD = 2 -const val DOWNLOAD_ACTION_PAUSE_DOWNLOAD = 3 -const val DOWNLOAD_ACTION_DOWNLOAD = 4 -const val DOWNLOAD_ACTION_LONG_CLICK = 5 - -data class VisualDownloadChildCached( - val currentBytes: Long, - val totalBytes: Long, - val data: VideoDownloadHelper.DownloadEpisodeCached, -) - -data class DownloadClickEvent(val action: Int, val data: VideoDownloadHelper.DownloadEpisodeCached) - -class DownloadChildAdapter( - var cardList: List, - private val clickCallback: (DownloadClickEvent) -> Unit, -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return DownloadChildViewHolder( - DownloadChildEpisodeBinding.inflate(LayoutInflater.from(parent.context), parent, false), - clickCallback - ) - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (holder) { - is DownloadChildViewHolder -> { - holder.bind(cardList[position]) - } - } - } - - override fun getItemCount(): Int { - return cardList.size - } - - class DownloadChildViewHolder - constructor( - val binding: DownloadChildEpisodeBinding, - private val clickCallback: (DownloadClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(binding.root) { - - /*private val title: TextView = itemView.download_child_episode_text - private val extraInfo: TextView = itemView.download_child_episode_text_extra - private val holder: CardView = itemView.download_child_episode_holder - private val progressBar: ContentLoadingProgressBar = itemView.download_child_episode_progress - private val progressBarDownload: ContentLoadingProgressBar = itemView.download_child_episode_progress_downloaded - private val downloadImage: ImageView = itemView.download_child_episode_download*/ - - - fun bind(card: VisualDownloadChildCached) { - val d = card.data - - val posDur = getViewPos(d.id) - binding.downloadChildEpisodeProgress.apply { - if (posDur != null) { - val visualPos = posDur.fixVisual() - max = (visualPos.duration / 1000).toInt() - progress = (visualPos.position / 1000).toInt() - visibility = View.VISIBLE - } else { - visibility = View.GONE - } - } - - binding.downloadButton.setDefaultClickListener(card.data, binding.downloadChildEpisodeTextExtra, clickCallback) - - binding.downloadChildEpisodeText.apply { - text = context.getNameFull(d.name, d.episode, d.season) - isSelected = true // is needed for text repeating - } - - - binding.downloadChildEpisodeHolder.setOnClickListener { - clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d)) - } - } - } -} diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index f54c8698..7734cb08 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -5,7 +5,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentChildDownloadsBinding import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick @@ -40,7 +39,8 @@ class DownloadChildFragment : Fragment() { super.onDestroyView() } - var binding: FragmentChildDownloadsBinding? = null + private var binding: FragmentChildDownloadsBinding? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -48,7 +48,7 @@ class DownloadChildFragment : Fragment() { ): View { val localBinding = FragmentChildDownloadsBinding.inflate(inflater, container, false) binding = localBinding - return localBinding.root//inflater.inflate(R.layout.fragment_child_downloads, container, false) + return localBinding.root } private fun updateList(folder: String) = main { @@ -60,7 +60,11 @@ class DownloadChildFragment : Fragment() { }.mapNotNull { val info = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(ctx, it.id) ?: return@mapNotNull null - VisualDownloadChildCached(info.fileLength, info.totalBytes, it) + VisualDownloadChildCached( + currentBytes = info.fileLength, + totalBytes = info.totalBytes, + data = it, + ) } }.sortedBy { it.data.episode + (it.data.season ?: 0) * 100000 } if (eps.isEmpty()) { @@ -68,9 +72,7 @@ class DownloadChildFragment : Fragment() { return@main } - (binding?.downloadChildList?.adapter as DownloadChildAdapter? ?: return@main).cardList = - eps - binding?.downloadChildList?.adapter?.notifyDataSetChanged() + (binding?.downloadChildList?.adapter as? DownloadAdapter)?.submitList(eps) } } @@ -98,31 +100,39 @@ class DownloadChildFragment : Fragment() { setAppBarNoScrollFlagsOnTV() } - val adapter: RecyclerView.Adapter = - DownloadChildAdapter( - ArrayList(), - ) { click -> - handleDownloadClick(click) + val adapter = DownloadAdapter( + {}, + { downloadClickEvent -> + handleDownloadClick(downloadClickEvent) + if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { + setUpDownloadDeleteListener(folder) + } } + ) + binding?.downloadChildList?.apply { + setHasFixedSize(true) + setItemViewCacheSize(20) + this.adapter = adapter + setLinearListLayout( + isHorizontal = false, + nextRight = FOCUS_SELF, + nextDown = FOCUS_SELF, + ) + } + + updateList(folder) + } + + private fun setUpDownloadDeleteListener(folder: String) { downloadDeleteEventListener = { id: Int -> - val list = (binding?.downloadChildList?.adapter as DownloadChildAdapter?)?.cardList + val list = (binding?.downloadChildList?.adapter as? DownloadAdapter)?.currentList if (list != null) { if (list.any { it.data.id == id }) { updateList(folder) } } } - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } - - binding?.downloadChildList?.adapter = adapter - binding?.downloadChildList?.setLinearListLayout( - isHorizontal = false, - nextDown = FOCUS_SELF, - nextRight = FOCUS_SELF - )//layoutManager = GridLayoutManager(context, 1) - - updateList(folder) } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 31790b0f..de2d4f3c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -10,14 +10,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.TextView import android.widget.Toast +import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentDownloadsBinding @@ -42,11 +43,9 @@ import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV -import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager import java.net.URI - const val DOWNLOAD_NAVIGATE_TO = "downloadpage" class DownloadFragment : Fragment() { @@ -63,33 +62,30 @@ class DownloadFragment : Fragment() { private fun setList(list: List) { main { - (binding?.downloadList?.adapter as DownloadHeaderAdapter?)?.cardList = list - binding?.downloadList?.adapter?.notifyDataSetChanged() + (binding?.downloadList?.adapter as? DownloadAdapter)?.submitList(list) } } override fun onDestroyView() { - if (downloadDeleteEventListener != null) { - VideoDownloadManager.downloadDeleteEvent -= downloadDeleteEventListener!! - downloadDeleteEventListener = null + downloadDeleteEventListener?.let { + VideoDownloadManager.downloadDeleteEvent -= it } + downloadDeleteEventListener = null binding = null super.onDestroyView() } - var binding: FragmentDownloadsBinding? = null + private var binding: FragmentDownloadsBinding? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - downloadsViewModel = - ViewModelProvider(this)[DownloadViewModel::class.java] - + ): View { + downloadsViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] val localBinding = FragmentDownloadsBinding.inflate(inflater, container, false) binding = localBinding - return localBinding.root//inflater.inflate(R.layout.fragment_downloads, container, false) + return localBinding.root } private var downloadDeleteEventListener: ((Int) -> Unit)? = null @@ -97,7 +93,6 @@ class DownloadFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) hideKeyboard() - binding?.downloadStorageAppbar?.setAppBarNoScrollFlagsOnTV() observe(downloadsViewModel.noDownloadsText) { @@ -108,176 +103,148 @@ class DownloadFragment : Fragment() { binding?.downloadLoading?.isVisible = false } observe(downloadsViewModel.availableBytes) { - binding?.downloadFreeTxt?.text = - getString(R.string.storage_size_format).format( - getString(R.string.free_storage), - formatShortFileSize(view.context, it) - ) - binding?.downloadFree?.setLayoutWidth(it) + updateStorageInfo(view.context, it, R.string.free_storage, binding?.downloadFreeTxt, binding?.downloadFree) } observe(downloadsViewModel.usedBytes) { - binding?.apply { - downloadUsedTxt.text = - getString(R.string.storage_size_format).format( - getString(R.string.used_storage), - formatShortFileSize(view.context, it) - ) - downloadUsed.setLayoutWidth(it) - downloadStorageAppbar.isVisible = it > 0 - } + updateStorageInfo(view.context, it, R.string.used_storage, binding?.downloadUsedTxt, binding?.downloadUsed) + binding?.downloadStorageAppbar?.isVisible = it > 0 } observe(downloadsViewModel.downloadBytes) { - binding?.apply { - downloadAppTxt.text = - getString(R.string.storage_size_format).format( - getString(R.string.app_storage), - formatShortFileSize(view.context, it) - ) - downloadApp.setLayoutWidth(it) - } + updateStorageInfo(view.context, it, R.string.app_storage, binding?.downloadAppTxt, binding?.downloadApp) } - val adapter: RecyclerView.Adapter = - DownloadHeaderAdapter( - ArrayList(), - { click -> - when (click.action) { - 0 -> { - if (click.data.type.isMovieType()) { - //wont be called - } else { - val folder = DataStore.getFolderName( - DOWNLOAD_EPISODE_CACHE, - click.data.id.toString() - ) - activity?.navigate( - R.id.action_navigation_downloads_to_navigation_download_child, - DownloadChildFragment.newInstance(click.data.name, folder) - ) - } - } - - 1 -> { - (activity as AppCompatActivity?)?.loadResult( - click.data.url, - click.data.apiName - ) - } - } - - }, - { downloadClickEvent -> - if (downloadClickEvent.data !is VideoDownloadHelper.DownloadEpisodeCached) return@DownloadHeaderAdapter - handleDownloadClick(downloadClickEvent) - if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { - context?.let { ctx -> - downloadsViewModel.updateList(ctx) - } - } - } - ) - - downloadDeleteEventListener = { id -> - val list = (binding?.downloadList?.adapter as DownloadHeaderAdapter?)?.cardList - if (list != null) { - if (list.any { it.data.id == id }) { - context?.let { ctx -> - setList(ArrayList()) - downloadsViewModel.updateList(ctx) - } + val adapter = DownloadAdapter( + { click -> + handleItemClick(click) + }, + { downloadClickEvent -> + handleDownloadClick(downloadClickEvent) + if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { + setUpDownloadDeleteListener() } } - } - - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } + ) binding?.downloadList?.apply { + setHasFixedSize(true) + setItemViewCacheSize(20) this.adapter = adapter setLinearListLayout( isHorizontal = false, nextRight = FOCUS_SELF, nextUp = FOCUS_SELF, - nextDown = FOCUS_SELF + nextDown = FOCUS_SELF, ) - //layoutManager = GridLayoutManager(context, 1) } - // Should be visible in emulator layout - binding?.downloadStreamButton?.isGone = isLayout(TV) - binding?.downloadStreamButton?.setOnClickListener { - val dialog = - Dialog(it.context ?: return@setOnClickListener, R.style.AlertDialogCustom) - - val binding = StreamInputBinding.inflate(dialog.layoutInflater) - - dialog.setContentView(binding.root) - - dialog.show() - - // If user has clicked the switch do not interfere - var preventAutoSwitching = false - binding.hlsSwitch.setOnClickListener { - preventAutoSwitching = true - } - - fun activateSwitchOnHls(text: String?) { - binding.hlsSwitch.isChecked = normalSafeApiCall { - URI(text).path?.substringAfterLast(".")?.contains("m3u") - } == true - } - - binding.streamReferer.doOnTextChanged { text, _, _, _ -> - if (!preventAutoSwitching) - activateSwitchOnHls(text?.toString()) - } - - (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager?)?.primaryClip?.getItemAt( - 0 - )?.text?.toString()?.let { copy -> - val fixedText = copy.trim() - binding.streamUrl.setText(fixedText) - activateSwitchOnHls(fixedText) - } - - binding.applyBtt.setOnClickListener { - val url = binding.streamUrl.text?.toString() - if (url.isNullOrEmpty()) { - showToast(R.string.error_invalid_url, Toast.LENGTH_SHORT) - } else { - val referer = binding.streamReferer.text?.toString() - - activity?.navigate( - R.id.global_to_navigation_player, - GeneratorPlayer.newInstance( - LinkGenerator( - listOf(BasicLink(url)), - extract = true, - referer = referer, - isM3u8 = binding.hlsSwitch.isChecked - ) - ) - ) - - dialog.dismissSafe(activity) - } - } - - binding.cancelBtt.setOnClickListener { - dialog.dismissSafe(activity) - } + binding?.downloadStreamButton?.apply { + isGone = isLayout(TV) + setOnClickListener { showStreamInputDialog(it.context) } } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { binding?.downloadList?.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> - val dy = scrollY - oldScrollY - if (dy > 0) { //check for scroll down - binding?.downloadStreamButton?.shrink() // hide - } else if (dy < -5) { - binding?.downloadStreamButton?.extend() // show - } + handleScroll(scrollY - oldScrollY) } } downloadsViewModel.updateList(requireContext()) - fixPaddingStatusbar(binding?.downloadRoot) } + + private fun handleItemClick(click: DownloadHeaderClickEvent) { + when (click.action) { + 0 -> { + if (!click.data.type.isMovieType()) { + val folder = DataStore.getFolderName(DOWNLOAD_EPISODE_CACHE, click.data.id.toString()) + activity?.navigate( + R.id.action_navigation_downloads_to_navigation_download_child, + DownloadChildFragment.newInstance(click.data.name, folder) + ) + } + } + 1 -> { + (activity as AppCompatActivity?)?.loadResult(click.data.url, click.data.apiName) + } + } + } + + private fun setUpDownloadDeleteListener() { + downloadDeleteEventListener = { id -> + val list = (binding?.downloadList?.adapter as? DownloadAdapter)?.currentList + if (list?.any { it.data.id == id } == true) { + context?.let { downloadsViewModel.updateList(it) } + } + } + downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } + } + + private fun updateStorageInfo( + context: Context, + bytes: Long, + @StringRes stringRes: Int, + textView: TextView?, + view: View? + ) { + textView?.text = getString(R.string.storage_size_format).format(getString(stringRes), formatShortFileSize(context, bytes)) + view?.setLayoutWidth(bytes) + } + + private fun showStreamInputDialog(context: Context) { + val dialog = Dialog(context, R.style.AlertDialogCustom) + val binding = StreamInputBinding.inflate(dialog.layoutInflater) + dialog.setContentView(binding.root) + dialog.show() + + var preventAutoSwitching = false + binding.hlsSwitch.setOnClickListener { preventAutoSwitching = true } + + binding.streamReferer.doOnTextChanged { text, _, _, _ -> + if (!preventAutoSwitching) activateSwitchOnHls(text?.toString(), binding) + } + + (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager)?.primaryClip?.getItemAt(0)?.text?.toString()?.let { copy -> + val fixedText = copy.trim() + binding.streamUrl.setText(fixedText) + activateSwitchOnHls(fixedText, binding) + } + + binding.applyBtt.setOnClickListener { + val url = binding.streamUrl.text?.toString() + if (url.isNullOrEmpty()) { + showToast(R.string.error_invalid_url, Toast.LENGTH_SHORT) + } else { + val referer = binding.streamReferer.text?.toString() + activity?.navigate( + R.id.global_to_navigation_player, + GeneratorPlayer.newInstance( + LinkGenerator( + listOf(BasicLink(url)), + extract = true, + referer = referer, + isM3u8 = binding.hlsSwitch.isChecked + ) + ) + ) + dialog.dismissSafe(activity) + } + } + + binding.cancelBtt.setOnClickListener { + dialog.dismissSafe(activity) + } + } + + private fun activateSwitchOnHls(text: String?, binding: StreamInputBinding) { + binding.hlsSwitch.isChecked = normalSafeApiCall { + URI(text).path?.substringAfterLast(".")?.contains("m3u") + } == true + } + + private fun handleScroll(dy: Int) { + if (dy > 0) { + binding?.downloadStreamButton?.shrink() + } else if (dy < -5) { + binding?.downloadStreamButton?.extend() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt deleted file mode 100644 index 65a6441f..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt +++ /dev/null @@ -1,149 +0,0 @@ -package com.lagradost.cloudstream3.ui.download - -import android.annotation.SuppressLint -import android.text.format.Formatter.formatShortFileSize -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.view.isVisible -import androidx.recyclerview.widget.RecyclerView -import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.databinding.DownloadHeaderEpisodeBinding -import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.utils.UIHelper.setImage -import com.lagradost.cloudstream3.utils.VideoDownloadHelper -import java.util.* - -data class VisualDownloadHeaderCached( - val currentOngoingDownloads: Int, - val totalDownloads: Int, - val totalBytes: Long, - val currentBytes: Long, - val data: VideoDownloadHelper.DownloadHeaderCached, - val child: VideoDownloadHelper.DownloadEpisodeCached?, -) - -data class DownloadHeaderClickEvent( - val action: Int, - val data: VideoDownloadHelper.DownloadHeaderCached -) - -class DownloadHeaderAdapter( - var cardList: List, - private val clickCallback: (DownloadHeaderClickEvent) -> Unit, - private val movieClickCallback: (DownloadClickEvent) -> Unit, -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return DownloadHeaderViewHolder( - DownloadHeaderEpisodeBinding.inflate( - LayoutInflater.from(parent.context), - parent, - false - ), - clickCallback, - movieClickCallback - ) - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - when (holder) { - is DownloadHeaderViewHolder -> { - holder.bind(cardList[position]) - } - } - } - - override fun getItemCount(): Int { - return cardList.size - } - - class DownloadHeaderViewHolder - constructor( - val binding: DownloadHeaderEpisodeBinding, - private val clickCallback: (DownloadHeaderClickEvent) -> Unit, - private val movieClickCallback: (DownloadClickEvent) -> Unit, - ) : RecyclerView.ViewHolder(binding.root) { - - /*private val poster: ImageView? = itemView.download_header_poster - private val title: TextView = itemView.download_header_title - private val extraInfo: TextView = itemView.download_header_info - private val holder: CardView = itemView.episode_holder - - private val downloadBar: ContentLoadingProgressBar = itemView.download_header_progress_downloaded - private val downloadImage: ImageView = itemView.download_header_episode_download - private val normalImage: ImageView = itemView.download_header_goto_child*/ - - @SuppressLint("SetTextI18n") - fun bind(card: VisualDownloadHeaderCached) { - val d = card.data - - binding.downloadHeaderPoster.apply { - setImage(d.poster) - setOnClickListener { - clickCallback.invoke(DownloadHeaderClickEvent(1, d)) - } - } - - binding.apply { - - binding.downloadHeaderTitle.text = d.name - val mbString = formatShortFileSize(itemView.context, card.totalBytes) - - //val isMovie = d.type.isMovieType() - if (card.child != null) { - //downloadHeaderProgressDownloaded.visibility = View.VISIBLE - - // downloadHeaderEpisodeDownload.visibility = View.VISIBLE - binding.downloadHeaderGotoChild.visibility = View.GONE - - downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, movieClickCallback) - downloadButton.isVisible = true - /*setUpButton( - card.currentBytes, - card.totalBytes, - downloadBar, - downloadImage, - extraInfo, - card.child, - movieClickCallback - )*/ - - episodeHolder.setOnClickListener { - movieClickCallback.invoke( - DownloadClickEvent( - DOWNLOAD_ACTION_PLAY_FILE, - card.child - ) - ) - } - } else { - downloadButton.isVisible = false - // downloadHeaderProgressDownloaded.visibility = View.GONE - // downloadHeaderEpisodeDownload.visibility = View.GONE - binding.downloadHeaderGotoChild.visibility = View.VISIBLE - - try { - downloadHeaderInfo.text = - downloadHeaderInfo.context.getString(R.string.extra_info_format).format( - card.totalDownloads, - if (card.totalDownloads == 1) downloadHeaderInfo.context.getString(R.string.episode) else downloadHeaderInfo.context.getString( - R.string.episodes - ), - mbString - ) - } catch (t: Throwable) { - // you probably formatted incorrectly - downloadHeaderInfo.text = "Error" - logError(t) - } - - - episodeHolder.setOnClickListener { - clickCallback.invoke(DownloadHeaderClickEvent(0, d)) - } - } - } - } - } -} diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt index 3a74a715..380430e1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt @@ -39,6 +39,8 @@ class DownloadViewModel : ViewModel() { val availableBytes: LiveData = _availableBytes val downloadBytes: LiveData = _downloadBytes + private var previousVisual: List? = null + fun updateList(context: Context) = viewModelScope.launchSafe { val children = withContext(Dispatchers.IO) { val headers = context.getKeys(DOWNLOAD_EPISODE_CACHE) @@ -53,7 +55,6 @@ class DownloadViewModel : ViewModel() { // parentId : downloadsCount val totalDownloads = HashMap() - // Gets all children downloads withContext(Dispatchers.IO) { for (c in children) { @@ -69,7 +70,7 @@ class DownloadViewModel : ViewModel() { } } - val cached = withContext(Dispatchers.IO) { // wont fetch useless keys + val cached = withContext(Dispatchers.IO) { // Won't fetch useless keys totalDownloads.entries.filter { it.value > 0 }.mapNotNull { context.getKey( DOWNLOAD_HEADER_CACHE, @@ -79,7 +80,7 @@ class DownloadViewModel : ViewModel() { } val visual = withContext(Dispatchers.IO) { - cached.mapNotNull { // TODO FIX + cached.mapNotNull { val downloads = totalDownloads[it.id] ?: 0 val bytes = totalBytesUsedByChild[it.id] ?: 0 val currentBytes = currentBytesUsedByChild[it.id] ?: 0 @@ -91,32 +92,37 @@ class DownloadViewModel : ViewModel() { getFolderName(it.id.toString(), it.id.toString()) ) VisualDownloadHeaderCached( - 0, - downloads, - bytes, - currentBytes, - it, - movieEpisode + currentBytes = currentBytes, + totalBytes = bytes, + data = it, + child = movieEpisode, + currentOngoingDownloads = 0, + totalDownloads = downloads, ) }.sortedBy { (it.child?.episode ?: 0) + (it.child?.season?.times(10000) ?: 0) - } // episode sorting by episode, lowest to highest - } - try { - val stat = StatFs(Environment.getExternalStorageDirectory().path) - - val localBytesAvailable = stat.availableBytes//stat.blockSizeLong * stat.blockCountLong - val localTotalBytes = stat.blockSizeLong * stat.blockCountLong - val localDownloadedBytes = visual.sumOf { it.totalBytes } - - _usedBytes.postValue(localTotalBytes - localBytesAvailable - localDownloadedBytes) - _availableBytes.postValue(localBytesAvailable) - _downloadBytes.postValue(localDownloadedBytes) - } catch (t : Throwable) { - _downloadBytes.postValue(0) - logError(t) + } // Episode sorting by episode, lowest to highest } - _headerCards.postValue(visual) + // Only update list if different from the previous one to prevent duplicate initialization + if (visual != previousVisual) { + previousVisual = visual + + try { + val stat = StatFs(Environment.getExternalStorageDirectory().path) + val localBytesAvailable = stat.availableBytes + val localTotalBytes = stat.blockSizeLong * stat.blockCountLong + val localDownloadedBytes = visual.sumOf { it.totalBytes } + + _usedBytes.postValue(localTotalBytes - localBytesAvailable - localDownloadedBytes) + _availableBytes.postValue(localBytesAvailable) + _downloadBytes.postValue(localDownloadedBytes) + } catch (t: Throwable) { + _downloadBytes.postValue(0) + logError(t) + } + + _headerCards.postValue(visual) + } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index e4fd0559..62b1fdd1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -192,15 +192,15 @@ class EpisodeAdapter( downloadButton.isVisible = hasDownloadSupport downloadButton.setDefaultClickListener( VideoDownloadHelper.DownloadEpisodeCached( - card.name, - card.poster, - card.episode, - card.season, - card.id, - card.parentId, - card.rating, - card.description, - System.currentTimeMillis(), + name = card.name, + poster = card.poster, + episode = card.episode, + season = card.season, + id = card.id, + parentId = card.parentId, + rating = card.rating, + description = card.description, + cacheTime = System.currentTimeMillis(), ), null ) { when (it.action) { @@ -343,15 +343,15 @@ class EpisodeAdapter( downloadButton.isVisible = hasDownloadSupport downloadButton.setDefaultClickListener( VideoDownloadHelper.DownloadEpisodeCached( - card.name, - card.poster, - card.episode, - card.season, - card.id, - card.parentId, - card.rating, - card.description, - System.currentTimeMillis(), + name = card.name, + poster = card.poster, + episode = card.episode, + season = card.season, + id = card.id, + parentId = card.parentId, + rating = card.rating, + description = card.description, + cacheTime = System.currentTimeMillis(), ), null ) { when (it.action) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index fb5160a7..e185e75d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -185,8 +185,6 @@ open class ResultFragmentPhone : FullScreenPlayer() { } binding?.resultFullscreenHolder?.isVisible = !isSuccess && isFullScreenPlayer } - - //player_view?.apply { //alpha = 0.0f //ObjectAnimator.ofFloat(player_view, "alpha", 1f).apply { @@ -200,9 +198,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { // fillAfter = true //} //startAnimation(fadeIn) - // } - - + //} } private fun setTrailers(trailers: List?) { @@ -630,15 +626,15 @@ open class ResultFragmentPhone : FullScreenPlayer() { } downloadButton.setDefaultClickListener( VideoDownloadHelper.DownloadEpisodeCached( - ep.name, - ep.poster, - 0, - null, - ep.id, - ep.id, - null, - null, - System.currentTimeMillis(), + name = ep.name, + poster = ep.poster, + episode = 0, + season = null, + id = ep.id, + parentId = ep.id, + rating = null, + description = null, + cacheTime = System.currentTimeMillis(), ), null ) { click -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 4285feb1..ac6527de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -705,13 +705,13 @@ class ResultViewModel2 : ViewModel() { DOWNLOAD_HEADER_CACHE, parentId.toString(), VideoDownloadHelper.DownloadHeaderCached( - apiName, - url, - currentType, - currentHeaderName, - currentPoster, - parentId, - System.currentTimeMillis(), + apiName = apiName, + url = url, + type = currentType, + name = currentHeaderName, + poster = currentPoster, + id = parentId, + cacheTime = System.currentTimeMillis(), ) ) @@ -722,15 +722,15 @@ class ResultViewModel2 : ViewModel() { ), // 3 deep folder for faster acess episode.id.toString(), VideoDownloadHelper.DownloadEpisodeCached( - episode.name, - episode.poster, - episode.episode, - episode.season, - episode.id, - parentId, - episode.rating, - episode.description, - System.currentTimeMillis(), + name = episode.name, + poster = episode.poster, + episode = episode.episode, + season = episode.season, + id = episode.id, + parentId = parentId, + rating = episode.rating, + description = episode.description, + cacheTime = System.currentTimeMillis(), ) ) @@ -2776,13 +2776,13 @@ class ResultViewModel2 : ViewModel() { DOWNLOAD_HEADER_CACHE, mainId.toString(), VideoDownloadHelper.DownloadHeaderCached( - apiName, - validUrl, - loadResponse.type, - loadResponse.name, - loadResponse.posterUrl, - mainId, - System.currentTimeMillis(), + apiName = apiName, + url = validUrl, + type = loadResponse.type, + name = loadResponse.name, + poster = loadResponse.posterUrl, + id = mainId, + cacheTime = System.currentTimeMillis(), ) ) if (loadTrailers) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt index 5b943105..66423982 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt @@ -25,7 +25,7 @@ object SearchHelper { SEARCH_ACTION_PLAY_FILE -> { if (card is DataStoreHelper.ResumeWatchingResult) { val id = card.id - if(id == null) { + if (id == null) { showToast(R.string.error_invalid_id, Toast.LENGTH_SHORT) } else { if (card.isFromDownload) { @@ -33,15 +33,15 @@ object SearchHelper { DownloadClickEvent( DOWNLOAD_ACTION_PLAY_FILE, VideoDownloadHelper.DownloadEpisodeCached( - card.name, - card.posterUrl, - card.episode ?: 0, - card.season, - id, - card.parentId ?: return, - null, - null, - System.currentTimeMillis() + name = card.name, + poster = card.posterUrl, + episode = card.episode ?: 0, + season = card.season, + id = id, + parentId = card.parentId ?: return, + rating = null, + description = null, + cacheTime = System.currentTimeMillis(), ) ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt index d1614bc1..30f66f83 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadHelper.kt @@ -3,17 +3,21 @@ package com.lagradost.cloudstream3.utils import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.TvType object VideoDownloadHelper { + abstract class DownloadCached( + @JsonProperty("id") open val id: Int, + ) + data class DownloadEpisodeCached( @JsonProperty("name") val name: String?, @JsonProperty("poster") val poster: String?, @JsonProperty("episode") val episode: Int, @JsonProperty("season") val season: Int?, - @JsonProperty("id") val id: Int, @JsonProperty("parentId") val parentId: Int, @JsonProperty("rating") val rating: Int?, @JsonProperty("description") val description: String?, @JsonProperty("cacheTime") val cacheTime: Long, - ) + override val id: Int, + ): DownloadCached(id) data class DownloadHeaderCached( @JsonProperty("apiName") val apiName: String, @@ -21,9 +25,9 @@ object VideoDownloadHelper { @JsonProperty("type") val type: TvType, @JsonProperty("name") val name: String, @JsonProperty("poster") val poster: String?, - @JsonProperty("id") val id: Int, @JsonProperty("cacheTime") val cacheTime: Long, - ) + override val id: Int, + ): DownloadCached(id) data class ResumeWatching( @JsonProperty("parentId") val parentId: Int, diff --git a/app/src/main/res/layout/download_header_episode.xml b/app/src/main/res/layout/download_header_episode.xml index 21f79ca6..a0b64ce3 100644 --- a/app/src/main/res/layout/download_header_episode.xml +++ b/app/src/main/res/layout/download_header_episode.xml @@ -59,12 +59,12 @@ Date: Mon, 24 Jun 2024 18:05:34 +0000 Subject: [PATCH 825/888] Improve tests (#1142) --- .../com/lagradost/cloudstream3/MainAPI.kt | 2 +- .../lagradost/cloudstream3/plugins/Plugin.kt | 1 + .../cloudstream3/plugins/PluginManager.kt | 3 +- .../ui/settings/testing/TestResultAdapter.kt | 50 ++++- .../ui/settings/testing/TestViewModel.kt | 2 +- .../cloudstream3/utils/ExtractorApi.kt | 2 +- .../cloudstream3/utils/TestingUtils.kt | 186 ++++++++++++------ app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 2 + 9 files changed, 172 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 07a82583..91da2ed0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -622,7 +622,7 @@ abstract class MainAPI { /**Used for testing and can be used to disable the providers if WebView is not available*/ open val usesWebView = false - /** Determines which plugin a given provider is from */ + /** Determines which plugin a given provider is from. This is the full path to the plugin. */ var sourcePlugin: String? = null open val hasMainPage = false diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt index 6b7dc90b..7f08af92 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt @@ -67,6 +67,7 @@ abstract class Plugin { * This will contain your resources if you specified requiresResources in gradle */ var resources: Resources? = null + /** Full file path to the plugin. */ var __filename: String? = null /** diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index a30af11c..a5631500 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -18,7 +18,6 @@ import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.removePluginMapping import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.AcraApplication.Companion.getKey -import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainAPI.Companion.settingsForProvider @@ -518,7 +517,7 @@ object PluginManager { return true } - pluginInstance.__filename = fileName + pluginInstance.__filename = file.absolutePath if (manifest.requiresResources) { Log.d(TAG, "Loading resources for ${data.internalName}") // based on https://stackoverflow.com/questions/7483568/dynamic-resource-loading-from-other-apk diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt index 83480542..023ecb4c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt @@ -2,26 +2,31 @@ package com.lagradost.cloudstream3.ui.settings.testing import android.app.AlertDialog import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView +import android.widget.Toast import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.ProviderTestItemBinding import com.lagradost.cloudstream3.mvvm.getAllMessages import com.lagradost.cloudstream3.mvvm.getStackTracePretty +import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.TestingUtils +import java.io.File class TestResultAdapter(override val items: MutableList>) : AppUtils.DiffAdapter>(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ProviderTestViewHolder( - ProviderTestItemBinding.inflate(LayoutInflater.from(parent.context), parent,false) + ProviderTestItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) //LayoutInflater.from(parent.context) // .inflate(R.layout.provider_test_item, parent, false), ) @@ -36,7 +41,8 @@ class TestResultAdapter(override val items: MutableList } + + api.sourcePlugin?.let { path -> + val pluginFile = File(path) + // Cannot delete a deleted plugin + if (!pluginFile.exists()) return@let + + builder.setNegativeButton(R.string.delete_plugin) { _, _ -> + ioSafe { + val success = PluginManager.deletePlugin(pluginFile) + + runOnMainThread { + if (success) { + showToast(R.string.plugin_deleted, Toast.LENGTH_SHORT) + } else { + showToast(R.string.error, Toast.LENGTH_SHORT) + } + } + } + } + } + + builder.show() } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt index 9e6f8a06..818f1fd7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestViewModel.kt @@ -95,7 +95,7 @@ class TestViewModel : ViewModel() { providers.clear() updateProgress() - TestingUtils.getDeferredProviderTests(scope ?: return, apis, ::println) { api, result -> + TestingUtils.getDeferredProviderTests(scope ?: return, apis) { api, result -> addProvider(api, result) } } 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 1302453a..12b8837a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -1015,7 +1015,7 @@ abstract class ExtractorApi { abstract val mainUrl: String abstract val requiresReferer: Boolean - /** Determines which plugin a given extractor is from */ + /** Determines which plugin a given provider is from. This is the full path to the plugin. */ var sourcePlugin: String? = null //suspend fun getSafeUrl(url: String, referer: String? = null): List? { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt index dd973538..5e2b2bc1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt @@ -13,16 +13,55 @@ object TestingUtils { } } - class TestResultSearch(val results: List) : TestResult(true) - class TestResultLoad(val extractorData: String) : TestResult(true) + class Logger { + enum class LogLevel { + Normal, + Warning, + Error; + } - class TestResultProvider(success: Boolean, val log: String, val exception: Throwable?) : + data class Message(val level: LogLevel, val message: String) { + override fun toString(): String { + val level = when (this.level) { + LogLevel.Normal -> "" + LogLevel.Warning -> "Warning: " + LogLevel.Error -> "Error: " + } + return "$level$message" + } + } + + private val messageLog = mutableListOf() + + fun getRawLog(): List = messageLog + + fun log(message: String) { + messageLog.add(Message(LogLevel.Normal, message)) + } + + fun warn(message: String) { + messageLog.add(Message(LogLevel.Warning, message)) + } + + fun error(message: String) { + messageLog.add(Message(LogLevel.Error, message)) + } + } + + class TestResultList(val results: List) : TestResult(true) + class TestResultLoad(val extractorData: String, val shouldLoadLinks: Boolean) : TestResult(true) + + class TestResultProvider( + success: Boolean, + val log: List, + val exception: Throwable? + ) : TestResult(success) @Throws(AssertionError::class, CancellationException::class) suspend fun testHomepage( api: MainAPI, - logger: (String) -> Unit + logger: Logger ): TestResult { if (api.hasMainPage) { try { @@ -31,22 +70,33 @@ object TestingUtils { api.getMainPage(1, MainPageRequest(f.name, f.data, f.horizontalImages)) when { homepage == null -> { - logger.invoke("Homepage provider ${api.name} did not correctly load homepage!") + logger.error("Provider ${api.name} did not correctly load homepage!") } + homepage.items.isEmpty() -> { - logger.invoke("Homepage provider ${api.name} does not contain any items!") + logger.warn("Provider ${api.name} does not contain any homepage rows!") } + homepage.items.any { it.list.isEmpty() } -> { - logger.invoke("Homepage provider ${api.name} does not have any items on result!") + logger.warn("Provider ${api.name} does not have any items in a homepage row!") } } + val homePageList = homepage?.items?.flatMap { it.list } ?: emptyList() + return TestResultList(homePageList) } catch (e: Throwable) { - if (e is NotImplementedError) { - Assert.fail("Provider marked as hasMainPage, while in reality is has not been implemented") - } else if (e is CancellationException) { - throw e + when (e) { + is NotImplementedError -> { + Assert.fail("Provider marked as hasMainPage, while in reality is has not been implemented") + } + + is CancellationException -> { + throw e + } + + else -> { + e.message?.let { logger.warn("Exception thrown when loading homepage: \"$it\"") } + } } - logError(e) } } return TestResult.Pass @@ -54,11 +104,13 @@ object TestingUtils { @Throws(AssertionError::class, CancellationException::class) private suspend fun testSearch( - api: MainAPI + api: MainAPI, + testQueries: List, + logger: Logger, ): TestResult { - val searchQueries = listOf("over", "iron", "guy") - val searchResults = searchQueries.firstNotNullOfOrNull { query -> + val searchResults = testQueries.firstNotNullOfOrNull { query -> try { + logger.log("Searching for: $query") api.search(query).takeIf { !it.isNullOrEmpty() } } catch (e: Throwable) { if (e is NotImplementedError) { @@ -72,12 +124,11 @@ object TestingUtils { } return if (searchResults.isNullOrEmpty()) { - Assert.fail("Api ${api.name} did not return any valid search responses") + Assert.fail("Api ${api.name} did not return any search responses") TestResult.Fail // Should not be reached } else { - TestResultSearch(searchResults) + TestResultList(searchResults) } - } @@ -85,31 +136,27 @@ object TestingUtils { private suspend fun testLoad( api: MainAPI, result: SearchResponse, - logger: (String) -> Unit + logger: Logger ): TestResult { try { - Assert.assertEquals( - "Invalid apiName on SearchResponse on ${api.name}", - result.apiName, - api.name - ) + if (result.apiName != api.name) { + logger.warn("Wrong apiName on SearchResponse: ${api.name} != ${result.apiName}") + } val loadResponse = api.load(result.url) if (loadResponse == null) { - logger.invoke("Returned null loadResponse on ${result.url} on ${api.name}") + logger.error("Returned null loadResponse on ${result.url} on ${api.name}") return TestResult.Fail } - Assert.assertEquals( - "Invalid apiName on LoadResponse on ${api.name}", - loadResponse.apiName, - result.apiName - ) - Assert.assertTrue( - "Api ${api.name} on load does not contain any of the supportedTypes: ${loadResponse.type}", - api.supportedTypes.contains(loadResponse.type) - ) + if (loadResponse.apiName != api.name) { + logger.warn("Wrong apiName on LoadResponse: ${api.name} != ${loadResponse.apiName}") + } + + if (!api.supportedTypes.contains(loadResponse.type)) { + logger.warn("Api ${api.name} on load does not contain any of the supportedTypes: ${loadResponse.type}") + } val url = when (loadResponse) { is AnimeLoadResponse -> { @@ -117,39 +164,43 @@ object TestingUtils { loadResponse.episodes.keys.isEmpty() || loadResponse.episodes.keys.any { loadResponse.episodes[it].isNullOrEmpty() } if (gotNoEpisodes) { - logger.invoke("Api ${api.name} got no episodes on ${loadResponse.url}") + logger.error("Api ${api.name} got no episodes on ${loadResponse.url}") return TestResult.Fail } (loadResponse.episodes[loadResponse.episodes.keys.firstOrNull()])?.firstOrNull()?.data } + is MovieLoadResponse -> { val gotNoEpisodes = loadResponse.dataUrl.isBlank() if (gotNoEpisodes) { - logger.invoke("Api ${api.name} got no movie on ${loadResponse.url}") + logger.error("Api ${api.name} got no movie on ${loadResponse.url}") return TestResult.Fail } loadResponse.dataUrl } + is TvSeriesLoadResponse -> { val gotNoEpisodes = loadResponse.episodes.isEmpty() if (gotNoEpisodes) { - logger.invoke("Api ${api.name} got no episodes on ${loadResponse.url}") + logger.error("Api ${api.name} got no episodes on ${loadResponse.url}") return TestResult.Fail } loadResponse.episodes.firstOrNull()?.data } + is LiveStreamLoadResponse -> { loadResponse.dataUrl } + else -> { - logger.invoke("Unknown load response: ${loadResponse.javaClass.name}") + logger.error("Unknown load response: ${loadResponse.javaClass.name}") return TestResult.Fail } } ?: return TestResult.Fail - return TestResultLoad(url) + return TestResultLoad(url, loadResponse.type != TvType.CustomMedia) // val loadTest = testLoadResponse(api, load, logger) // if (loadTest is TestResultLoad) { @@ -174,7 +225,7 @@ object TestingUtils { private suspend fun testLinkLoading( api: MainAPI, url: String?, - logger: (String) -> Unit + logger: Logger ): TestResult { Assert.assertNotNull("Api ${api.name} has invalid url on episode", url) if (url == null) return TestResult.Fail // Should never trigger @@ -182,7 +233,7 @@ object TestingUtils { var linksLoaded = 0 try { val success = api.loadLinks(url, false, {}) { link -> - logger.invoke("Video loaded: ${link.name}") + logger.log("Video loaded: ${link.name}") Assert.assertTrue( "Api ${api.name} returns link with invalid url ${link.url}", link.url.length > 4 @@ -190,7 +241,7 @@ object TestingUtils { linksLoaded++ } if (success) { - logger.invoke("Links loaded: $linksLoaded") + logger.log("Links loaded: $linksLoaded") return TestResult(linksLoaded > 0) } else { Assert.fail("Api ${api.name} returns false on loadLinks() with $linksLoaded links loaded") @@ -200,8 +251,9 @@ object TestingUtils { is NotImplementedError -> { Assert.fail("Provider has not implemented loadLinks()") } + else -> { - logger.invoke("Failed link loading on ${api.name} using data: $url") + logger.error("Failed link loading on ${api.name} using data: $url") throw e } } @@ -212,53 +264,57 @@ object TestingUtils { fun getDeferredProviderTests( scope: CoroutineScope, providers: Array, - logger: (String) -> Unit, callback: (MainAPI, TestResultProvider) -> Unit ) { providers.forEach { api -> scope.launch { - var log = "" - fun addToLog(string: String) { - log += string + "\n" - logger.invoke(string) - } - fun getLog(): String { - return log.removeSuffix("\n") - } + val logger = Logger() val result = try { - addToLog("Trying ${api.name}") + logger.log("Trying ${api.name}") // Test Homepage - val homepage = testHomepage(api, logger).success - Assert.assertTrue("Homepage failed to load", homepage) + val homepage = testHomepage(api, logger) + Assert.assertTrue("Homepage failed to load", homepage.success) + val homePageList = (homepage as? TestResultList)?.results ?: emptyList() // Test Search Results - val searchResults = testSearch(api) + val searchQueries = + // Use the first 3 home page results as queries since they are guaranteed to exist + (homePageList.take(3).map { it.name } + + // If home page is sparse then use generic search queries + listOf("over", "iron", "guy")).take(3) + + val searchResults = testSearch(api, searchQueries, logger) Assert.assertTrue("Failed to get search results", searchResults.success) - searchResults as TestResultSearch + searchResults as TestResultList // Test Load and LoadLinks // Only try the first 3 search results to prevent spamming val success = searchResults.results.take(3).any { searchResponse -> - addToLog("Testing search result: ${searchResponse.url}") - val loadResponse = testLoad(api, searchResponse, ::addToLog) + logger.log("Testing search result: ${searchResponse.url}") + val loadResponse = testLoad(api, searchResponse, logger) if (loadResponse !is TestResultLoad) { false } else { - testLinkLoading(api, loadResponse.extractorData, ::addToLog).success + if (loadResponse.shouldLoadLinks) { + testLinkLoading(api, loadResponse.extractorData, logger).success + } else { + logger.log("Skipping link loading test") + true + } } } if (success) { - logger.invoke("Success ${api.name}") - TestResultProvider(true, getLog(), null) + logger.log("Success ${api.name}") + TestResultProvider(true, logger.getRawLog(), null) } else { - logger.invoke("Error ${api.name}") - TestResultProvider(false, getLog(), null) + logger.error("Link loading failed") + TestResultProvider(false, logger.getRawLog(), null) } } catch (e: Throwable) { - TestResultProvider(false, getLog(), e) + TestResultProvider(false, logger.getRawLog(), e) } callback.invoke(api, result) } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7c9ccebe..a37dfad2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -88,4 +88,5 @@ #48E484 #ea596e + #FF9800 \ 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 b39006ad..f577d6e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -304,6 +304,7 @@ Start Failed Passed + Warning Resume -30 +30 @@ -609,6 +610,7 @@ plugins This will also delete all repository plugins Delete repository + Delete plugin Download the list of sites you want to use Downloaded: %d Disabled: %d From 0d40b5ebe3f6a88b2408149e4e44e3de8a8dfe91 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Mon, 24 Jun 2024 21:03:09 +0200 Subject: [PATCH 826/888] Translations update from Hosted Weblate (#1042) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aaditya Bhandari Co-authored-by: Adrian Hermida Co-authored-by: Akhlak Ur Rahman Co-authored-by: Alexander Svärd Co-authored-by: Anarchydr Co-authored-by: Andre Costa Co-authored-by: Antonio N Co-authored-by: Azgar Co-authored-by: Colgrave Co-authored-by: Dan Co-authored-by: Eji-san Co-authored-by: Ettore Atalan Co-authored-by: Evgeniy Khramov <65224669+thejenja@users.noreply.github.com> Co-authored-by: FUTURE Co-authored-by: Fikri Akbar Co-authored-by: Fjuro Co-authored-by: Huzaifah Asif Co-authored-by: Itsmechinmoy Co-authored-by: Jose Delvani Co-authored-by: Konstantinos Tranoudis Co-authored-by: Krisna A. Prayoga Co-authored-by: Luna712 <142361265+Luna712@users.noreply.github.com> Co-authored-by: Marian Turba Co-authored-by: Massimo Pissarello Co-authored-by: Matthaiks Co-authored-by: Milo Ivir Co-authored-by: Mæve Rey Co-authored-by: Naga Co-authored-by: Nicoara Alex Co-authored-by: Nuno Ferreira Co-authored-by: Only1337 Co-authored-by: Pizza Party Co-authored-by: Putra Iskandar Co-authored-by: Qareen Skoll Co-authored-by: Rex_sa Co-authored-by: SeMih Budur Co-authored-by: Semih Co-authored-by: Sufyan Zahoor Jutt Co-authored-by: Waheed Nazir Co-authored-by: Walter H Co-authored-by: Wei-Cheng Yeh (IID) Co-authored-by: amir Co-authored-by: bittin1ddc447d824349b2 Co-authored-by: gallegonovato Co-authored-by: hugoalh Co-authored-by: ngocanhtve Co-authored-by: programutox Co-authored-by: rwi Co-authored-by: stojkovskistefan Co-authored-by: streaming s Co-authored-by: tuan041 Co-authored-by: user0020 <855309c256@gmail.com> Co-authored-by: ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ Co-authored-by: Сергей (MrSabin) Co-authored-by: தமிழ்நேரம் Co-authored-by: 电棍老板 Co-authored-by: 구병우 --- app/src/main/res/values-ajp/strings.xml | 64 +- app/src/main/res/values-ar/strings.xml | 28 +- app/src/main/res/values-as/strings.xml | 624 ++++++++++++++++++ app/src/main/res/values-bg/strings.xml | 4 +- app/src/main/res/values-bn/strings.xml | 138 +++- app/src/main/res/values-bp/strings.xml | 23 +- app/src/main/res/values-cs/strings.xml | 23 +- app/src/main/res/values-de/strings.xml | 16 +- app/src/main/res/values-el/strings.xml | 109 ++- app/src/main/res/values-es/strings.xml | 41 +- app/src/main/res/values-fr/strings.xml | 33 +- app/src/main/res/values-hi/strings.xml | 19 +- app/src/main/res/values-hr/strings.xml | 414 ++++++------ app/src/main/res/values-hu/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 13 +- app/src/main/res/values-it/strings.xml | 25 +- app/src/main/res/values-iw/strings.xml | 4 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 115 +++- app/src/main/res/values-lv/strings.xml | 4 +- app/src/main/res/values-mk/strings.xml | 71 +- app/src/main/res/values-ml/strings.xml | 4 +- app/src/main/res/values-ms/strings.xml | 4 +- app/src/main/res/values-my/strings.xml | 4 +- app/src/main/res/values-ne/strings.xml | 49 +- app/src/main/res/values-nl/strings.xml | 4 +- app/src/main/res/values-no/strings.xml | 4 +- app/src/main/res/values-pl/strings.xml | 23 +- app/src/main/res/values-pt/strings.xml | 10 +- app/src/main/res/values-ro/strings.xml | 102 ++- app/src/main/res/values-ru/strings.xml | 10 +- app/src/main/res/values-sk/strings.xml | 26 +- app/src/main/res/values-so/strings.xml | 4 +- app/src/main/res/values-sv/strings.xml | 54 +- app/src/main/res/values-ta/strings.xml | 604 +++++++++++++++-- app/src/main/res/values-tr/strings.xml | 97 +-- app/src/main/res/values-uk/strings.xml | 23 +- app/src/main/res/values-ur/strings.xml | 151 +++-- app/src/main/res/values-vi/strings.xml | 32 +- app/src/main/res/values-zh-rTW/strings.xml | 84 ++- app/src/main/res/values-zh/strings.xml | 24 +- fastlane/metadata/android/as/changelogs/2.txt | 1 + .../metadata/android/as/full_description.txt | 10 + .../metadata/android/as/short_description.txt | 1 + fastlane/metadata/android/as/title.txt | 1 + .../android/el-GR/short_description.txt | 2 +- .../metadata/android/id/full_description.txt | 10 +- fastlane/metadata/android/ur/changelogs/2.txt | 2 +- .../metadata/android/ur/full_description.txt | 12 +- .../metadata/android/ur/short_description.txt | 2 +- .../metadata/android/zh-TW/changelogs/2.txt | 1 + .../android/zh-TW/full_description.txt | 10 + .../android/zh-TW/short_description.txt | 1 + fastlane/metadata/android/zh-TW/title.txt | 1 + 54 files changed, 2554 insertions(+), 587 deletions(-) create mode 100644 app/src/main/res/values-as/strings.xml create mode 100644 fastlane/metadata/android/as/changelogs/2.txt create mode 100644 fastlane/metadata/android/as/full_description.txt create mode 100644 fastlane/metadata/android/as/short_description.txt create mode 100644 fastlane/metadata/android/as/title.txt create mode 100644 fastlane/metadata/android/zh-TW/changelogs/2.txt create mode 100644 fastlane/metadata/android/zh-TW/full_description.txt create mode 100644 fastlane/metadata/android/zh-TW/short_description.txt create mode 100644 fastlane/metadata/android/zh-TW/title.txt diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index 734d5644..554fae9c 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -76,7 +76,7 @@ سَتِنگز الترجمة لون العلبة عمول ستريم للتورنت - تلقائيًا نَزِل كل الإضافات من الريپويات يلي نزادِت. + تلقائيًا نَزِل كل الإضافات من الريپويات يللي نزادِت. محي بلش في تِلِفونات ما فيا تعوز الطريقة الجديدة لتجديد الآپات. جربو \"الطريقة القديمة\" إذا ما عم تنزل التجديدات. @@ -90,7 +90,7 @@ متصفح الوَب كبوس مرتين على اليمين أو الشمال حتى تقرب أو ترَجِع الڤيديو ما نلاقى وصف الأحداث - الحلقة يلي بَعدا + الحلقة يللي بَعدها فرجي تجديدات الآپ رفّ آپ من نفس المطورين للروايات الخفيفة، بدل من الڤيديوات @@ -218,7 +218,7 @@ بث مباشر المشغل مبين - مدة التقديم مشكلة مش متوقع بمشغل الڤيديو (Unexpected player error) - بسبب أعطال إذا نحط على مستوى عالي كتير على الأجهزة يلي ما بتساع كتير، متل تلفزيون \"أندرويد\". + بسبِب أعطال إذا نحط على مستوى عالي كتير على الأجهزة يللي ما بتساع كتير، متل تلفزيون \"أندرويد\". شي غير أفي هيدا التجديد نسوخ الرابط @@ -244,7 +244,7 @@ طول التخزين المتوقت حلقة \"كروم كاست\" دراما آسيوية - بسبب أعطال إذا نحط على مستوى عالي كتير على الأجهزة يلي ذِكرتا زغيرة، متل تلفزيون \"أندرويد\". + بسبِب أعطال إذا نحط على مستوى عالي كتير على الأجهزة يللي ذِكرتها زغيرة، متل تلفزيون \"أندرويد\". مشكلة بالمصدر التخزين الموقت للڤيديو على الديسك فلم وثائقي @@ -283,7 +283,7 @@ إشارات المرجعية بَلَش التنزيل فتّو على الأكونت \"%s\" - وقِف الإعلان الأتوماتيكي عن المشاكل يلي بالآپ + وقِف الإعلان الأتوماتيكي عن المشاكل يللي بالآپ محل عنوان الپوستر الشكل %1$d ساعة %2$d ديقة @@ -314,7 +314,7 @@ مدبلج أوتوماتيك عدلو الأكونت - الأرقام السرية يلي نحطت مش صحيحة. جرب مرة أخرى. + الأرقام السرية يللي نحطت مش صحيحة. جرب مرة أخرى. الشكل المعمول للتلفزيون نلغى التنزيل أكونت @@ -366,9 +366,9 @@ زِدت %s المفضلين \"%s\" نزاد ع المفضل - العشوائي يلي بعدو + العشوائي يللي بعده خيال - عم نجدِد المثلثلات يلي مشتركينلا + عم نجدِد المثلثلات يللي مشتركينلها مبين إنو في عنصر متل هيدا موجود بالمكتبة عندكن: \n \n%s @@ -481,7 +481,7 @@ نزلو المصادر بالجملة فتاح بـ راينيگ - محي الريپو كمان بمحي الإضافات يلي في + محي الريپو كمان بمحي الإضافات يللي فيه اللغة شترك نمحت الإضافة @@ -490,7 +490,7 @@ الإضافات شيل الإعلانات من الترجمة رفّكن فاضي ☹ -\nفوتو على أكونت فيا رفّ الڤيديوات يلي حضرينا أو زيدو ڤيديوات بالرفّ المحلي. +\nفوتو على أكونت فيا رفّ الڤيديوات يللي حضرينها أو زيدو ڤيديوات بال رفّ المحلي. إسم الريپوزيتاري الجودات بيانات مش صالحة @@ -530,13 +530,13 @@ Blu-ray %d/10 النص كبير كتير. ما فينا ننسخو. - عدد الإضافيات يلي تجددت: %d + عدد الإضافيات يللي تجددت: %d رح يتجدد الآپ وقتا تطلعو مِنو پلاي ليست \"ايش أل أس\" زيد ريپوزيتوري علم إنو حضرتو شو بَدَك تشوف - شيل المعلومات يلي محطوطة بالترجمة ليلي عندن فقد سمعي + شيل المعلومات يللي محطوطة بال ترجمة ل يللي عندهن فقد سمعي ما لقينا ريپو. تأكدو إنو الرابط صح وجربو تعوزو \"ڤي پي أن\" (VPN) فشل الفوت ع الأكونت \"%s\" الحد الأعلى @@ -544,7 +544,7 @@ إضافات ما قدرنا نفتح %s رايتينگ: %s - بدكن تنزلو كل الإضافات من هيدا الريپو؟ + تحزير: \"كلاود ستريم 3\" مش مسؤولة عن الإضافات المش رسمية، وما بتدعمن أبدًا! الحالة محي الريپو مشغل الڤيديو @@ -567,8 +567,8 @@ الجودة عين الافتراضي المرجع (إختياري) - المشغل يلي بـ\"كلود ستريم\" - نزل لايحة المواقع يلي بدك تعوزن + المشغل يللي ب \"كلود ستريم\" + نزل لايحة المواقع يللي بدك تعوزهن حطو الأرقام السرية فَلتِر حسب اللغة المفضلة أكيد بدكون تطلعو؟ @@ -576,13 +576,13 @@ @string/home_play شيلو من لايحة المحتوى الحاضرينو الإعتمادات - فيكُن هون تغيرو طريقة ترتيب المصادر. المصدر يلي عندو أولوية أكتر بينحط أعلى بلايحت تنقايت المصدر. إنتو بتنقو الأولوية يإستعمال الأرقام. حطو الرقم الأعلى للمصادر والجودات يلي بتفضلوّا. + فيكُن هون تغيرو طريقة ترتيب المصادر. المصدر يللي عنده أولوية أكتر بينحط أعلى بلايحت تنقايت المصدر. إنتو بتنقو الأولوية يإستعمال الأرقام. حطو الرقم الأعلى للمصادر والجودات يللي بتفضلوها. \n -\nمثلًا: -\nإذا المصدر \"أ\" بتفضلوّ، بتعطوّ كتير نقات (مثلًا 8). -\nإذا الجودة 480 ما بتحبوّا، بتعطوّا نقات قليلة (مثلًا 1). +\nمتلًا: +\nإزا المصدر \"أ\" بتفضلوه، بتعطوه كتير نقات (متلًا 8). +\nإزا الجودة 480 ما بتحبوها، بتعطوها نقات قليلة (متلًا 1). \n -\nعلامت المصدر والجودة تبعو بينجمعو مع بعض (8 + 1 = 9). يلي علامتو 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر! +\nعلامت المصدر وال جودة تبعه بينجمعو مع بعض (8 + 1 = 9). يللي علامته 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر! حطو الأرقام السرية الحالية صوت حط كبسة لبرم إتجاه الشاشة @@ -603,7 +603,7 @@ قفل بواسطة المقاييس الحيوية رمز/كلمة مرور للمصادقة فتاح التطبيق باستعمال البصمة، آي دي الوج، پِن، النمط، إو الپاسورد. - تسَكرت هيدي الواجهة من ورا محاولات فاشلة عديدة. پليز، سكر الآپ ورجاع فتحه. + بعد كذا محاولة فاشلة، هيدا الشباك رح يسكر. بكل بساطة، سكر الآپ ورجاع فتحه حتى تجرب بعد مرة. %s \nباقي المصادقة البيومترية مش مدعومة ع هالجهاز @@ -621,5 +621,23 @@ موسيقى أوديو بوك الميديا - لتضمن عدم انقطاع التنزيلات والنوتيفيكايشنات للبرامج التلفزيونية يلي مشتركلها، الآپ \"كلود ستريم\" بده إذن ليمشي بـ الباكگروند. ازا كبست أوكي، رح تتوجه ع صفحة معلومات التطبيق. هونيك، نزال حتى توصل ل «استخدام بطارية التطبيق» \"App battery usage\" وحط استخدام البطارية ع «غير مقيد» \"Unrestricted\". ملاحظة إنو هيدا الإذن ما بيعني إنو \"كلود ستريم 3\" رح تستنزف البطارية. ومش رح يشتغل الآن بـ الباكگروند إلّا عند الضرورة، متل لمّا تتلقا نوتيفيكايشن أو تنزل ڤيديو من الريپو الاصلي. فيك ترجع ترد هيدا الستنگ بـ«الإعدادات العامة» \"General settings\"، إزا غيرت رأيك. - + ت تضمن عدم انقطاع التنزيلات والنوتيفيكايشنات للبرامج التلفزيونية يللي مشتركلها، الآپ \"كلود ستريم\" بده إذن ليمشي ب الباكگراوند. ازا كبست أوكي، رح تتوجه ع صفحة معلومات التطبيق. هونيك، نزال حتى توصل ل «استخدام بطارية التطبيق» \"App battery usage\" وحط استخدام البطارية ع «غير مقيد» \"Unrestricted\". +\nملاحظة إنو هيدا الإذن ما بيعني إنو \"كلود ستريم 3\" رح تستنزف البطارية. ومش رح يشتغل الآپ بال باكگراوند إلّا عند الضرورة، متل لمّا تتلقا نوتيفيكايشن أو تنزل ڤيديو من الريپو الاصلي. فيك ترجع ترد هيدا الستنگ ب «الإعدادات العامة» \"General settings\"، إزا غيرت رأيك. + ريسات + رح ينزل ب %s + الحلقة ال %2$d من الجزء ال%1$d رح تنزل ب + كاست مراية + إف كاست + نقي جهاز الكاست + ويكي \"كلود ستريم\" + أكونتات + سكوريتي + صورة الـ\"كيو آر\" كود + فشلنا ب فتح پِن الجهاز، جرب تفوت ع أكونت محليًا + خلصت مدة الپِن! + بتخلص مدة الپِن ب %1$d دقايق و%2$d ثانية + فوت عال أكونت محليًا + تجاهل + متاح الريپوزيتوري + فتاح %s ع تلفونك أو كمپيوترك، وحط الكود اللي فوق + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 8681398d..e253ed93 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -220,7 +220,7 @@ أوفا تورنت وثائقي - دراما آسيوية + الدراما الآسيوية بث حي +18 فيديو @@ -435,7 +435,7 @@ عرض مستودعات المجتمع قائمة عامة جميع الترجمات حروف كبيرة - تحميل جميع الإضافات من هذا المستودع\? + تحذير: لا يتحمل CloudStream 3 أي مسؤولية عن استخدام ملحقات الطرف الثالث ولا يقدم أي دعم لها! %s (معطل) المسارات مسار الصوت @@ -631,7 +631,7 @@ افتح التطبيق باستخدام بصمة الإصبع ومعرف الوجه ورقم التعريف الشخصي والنمط وكلمة المرور. فتح سحابة البث مصادقة كلمة المرور/رقم التعريف الشخصي - تم إغلاق هذه الشاشة بسبب عدة محاولات فاشلة. الرجاء إعادة تشغيل التطبيق. + بعد عدة محاولات فاشلة، سيتم إغلاق المطالبة. ما عليك سوى إعادة تشغيل التطبيق للمحاولة مرة أخرى. لقد تم الآن نسخ بيانات CloudStream احتياطيًا. على الرغم من أن احتمال حدوث ذلك منخفض جدًا، إلا أن جميع الأجهزة يمكن أن تتصرف بشكل مختلف. في الحالات النادرة، التي يتم فيها منعك من الوصول إلى التطبيق، قم بمسح بيانات التطبيق بالكامل واستعادتها من نسخة احتياطية. نحن نأسف جدًا لأي إزعاج ناتج عن هذا. %s \nمتبقي @@ -646,8 +646,24 @@ غير قادر على فتح معلومات تطبيق CloudStream. كتاب صوتي حسناً - لضمان عدم انقطاع التنزيلات والإشعارات للبرامج التلفزيونية المشتركة، يحتاج CloudStream إلى إذن للتشغيل في الخلفية. بالضغط على موافق، سيتم توجيهك إلى معلومات التطبيق. هناك، انتقل إلى استخدام بطارية التطبيق -\nواضبط استخدام البطارية على غير مقيد. يرجى ملاحظة أن هذا الإذن لا يعني أن CS3 سوف يستنزف البطارية. ولن يعمل إلا في الخلفية عند الضرورة، كما هو الحال عند تلقي الإشعارات أو تنزيل مقاطع الفيديو من الملحقات الرسمية. إذا اخترت الإلغاء، فيمكنك ضبط هذا الإعداد لاحقًا في الإعدادات العامة. + لضمان عدم انقطاع التنزيلات والإشعارات للبرامج التلفزيونية المشتركة، يحتاج CloudStream إلى إذن للتشغيل في الخلفية. بالضغط على موافق، سيتم توجيهك إلى معلومات التطبيق. هناك، انتقل إلى 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 واضبط استخدام البطارية على 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. يرجى ملاحظة أن هذا الإذن لا يعني أن CS3 سوف يستنزف البطارية. ولن يعمل إلا في الخلفية عند الضرورة، كما هو الحال عند تلقي الإشعارات أو تنزيل مقاطع الفيديو من الامتدادات الرسمية. إذا اخترت الإلغاء، فيمكنك ضبط هذا الإعداد لاحقًا في 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. موسيقى الوسائط - + اعادة تعيين + قادم خلال %s + سيتم إصدار الحلقة %1$d من الموسم %2$d في + مرآة البث + بث ف + حدد جهاز البث + CloudStream ويكي + إعدادات الأمان + الحسابات + صورة رمز الاستجابة السريعة + تجاهَل + فتح المستودع + لقد انتهت صلاحية الرمز السري الآن! + تحقق محليا + قم بزيارة %s على هاتفك الذكي أو جهاز الكمبيوتر وأدخل الرمز أعلاه + لا يمكن الحصول على رمز PIN للجهاز، حاول المصادقة المحلية + تنتهي صلاحية الرمز خلال %1$dm %2$ds + \ No newline at end of file diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml new file mode 100644 index 00000000..8d151d71 --- /dev/null +++ b/app/src/main/res/values-as/strings.xml @@ -0,0 +1,624 @@ + + + %1$s এপি %2$d + পোস্টাৰ + এপিস\'দ পোস্টাৰ + মুখ্য পোস্টাৰ + পিছলৈ যাওক + ৰেটিং: %.1f + ছেটিংছ + অনুসন্ধান কৰক… + %s ত অনুসন্ধান কৰক… + ডাউনল\'ড কৰি আছে + পৰামৰ্শ চাওক + প্লেয়াৰৰ গতি + সাবটেক্সটৰ ৰং + এজেৰ ধৰণ + চালনালৈ অবন্ধ কৰক + প্লট + লগ ক্যাট চাওক + লগ + বেকআপ ত্ৰুটি %s + অনুসন্ধান + গ্ৰন্থাগাৰ + হিসাব আৰু সুৰক্ষা + উন্নয়ন আৰু বেকআপ + স্বয়ংক্ৰিয়ভাৱে প্লাগইন ডাউনল\'ড কৰক + প্লাগইন ডাউনল\'ড ম’ড নিৰ্বাচন কৰক + নিষ্ক্ৰিয়ত আৰম্ভকৰ্তাৰ আদৰ্শ সংগ্ৰহসমূহতৰ প্ৰয়াস হৈছে, আইন্সটল স্বয়ংক্ৰিয়ভাৱে যোগ কৰা হয়। + কাৰ্টুনসমূহ + এনিমে + টৰেণ্টসমূহ + OVA + এছিয়ান ড্ৰামা + লাইভস্ট্ৰিম + NSFW + অন্যান্য + এপত বাজাওক + লিংকসমূহ পুনঃ ল\'ড কৰক + সাবটাইটেল ডাউনল\'ড কৰক + HD চিহ্ন + শিৰোনাম + কোনো উন্নীতকৰণ পোৱা নাই + উন্নীতকৰণ পৰীক্ষা কৰক + আৰম্ভ কৰক না + ভিডিঅ\' প্লেয়াৰৰ শিৰোনামৰ সীমা + বিদ্যমান চাবৰ এটা ক্লোন যোগ কৰক, একটু ভিন্ন urlৰ সৈতে + লিংকসমূহ + আউটলৈন + স্বয়ংক্ৰিয় + password123 + ব্যৱহাৰকাৰীনাম + hello@world.com + 127.0.0.1 + লগ আউট + সমন্বয় সংখ্যা + %d / 10 + /?? + /%d + %s প্ৰমাণিত + %s ত লগ ইন কৰিব পৰা নহয় + অবৈধ ডেটা + অবৈধ url + ত্ৰুটি + সাবটাইটেলৰ পৰা ক্যাপশনসমূহ দূৰ কৰক + উল্লেখক (ঐচ্ছিক) + পৰৱৰ্তী + প্ৰদাতাৰ ভাষা পছন্দ কৰক + গভেয়ান ডাউনলোড + সেটআপ এক্সটেনশনসমূহ + ডাউনলোড হৈছিল: %d + ক্লিপবোৰ্ড অনুমতি দিবলৈ ত্ৰুটি, অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক। + বৰ্ণানুক্রমিক (জ থকা অ পৰা অ) + %d প্ৰকাৰ মুকলো! + সাবস্ক্ৰাইব কৰক + সাবস্ক্ৰাইব পৰা মুকা + প্ৰ’ফাইল %d + পিন এন্টাৰ কৰক + একাউন্ট সম্পাদনা কৰক + মিডিয়া + পুনৰায় ছেট কৰক + অভিনেতা: %s + দেখা হৈ আছে + অবিৰাম দেখিব + সাবটাইটেল + চিত্ৰমূল্যৰ সিষ্টেম ব্যৱহাৰ কৰক + বেকআপ অনুমতি অনুপলব্ধ। অনুগ্ৰহ কৰি পুনৰায় চেষ্টা কৰক। + অল্প + এচডি + সমাপ্ত + সাৰদাৰী ভাণ্ডা + অব্যাহত্‌ + VLCত বাজাওক + বেটাৰী অপটিমাইজেশন অসমৰ্থ + সাবস্ক্ৰাইব কৰা বস্তুসমূহ + মান + যোগ কৰক + পুনৰ্স্থাপন কৰক + ক্লাউডষ্ট্ৰীম অনলক কৰক + বায়োমেট্ৰিক ছেটিংসমূহ + পাছৱাৰ্ড/PIN পুনৰ্প্ৰমাণৰ + সংগীত + অডিঅ’ বুক + পৰৱৰ্তী পৰ্ব %d + পৰৱৰ্তী মৌচৰা %1$d পৰ্ব %2$d + %1$dd %2$dh %3$dm + %1$dh %2$dm + %dm + পোস্টাৰ + প্ৰদাতা সলনি কৰক + পূৰ্বালোচনাৰ পৃষ্ঠপুতী + পৰৱৰ্তী যিনিমূলক + গতি (%.2fx) + পৰৱৰ্তী পৰ্ব + %d মিনিট + ক্লাউডষ্ট্ৰীম + মূল + কোনো ডাটা নাই + অধিক বিকল্পসমূহ + শেয়াৰ কৰক + ব্ৰাউজাৰত খোলক + ব্ৰাউজাৰ + দেখিব প্লেন কৰা হৈছে + টৰেণ্ট ষ্ট্ৰীম কৰক + সংযোগ পুনঃচেষ্টা কৰক… + পিছলৈ যাওক + উৎস বাছনি কৰক + ডাউনলোড হোৱা + ডাউনলোড থমা কৰা হৈছে + ডাউনলোড আৰম্ভ হোৱা + ডাউনলোড বিফল হৈছে + ডাউনলোড বাতিল হৈছে + ডাউনলোড সম্পন্ন হৈছে + আপডেট আৰম্ভ হোৱা + নেটৱৰ্ক ষ্ট্ৰীম + লিংক লোড কৰা বিফল + লিংক পুনৰাবৃত্তি হোৱা + অভ্যন্তৰীণ ষ্ট’ৰেজ + ডাব + ছাবটাইটেল + ফাইল মুছি দিব + ফাইল প্লে কৰক + স্বয়ংক্ৰিয় বাগৰ প্ৰতিবেদন নিষ্ক্ৰিয় কৰক + ডাউনলোড পুনৰাৰম্ভ কৰক + ডাউনলোড থমা কৰক + অধিক তথ্য + লুকুৱা কৰক + খেলা + তথ্য + অপশনটো সংগ্ৰহ বাদ কৰক + সংগ্ৰহৰ তলত যোগ কৰক + সংগ্ৰহৰ ফিল্টাৰ কৰক + সংগ্ৰহ ত্ৰুটি + কপি কৰক + বন্ধ কৰক + পৰিষ্কাৰ কৰক + সংৰক্ষণ কৰক + ভৰসৰ্বক্ষণৰ নাম আৰু URL + প্ৰতিলিপি কৰা হৈছে! + নতুন সদস্যতা + অন্যান্য এক্সটেনছনসমূহত অনুসন্ধান কৰক + সাবটাইটেল ছেটিংছ + আউটলাইনৰ ৰং + পৃষ্ঠপুতীৰ ৰং + উইণ্ডোৰ ৰং + সাবটাইটেলৰ উঁচুতি + ফন্ট + ফন্ট আকাৰ + প্ৰকাৰসমূহে অনুসন্ধান কৰক + সৰব সাধনসমূহে অনুসন্ধান কৰক + %d ডেভল\'পাৰ পৰা বেনেন দিয়া হৈছে + কোনো বেনেন দিয়া নাই + স্বয়ংক্ৰিয় ভাষা বাছনি কৰক + ভাষা ডাউনলোড কৰক + ছাবটাইটেলৰ ভাষা + ডিফল্টৰ পুনৰাৰম্ভ কৰিবলৈ ধাৰণ কৰক + এই প্ৰদাতাৰ সঠিকভাবে কাম কৰিবলৈ এটা VPN প্ৰয়োজন হবে + এই প্ৰদাতা এটা ট\'ৰেণ্ট হৈছে, এটা VPN পৰামৰ্শ দিয়া হল + ফন্ট ইম্প\'ৰ্ট কৰিবলৈ %sত ত থকা প্ৰতিষ্ঠান কৰক + অধিক তথ্য + \@string/home_play + মেটাডাটা ঠিকানাৰ সৈতে প্ৰদান কৰা নাই, যদি এটা ঠিকানাৰ মেটাডাটা নাই তেন্তি ভিডিঅ\' ল\'ড হোৱা নাই। + কোনো বিবৰণ পোৱা নাই + কোনো বিৱৰণ পোৱা নাই + প্লেয়াৰৰ আকাৰ বটাম + কৃষ্টি বোৰ্ডাৰ প্ৰস্তুতি কৰক + ছবি-মাধ্যমে ছবি + অন্য এপ্‌সমূহৰ ওপৰত এটা সন্নিহিত প্লেয়াৰত অবিৰত প্লে কৰা হৈছে + প্লেয়াৰৰ ছাবটাইটেল ছেটিংছ + ক্ৰ\'মকাস্ট ছাবটাইটেল + ক্ৰ\'মকাস্ট ছাবটাইটেল ছেটিংছ + প্লেবেক গতি + প্লেয়াৰত গতিৰ বিকল্প যোগ কৰে + সোধক হওৱাৰ বাবে স্বাইপ কৰক + ভিডিঅ\' ত আপোনাৰ অৱস্থান নিয়ন্ত্ৰণ কৰিবলৈ পাছত থকা দিশত স্বাইপ কৰক + ছেটিংছ সলনী কৰিবলৈ স্বাইপ কৰক + প্ৰকাৰ বা আওতাৰ স্থানত ওপৰত অথবা তলত স্বাইপ কৰক উজ্জ্বলতা অথবা ভলিউম সলনী সলন কৰিবলৈ + স্বয়ংক্ৰিয় পৰবৰ্তী সংযোগ + বর্তমান এটা শেষ হোৱা সময় পৰবৰ্তী সংযোগ আৰম্ভ কৰা + দ্বিগুন টেপ কৰি সন্ধান কৰক + দ্বিগুন টেপ কৰি থম কৰক + প্লেয়াৰ সন্ধান পৰিমাণ (ছেকেন্ড) + অগ্ৰগামী বা পিছত সন্ধান কৰিবলৈ সোহদৰ বা বাঁয়া দিকত দুইবাৰ টেপ কৰক + থমবা নিছবা পৰিমাণ দুইবাৰ টেপ কৰক + অ্যাপ প্লেয়াৰত সিষ্টেমৰ আলোক অভিলাই ব্যৱহাৰ কৰিবলৈ বিষ্টা উলঙ্ঘনস্থিতি ব্যৱহাৰ কৰক + এপিস\'ড সংমিলিত কৰা + আপোনাৰ বৰ্তমান পৰ্বৰ প্ৰগতি স্বয়ংক্ৰিয়ভাবে সমতলীয়া কৰা + বেকআপৰ তথ্য পুনৰায় স্থাপন কৰক + তথ্য বেকআপ কৰক + বেকআপ সংখ্যা + ফাইল %sৰ পৰা তথ্য পুনৰায় স্থাপন কৰা নহয় + তথ্য সংৰক্ষিত হৈছে + তথ্য + বেকআপ ফাইল ল\'ড হৈছে + সুধাৰি অনুসন্ধান + প্ৰদানকাৰীৰ পৰা সন্ধান ফলাফল সোমোৱা + কেৱল দুৰ্ঘটনাত ডাটা পঠাৱ + কোনো ডাটা পঠাৱ নহয় + অনুপ্রেৰণাৰ অধ্যাপক দেখাওঁক + ট্ৰেলাৰ দেখাওঁক + Kitsuৰ পোষ্টাৰ দেখাওঁক + অনুসন্ধান ফলাফলত নিৰ্বাচিত ভিডিঅ’ গুণত্ব লুকাওক + স্বয়ংক্ৰিয় প্লাগইন উন্নয়ন + এপ্লিকেশন উন্নয়ন দেখাওঁক + সেটআপ প্ৰক্ৰিয়া পুনৰাবৃত্তি কৰক + প্ৰি-ৰিলিজ আপডেট কৰক + APK Installer + কিছু ফ’নসমূহ নতুন পেকেজ ইনষ্টলাৰ সমৰ্থন কৰে নাই। আপডেট ইনষ্টল নহয় পৰা পৰীক্ষা কৰক লেগেচি বিকল্প প্ৰয়োগ কৰক। + গিটহাব + একেই ডেভল\'পাৰকৰ লাইট নভেল এপ্‌ + ডিসকৰ্ডত যোগদান কৰক + কোনো লিংক পোৱা নাই + ডেভল\'পাৰকলৈ এখন বিনম্রতা দাওঁক + দিয়া বিনম্রতা + এপ্‌ ভাষা + এই প্ৰদাতাৰ কোনো চ্ৰোমকাছ্ট সমৰ্থন নাই + লিংক ক্লিপবৰ্ডত প্ৰতিলিপি কৰা হৈছে + এপিস\'ড বাজাওঁক + দুঃখিত, অ্যাপ্লিকেশন সংঘটিত হৈছে। অজ্ঞাত বাগ ৰিপ’ৰ্ট ডেভেলপাৰসমূহলৈ পঠাওক + ঋতু + ডিফ’ল্ট মান পুনৰাবৃত্তি কৰক + %1$s %2$d%3$s + কোনো ঋতু নাই + এপিস\'ড + এপিস\'ডসমূহ + %1$d-%2$d + %1$d %2$s + %sত আগবাঢ়িছে + ঋতু + এপিস\' + কোনো এপিস\'ড পোৱা নাই + ফাইল মচি দিব + মচি দিব + বাতিল কৰক + অধিপ্ত কৰক + আৰম্ভ কৰক + অসফল + সফল + আবাৰ আৰম্ভ কৰক + -৩০ + +৩০ + এইটো স্থায়ীভাৱে %s মচি দিব +\nআপুনি নিশ্চিত? + %dm +\nবাকি আছে + %s +\nবাকি আছে + চলিত আছে + সম্পন্ন হৈছে + অবস্থা + বছৰ + ৰেটিং + সময় + চাইট + সাৰাংশ + অপেক্ষাৰত + সাবটাইটেল নাই + ডিফ’ল্ট + মুক্ত + ব্যৱহাৰ কৰা + এপ্‌ স্টোৰেজ + চলচ্চিত্ৰসমূহ + টিভি চলচ্চিত্ৰসমূহ + ডকুমেণ্টাৰিসমূহ + এছিয়ান ড্ৰামা + লাইভস্ট্ৰিমসমূহ + এনএসএফডবলিউ + অন্যান্য + চলচ্চিত্ৰ + সিৰিজ + কাৰ্টুন + অ্যানিমে + OVA + টৰেণ্ট + ডকুমেণ্টাৰী + উৎস ত্ৰুটি + দূৰবৰ্তী ত্ৰুটি + ৰেন্ডাৰাৰ ত্ৰুটি + ডাউনল\'ড ত্ৰুটি, সংৰক্ষণ অনুমতিসমূহ পৰীক্ষা কৰক + অপ্ৰত্যাশিত প্লেয়াৰ ত্ৰুটি + চ্ৰোমকাছ্ট এপিস\'ড + চ্ৰোমকাছ্ট আইনমিৰৰ + আইনমিৰ আদৰণি + ডাব চিহ্ন + %sত বাজাওক + ব্ৰাউজাৰত বাজাওক + লিংক প্ৰতিলিপি কৰক + স্বয়ংক্ৰিয় ডাউনল\'ড + আদৰণি ডাউনল\'ড কৰক + উপশিৰোনিৰ চিহ্ন + প\'ষ্টাৰৰ UI উপাদানসমূহ ট\'গল কৰক + ল\'ক + ৰিসাইজ + উৎস + আপডেট + পছন্দসই দেখাৰ গুণত্ব (WiFi) + অপ স্কিপ কৰক + এই আপডেটটো প্ৰস্থান কৰক + পছন্দসই দেখাৰ গুণত্ব (মোবাইল ডেটা) + ভিডিঅ\' প্লেয়াৰৰ আৰুণিমা + ভিডিঅ\' বাফাৰৰ আকাৰ + ভিডিঅ\' বাফাৰৰ লম্বা + ডিস্কত ভিডিঅ\' কেচ কৰক + ভিডিঅ\' আৰু চিত্ৰ কেচ মুক্ত কৰক + প্লেয়াৰ দৃশ্যমান হ\'লে ব্যৱহাৰ কৰা সন্ধান পৰিমাণ + প্লেয়াৰ লুকুৱাওলৈ - সন্ধান পৰিমাণ + প্লেয়াৰ দেখা হোৱালৈ - সন্ধান পৰিমাণ + প্লেয়াৰ লুকুৱা হ\'লে ব্যৱহাৰ কৰা সন্ধান পৰিমাণ + যদি স্তন্যপান উচ্চত নিৰ্ধাৰিত হ\'লে, অন্যত্ৰ সঞ্চয় স্থানত সন্দেহ ঘটিব। উদাহৰণস্বৰূপ, এছিয়ান টিভি। + DNS ওভাৰ HTTPS + যদি স্তন্যপান উচ্চত নিৰ্ধাৰিত হ\'লে, অন্যত্ৰ মেম\'ৰী সন্ধানৰ যন্ত্ৰসমূহত সন্দেহ ঘটিব। উদাহৰণস্বৰূপ, এছিয়ান টিভি। + আইএছপি ব্লক পাৰ কৰিবলৈ কাৰ্যকাৰী + চাব চাওঁক + GitHub প্ৰক্সি + GitHub প্ৰাপ্য নাই। jsDelivr প্ৰক্সি অন কৰা হচ্ছে… + jsDelivr ব্যৱহাৰ কৰি সোধ গুগল url ব্লক অনলাইন কৰক। কিছুদিনৰ মাজত আপডেট ল\'ওক দিব পাৰে। + চাব আঁতৰাওক + ডাউনল\'ড পাথ + NGINX চাৰ্ভাৰ url + ডাব কৰা/সাব কৰা অ্যানিমে প্ৰদৰ্শন কৰক + স্ক্ৰীনলৈ সজাব কৰক + পৰবৰ্তী কৰক + অকৃত্রিম নোটিশ + আইএছপি পাৰ কৰা + জুম কৰক + এপ্ আপডেটসমূহ + বেকাপ + এক্সটেনচনসমূহ + ক্ৰিয়াসমূহ + কেচ + এণ্ড্ৰোইড টিভি + হাস্য + প্লেয়াৰৰ বৈশিষ্ট্য + উপশিৰোতা + লে\'আ\'উট + ডিফ’ল্টসমূহ + দেখুৱাই + বৈশিষ্ট্যসমূহ + সাধাৰণ + যিতা বুটাম + হোমপেজ আৰু লাইব্ৰেৰিত যিতা বুটাম দেখোৱা + সুপালৈক ভাষাসমূহ + এপ্ লে\'আ\'উট + পছন্দসই মিডিয়া + সুবিধা দিয়া সময় NSFW সক্ষম কৰক + উপশিৰোতা ক\'ডিং + প্ৰদাতা + প্ৰদাতা পৰীক্ষা + সকলো এক্সটেনচনসমূহ পৰীক্ষা কৰক + এই পৰীক্ষা কেৱল উন্নীতকাৰীসমূহলৈ পৰমিট আৰু বাৰ্তা কৰা হৈছে আৰু কেইকোনো এক্সটেনচনৰ কাৰ্যক্ষম বা অকাৰ্যক্ষমতা প্ৰমাণিত নহয়। + টিভি লে\'আ\'উট + এমুলেটৰ লে\'আ\'উট + প্ৰাথমিক ৰং + এপ্ থীম + প\'ষ্টাৰ শিৰোনাম অৱস্থান + ফোন লে\'আ\'উট + প\'ষ্টাৰ তলত শিৰোনাম দিয়ক + নতুন সাইটৰ নাম + https://example.com + ভাষা ক\'ড (en) + %1$s %2$s + একাউন্ট + লগ ইন + একাউন্ট পৰিবৰ্তন কৰক + একাউন্ট যোগ কৰক + একাউন্ট সৃষ্টি কৰক + ট্ৰেকিং যোগ কৰক + কোনোবিলাক + সাধাৰিত + %s যোগ কৰা হৈছে + সিঙ্ক + অক্ষম কৰক + সকল + অধিকতম + আউটলাইন + ডিপ্ৰেছড + ছাড়া + 1000 মিলিছেকেন্ড + উঁচুহোৱা + উপশিৰোতা সিংক + উপশিৰোতা দেলাই + যদি উপশিৰোতা %d মিলিছেকেন্ড পূৰ্ববৰ্তী দেখা যায় তেন্ত এইটো ব্যৱহাৰ কৰক + কোনো উপশিৰোতা বিলম্ব নাই + যদি উপশিৰোতা %d মিলিছেকেন্ড পূৰ্ববৰ্তী দেখা যায় না তেন্ত এইটো ব্যৱহাৰ কৰক + দ্রুত মাৰেল ভুঁটি সোমালী কুকুৰা ধীৰে + অনুমোদিত + %s লোড কৰা হৈছে + ফাইলৰ পৰা লোড কৰক + ইন্টাৰনেটৰ পৰা লোড কৰক + পছৱা + ডাউনলোড কৰা ফাইল + উৎস + প্ৰধান + যাত্রা + শীঘ্ৰই আসিব… + সহায়ক + ক্যাম + ক্যাম + ক্যাম + এইচকিউ + এইচডি + টিএছ + ব্লু-ৰে + ডব + টিসি + ডিভিডি + ৪কে + ইউএচডি + এইচডিৰ + এসডিৰ + ওয়েব + পোষ্টাৰ ছবি + প্লেয়াৰ + দৰ্শনীয়তা আৰু শীৰ্ষক + শীৰ্ষক + দৰ্শনীয়তা + অবৈধ আইডি + পছন্দৰ মিডিয়া ভাষাৰ দ্বাৰা ফিল্টাৰ কৰক + সাবটাইটেলত ব্লোট দূৰ কৰক + অতিৰিক্ত + ট্ৰেলাৰ + ক্ৰেশ ৰিপ\'টিং + https://example.com/example.mp4 + পূৰ্বৱৰ্তী + ছেটআপ প্ৰস্থান কৰক + আপোনাৰ ডিভাইচ অনুযায়ী এপ্পৰ প্ৰস্তুতি সলনি কৰক + আপুনি কি চাব + এক্সটেনছনসমূহ + প্ৰায়ণশাল যোগ কৰক + প্ৰায়ণশালৰ নাম + প্ৰায়ণশাল URL + প্লাগইন লোড হোৱা হৈছে + প্লাগইন ডাউনলোড হোৱা হৈছে + প্লাগইন মুছিলো + %s লোড কৰিব পৰা নহয় + ১৮+ + %1$d %2$s ডাউনলোড আৰম্ভ কৰা হ’ল… + %1$d %2$s ডাউনলোড কৰা হ’ল + সকলো %s ইতিমধ্যে ডাউনলোড কৰা হৈছে + ৰিপ’চ্যুটৰীত কোনো প্লাগইন পোৱা নাই + প্লাগইন + প্লাগইনসমূহ + ৰিপ’চ্যুটৰি পোৱা নাই, URL চেক কৰক আৰু VPN চেক কৰক + এইটো আৰুও ৰিপ’চ্যুটৰীত সকলো প্লাগইন মুছিব + ৰিপ’চ্যুটৰি মুছিব + %d প্লাগইন আপডেট কৰা হ’ল + নিষ্ক্ৰিয় কৰা হ’ল: %d + ডাউনলোড হোৱা নাই: %d + ক্লাউডস্ট্ৰীমত ডিফ’ল্টত কোনো বেছি সাইট ইনষ্টল কৰা নাই। আপোনাৰ এটি পৰিৱেশনত থকা সাইটসমূহ ইনষ্টল কৰিব লাগিব। +\n +\nআমাৰ ডিসক’ৰ্ডত যোগদান কৰক অথবা অনলাইনত সন্ধান কৰক। + সম্প্রদায়ৰ প্ৰায়ণশালসমূহ চাওক + সকলো সাবটাইটেলৰ মাজতে আপাৰ আকাৰত লিখক + এই প্ৰায়ণশালৰ সকলো প্লাগিন ডাউনলোড কৰিব? + %s (অক্ষম কৰা আছে) + পথসমূহ + অডিঅ’ পথসমূহ + ভিডিঅ’ পথসমূহ + প্ৰযোগ সলনি কৰিবলৈ এপ্‌লিকেছন পুনৰ আৰম্ভ কৰক। + পুনৰ আৰম্ভ কৰক + নিৰাপদ প্ৰণামী চালু + এপ্প সমস্থ একটি দ্বিঘাতৰ ফলে সমস্থ এক্সটেনছন নিষ্ক্ৰিয় কৰা হৈছিল যিতে আপোনাক কিবা সমস্যা আছে তা চেনা নিব পাৰে। + দ্বিঘাতৰ তথ্য চাওক + ৰেটিং: %s + বিৱৰণ + সংস্কৰণ + অৱস্থা + আকাৰ + লেখক + সমৰ্থিত + ভাষা + শীৰ্ষকত প্লাগিনটো ইনষ্টল কৰক + এপ্‌লিকেছন পোৱা নহয় + সকলো ভাষা + %s অপচাৰ কৰক + ওপনিং + শেষ + পুনৰাবৃত্তি + HLS প্লেলিষ্ট + পছন্দৰ ভিডিঅ’ প্লেয়াৰ + আইণ্টাৰনেল প্লেয়াৰ + MPV + Web ভিডিঅ’ কাষ্ট + Fcast + Web ব্ৰাউজাৰ + কাষ্ট ডিভাইচ নিৰ্বাচন কৰক + মিছিণ শেষ + মিছিণ আৰম্ভ + ইতিহাস মুকা + শ্ৰেয়া + প্ৰস্তাবনা + ইতিহাস + ডাটাবেছত প্ৰবেশ/শেষৰ বাবে পপাপ দেখাওক + বেছি পাঠ্য। ক্লিপব’ৰ্ডত সংৰক্ষণ কৰিব নোৱা যায়। + কপি কৰিবলৈ ত্ৰুটি, অনুগ্ৰহ কৰি লগকেট কপি কৰি অ্যাপ সমৰ্থনকৰ্তাৰ সৈতে যোগাযোগ কৰক। + চাওক হিচাপে চিহ্নিত কৰক + চাওক হিচাপৰ পৰা মুকা + হয় + নহয় + ঠিক আছে + আপুনি নিশ্চিত হৈছে যে আপুনি প্ৰস্থান কৰিব বিচাৰে? + অ্যাপ্‌ৰ বেটেৰি ব্যৱহাৰ ইতিমধ্যে অসীমিত হ’লে + সাবস্ক্ৰাইব কৰা TV সেৰাৰ বাবে অবিচ্ছিন্ন ডাউনলোড আৰু বিজ্ঞাপনৰ বাবে নোটিফিকেশনৰ বাবে, ক্লাউডষ্ট্ৰিমৰ অনুমতি প্ৰয়াপ্ত কৰিবলৈ পৃষ্ঠভূমিত চলকৰ বাবে অনুমতি প্ৰয়াপ্ত কৰিবলৈ লাগে। ঠিক আছে টিপিবলৈ, আপুনি এপ তথ্যলৈ দীঘল হৈ যাব। তত্ত্বাবধানে, ইয়াৰ ব্যৱহাৰ ক্লাউডষ্ট্ৰিমক আপোনাৰ বেটাৰী সেক্ষাৰ কৰিব নাই অৰু। ইয়া শুধু প্ৰয়োজনীয় হোৱা সময়ত বেক্গ্‌গ্‌ত অতিৰিক্ত কাৰ্য কৰিবলৈ অপাৰে, যেনে নোটিফিকেশন সোধা আৰু আধিকাৰিক প্ৰস্তাবনাৰ ভিডিঅ’স ডাউনলোড কৰিবলৈ। যদি আপুনি বাতিল কৰিব বাচন কৰিছে, আপুনি পৰেন্তু সেটিং ইয়াৰ পিছতে ক্রোয়জবলৈ চাব পাৰে জেনে গওঁক সেটিংছ। + ক্লাউডষ্ট্ৰীমৰ অ্যাপ্‌ তথ্য খোলাত অসমৰ্থ + অ্যাপ্‌ৰ নতুন সংস্কৰণ ইনষ্টল কৰিব পৰা নাই + অ্যাপ্‌ আপডেট ডাউনলোড হৈছে… + অ্যাপ্‌ আপডেট ইনষ্টল হৈছে… + পুৰণৰূপ + পেকেজ ইনষ্টলাৰ + অ্যাপ্‌ প্ৰস্থানত আপডেট হৈ যাব + ক্ৰমৰ অনুযায়ী + সাজোৱা + ৰেটিং (উচ্চ থকাৰ পৰা নিম্ন) + ৰেটিং (নিম্ন থকাৰ পৰা উচ্চ) + আপডেট হোৱা (নতুনৰ পৰা পুৰণৰূপ) + আপডেট হোৱা (পুৰণৰূপৰ পৰা নতুন) + বৰ্ণমালা (এ থকা জে পৰা জে) + গোটি বাছক কৰক + সৈতে খোলক + আপোনাৰ গোটিটো খালি আছে :( +\nগোটিত প্ৰৱেশ কৰিবলৈ এখনকা একাউণ্টত লগিন কৰক নাইবা আপোনাৰ স্থানীয় গোটিত চইক যোগ কৰক। + এই তালিকাটো খালি আছে। আৰু এটা অন্য এটা তালিকাত স্থানান্তৰ কৰিব চেষ্টা কৰক। + নিৰাপত ম’ড ফাইল পোৱা গৈছে! +\nফাইল মুকা হোৱা পৰা প্ৰাৰম্ভত কোনো এক্সটেনচন লোড কৰা হ’ব নহয়। + পুনৰ প্ৰয়াণ কৰক + সাবস্ক্ৰাইব কৰা প্ৰদর্শন আপডেট হৈ আছে + %s সাবস্ক্ৰাইব কৰা হ\'ল + %s পৰা সাবস্ক্ৰাইব কৰা হ\'ল + ওয়াইফাই + মোবাইল ডাটা + ডিফ’ল্ট ঠিকনা কৰক + ব্যৱহাৰ কৰক + সম্পাদনা কৰক + প্ৰ’ফাইলসমূহ + সাহায্য + ইয়াত আপুনি সৃষ্টিগত উৎসসমূহ কেমানে সাজোৱা পৰিবৰ্তন কৰিব পাৰে। যদি এটা ভিডিঅ’ এটা উচ্চ অগ্ৰাধিকাৰ থাকে তেনেহলে ই উচ্চ মানৰ উৎস বাছনি তথ্যত প্ৰদৰ্শিত হ\'ব। উৎসৰ প্ৰাথমিকতা আৰু মানৰ প্ৰাথমিকতাৰ যোগফল ভিডিঅ’ৰ প্ৰাথমিকতা হ’ব। +\n +\nউৎস A: 3 +\nগুণগত মান B: 7 +\n10 এৰি মানৰ এটা সংযুক্ত ভিডিঅ’ প্ৰাথমিকতা থাকিব। +\n +\nনোট: যদি যোগফল 10 বা তাতো অধিক হ\'ব তেনেহলে প্লেয়াৰ আটোমেটিকলি সেই লিংক লোড হোৱা সময়ত লোড কৰিব নোৱা হ\'ব! + প্ৰ’ফাইল পৃষ্ঠভূমি + ইউআই সঠিকভাৱে সৃষ্টি কৰা নাই, এটা মুখ্য বুগ আৰু অধীৰ অনুমতি দিয়া হোৱা উচিত এইটো পৰ্যন্ত প্ৰতিবেদন কৰক %s + আপুনি ইতিমধ্যে ভোট দিয়া আছে + প্ৰিয়মূল্য বিষয়বস্তুসমূহ + %s প্ৰিয়মূল্য বিষয়বস্তুসমূহত যোগ কৰা হ\'ল + %s প্ৰিয়মূল্য বিষয়বস্তুসমূহৰ পৰা আঁতৰাই কৰা হ\'ল + প্ৰিয়মূল্য বিষয়বস্তুসমূহত যোগ কৰক + প্ৰিয়মূল্য বিষয়বস্তুসমূহৰ পৰা আঁতৰাই কৰক + সম্ভাৱ্য ডুপ্লিকেট পোৱা গৈছে + সকলোত প্ৰতিস্থাপন কৰক + আপোনাৰ গোটিত এটা সম্ভাব্য ডুপ্লিকেট আইটেম অলপ অস্তিত্বত আছে: \'%s\' +\n +\nআপুনি ই আইটেমটো সংযোগ কৰিব বিচাৰে নে, বৰং ইতিমধ্যে থকা আইটেমটো সংস্কৰণ কৰিব নে, নাইবা অ্যাকছনটো বাতিল কৰিব? + আপোনাৰ গোটিত এক সম্ভাব্য ডুপ্লিকেট আইটেম অনেক অস্তিত্বত আছে: +\n +\n%s +\n +\nআপুনি ই আইটেমটো সংযোগ কৰিব বিচাৰে নে, বৰং ইতিমধ্যে থকা আইটেমটোসমূহ সংস্কৰণ কৰিব নে, নাইবা অ্যাকছনটো বাতিল কৰিব? + %sৰ বাবে PIN এন্টাৰ কৰক + বৰ্তমান পিন এন্টাৰ কৰক + প্ৰ’ফাইল লক কৰক + পিন + অশুদ্ধ পিন। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক। + পিনটো 4 বৰ্ণ থাকিব লাগিব + এটা একাউন্ট নিৰ্বাচন কৰক + একাউন্টসমূহ পৰিচালনা কৰক + প্ৰস্থানত একাউন্ট নিৰ্বাচন পাছ দিব + ডিফ’ল্ট একাউন্ট ব্যৱহাৰ কৰক + ঘূৰাওক + %sৰ হিচাপে লগ ইন কৰা হৈছে + স্ক্ৰীনৰ অৰিএণ্টেশ্বনৰ বাবে ট’গল বুটাম প্ৰদৰ্শন কৰক + ভিডিঅ’ৰ অৰিএণ্টেশ্বনৰ ভিত্তিত স্বয়ংক্ৰিয় স্ক্ৰীনৰ অৰিএণ্টেশ্বন প্ৰবণ কৰক + স্বয়ংক্ৰিয় ঘূৰাওক + প্ৰিয়মূল্যহীন + এই ডিভাইচত বায়োমেট্ৰিক পুনৰ্প্ৰমাণৰ সমৰ্থন কৰা নাই + আঙুলি ছাঁচ ব্যৱহাৰ কৰি, মুখৰ চিত্ৰ, PIN, প্ৰণালী আৰু পাছৱাৰ্ডৰ সৈতে অ্যাপ্‌ আনলক কৰক। + প্ৰিয়মূল্য + এই স্ক্ৰীন একাধিক অসফল চেষ্টাৰ কাৰণে বন্ধ হৈছিল। অনুগ্ৰহ কৰি অ্যাপ্লিকেশ্বন পুনৰ্‌ আৰম্ভ কৰক। + আপোনাৰ CloudStream ডাটা এতিয়া বেকআপ কৰা হৈছে। হৈচঁদিক এই সম্ভাবনা বেছি নাই, সকলো ডিভাইচত বিভিন্নভাৱে আচৰণ কৰিব পাৰে। যদিচয় আপুনি এপ্পটো প্ৰৱেশ কৰাৰ বন্ধ হৈ যাওৱাৰ অভাবতে, অ্যাপ্‌ৰ তথ্য পূৰ্ণভাৱে মচলা কৰক আৰু এক বেকআপৰ পৰা প্ৰতিস্থাপন কৰক। এই বিষয়ত উদ্ভাবিত যোৱা অসুবিধাৰ বাবে আমি অত্যন্ত দুঃখী। + ডাউনলোড কৰক + এপ্‌টোক আৰম্ভ কৰাৰ পাছত নতুন উন্নয়নসমূহ স্বয়ংক্ৰিয়ভাৱে খোঁজি পাওক। + পূৰ্ণ মুক্তি প্ৰাপ্ত কৰিবলৈ প্ৰি-ৰিলিজ উন্নয়ন খোঁজি পাওক। + একেই ডেভল\'পাৰকৰ অনিমে এপ্‌ + নতুন আপডেট পাইছো! +\n%1$s -> %2$s + ফিলাৰ + CloudStream ৰ জৰিয়তে খেলোৱা + সন্ধান + ডাউনলোডসমূহ + টেগসমূহ + লোডিং এৰি যাওক + লোড হৈ আছে… + ধৰি ৰখা হৈ আছে + সম্পন্ন হৈ গ\'ল + এৰি দিয়া হৈছে + পুনৰাবৃত্তি কৰা হৈ আছে + চলচ্চিত্ৰ খেলাওক + ট্ৰেলাৰ খেলাওক + লাইভষ্ট্ৰীম খেলাওক + ছাবটাইটেল বাছনি কৰক + পৰ্ব খেলাওক + প্ৰয়োগ কৰক + \ No newline at end of file diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 2be08369..5a104444 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -422,7 +422,7 @@ Вижте хранилищата на общността Публичен списък Всички субтитри с главни букви - Изтегляне на всички добавки от това хранилище\? + Изтегляне на всички добавки от това хранилище? %s (Деактивиран) Потоци Аудио потоци @@ -601,4 +601,4 @@ Покажи предложения Добавя опция за промяна на скоростта в плеъра Този тест е направен за програмисти и не проверява работата на никакви добавки. - + \ No newline at end of file diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 867dd4ed..ccd9e433 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -56,7 +56,7 @@ ডাউনলোড শুরু ডাউনলোড বাদ ডাউনলোড শেষ - স্ট্রিম + নেটওয়ার্ক স্ট্রিম লিংক লোডিং ব্যর্থ ডাব সাব @@ -119,7 +119,7 @@ ক্রোমক্যাস্ট এ সাবটাইটেল সমূহের সেটিংস কালো প্রান্ত অপসারণ করুন অনুসন্ধান করুন - অ্যাকাউন্টসমূহ + অ্যাকাউন্টসমূহ এবং নিরাপত্তা কোনো উপাত্ত পাঠাবে না বিরতি দিতে মাঝে দুইবার চাপুন সিস্টেম এর উজ্জ্বলতা ব্যবহার করুন @@ -143,7 +143,7 @@ পোস্টার @string/home_play আগাতে ডবল ট্যাপ করুন - আইজেনগ্রাভি মোড + প্লেব্যাক এর গতি আপডেট শুরু হয়েছে ব্রাউজার লগ @@ -229,4 +229,134 @@ আপনার বর্তমান পর্বের অগ্রগতি স্বয়ংক্রিয়ভাবে সিঙ্ক করুন প্লাগইন ডাউনলোড ফিল্টার করতে মোড নির্বাচন করুন লিঙ্ক পুনরায় লোড হয়েছে - + সুইচ অ্যাকাউন্ট + ব্রাউজারে প্লে করুন + দাবিত্যাগ + এশিয়ান ড্রামা + সোর্স + এক্সটেনশন + লিংকস + এনএসএফডব্লিউ + ডাউনলোড মিরর + অপ্রত্যাশিত প্লেয়ার এর সমস্যা + সাবটাইটেল ডাউনলোড করুন + রিপোজিটরির নাম এবং ইউ আর এল + কপি করা হয়েছে! + অ্যান্ড্রয়েড টিভির মতো, কম মেমরির ডিভাইসে খুব বেশি সেট করা হলে সমস্যা করবে। + ক্লোন সাইট + প্লেয়ারের ফিচার + MAL AniList TMDB IMDB Kitsu Trakt %1$s%2$s + অ্যাপ থিম + রিকমেন্ডেশনগুলো দেখাও + প্লেয়ারে গতির বিকল্প যোগ কর + %1$s %2$d%3$s + কার্টুন + এনিমে + পোস্টারে ইউ আই উপাদান টগল করুন + আপডেট চেক করুন + রিসাইজ + ওপেনিং স্কিপ করুন + ডিক্সের ভিডিও ক্যাশ + ভিডিও এবং ইমেজ ক্যাশ পরিস্কার করুন + অ্যান্ড্রয়েড টিভির মতো, কম মেমরির ডিভাইসে খুব বেশি সেট করা হলে ক্র্যাশ করবে + ডিএনএস ওভার এইচটিটিপিএস + একটি ভিন্ন URL সহ একটি বিদ্যমান সাইটের, একটি ক্লোন যোগ করুন + স্ক্রিনে ফিট করুন + ক্যাশ + লেআউট + টিভি লেআউট + ব্যবহারকারীর নাম + %1$d-%2$d + NewSiteName + ডিফল্ট + OVA + ওভিয়ে + টরেন্ট + এপিসোড ক্রোমকাস্ট করুন + প্লে হচ্ছে %s সময়ের মধ্যে + লিঙ্ক কপি করুন + স্বয়ংক্রিয় ডাউনলোড + টাইটেল + প্লেয়ার দেখা যাচ্ছে - সিকের পরিমাণ + রিমুভ সাইট + NGINX সার্ভারের ইউআরএল + আইএসপি বাইপাস + অ্যান্ড্রয়েড টিভি + সমর্থিত এক্সটেনশনগুলিতে NSFW সক্ষম করুন + সাবটাইটেল এনকোডিং + দেখার ধরন + ফিচার সমূহ + হোমপেজ এবং লাইব্রেরিতে এলোমেলো বোতাম দেখান + প্রদানকারী + প্রদানকারী পরীক্ষা + স্বয়ংক্রিয় + ফোন লেআউট + পোস্টার শিরোনামের অবস্থান + পোস্টারের নীচে শিরোনাম রাখুন + প্রবেশ করুন + অ্যাকাউন্ট তৈরি করা + একাউন্ট যোগ করা + যখন প্লেয়ার হিডেন থাকবে তখন সিকের পরিমান + ক্রোমকাস্ট মিরর + এক্সটেনশন ভাষা + লেআউট + সাবটাইটেল + অ্যাকশন + ভিডিও প্লেয়ারের টাইটেল এ সর্বোচ্চ ক্যারেক্টার + ডকুমেন্টারি + অ্যাপ লেআউট + ভিডিও + বেকাপ + E + S + hello@world.com + https://example.com + নতুন এপিসোডের নোটিফিকেশন + অন্য এক্সটেনশনের মধ্যে খুঁজুন + কোন আপডেট পাওয়া যায়নি + password123 + আসছে %s সময়ের মধ্যে + বাতিল করুন + %s +\nঅবশিষ্ট + লাইভ স্ট্রিম + সোর্স সমস্যা + রিমোট সমস্যা + রেন্ডারের সমস্যা + ডাউনলোডের সমস্যা, স্ট্রোরেজদের পারমিশন চেক করুন + অ্যাপ এ প্লে করুন + লিংক রিলোড করুন + কোয়ালিটি লেবেল + সাব লেবেল + ডাব লেবেল + লক + আর দেখাবেন না + এই আপডেট স্কিপ করুন + আপডেট + ওয়াইফাই তে যে কোয়ালিটিতে দেখতে চান + মোবাইল ডাটায় যে কোয়ালিটিতে দেখতে চান + ভিডিও প্লেয়ারে রেজুলেশন + ভিডিও বাফার সাইজ + ভিডিও বাফার লেনথ + যখন আইএসপি ব্লক করবে তখন কার্যকরী + গিডহাব প্রক্সি + ডাউনলোডের পথ + ডাব/সাব এনিমে দেখান + স্ট্রেচ + বড় করুন + অ্যাপ আপডেট + গ্যাসচার + ডিফল্ট + সাধারণ + এলোমেলো বোতাম + পছন্দের মিডিয়া + সমস্ত এক্সটেনশন পরীক্ষা করুন + এই পরীক্ষাটি শুধুমাত্র ডেভেলপারদের জন্য এবং কোন এক্সটেনশনের কাজ যাচাই বা অস্বীকার করে না। + এমুলেটর লেআউট + প্রাইমারি রং + 127.0.0.1 + Language code (en) + অ্যাকাউন্ট + প্রস্থান + %1$d%2$s + \ No newline at end of file diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 40847edf..3042fa21 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -422,7 +422,7 @@ Ver repositórios da comunidade Lista pública Todas as legendas em maiúsculas - Transferir todos os plugins deste repositório\? + Atenção: CloudStream 3 não assume nenhuma responsabilidade pelo uso de extensões de terceiros e não fornece nenhum suporte para elas! %s (Desativado) Reproduzir automaticamente próximo episódio Começa o próximo episódio quando o atual termina @@ -622,7 +622,7 @@ Autenticação de Senha/PIN A autenticação biométrica não é compatível com este dispositivo Desbloquear o aplicativo com impressão digital, ID facial, PIN, padrão e senha. - Esta tela foi fechada devido a diversas tentativas malsucedidas. Por favor reinicie o aplicativo. + Após algumas tentativas fracassadas, o prompt será fechado. Basta reiniciar o aplicativo para tentar novamente. %s \nrestante(s) Favorito @@ -639,4 +639,21 @@ Música Áudio-livro Mídia - + Redefinir + Próximos em %s + Temporada %1$d Episódio %2$d será lançado em + Fcast + Selecione o dispositivo de transmissão + Espelhar transmissão + CloudStream Wiki + Segurança + Contas + Autenticação local + Imagem do código QR + Descartar + Abrir repositório + Acesse %s em seu smartphone ou computador e digite o código acima + Não é possível obter o código PIN do dispositivo, tente a autenticação local + O código PIN expirou! + O código expira em %1$dm %2$ds + \ 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 0a8cf997..e1c51874 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -489,7 +489,7 @@ Přidat klon existujícího webu s jinou adresou URL https://example.com Kód jazyka (cs) - Stáhnout všechny doplňky z tohoto repozitáře\? + Varování: CloudStream 3 nenese žádnou zodpovědnost za používání rozšíření třetích stran a neposkytuje pro ně žádnou podporu! %s (zakázáno) Stopy NSFW @@ -623,7 +623,7 @@ Ověření heslem/PINem Biometrické ověření není na tomto zařízení podporováno Odemkněte aplikaci otiskem prstu, obličejem, PINem, gestem nebo heslem. - Tato obrazovka byla po několika nezdařilých pokusech uzavřena. Restartujte prosím aplikaci. + Po několika nezdařilých pokusech se okno zavře. Pro opětovný pokus restartujte aplikaci. Vaše data z aplikace CloudStream byla nyní zálohována. Ačkoli je tato možnost velmi malá, různá zařízení se mohou chovat různě. Ve výjimečném případě, že se vám přístup k aplikaci zablokuje, data aplikace zcela vymažte a obnovte je ze zálohy. Velmi se omlouváme za případné nepříjemnosti z toho plynoucí. Odebrat z oblíbených %s @@ -641,4 +641,21 @@ Zakažte optimalizace baterie Aby bylo zajištěno nepřetržité stahování a upozornění na odebírané seriály, potřebuje aplikace CloudStream povolení ke spuštění na pozadí. Stisknutím tlačítka OK budete přesměrováni na informace o aplikaci. Tam přejděte na položku Využití baterie aplikací a nastavte možnost Využití baterie na hodnotu Neomezené. Upozorňujeme, že toto povolení neznamená, že CS3 bude vybíjet baterii. Na pozadí bude pracovat pouze v případě potřeby, například při přijímání oznámení nebo stahování videí z oficiálních rozšíření. Pokud se rozhodnete toto nastavení zrušit, můžete jej později upravit v Obecných nastaveních. Audiokniha - + Resetovat + Vychází %s + Epizoda %2$d ze série %1$d bude vydána za + Vysílat zrcadlení + Fcast + Vyberte zařízení k vysílání + CloudStream Wiki + Zabezpečení + Obrázek QR kódu + Zavřít + Otevřít repozitář + Navštivte %s na vašem zařízení nebo počítači a zadejte kód výše + Nepodařilo se získat PIN kód, zkuste místní ověření + Kód vyprší za %1$dm %2$ds + Účty + Lokální ověření + PIN kód vypršel! + \ 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 5a871217..d111ed68 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -151,7 +151,7 @@ Speicherberechtigungen fehlen. Bitte erneut versuchen. Suche Konten und Sicherheit - Updates und Datensicherung + Aktualisierungen und Datensicherung Info Erweiterte Suche Liefert die Suchergebnisse getrennt nach Anbietern @@ -416,12 +416,12 @@ Community-Repositories anzeigen Öffentliche Liste Alle Untertitel in Großbuchstaben - Alle Plugins aus diesem Repository herunterladen\? + Alle Plugins aus diesem Repository herunterladen? %s (Deaktiviert) Spuren Audiospuren Videospuren - Bei Neustart anwenden + Starte die App neu, um die Änderungen zu sehen. Abgesicherter Modus aktiviert Alle Erweiterungen wurden aufgrund eines Absturzes deaktiviert, damit Sie diejenige finden können, welche Probleme verursacht. Absturzinfo ansehen @@ -607,4 +607,12 @@ Beim kopieren ist ein Fehler aufgetreten, bitte kopieren sie logical und wenden sich an den Support. Fehler beim zugriff auf die Zwischenablage, bitte erneut versuchen. Repository Name und URL - + OK + Akku-Optimierung deaktivieren + Musik + Hörbuch + Medien + Zurücksetzen + Akkuverbrauch der App ist bereits auf unbeschränkt eingestellt + CloudStreams App-Info kann nicht geöffnet werden. + \ 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 a539f374..dbf03fb8 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -91,7 +91,7 @@ Ρυθμίσεις υποτίτλων του προγράμματος αναπαραγωγής Υπότιτλοι για Chromecast Ρυθμίσεις υποτίτλων για Chromecast - Eigengravy Mode + Ταχύτητα Προβολής Σύρετε για αναζήτηση Σύρετε από πλευρά σε πλευρά για να ελέγξετε το σημείο του βίντεο στο οποίο βρίσκεστε Σύρετε για να αλλάξετε ρυθμίσεις @@ -130,7 +130,7 @@ Τα δεδομένα αποθηκεύτηκαν Δεν έχει δοθεί άδεια για πρόσβαση στον αποθηκευτικό χώρο. Παρακαλώ προσπαθήστε ξανά. Σφάλμα δημιουργίας αντιγράφων ασφαλείας %s - Λογαριασμοί + Λογαριασμοί και Ασφάλεια Ενημερώσεις και αντίγραφα ασφαλείας Εμφάνιση filler επεισοδίου για άνιμε Εμφάνιση trailer @@ -201,7 +201,7 @@ Επαναφόρτωση συνδέσμων Λήψη υποτίτλων Ποιότητα - Dub + Ετικέτα Dub Sub Τίτλος Εναλλαγή γραφικών στοιχείων στην αφίσα @@ -233,11 +233,11 @@ Αποποίηση ευθυνών Γενικά Κουμπί τυχαίας δράσης - Εμφάνιση κουμπιού τυχαίας δράσης στην Αρχική Οθόνη + Εμφάνιση κουμπιού τυχαίας προβολής στην Αρχική Οθόνη Γλώσσες παρόχων Διάταξη εφαρμογής Προτιμώμενα μέσα - Ενεργοποίηση NSFW σε υποστηριζόμενους παρόχους + Ενεργοποίηση ακατάλληλου περιεχομένου σε υποστηριζόμενους παρόχους Κωδικοποίηση υποτίτλων Πάροχοι Διάταξη @@ -302,8 +302,8 @@ Φιλτράρισμα ανά την προτεινόμενη γλώσσα του μέσου Έξτρα Τρέιλερ - Σύνδεσμος για stream - Παραπομπή + Https://Παράδειγμα.com/Παράδειγμα.mp4 + Παραπομπή (προαιρετική) Επόμενο Παρακολούθηση βίντεο σε αυτή την γλώσσα Προηγούμενο @@ -334,8 +334,6 @@ Ενημερώθηκαν %d πρόσθετα Το CloudStream δεν έχει προεγκατεστημένους ιστότοπους. Πρέπει να εγκαταστήσετε ιστότοπους μέσω ορισμένων αποθετηρίων. \n -\nΛόγω ενός χαζού DMCA takedown από μέρους των Sky UK Limited 🤮 δεν μπορούμε να προσθέσουμε απευθείας σύνδεσμο προς τα προαναφερόμενα αποθετήρια εντός της εφαρμογής. -\n \nΒρείτε μας στο Discord ή ψάξτε στο διαδίκτυο. Προβολή αποθετηρίων κοινότητας Δημόσια λίστα @@ -345,7 +343,7 @@ Κομμάτια Ηχητικά κομμάτια Κομμάτια βίντεο - Εφαρμογή στην επανεκκίνηση + Κάντε επανεκκίνηση της εφαρμογής για να δείτε τις αλλαγές. Η ασφαλής λειτουργία ενεργοποιήθηκε Όλα τα extensions απενεργοποιήθηκαν , ώστε να μπορέσετε να διαπιστώσετε ποιο από αυτά προκάλεσε τη κατάρρευση. Προβολή πληροφορίας κατάρρευσης @@ -392,7 +390,7 @@ Αυτόματη ενημέρωση plugin Αυτόματη λήψη plugin DNS μέσω HTTPS - παράδειγμα.com + https://παράδειγμα.com HQ TS TC @@ -412,7 +410,7 @@ NSFW Chromecast mirror Σύνδεσμος NGINX σέρβερ - ΟΚουλΙστότοποςΜου + ΝεοΟνομαΙστοτοπου /\?\? /%d %d / 10 @@ -434,7 +432,7 @@ Δεν βρέθηκε ενημέρωση Έλεγχος για ενημέρωση κωδικός123 - ΤοΚουλΨευδώνυμοΜου + ΤοΚουλΟνομαΜου γειασου@κόσμε.com Η γρήγορη, καφέ αλεπού πηδάει πάνω από τον τεμπέλη σκύλο / The quick brown fox jumps over the lazy dog Cam @@ -521,7 +519,7 @@ \nΣΗΜΕΙΩΣΗ: Εάν το άθροισμα είναι 10 ή περισσότερο, η συσκευή αναπαραγωγής θα παραλείψει αυτόματα τη φόρτωση όταν φορτωθεί αυτός ο σύνδεσμος! Δοκιμή παρόχου Προτιμώμενη ποιότητας παρακολούθησης (Δεδομένα τηλεφώνου) - Διακομιστής μεσολάβησης raw.githubusercontent.com + Διακομιστής μεσολάβησης GitHub Android TV Ενημέρωση εγγεγραμμένων εκπομπών Έγινε εγγραφή σε %s @@ -546,4 +544,85 @@ Επιλέξτε κατάσταση για φιλτράρισμα επεκτάσεων για λήψη Απενεργοποιημένο Τέλος - + Συχνότητα δημιουργίας αντιγράφων ασφαλείας + Οι σύνδεσμοι επαναφορτώθηκαν + αντιγράφηκε! + Αναζήτηση σε άλλες επεκτάσεις + Ειδοποίηση για νέο επεισόδιο + Εισαγωγή Κωδικού + Όνομα \"αποθήκης\" και λινκ + Εμφάνιση προτάσεων + Προσθήκη στα Αγαπημένα + Εγγραφή + Αντικατάσταση Όλων + Χρησιμοποίηση Βασικού λογαριασμού + Αφαίρεση από τα Αγαπημένα + Κρυμμένο Πλέιερ - Δευτερόλεπτα Σκιπ + Δευτερόλεπτα Σκιπ όταν ο αναπαραγωγέας είναι κρυφός + Εντάξει + Απενεργοποιήση της εξοικονόμησης της μπαταρίας + Έχετε ήδη ψηφίσει + Φαίνεται πως ένα πιθανό αντίγραφο βρίσκεται στη βιβλιοθήκη σας: \'%s.\' +\n +\nΘα επιθυμούσατε να το προσθέσετε, να το αντικαταστήσετε, ή να ακυρώσετε την ενέργεια; + Εισαγωγή Τρέχον Κωδικού + Κλείδωμα Προφίλ + Ξεκλείδωμα Cloudstream + ΚωδικόςPIN Αυθεντικότητας + Προσθέτει επιλογή ταχύτητας στον αναπαραγωγέα + Σύνδεση ως %s + Περιστροφή + Απεγγραφή + Διαχείριση λογαριασμών + Ενεργοποίηση αυτόματης περιστροφής οθόνης αναλόγως του βίντεο + Αυτόματη περιστροφή + Σεζόν %1$dΕπεισόδιο%2$d θα κυκλοφορήσει + Δευτερόλεπτα Σκιπ όταν φαίνεται ο αναπαραγωγέας (πλειερ) + Δοκιμή όλων των παροχών + Αυτό το τεστ προορίζεται μόνο για τους προγραμματιστές και δε επαληθείει ούτε απορρίπτει την λειτουργία οποιουδήποτε παρόχου. + Fcast + Επιλογή συσκευής για αναμετάδοση + Πρόβλημα στην πρόσβαση στο Clipboard, Παρακαλώ προσπαθήστε ξανά. + Πρόβλημα στην αντιγραφή , Παρακαλούμε αντιγράψτε το logcat και επικοινωνήστε με την υποστήριξη. + Η χρήση μπαταρίας έχει ήδη τεθεί χωρίς περιορισμό + Αδύνατο άνοιγμα των στοιχείων της εφαρμογής Cloudstream. + Αγαπημένα + %s προστέθηκε στα αγαπημένα + %s αφαιρέθηκε από τα αγαπημένα + Πιθανό αντίγραφο βρέθηκε + Προσθήκη + Αντικατάσταση + Πιθανά διπλά αρχεία βρέθηκαν στην βιβλιοθήκη: +\n +\n%s +\n +\nΘα επιθυμούσατε να προσθέσετε αυτό το αρχείο ούτως η άλλως, να αντικαταστήσετε τα ήδη υπάρχοντα, ή να ακυρώσετε την ενέργεια? + Εισαγωγή Κωδικού για %s + Κωδικός + Εσφαλμένος Κωδικός. Προσπαθήστε ξανά. + Ο κωδικός να περιέχει 4 χαρακτήρες + Επιλογή λογαριασμού + Αφαίρεση από αγαπημένα + Κλείδωμα με βιομετρικά + Έρχεται σε %s + Εμφάνιση Πλέιερ - Δευτερόλεπτα Σκιπ + Παράκαμψη απαγόρευσης από raw github URLs χρησιμοποιώντας jsDelivr. Μπορεί να καθυστερήσει τις ενημερώσεις για μερικές μέρες. + Εμφάνιση κουμπιού για περιστροφή οθόνης + Αγαπημένο + %s +\nαπομένουν + Βιομετρική αυθεντικοποίηση δεν υποστηρίζεται από τη συσκευή + Καστ ταινίας + Για να σιγουρέψουμε πως οι λήψεις ταινιών και οι ειδοποιήσεις για σειρές στο Cloudstream δεν έχουν πρόβλημα, το Cloudstream χρειάζεται άδεια να τρέχει στο παρασκήνιο. Πατώντας ΟΚ θα μεταφερθείτε στις λεπτομέρειες εφαρμογής, από κει πηγαίνετε στην Χρήση μπαταρίας από εφαρμογές και θέσετε την χρήση σε μη περιορισμένη. Να έχετε στο νου σας πως το Cloudstream δε θα καταναλώσει την μπαταρία σας. Απλά θα λειτουργήσει μόνο όταν χρειάζεται, όπως για την ειδοποίηση για ανερχόμενες σειρές ή της λήψεις σας μέσω των παροχών. Άμα θέλετε να ακυρώσετε, μπορείτε να αλλάξετε αυτή τη ρύθμιση μέσω των γενικών ρυθμίσεων. + Ξεκλείδωμα εφαρμογής με δακτυλικό αποτύπωμα, Face ID, PIN, Μοτίβο και Κωδικό. + Η οθόνη έκλεισε λόγω πολλαπλών ανεπιτυχών ενεργειών. Κάντε επανεκκίνηση της εφαρμογής. + Επεξεργασία λογαριασμού + Παράλειψη επιλογής λογαριασμού στην εκκίνηση της εφαρμογής + Μουσική + Ακουστικό Βιβλίο + Μέσα + Επαναφορά + Τα δεδομένα σας στο CloudStream έχουν κάνει back up. Αν και η πιθανότητα είναι πολύ χαμηλή, όλες οι συσκευές συμπεριφέρονται διαφορετικά. Στη σπάνια περίπτωση, που απαγορευτεί η πρόσβασή σας από την εφαρμογή, διαγράψτε τα δεδομένα εφαρμογής και επαναφέρετέ τα από ένα ήδη υπάρχον backup. Συγνώμη για οποιαδήποτε ταλαιπωρία. + Λογαριασμοί + Ασφάλεια + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 20484cd9..011762ba 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -176,7 +176,7 @@ Tipo de Borde Elevación de Subtítulo Buscar usando proveedores - Continúa la reproducción en un reproductor miniatura encima de otras aplicaciones + Continúa la reproducción en una imagen pequeña encima de otras aplicaciones Botón de cambio de tamaño del reproductor Eliminar bordes negros Seleccionar idioma automáticamente @@ -232,7 +232,7 @@ Mostrar los resultados de la búsqueda por proveedor Solo envíar los datos si la App se cierra / falla inesperadamente No enviar datos - Mostrar los trailers + Mostrar avances Mostrar pósters de Kitsu Actualizar a las versiones preliminares Buscar actualizaciones preliminares (beta) en lugar de solo versiones completas (stable releases) @@ -289,7 +289,7 @@ CloudStream no tiene sitios instalados por defecto. Necesitas instalar los sitios desde los repositorios. \n \nÚnase a nuestro Discord o busque en línea. - ¿Descargar todos los plugins de este repositorio? + Advertencia: ¡CloudStream 3 no asume ninguna responsabilidad por el uso de extensiones de terceros y no brinda ningún soporte para ellas! Mostrar actualizaciones de la aplicación Instalador de APK Algunos dispositivos no soportan el nuevo instalador de paquetes. Pruebe la opción antigua (legacy) si las actualizaciones no se instalan. @@ -339,7 +339,7 @@ Alternar elementos de la interfaz de usuario en el póster No se encontró ninguna actualización General - Color primario + Color principal Tema de la aplicación hola@mundo.com %1$s %2$s @@ -449,13 +449,13 @@ Descarga por lotes plugin plugins - Actualizados %d plugins + %d plugins actualizados Ver repositorios de la comunidad Lista pública Pistas Pistas de audio Pistas de video - Modo seguro ON + Modo seguro activado Ver información de fallos Puntaje:%s Versión @@ -483,7 +483,7 @@ Si La aplicación se actualizará al salir Actualización iniciada - Complemento descargado + Plugin descargado Quitar de visto Ordenar por Ordenar @@ -512,7 +512,7 @@ Registro Empezar Aprobado - Prueba del proveedor + Verificar al proveedor Reiniciar Suscrito Suscrito a %s @@ -545,7 +545,7 @@ La interfaz de usuario no se ha podido crear correctamente, se trata de un GRAN BUG y debe ser reportado inmediatamente %s Seleccionar modo para filtrar los plugins descargados Deshabilitar - No se encontraron complementos en el repositorio + No se encontraron plugins en el repositorio Repositorio no encontrado, comprueba la URL y prueba la VPN Ya has votado Frecuencia de la copia de seguridad @@ -599,7 +599,7 @@ Desbloquea la aplicación con huella dactilar, Face ID, PIN, patrón y contraseña. Desbloquear CloudStream La autenticación biométrica no es compatible con este dispositivo - Esta pantalla se cerró después de algunos intentos fallidos. Reinicie la aplicación. + Después de algunos intentos fallidos, el mensaje se cerrará. Simplemente reinicie la aplicación para volver a intentarlo. Ahora se ha realizado una copia de seguridad de sus datos de CloudStream. Aunque la posibilidad de que esto ocurra es muy baja, todos los dispositivos pueden comportarse de forma diferente. En el raro caso de que no puedas acceder a la aplicación, borra completamente los datos de la aplicación y restaura desde una copia de seguridad. Sentimos mucho las molestias que esto pueda ocasionarte. Favorito No favorito @@ -616,5 +616,22 @@ No se puede abrir la información de la aplicación CloudStream. Media Audiolibro - Para garantizar descargas y notificaciones ininterrumpidas para programas de televisión suscritos, CloudStream necesita permiso para ejecutarse en segundo plano. Al presionar OK, se le dirigirá a información de la aplicación. Allí, desplácese hasta Uso de la batería de la aplicación y establezca el uso de la batería en Sin restricciones. Tenga en cuenta que este permiso no significa que CS3 agotará su batería. Solo funcionará en segundo plano cuando sea necesario, como cuando reciba notificaciones o descargue videos de extensiones oficiales. Si decide cancelar, puede ajustar esta configuración más adelante en los ajustes generales. - + Para garantizar descargas y notificaciones ininterrumpidas para programas de televisión suscritos, CloudStream necesita permiso para ejecutarse en segundo plano. Al presionar OK, se le dirigirá a información de la aplicación. Allí, desplácese hasta 𝙐𝙨𝙤 𝙙𝙚 𝙡𝙖 𝙗𝙖𝙩𝙚𝙧í𝙖 𝙙𝙚 𝙡𝙖 𝙖𝙥𝙡𝙞𝙘𝙖𝙘𝙞ó𝙣 y establezca el uso de la batería en 𝙎𝙞𝙣 𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙘𝙞𝙤𝙣𝙚𝙨. Tenga en cuenta que este permiso no significa que CS3 agotará su batería. Solo funcionará en segundo plano cuando sea necesario, como cuando reciba notificaciones o descargue videos de extensiones oficiales. Si decide cancelar, puede ajustar esta configuración más adelante en 𝙡𝙤𝙨 𝙖𝙟𝙪𝙨𝙩𝙚𝙨 𝙜𝙚𝙣𝙚𝙧𝙖𝙡𝙚𝙨. + Reset + Próximamente en %s + La temporada %1$d y el episodio %2$d se estrenarán en + Seleccionar el dispositivo para transmitir + Fcast + Espejo de transmisión + Wiki de CloudStream + Seguridad + Cuentas + Autenticación local + Imagen del código QR + Descartar + Repositorio abierto + Visita %s en tu smartphone o ordenador e introduce el código anterior + ¡El código PIN ya ha caducado! + El código caduca en %1$d mín y %2$d s + No puedo obtener el código PIN del dispositivo; intente con la autenticación local + \ 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 77c3db15..91d23b61 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -280,7 +280,7 @@ Erreur de sauvegarde %s Recherche Comptes et Sécurité - Mises à jour et sauvegarde + Mises à jour et Sauvegarde Info Recherche avancée Vous donne les résultats de la recherche séparés par fournisseur @@ -419,7 +419,7 @@ Télécharger la liste de sites que vous voulez utiliser Téléchargé : %d Pistes vidéo - Appliqué au redémarrage + Redémarrez l\'application pour voir les changements. Toutes les extensions ont été désactivé à cause d\'un crash pour vous aider à trouver l\'extension causant le problème. Mode sans échec activé Taille @@ -446,7 +446,7 @@ Désactivé : %d Non téléchargé : %d %d plugins mis-à-jour - Télécharger tous les plugins de ce repository \? + Télécharger tous les plugins de ce repository ? %s (Désactivé) Pistes Pistes audio @@ -595,4 +595,29 @@ Ce test est destiné uniquement aux développeurs et ne vérifie ni n\'empêche le fonctionnement d\'aucune extension. Copié ! Nom du dépôt et adresse internet - + Favori + Vos données CloudStream viennent d\'être sauvegardées. Bien que cette éventualité soit très faible, tous les appareils peuvent se comporter différemment. Dans le rare cas où l\'accès à l\'application est bloqué, effacez complètement les données de l\'application et restaurez à partir d\'une sauvegarde. Nous sommes sincèrement désolés pour les désagréments occasionnés par cette situation. + Désactiver l\'optimisation de la batterie + Impossible d\'ouvrir les informations de l\'application CloudStream. + Déverrouiller CloudStream + Musique + %s +\nrestants + Erreur d\'accès au presse-papiers, veuillez réessayer. + OK + L\'authentification biométrique n\'est pas prise en charge sur cet appareil + Livre Audio + Mot de passe/Code PIN + Erreur de copie, Veuillez copier le logcat et contacter le support de l\'application. + Déverrouiller l\'appli avec l\'empreinte digitale, l\'identification faciale, le code PIN, le motif et le mot de passe. + Cet écran a été fermé en raison de plusieurs tentatives infructueuses. Veuillez relancer l\'application. + Pour garantir des téléchargements ininterrompus et des notifications pour les émissions de télévision auxquelles vous êtes abonné, CloudStream a besoin d\'une autorisation pour fonctionner en arrière-plan. En appuyant sur OK, vous serez dirigé vers App info. Faites défiler jusqu\'à 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 et réglez l\'utilisation de la batterie sur 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Veuillez noter que cette autorisation ne signifie pas que CS3 épuisera votre batterie. Il ne fonctionnera en arrière-plan que lorsque cela sera nécessaire, par exemple lors de la réception de notifications ou du téléchargement de vidéos à partir d\'extensions officielles. Si vous choisissez d\'annuler, vous pouvez ajuster ce paramètre ultérieurement dans 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. + L\'utilisation de la batterie de l\'application est déjà réglée sur illimitée + Supprimer des favoris + Média + Réinitialiser + À venir dans %s + Verrouillage biométrique + Sélectionnez un appareil de diffusion + Saison %1$d Episode %2$d sera publié dans + \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 8ce224b3..b16292ba 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -192,4 +192,21 @@ लिंक पुन्ह खुली वर्तमान पिन दर्ज करें नेटवर्क स्ट्रीम - + साफ़ करें + उपशीर्षक सेटिंग्स + अक्षर का माप + बंद करें + रिपॉजिटरी का नाम और यूआरएल + कॉपी! + सहेजें + नये एपिसोड की अधिसूचना + अन्य एक्सटेंशन में खोजें + सुझाव दिखाएं + पृष्ठभूमि का रंग + रूपरेखा प्रकार + अक्षर का रंग + बॉक्स का रंग + रूपरेखा रंग + उपशीर्षक ऊंचाई + अक्षर शैली + \ 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 ea6a80eb..6e35506d 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -11,41 +11,41 @@ %d %.1f/10.0 %d - %1$s Ep %2$d - Cast: %s - Epizoda %d će izaći - %1$dd %2$dh %3$dm - %1$dh %2$dm - %dm + %1$s epizoda %2$d + Glumačka postava: %s + Epizoda %d će izaći za + %1$dd %2$dh %3$dmin + %1$dh %2$dmin + %dmin Poster Poster - Episode Poster - Main Poster - Next Random - Go back - Change Provider - Preview Background + Poster epizode + Glavni poster + Sljedeće slučajno odabrano + Idi natrag + Promijeni pružatelja usluge + Pregled slike pozadine - Brzina (%.2fx) + Brzina (%.2f×) Ocjena: %.1f - Pronađeno novo ažuriranje! + Pronađeno je novo ažuriranje! \n%1$s -> %2$s Umetak %d min CloudStream - Reproduciraj s CloudStream-om + Reproduciraj s CloudStreamom Početna stranica - Pretraži + Traži Preuzimanja Postavke - Pretraži… - Pretraži %s… + Traži … + Traži %s … Nema podataka - Više postavki + Više opcija Sljedeća epizoda Žanrovi - Podijeli + Dijeli Otvori u pregledniku Preskoči učitavanje Učitavanje … @@ -53,35 +53,35 @@ Na čekanju Dovršeno Ispušteno - Planiram pogledati - Ponovno gledam - Pokreni Film + Planiram gledati + Ponovo gledam + Pokreni film Pokreni LiveStream Pokreni Torrent Izvori Titlovi - Ponovno pokušaj povezivanje… + Ponovni pokušaj povezivanja … Idi natrag - Pokreni Epizodu + Pokreni epizodu Preuzmi Preuzeto - Trenutno preuzimam + Preuzimanje u tijeku Preuzimanje pauzirano Preuzimanje započeto - Preuzimanje nije uspjelo + Preuzimanje neuspjelo Preuzimanje otkazano Preuzimanje dovršeno Mrežni stream - Pogreška pri učitavanju veza - Unutarnja pohrana - Dub - Sub + Pogreška pri učitavanju poveznica + Interna pohrana + Sinkronizacija + Titlovi Izbriši datoteku Otvori datoteku Nastavi preuzimanje Pauziraj preuzimanje - Onemogući automatsko izvješćivanje o bugovima + Onemogući automatsko izvješćivanje o greškama Više informacija Sakrij Pokreni @@ -93,99 +93,99 @@ Primijeni Kopiraj Zatvori - Očisti + Izbriši Spremi Brzina playera Postavke titlova Boja teksta - Boja obruba - Pozadinska boja + Boja konture + Boja pozadine Boja prozora - Tip ruba + Vrsta ruba Visina titlova Font Veličina fonta - Pretraži s uslugama - Pretraži s tipovima - %d banana dano developerima + Traži koristeći pružatelje usluga + Traži koristeći vrste + %d banana dano programerima Nisi dao ni jednu bananu Automatski odabir jezika Preuzmi jezike Jezik titlova - Držite za vraćanje na zadane postavke - Uvezi fontove tako da ih postavite u %s - Nastavite s gledanjem + Pritisni za vraćanje na zadane postavke + Uvezi fontove postavljanjem u %s + Nastavi gledati Ukloni Više informacija @string/home_play - Za ispravan rad ovog pružatelja usluga može biti potreban VPN + Za ispravan rad ovog pružatelja usluga je možda potreban VPN Ovaj pružatelj usluga je torrent, preporučuje se VPN - Stranica ne daje metapodatke, učitavanje videozapisa neće uspjeti ako ne postoji na stranici. + Stranica ne sadrži metapodatke. Učitavanje videa neće uspjeti ako ne postoje na stranici. Opis - Plot nije pronađen + Radnja nije pronađena Opis nije pronađen - Prikaži LogMačku 🐈 - Picture-in-picture - Nastavlja reprodukciju u minijaturnom playeru povrh drugih aplikacija - Gumb za promjenu veličine playera - Uklaja crne rubove + Prikaži Logcat 🐈 + Slika u slici + Nastavlja reprodukciju u minijaturnom playeru ispred drugih aplikacija + Gumb za mijenjenje veličine playera + Ukloni crne rubove Titlovi Postavke titlova playera - Chromecast Titlovi + Chromecast titlovi Postavke Chromecast titlova Brzina reprodukcije - Prijeđi prstom za traženje - Prijeđite prstom ulijevo ili udesno kako biste kontrolirali player - Klizni za promjenu postavki - Kliznite prstom ulijevo ili udesno za promjenu svjetline ili glasnoće - Automatski započni sljedeću epizodu - Započne sljedeću epizodu kad trenutna završi - Dodirni dvaput za traženje + Klizni prstom za pomicanje + Klizni prstom ulijevo ili udesno za postavljanje pozicije videa + Klizni prstom za mijenjanje postavki + Klizni prstom prema gore ili dolje na lijevoj ili desnoj strani za mijenjanje svjetline ili glasnoće + Automatski pokreni sljedeću epizodu + Pokreni sljedeću epizodu kada trenutačna epizoda završi + Dodirni dvaput za pomicanje Dodirni dvaput za pauziranje - Iznos preskakanja u playeru (Sekunde) - Dvaput dodirni desnu ili lijevu stranu ekrana za pomicanje naprijed ili natrag - Dodirnite dvaput u sredinu zaslona za pauziranje - Koristi svijetlinu u sustavu + Količina pomicanja u playeru (sekunde) + Dodirni dvaput desnu ili lijevu stranu za pomicanje prema naprijed ili natrag + Dodirni dvaput u sredinu za pauziranje + Koristi svijetlinu sustava Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog preklopa Ažuriraj napredak gledanja Automatski sinkronizira vaš trenutni napredak u filmu ili epizodi - Vraćanje podataka iz sigurnosne kopije + Obnovi podatke iz sigurnosne kopije Sigurnosno kopiranje podataka - Učitana datoteka sigurnosne kopije - Vraćanje podataka iz datoteke nije uspjelo %s + Datoteka sigurnosne kopije je učitana + Obnavljanje podataka iz datoteke %s nije uspjelo Podaci pohranjeni Nedostaju dozvole za pohranu, pokušaj ponovo. Pogreška pri sigurnosnom kopiranju %s - Pretraži + Traži Računi i sigurnost - Ažuriranja i sigurnosne kopije + Ažuriranja i sigurnosna kopija Informacije - Napredno pretraživanje - Daje rezultate pretraživanja odvojene prema pružatelju usluga + Napredna pretraga + Daje rezultate pretrage odvojene prema pružatelju usluga Šalje samo podatke o padovima aplikacije Ne šalje podatke Prikaži dodatnu epizodu za anime Prikaži trailere Prikaži postere iz Kitsua - Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja + Sakrij odabranu kvalitetu videa u rezultatima pretrage Automatsko ažuriranje dodataka Prikaži ažuriranja aplikacije Automatski traži nova ažuriranja nakon pokretanja aplikacije. Ažuriranje na predizdanja - Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja + Tražite ažuriranja predizdanja umjesto samo potpunih izdanja Github - Aplikacija za romane od istih developera - Anime aplikacija od istih developera - Uđi u naš Discord - Daj bananu developerima - Dana banana + Aplikacija za romane od istih programera + Anime aplikacija od istih programera + Pridruži se Discordu + Daj bananu programerima + Dane banane Jezik aplikacije Ovaj pružatelj usluga nema podršku za Chromecast - Nisu pronađene veze - Veza je kopirana u međuspremnik + Nisu pronađene poveznice + Poveznica je kopirana u međuspremnik Pokreni epizodu Vrati na zadanu vrijednost - Nažalost, aplikacija se srušila. Anonimno izvješće o bugu bit će poslano developerima + Nažalost se aplikacija srušila. Anonimno izvješće o grešci će se poslati programerima Sezona Nema sezone Epizoda @@ -197,14 +197,14 @@ Nisu pronađene epizode Izbriši datoteku Izbriši - Poništi + Odustani Pauziraj Nastavi - -30 + −30 +30 Ovo će trajno izbrisati %s \nJeste li sigurni\? - %dm + %dmin \npreostalo U tijeku Završeno @@ -244,11 +244,11 @@ Livestream NSFW Video - Greška u izvoru - Pogreška remote-a - Pogreška renderera + Pogreška u izvoru + Pogreška eksternog računala + Pogreška u prikazu Neočekivana pogreška playera - Pogreška preuzimanja, provjeri dozvole za pohranu + Pogreška tijekom preuzimanja, provjeri dozvole za pohranu Chromecast epizoda Chromecast mirror Pokreni u aplikaciji @@ -257,11 +257,11 @@ Kopiraj poveznicu Automatsko preuzimanje Preuzmi zrcalo - Ponovno učitaj poveznice + Ponovo učitaj poveznice Preuzmi titlove - Oznaka kvalitete - Oznaka sinkronizacije - Oznaka titlova + Oznaka za kvalitetu + Oznaka za sinkronizaciju + Oznaka za titlove Naslov Uključi/isključi elemente korisničkog sučelja na posteru Nije pronađeno ažuriranje @@ -270,38 +270,38 @@ Promijeni veličinu Izvor Preskoči OP - Ne prikazuj više + Nemoj više prikazivati Preskoči ovo ažuriranje Ažuriraj - Preferirana kvaliteta streama + Preferirana kvaliteta gledanja (WiFi) Maksimalni broj znakova u naslovu video playera Rezolucija video playera - Veličina video međuspremnika - Duljina video međuspremnika - Video predmemorija na disku - Očisti predmemoriju videa i slika - Izazvat će nasumična rušenja ako se postavi previsoko. Nemojte mijenjati ako imate malu količinu RAM-a kao što je Android TV ili stari telefon. - Može uzrokovati probleme na sustavima s malo prostora za pohranu kao što su Android TV uređaji ako postavite previsoko. + Veličina međuspremnika videa + Duljina međuspremnika videa + Predmemorija videa na disku + Izbriši predmemoriju videa i slika + Uzrokuje rušenje aplikacije ako se postavi previsoko na uređajima s malom količinom RAM-a kao što je Android TV. + Uzrokuje probleme ako se postavi previsoko na uređajima s malom količinom memorije kao što je Android TV. DNS preko HTTPS-a Korisno za zaobilaženje blokada ISP-a Kloniraj web stranicu Ukloni web stranicu Dodajte klon postojeće web-lokacije s drugim url-om - Put preuzimanja + Putanja preuzimanja NGINX server URL Prikaži sinkronizirani anime ili s titlovima - Prilagodi zaslonu + Prilagodi veličini ekrana Rastegni Zoom - Obavijest + Pravna obavijest Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Općenito - Random gumb - Prikaži gumb za slučajni odabir reprodukcija na početnoj stranici i biblioteci + Gumb za slučajni odabir + Prikaži gumb za slučajni odabir na početnoj stranici i biblioteci Jezici proširenja Izgled aplikacije Preferirani mediji - Omogućava NSFW na podržanim proširenjima + Omogući NSFW na podržanim proširenjima Kodiranje titlova Pružatelji usluga Raspored @@ -320,60 +320,60 @@ 127.0.0.1 NovoImeStranice https://primjer.com - Šifra jezika (en) + Šifra jezika (hr) %1$s %2$s račun Odjava Prijava Promijeni račun Dodaj račun - Napravi račun - Dodaj tracking + Stvori račun + Dodaj praćenje Dodano %s Sinkroniziraj Ocijenjeno %d / 10 /\?\? /%d - Ovjereno%s + %s ovjeren Nije moguće prijaviti se na %s Nijedan - Normal + Normalno Sve - Maksimalno - Minimalno - Obrub - Depresivno + Maks. + Min. + Kontura + Udubljeno Sjena - Podignuto + Izdignuto Sinkroniziraj titlove 1000 ms Kašnjenje titlova - Koristi ovo ako su titlovi prikazani %d ms prerano + Koristi ovo ako se titlovi prikazuju %d ms prerano Koristite ovo ako se titlovi prikazuju %d ms prekasno - Nema kašnjenja titlova + Bez kašnjenja titlova - The quick brown fox jumps over the lazy dog + Gojazni đačić s biciklom drži hmelj i finu vatu u džepu nošnje Preporučeno Učitano %s - Učitaj datoteku titlova - Učitaj sa interneta + Učitaj iz datoteke + Učitaj s interneta Preuzeta datoteka - Glavno - Podupiranje - Pozadina + Glavni + Sporedni + Statist Izvor - Random - Dolazi uskoro… - Cam - Cam - Cam + Slučajno + Dolazi uskoro … + Kamera + Kamera + Kamera HQ HD TS @@ -392,59 +392,59 @@ Rezolucija i naslov Naslov Rezolucija - ID je nevažeći + Nevažeći ID Nevažeći podaci - URL je nevažeći - Greška - Ukloni CC iz titlova - Ukloni reklame iz titlova - Filtriraj po željenom jeziku medija - Extras + Nevažeći URL + Pogreška + Ukloni titlove za gluhe osobe iz titlova + Ukloni nepotrebne elemente iz titlova (npr. oglase) + Filtriraj po preferiranom jeziku medija + Dodatni sadržaji Trailer https://primjer.com/primjer.mp4 - Referent (nije obavezno) + Referent (opcionalno) Sljedeće - Gledaj videozapise na ovim jezicima + Gledaj videa na ovim jezicima Prethodno Preskoči postavljanje - Promijeni izgled aplikacije kako bi odgovarao vašem uređaju + Promijeni izgled aplikacije kako bi odgovarao tvom uređaju Izvještavanje o rušenju - Što želite vidjeti + Što želiš vidjeti Gotovo - Ekstenzije - Dodaj repository - Ime repositorya - URL spremišta (repositorija) + Proširenja + Dodaj repozitorij + Ime repozitorija + URL repozitorija Dodatak učitan Dodatak izbrisan Nije moguće učitati %s 18+ - Započeto preuzimanje %1$d %2$s… + Započeto preuzimanje %1$d %2$s … Preuzeto %1$d %2$s - Sve %s je već preuzeto + Sve %s već preuzeto Skupno preuzimanje dodatak dodaci Ovo će također izbrisati sve dodatke repozitorija - Izbriši repository - Preuzmi popis stranica koje želite koristiti + Izbriši repozitorij + Preuzmi popis stranica koje želiš koristiti Preuzeto: %d Onemogućeno: %d Nepreuzeto: %d - CloudStream nema instalirane web stranice prema zadanim postavkama. Morate instalirati stranice iz repozitorija. + CloudStream standardno nema instalirane web stranice. Stranice morate instalirati iz repozitorija. \n \nPridružite se našem Discordu ili tražite online. - Pregledajte repozitorije zajednice + Prikaži repozitorije zajednice Javni popis - Svi titlovi pisani velikim slovima - Preuzeti sve dodatke iz ovog repozitorija\? - %s (Onemogućeno) - Zapis + Koristi velika slova za sve titlove + Preuzeti sve dodatke iz ovog repozitorija? + %s (onemogućeno) + Zapisi Audio zapis Video zapis - Primjenjuje se na ponovnom pokretanju - Sigurnosni način rada omogućen - Sve su ekstenzije isključene zbog rušenja aplikacije kako biste lakše pronašli ono koje uzrokuje probleme. + Za prikaz promjena ponovo pokreni aplikaciju. + Sigurnosni način rada uključen + Sva proširenja su isključena zbog rušenja aplikacije kako bi se pronašlo proširenje koje uzrokuje probleme. Pogledajte podatke o padu Ocjena: %s Opis @@ -454,38 +454,38 @@ Autori Podržano Jezik - HLS Playlista + HLS playlista Automatski instaliraj dodatke Zasluge Automatski instaliraj sve neinstalirane dodatke iz dodanih repozitorija. Preferirani video player Interni player - Prvo instalirajte ekstenziju + Najprije instaliraj proširenje VLC MPV - Web Video Cast + Emitiranje na webu Aplikacija nije pronađena Svi jezici Previše teksta. Nije moguće spremiti u međuspremnik. Označi kao gledano - Prikazuje skočni prozor za preskakanje početka ili završetka medija + Prikaži skočni prozor za uvod/kraj Da - Preuzimanje ažuriranja aplikacije… + Preuzimanje ažuriranja aplikacije … Jeste li sigurni da želite izaći\? Ne - Instaliranje ažuriranja aplikacije… + Instaliranje ažuriranja aplikacije … Nije moguće instalirati novu verziju aplikacije - Ažurirano %d dodataka - Mješoviti početak + Ažurirani dodaci: %d + Mješoviti uvod Uvod - Linkovi - Pokreni Trailer + Poveznice + Pokreni trailer Ponovi postupak postavljanja - Neki telefoni ne podržavaju novi program za instaliranje paketa. Isprobaj naslijeđenu opciju ako se ažuriranja ne instaliraju. + Neki telefoni ne podržavaju novi program za instaliranje paketa. Pokušaj sa starijom opcijom ako se ažuriranja ne instaliraju. Instalator APK-a Ažuriranja aplikacije Sigurnosna kopija - Ekstenzije + Proširenja Radnje Predmemorija Geste @@ -493,21 +493,21 @@ Titlovi Raspored Zadane postavke - Izgled + Izgledi Značajke Web preglednik Preskoči %s - Završetak - Zaključak - Mješoviti završetak - Obriši povijest + Kraj + Sažetak + Mješoviti kraj + Izbriši povijest Povijest Legacy - Otvaranje + Uvod PackageInstaller %1$s %2$d%3$s Aktualiziranje započeto - Program če se aktualizirati tijekom zatvaranja programa + Aplikacija će se aktualizirati tijekom zatvaranja Dodatak preuzet Ukloni iz pogledanog Preglednik @@ -525,19 +525,19 @@ Vaša je biblioteka prazna :( \nPrijavite se na račun biblioteke ili dodajte filmove / serije u svoju lokalnu biblioteku. Ova je lista prazna. Pokušajte se prebaciti na jednu drugu listu. - 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 + Pronađena je datoteka sigurnog načina rada! +\nProširenja se ne učitavaju tijekom pokretanja dok se datoteka ne ukloni. + Prikazan player – Količina pomicanja + Količina pomicanja koja se koristi kada je player vidljiv + Player skriven – Količina pomicanja + Količina pomicanja koja se koristi kada je player skriven Android TV - Prošlo - Restart + Uspjelo + Pokreni ponovo Log - Početak - Neuspješno - Stop + Pokreni + Neuspjelo + Prekini Test pružatelja usluga Ažuriranje pretplaćenih emisija Epizoda %d izbačena! @@ -549,7 +549,7 @@ GitHub Proxy Neuspješno dohvaćanje GitHuba. Uključuje se jsdelivr proxy … Zaobilazi blokiranje neobrađenih GitHub URL-ova koristeći jsDelivr. Može uzrokovati kašnjenje ažuriranja nekoliko dana. - Preferirana kvaliteta gledanja (podatkovna mobilna mreža) + Preferirana kvaliteta gledanja (mobilni podaci) Profil %d Wi-Fi Mobilni podaci @@ -560,20 +560,20 @@ Pomoć Kvalitete Pozadina profila - Nije bilo moguće ispravno izraditi korisničko sučelje. Ovo je ZNAČAJNA GREŠKA i treba se odmah prijaviti %s + Nije bilo moguće ispravno izraditi korisničko sučelje. Ovo je ZNAČAJNA POGREŠKA i treba se odmah prijaviti %s Odaberi modus za filtriranje preuzimanja dodataka Onemogući U repozitoriju nisu pronađeni dodaci - Repozitorij nije pronađen, provjerite URL i pokušajte koristiti VPN - Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je video prioritet. + Repozitorij nije pronađen. Provjeri URL i pokušaj VPN + Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je prioritet videa. \n \nIzvor A: 3 \nKvaliteta B: 7 -\nImat će kombinirani prioritet videozapisa od 10. +\nImat će kombinirani prioritet videa od 10. \n \nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita! Već si glasao/la - Učestalost rezervne kopije + Učestalost spremanja sigurnosne kopije %s uklonjeno iz favorita Favoriti %s dodano u favorite @@ -606,7 +606,7 @@ Preskoči odabir računa pri pokretanju Upravljanje računima Uredi račun - Linkovi ponovno učitani + Poveznice su ponovo učitane Rotiraj Prikaži gumb za prebacivanje orijentacije zaslona Omogućuje automatsko mijenjanje orijentacije zaslona na temelju orijentacije videa @@ -614,8 +614,8 @@ rotiraj_video_tipka automatski_rotiraj_video_tipka Obavijest za novu epizodu - Pretraži u ostalim proširenjima - Dodaje opciju brzine u playeru + Traži u drugim proširenjima + Dodaje opciju za brzinu u playeru Testiraj sva proširenja Ovaj je test namijenjen samo programerima i ne provjerava niti negira rad bilo kojeg proširenja. Prikaži preporuke @@ -624,9 +624,31 @@ Zaključaj s biometrijskim podatcima %s \npreostalo - Greška u pristupanju međuspremnika. Pokušaj ponovo. + Pogreška pri pristupanju međuspremnika. Pokušaj ponovo. Otključaj CloudStream Lozinka/PIN autentifikacija Ovaj uređaj ne podržava biometrijsku autentifikaciju Ovaj je ekran zatvoren zbog višestrukih neuspjelih pokušaja. Pokrenite aplikaciju ponovo. - + U redu + Deaktiviraj optimizaciju baterije + Audio knjiga + Medij + Korištenje baterije aplikacije već je postavljeno na neograničeno + Neuspjelo otvaranje podataka CloudStream aplikacije. + Favorit + Ukloni iz favorita + Glazba + Obnovi + Otključaj aplikaciju pomoću otiska prsta, ID-a lica, PIN-a, uzorka i lozinke. + Sljedeća u %s + Pogreška pri kopiranju. Kopirajte zapisnik i kontaktirajte podršku aplikacije. + Kako bi se osigurala neometana preuzimanja i obavijesti za pretplaćene TV emisije, CloudStream treba dopuštenje za rad u pozadini. Pritiskom gumba „U redu” bit ćete preusmjereni na informacije o aplikaciji. Tamo odaberite „Korištenje baterije aplikacije” i postavite potrošnju baterije na „Neograničeno”. Imajte na umu da ovo dopuštenje ne znači da će CS3 isprazniti vašu bateriju. Radit će u pozadini samo kada je potrebno, kao što je primanje obavijesti ili preuzimanje videa sa službenih proširenja. Ako odlučite otkazati, ovu postavku možete prilagoditi kasnije u „Opće postavke”. + Vaši CloudStream podaci su sada spremljeni u sigurnosnu kopiju. Iako je vjerojatnost mala, neki se uređaji mogu ponašati drugačije. Ako izgubite pristup aplikaciji, potpuno izbrišite podatke aplikacije i obnovite ih pomoću sigurnosne kopije. Ispričavamo se zbog mogućih neugodnosti. + Sezona %1$d epizoda %2$d izlazi + Cast mirror + Fcast + Odaberite uređaj za emitiranje + CloudStream Wiki + Računi + Sigurnost + \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5533cdc0..717495a9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -365,7 +365,7 @@ https://példa.hu/példa.mp4 Nem sikerült betölteni: %s Elkezdődött a(z) %1$d %2$s letöltése… - Töltse le az összes bővítményt ebből a tárolóból\? + Töltse le az összes bővítményt ebből a tárolóból? Biztonságos mód bekapcsolva Méret MPV @@ -592,4 +592,4 @@ A PIN 4 karakter hosszú kell legyen Auto elforgatás Az automatikus videó orientáció alapján való képernyő elforgatás bekapcsolása - + \ 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 d537a1d5..b570068c 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -428,7 +428,7 @@ Ganti subtitle jadi huruf besar semua Terunduh: %d Tidak terunduh: %d - Unduh semua plugin dari repositori ini\? + Unduh semua plugin dari repositori ini? Semua Umur %s (Tidak aktif) Trek @@ -638,4 +638,13 @@ Buku Audio Media Untuk memastikan unduhan dan pemberitahuan tanpa gangguan untuk acara TV berlangganan, CloudStream memerlukan izin untuk berjalan di latar belakang. Dengan menekan OK, Anda akan diarahkan ke Info aplikasi. Di sana, gulir ke Penggunaan baterai aplikasi dan atur penggunaan baterai ke Tidak Terbatas. Harap dicatat, izin ini tidak berarti CS3 akan menguras baterai Anda. Ini hanya akan beroperasi di latar belakang ketika diperlukan, seperti ketika menerima pemberitahuan atau mengunduh video dari ekstensi resmi. Jika Anda memilih untuk membatalkannya, Anda dapat menyesuaikan pengaturan ini nanti di Pengaturan Umum. - + Mengatur ulang + Musim %1$d Episode %2$d akan dirilis pada + Akan datang di %s + Cermin Cast + Pilih perangkat cast + Fcast + CloudStream Wiki + Keamanan + Akun + \ 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 040b0f31..1341b146 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -239,7 +239,7 @@ Errore del renderer Errore inaspettato nel player video Errore download, controlla i permessi di archiviazione - Chromecast + Episodio Chromecast Mirror Chromecast Riproduci in app Riproduci in %s @@ -427,7 +427,7 @@ Vedi le repository della community Lista pubblica Tutti i sottotitoli in maiuscolo - Scaricare tutti i plugin da questa repository\? + Attenzione: CloudStream 3 non si assume alcuna responsabilità per l\'utilizzo di estensioni di terze parti e non fornisce alcun supporto per esse! %s (Disabilitato) Tracce Traccia audio @@ -619,7 +619,7 @@ Autenticazione con password/PIN L\'autenticazione biometrica non è supportata su questo dispositivo Sblocca app con impronta digitale, Face ID, PIN, sequenza e password. - Questa schermata è stata chiusa a causa di più tentativi falliti. Riavvia l\'app. + Dopo alcuni tentativi falliti, il prompt si chiuderà. Riavvia semplicemente l\'app per riprovare. È stato eseguito il backup dei tuoi dati CloudStream. Sebbene questa possibilità sia molto bassa, tutti i dispositivi possono comportarsi in modo diverso. Nel raro caso in cui ti venga bloccato l\'accesso all\'app, cancella completamente i dati dell\'app e ripristina da un backup. Siamo molto spiacenti per qualsiasi inconveniente derivanti da questo. Non preferito %s @@ -637,4 +637,21 @@ L\'utilizzo della batteria dell\'app è già impostato su \"Senza restrizioni\" Musica Audiolibro - + Reimposta + Prossimamente tra %s + L\'episodio %2$d della stagione %1$d uscirà tra + Mirror cast + Seleziona dispositivo per cast + Fcast + Wiki di CloudStream + Conti + Sicurezza + Autenticazione locale + Immagine codice QR + Respingi + Apri repository + Visita %s sul tuo smartphone o computer e inserisci il codice sopra + Impossibile ottenere il codice PIN del dispositivo, prova l\'autenticazione locale + Il codice PIN è scaduto! + Il codice scadrà tra %1$dm %2$ds + \ No newline at end of file diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index da2952a0..2af7c967 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -442,7 +442,7 @@ לא ניתן להתקין את הגרסה החדשה של האפליקציה הורדת אצווה תוסף - הורד את כל התוספים ממאגר זה\? + הורד את כל התוספים ממאגר זה? רצועות שמע מסלולים Web Video Cast @@ -550,4 +550,4 @@ \nיגרמו לעדיפות הסרטון להיות 10. \n \nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען! - + \ 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 index acb2cfc3..5c80d77e 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -242,4 +242,4 @@ 現在のエピソードが終了したら次のエピソードを開始する 長押しするとデフォルトにリセットされます ダウンロードを再開 - + \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 1a63050a..a8756d83 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -133,7 +133,7 @@ 백업 중 오류 %s 검색 라이브러리 - 계정 + 계정 및 보안 소스별로 구분된 검색 결과를 제공합니다 예고편 보기 Kitsu에서 포스터 보기 @@ -311,7 +311,7 @@ 커뮤니티 저장소 보기 공개 목록 모든 자막 대문자화 - 이 저장소에서 모든 플러그인을 다운로드하시겠습니까\? + 이 저장소에서 모든 플러그인을 다운로드하시겠습니까? %s (사용불가) 저장소 추가 저장소 이름 @@ -338,7 +338,7 @@ 로드된 백업 파일 정보 고급 검색 - 데이터를 보내지 않음 + 데이터를 보내지 않습니다 설정 프로세스 다시 실행 APK 인스톨러 Github @@ -527,4 +527,111 @@ 구독중 구독 %s 구독 취소 %s - + 보안 + 장부 + 리포지토리에서 플러그인을 찾을 수 없습니다 + 복사됨! + 레포지토리 이름 및 URL + 본 테스트는 개발자만을 대상으로 하며, 확장자의 작업을 확인하거나 거부하지 않습니다. + 클라우스스트림 위키 + 다시 기록된 링크 + 백업 빈도 + 즐겨찾기 + QR 이미지 + 모든 확장프로그램 테스트 + 로컬 인증 + 클립보드에 액세스하는 중 오류가 발생했습니다. 다시 시도하십시오. + 취소 + 저장소 열기 + 현재 PIN 입력 + 비디오 방향에 따라 화면 방향을 자동으로 전환합니다 + 장치 PIN 코드를 가져올 수 없습니다, 로컬 인증을 시도하세요 + PIN 코드가 만료되었습니다! + 코드 만료까지 남은 시간: %1$dm %2$ds + 리포지토리를 찾을 수 없습니다. URL을 확인하고 VPN을 시도하십시오 + 이미 투표했습니다 + UI를 올바르게 만들 수 없습니다. 이것은 주요 버그이며 %s 즉시 보고해야 합니다 + 즐겨찾기에 추가 + 와이파이 + 도움 + 품질 + 편집 + 프로필 + 확인 + 배터리 최적화 사용 안 함 + 앱 배터리 사용량이 이미 무제한으로 설정되었습니다 + CloudStream의 App 정보를 열 수 없습니다. + 즐겨찾기에 %s 추가 + 프로필 %d + 프로필 배경 + 대체 + PIN 입력 + PIN + PIN은 4자여야 합니다 + %s으로 로그인 됨 + 시작 시 계정 선택 건너뛰기 + 즐겨찾기 + 즐겨찾기 해제 + 잠금 해제 + 생체 인식으로 잠금 + 음악 + 오디오책 + 자동 회전 + 모바일 데이터 + 사용 불가능 + fcast + 캐스트 장치 선택 + 복사하는 중 오류가 발생했습니다. 로그캣을 복사하고 문의하십시오. + 구독 취소 + 기본값 설정 + 구독 + 사용 + 당신의 라이브러리에 이미 잠재적으로 중복된 항목이 존재합니다: \'%s\'. +\n +\n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까? + 전부 대체 + 추가 + 즐겨찾기에서 %s 제거 + 당신의 라이브러리에 잠재적으로 중복된 항목이 발견되었습니다: +\n +\n%s +\n +\n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까? + 계정 선택 + 기본 계정 사용 + 회전 + 화면 방향을 전환할 토글 버튼 표시 + 계정 관리 + 프로필 잠금 + 잘못된 PIN입니다. 다시 시도하세요. + 계정 편집 + 미디어 + 비밀번호/PIN 인증 + 이 장치에서는 생체 인식이 지원되지 않습니다 + 지문, 얼굴 ID, PIN, 패턴 또는 비밀번호로 앱을 잠급니다. + 여러 번 실패하면 프롬프트가 닫힙니다. 다시 시도하려면 앱을 다시 시작하세요. + 재설정 + 플러그인 다운로드를 필터링할 모드 선택 + 데이터가 백업되었습니다. 장치에 따라 동작이 다를 수 있으며 앱 접근이 차단될 경우 앱 데이터를 완전히 지우고 백업에서 복원하세요. 이로 인해 발생하는 불편을 사과드립니다. + 스마트폰이나 컴퓨터에서 %s를 방문하여 위의 코드를 입력하세요 + 구독 TV 프로그램에 대한 중단 없는 다운로드 및 알림을 보장하기 위해 CloudStream은 백그라운드에서 실행할 수 있는 권한이 필요합니다. 확인을 누르면 App info로 이동합니다. 거기서 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚로 스크롤하여 배터리 사용량을 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙로 설정합니다. 이 권한은 CS3가 배터리를 소모한다는 의미가 아닙니다. 알림을 받거나 공식 확장에서 동영상을 다운로드하는 등 필요할 때만 백그라운드에서 작동합니다. 취소를 선택한 경우 나중에 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨에서 이 설정을 조정할 수 있습니다. + 여기서 소스의 순서를 변경할 수 있습니다. 비디오의 우선 순위가 높은 경우에는 소스 선택에 더 높게 나타납니다. 소스 우선 순위와 품질 우선 순위의 합이 비디오 우선 순위입니다. +\n +\n참고 A: 3 +\n품질 B: 7 +\n총 비디오 우선 순위는 10입니다. +\n +\n참고: 합이 10 이상이면 해당 링크가 로드되면 플레이어는 자동으로 로드를 건너뜁니다! + 시즌 %1$d 에피소드 %2$d이(가) 출시됩니다 + 다른 확장자에서 검색 + 새로운 에피소드 알림 + 권장 사항 표시 + 플레이어에 속도 옵션을 추가합니다 + %s로 출시 예정 + %s +\n남음 + 잠재적 중복 발견 + %s의 PIN 입력 + 즐겨찾기에서 제거 + 캐스트미러 + \ No newline at end of file diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 49b333e3..7989654a 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -415,7 +415,7 @@ Skatīt kopienas krātuves Publisks saraksts Visi subtitri ar lielajiem burtiem - Vai lejupielādēt visus spraudņus no šīs krātuves\? + Vai lejupielādēt visus spraudņus no šīs krātuves? %s (atspējots) Tracks Audio dziesmas @@ -527,4 +527,4 @@ Abonēto šovu atjaunināšana Abonēts Abonēts %s - + \ No newline at end of file diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index fe82a90b..05fc0900 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -89,7 +89,7 @@ Отстранете ги црните граници Преводи Поставки на плеерот за преводи - Режим на Eigengravy + Брзина на репродукција Повлечете за да барате Повлечете од страна на страна за да ја контролирате вашата позиција во видеото Повлечете за да ги промените поставките @@ -186,7 +186,7 @@ Зумирај Disclaimer Општи поставки - Јазици на провајдерите + Јазици на екстензиите Распоред на апликацијата Претпочитани медиуми Автоматски @@ -239,7 +239,7 @@ Видео Исчисти Положен - MyCoolSite + Име на сајт Неважечки податоци Поддршка Функции на плеерот @@ -250,11 +250,11 @@ Опис Апликацијата ќе се ажурира по излегувањето Отпишана е од %s - прокси raw.githubusercontent.com + GitHub прокси TC Претплатен на %s Преводи - Да се преземат сите приклучоци од ова складиште\? + Да се преземат сите приклучоци од ова складиште? Недостасуваат дозволи за складирање. Обидете се повторно. Зачувај Вчитај од датотека @@ -299,7 +299,7 @@ MPV Инсталатор на пакети ОВА - Ажурирања и резервни копии + Ажурирање и резервна копија Вашата библиотека е празна :( \nНајавете се на корисничка сметка или додадете серии. Не се пронајдени епизоди @@ -337,7 +337,7 @@ Додатоци Прикажи случајно копче на почетната страница и библиотеката Поддржано - Сметки + Сметки и безбедност Вовед Креирај сметка Отстрани од гледаното @@ -349,7 +349,7 @@ Ажурирани %d приклучоци Мешано отворање Екстензии - Овозможете NSFW на поддржани провајдери + Овозможете NSFW на поддржани екстензии Не успеа да стигне до GitHub. Вклучувам jsDelivr прокси… Филтрирајте по претпочитан медиумски јазик @string/home_play @@ -381,7 +381,7 @@ Прикажи постери од Kitsu Дали сте сигурни дека сакате да излезете\? Предизвикува проблеми ако е превисоко поставено на уреди со мал простор за складирање, како што е Android TV. - Користејќи jsDelivr, блокирањето на GitHub може да се заобиколи. Може да ги одложи ажурирањата за неколку дена. + Заобиколете го блокирањето на необработени URL-адреси на github користејќи jsDelivr. Може да предизвика ажурирањата да се одложат за неколку дена. Да Азбучно (Ш до А) WP @@ -398,7 +398,7 @@ Инсталатор на APK Екстензии UHD - Референт + Референт (опционално) Се отвора 127.0.0.1 Ова исто така ќе се избрише сите приклучоци за складиште @@ -409,7 +409,7 @@ Не успеа да ги врати податоците од датотеката %s Не успеа Документарец - Стрим + Мрежен проток %d мин Играј со CloudStream Пушти трејлер @@ -433,7 +433,7 @@ %dm \nпреостанува Видео кеш на дискот - Поврзување до пренос + https://example.com/example.mp4 Готово Додај складиште 18+ @@ -449,7 +449,7 @@ SDR Веб-прелистувач Апликацијата не е пронајдена - MyCoolUsername + Корисничко име Отвори со %1$s %2$d%3$s Повторете го процесот на поставување @@ -480,9 +480,7 @@ Приклучокот е преземен Не може да се вчита %s Преземете ја листата на сајтови што сакате да ги користите - CloudStream нема стандардно инсталирани локации. Треба да ги инсталирате сајтовите од складиштата. -\n -\nПоради отстранување на DMCA без мозок од страна на Sky UK Limited 🤮 не можеме да ја поврземе локацијата на складиштето во апликацијата. + CloudStream нема стандардно инсталирани екстензии. Треба сами да инсталирате екстензии. \n \nПридружете се на нашиот Discord или барајте онлајн. Песни @@ -507,9 +505,9 @@ Завршува Измешан крај HDR - example.com + https://example.com Синхронизирај преводи - Примени при рестартирање + Рестартирајте ја апликацијата за да ги видите промените. Наслов на видео плеер максимални знаци Увезете фонтови ставајќи ги во %s Врати ги податоците од резервна копија @@ -591,4 +589,39 @@ Зачестеност на зачувување на бекап Овозможете автоматско префрлување на ориентацијата на екранот врз основа на видео ориентација Автоматска ротација - + Име и URL на складиштето + копирано! + Тестирај ги сите екстензии + ОК + Користењето на батеријата на апликацијата е веќе поставено на неограничено + Неомилен + Омилен + Заклучување со биометрика + Музика + Известување за нова епизода + Пребарајте во други екстензии + Прикажи препораки + Додава опција за брзина во плеерот + Cast mirror + Овој тест е наменет само за програмери и не ја потврдува или негира работата на која било екстензија. + Не може да се отворат информациите за апликацијата CloudStream. + Лозинка/ПИН автентикација + Отклучете ја апликацијата со отпечаток од прст, ID на лице, PIN, шема и лозинка. + Сега е направена резервна копија на вашите податоци на CloudStream. Иако можноста за ова е многу мала, сите уреди можат да се однесуваат поинаку. Во ретки случаи, кога ќе се заклучите од пристап до апликацијата, целосно исчистете ги податоците на апликацијата и вратете ги од резервна копија. Многу ни е жал за какви било непријатности што произлегуваат од ова. + Ресетирај + Сезона %1$d Епизода %2$d ќе биде објавена за + Fcast + Одбери уред да кастираш + Оневозможи оптимизација на батерија + Отклучи CloudStream + Биометриската автентикација не е поддржана на овој уред + Овој екран беше затворен поради повеќе неуспешни обиди. Ве молиме рестартирајте ја апликацијата. + Медиуми + Претстои во %s + %s +\nпреостанати + За да обезбеди непрекинато преземања и известувања за претплатени ТВ-серии, на CloudStream му треба дозвола да работи во заднина. Со притискање на ОК, ќе бидете упатени до информации за апликацијата. Таму, дојдете до 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 и поставете ја употребата на батеријата на Неограничено. Ве молиме имајте предвид, оваа дозвола не значи дека CS3 ќе ви ја испразни батеријата. Ќе работи само во заднина кога е потребно, како на пример при примање известувања или преземање видеа од официјални екстензии. Ако изберете да откажете, може да ја прилагодите оваа поставка подоцна во 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. + Грешка при пристапот до таблата со исечоци, обидете се повторно. + Грешка при копирање, копирајте го logcat и контактирајте со поддршката за апликацијата. + Аудио книга + \ No newline at end of file diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 279f5511..0a0f7bd7 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -167,7 +167,7 @@ ഔചിത്യ വീഡിയോ ക്വാളിറ്റി ചരിത്രം കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക - %d ദിവസങ്ങൾ %d മണിക്കൂർ %d മിനിറ്റ് + %1$d ദിവസങ്ങൾ %2$d മണിക്കൂർ %3$d മിനിറ്റ് അധ്യായം%dൽ റിലീസ് ചെയ്യും %1$d മണിക്കൂർ %2$d മിനിറ്റ് %1$sഅധ്യാ%2$d @@ -280,4 +280,4 @@ എഡ്ജ് തരം ഔട്ട്ലൈൻ നിറം പശ്ചാത്തല നിറം - + \ No newline at end of file diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 0c90b0c2..8170a7ff 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -55,4 +55,6 @@ Kongsi Tetapan Tutup - + Ep + cuba + \ No newline at end of file diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index ef796f9f..4bf2a273 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -417,7 +417,7 @@ ဖြည့်စွက်များ ရီပိုစစ်ထရီ ဖြည့်စွက်များအားလုံးကိုဖျက်မည်ဖြစ်သည် ရီပိုစစ်ထရီ ကိုဖျက်ရန် - ဤရီပိုစစ်ထရီမှ ဖြည့်စွက်များအားလုံးကို ဒေါင်းလုဒ်လုပ်မှာလား\? + ဤရီပိုစစ်ထရီမှ ဖြည့်စွက်များအားလုံးကို ဒေါင်းလုဒ်လုပ်မှာလား? %s (ပိတ်ပြီး) ထောက်ပံ့ထားသော ဘာသာစကား @@ -550,4 +550,4 @@ သင်နဂိုတည်းကသတ်မှတ်ပြီး လိုက်ဘရီရွေးချယ်ရန် ဖြင့်ဖွင့်မည် - + \ No newline at end of file diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 1e23f8af..99694e91 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -53,7 +53,7 @@ डाउनलोड रद्द गरियो डाउनलोड भयो अपडेट सुरु - स्ट्रिम + नेटवर्क स्ट्रीम लिङ्क लोड गर्दा त्रुटि भयो लिङ्कहरू रिलोड गरियो भित्री स्टोरेज @@ -70,7 +70,7 @@ बुकमार्कहरू फिल्टर गर्नुहोस् बुकमार्कहरू हटाउनुहोस् - हेरेको स्थिति राख्नुहोस् + हेरेको स्थिति निर्धारण गर्नुहोस् कपी बन्द खाली गर्नुहोस् @@ -85,4 +85,47 @@ स्रोतहरू स्वचालित बग रिपोर्टिङ असक्षम गर्नुहोस् लागू गर्नुहोस् - + साइट ले मेटाडाटा दिएको छैन,मेटाडाटा बिना भिडियो लोड नहुन सक्छ। + प्रकरण %1$d प्रसङ्ग %2$d प्रशारण हुनेवाला छ + प्रोभाईडर उपयोग गरी खोज्नुहोस् + भाषा डाउनलाेड गर्नुहोस् + उपशीर्षकको भाषा + यो प्रोभाईडर torrent हो त्यसैले VPN प्रयाेग गर्नुहुन सिफारिश गरिन्छ + वर्णन + केही विषय भेटिएन + Chromecast को उपशीर्षकहरु + केहीपनि वर्णन भेटिएन + Logcat देखाउनुहोस + Log + Picture-in-picture + अरु एप माथी सानो प्लेयरमा पलेब्याक जारी राख्दछ + प्लेयर स्पीड + उपशीर्षकको सेटिङ + विन्डोको रंग + उपशीर्षक ऊंचाई + अक्षरको नाप + फन्ट + प्रकारको उपयोग गरी खोज्नुहोस् + %d केरा डेभलपर लाई दिइयो + एउटै पनी केरा दिइएन + हेर्न सुचारु राख्नुहोस + हटाउनुहोस् + कालो सीमा हटाउनुहोस + उपशीर्षक + नयाँ प्रसङ्ग को सूचना + अन्य एक्सटेन्सन मा खोज्नुहोस् + सुुझाव हरु + अक्षरको रंग + बाहिरी रेखा को रंग + पृष्ठभूमिको रंग + धारको प्रकार + भाषा अटो छनौट + रिसेट गर्न स्क्रिनमा थिचिराख्नुहोस् + फन्ट देखाउन %s मा राख्नुहोस् + अधिक जानकारी + यो प्रोभाईडर सही ढंगले प्रयोग गर्न VPN प्रयोग गर्नुपर्ने हुन सक्छ + प्लेयर resize गर्ने वटन + प्लेयरको उपशीर्षकको सेटिङ + रिपोजिटरी को नाम र यूआरएल + कपी गरियो! + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index fc537837..8844407a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -487,7 +487,7 @@ Uitbreidingen Intro Publieke lijst - Alle plugins uit deze repository downloaden\? + Alle plugins uit deze repository downloaden? Beoordeling: %s Alle extensies zijn uitgeschakeld door een crash om u te helpen degene te vinden die problemen veroorzaakt. Bekijk de crash info @@ -608,4 +608,4 @@ Link opnieuw geladen Autoroteer Roteer - + \ No newline at end of file diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 724f4a63..b1168c36 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -335,7 +335,7 @@ Last ned listen over sider du vil bruke Dette vil også slette alle pakkebrønnsprogramtillegg Vis gemenskapspakkebrønner - Last ned alle programtilleggene fra denne pakkebrønnen\? + Last ned alle programtilleggene fra denne pakkebrønnen? %s (avskrudd) Spor Fant ikke programmet @@ -538,4 +538,4 @@ Bruk Hjelp Profilbakgrunn - + \ 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 c61f0104..4980c235 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -400,7 +400,7 @@ Zobacz repozytoria społeczności Publiczna lista Wszystkie napisy wielką literą - Pobrać wszystkie rozszerzenia z tego repozytorium\? + Uwaga: CloudStream 3 nie ponosi żadnej odpowiedzialności za korzystanie z rozszerzeń innych dostawców i nie zapewnia dla nich żadnego wsparcia! %s (Wyłączone) Ścieżki Ścieżki audio @@ -597,7 +597,7 @@ Ten test jest przeznaczony wyłącznie dla programistów i nie weryfikuje ani nie zaprzecza działaniu żadnego rozszerzenia. Zablokuj za pomocą biometrii Uwierzytelnianie hasłem/kodem PIN - Ten ekran został zamknięty z powodu wielu nieudanych prób. Uruchom ponownie aplikację. + Po kilku nieudanych próbach monit zostanie zamknięty. Aby spróbować ponownie, po prostu uruchom ponownie aplikację. Odblokuj CloudStream To urządzenie nie obsługuje uwierzytelniania biometrycznego Odblokuj aplikację za pomocą odcisku palca, identyfikatora twarzy, kodu PIN, wzoru i hasła. @@ -618,4 +618,21 @@ Multimedia Użycie akumulatora przez aplikację jest już ustawione na nieograniczone Aby zapewnić nieprzerwane pobieranie i powiadomienia o subskrybowanych programach telewizyjnych, CloudStream potrzebuje pozwolenia na działanie w tle. Naciskając OK, zostaniesz przekierowany do informacji o aplikacji. Tam przewiń do użycia akumulatora przez aplikację i ustaw je na nieograniczone. Pamiętaj, że to pozwolenie nie oznacza, że CS3 będzie zużywać akumulator. Będzie działać w tle tylko wtedy, gdy będzie to konieczne, na przykład podczas odbierania powiadomień lub pobierania filmów z oficjalnych rozszerzeń. Jeśli zdecydujesz się anulować, możesz dostosować to ustawienie później w ustawieniach głównych. - + Resetuj + Nadchodzące w %s + Odcinek %2$d sezonu %1$d wyjdzie za + Fcast + Wybierz urządzenie do transmisji + Mirror transmisji + Wiki CloudStream + Bezpieczeństwo + Konta + Uwierzytelniaj lokalnie + Obraz kodu QR + Nie można uzyskać kodu PIN urządzenia. Spróbuj uwierzytelnienia lokalnego + Kod PIN stracił ważność! + Kod wygasa za %1$dm %2$ds + Odrzuć + Otwórz repozytorium + Odwiedź %s na swoim smartfonie lub komputerze i wprowadź powyższy kod + \ 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 06e2352c..999ebefb 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -379,7 +379,7 @@ Ver repositórios da comunidade Lista pública Todas as legendas em maiúsculas - Transferir todos os plugins deste repositório\? + Transferir todos os plugins deste repositório? %s (Desativado) Instalador APK %d min @@ -615,4 +615,10 @@ Multimédia Desativar a otimização da bateria Para garantir descarregamentos ininterruptos e notificações de programas de TV subscritos, o CloudStream precisa de permissão para ser executado em segundo plano. Ao premir OK, será direcionado para informações da aplicação. Aí, desloque-se para utilização da bateria da aplicação e defina a utilização da bateria para sem restrições. Tenha em atenção que esta permissão não significa que o CS3 irá esgotar a sua bateria. Este só funcionará em segundo plano quando necessário, como ao receber notificações ou baixar vídeos de extensões oficiais. Se optar por cancelar, pode ajustar esta definição mais tarde em definições gerais. - + Reiniciar + Episódio %1$d Episódio %2$d vai ser lançado em + Por vir em + Fcast + Escolha o dispositivo + Transmitir + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index d7da44b4..30804c4d 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -59,7 +59,7 @@ Descărcare eșuată Descărcare anulată Descărcare finalizată - Stream + Stream de rețea Eroare la încărcarea linkurilor Stocare internă Dub @@ -142,7 +142,7 @@ Permisiunea de arhivare lipșe, vă rugăm să încercați din nou. Eroare de backup %s Căutare - Conturi și credite + Conturi și Securitate Actualizări și copii de rezervă Informații Căutare avansată @@ -255,8 +255,8 @@ Lungimea buffer-ului video Dimensiunea cache-ului video pe disc Ștergeți memoria cache de imagine și video - Provoacă blocaje dacă este setată la un nivel prea ridicat pe dispozitive cu memorie redusă, cum ar fi Android TV. - Cauzează probleme dacă este setat la un nivel prea ridicat pe dispozitive cu spațiu de stocare redus, cum ar fi Android TV. + Cauzează blocări dacă este setat prea mare pe dispozitive cu memorie redusă, cum ar fi Android TV. + Cauzează probleme dacă este setat prea mare pe dispozitive cu spațiu de stocare redus, cum ar fi Android TV. DNS peste HTTPS Folositor pentru evitarea blocajelor ISP Adaugați site-ul @@ -272,8 +272,8 @@ Orice probleme legale privind conținutul acestei aplicații ar trebui să fie rezolvate cu furnizorii și gazdele actuale de fișiere, întrucât noi nu suntem afiliați cu aceștia. În caz de încălcare a drepturilor de autor, vă rugăm să contactați direct părțile responsabile sau site-urile de streaming. Aplicația este destinată exclusiv utilizării educaționale și personale. CloudStream 3 nu găzduiește niciun fel de conținut în aplicație și nu are niciun control asupra conținutului media care este pus sau retras. CloudStream 3 funcționează ca orice alt motor de căutare, cum ar fi Google. CloudStream 3 nu găzduiește, nu încarcă și nu gestionează niciun videoclip, film sau conținut. Pur și simplu navighează, adună și afișează linkuri într-o interfață convenabilă și ușor de utilizat. Pur și simplu, acesta extrage paginile web ale unor terțe părți care sunt accesibile publicului prin intermediul oricărui browser web obișnuit. Este responsabilitatea utilizatorului de a evita orice acțiune care ar putea încălca legile care guvernează locația sa. Utilizați CloudStream 3 pe propria răspundere. General Aleatoriu - Afișați butonul aleatoriu pe pagina de start și în bibliotecă - Limba furnizorului + Afișează butonul pentru aleatoriu pe Pagina Principală și în Bibliotecă + Limbi ale extensiei Aplicație de prezentare Media preferată Codificarea subtitrărilor @@ -309,7 +309,7 @@ /\?\? /%d %s autentificat/ă - Nu s-a putut autentifica la %s + Nu am putut să mă autentific la %s Nu există Normal @@ -332,7 +332,7 @@ https://en.wikipedia.org/w/index.php?title=Pangram&oldid=225849300 https://en.wikipedia.org/wiki/The_quick_brown_fox_jumps_over_the_lazy_dog --> - Vând muzică de jazz și haine de bun-gust în New-York și Quebec la preț fix. + Vulpea maro iute sare peste câinele leneș Recomandări A fost încărcat %s Încărcați din fișier @@ -343,7 +343,7 @@ Secundar Sursa Aleatoriu - În curând + În curând… Cam Cam Cam @@ -365,7 +365,7 @@ Titlu și rezoluție Titlu Rezoluție - ID invalid + ID-ul invalid Date invalide Eroare @@ -394,14 +394,14 @@ %1$d %2$s NSFW %1$d-%2$d - Player Afișat - Căutați Suma - Player Ascuns/ă - Căutați Suma + Jucătorul afișat - Cantitatea de căutare + Jucător ascuns - Sumă de căutare Livestream-uri NSFW Eșuat - Suma căutată și utilizată atunci când player-ul este vizibil/ă + Suma de căutare utilizată atunci când jucătorul este vizibil Livestream - Cantitatea de căutare utilizată atunci când playerul este ascuns + Cantitatea de căutare folosită când jucătorul este ascuns Calitatea preferată (Date Mobile) Video Instalator APK @@ -426,11 +426,11 @@ Dezabonat de la %s Nu s-a descărcat: %d Vezi depozite din comunitate - PackageInstaller (Instalare a pachetelor) + Instalator de pachete Stare Nu se poate încărca %s Piste audio - Referent + Referer (opțional) Deschidere Extensii Layout @@ -440,7 +440,8 @@ Autori Raportarea accidentelor Adaugă depozit - Se pare că biblioteca ta este goală :( Conectează-te la un cont de bibliotecă sau adaugă emisiuni în biblioteca ta locală. + Biblioteca ta este goală :( +\nConectați-vă într-un cont de bibliotecă sau adăugați emisiuni la biblioteca locală. Eliminați subtitrările închise din subtitrări Descărcați lista de site-uri pe care doriți să le utilizați Evaluare (Ridicat la Scăzut) @@ -453,7 +454,7 @@ Vezi informații despre accident Deschideți cu Eliminați bloat din subtitrări - Actualizat %d plugin-uri + S-au actualizat %d plugin-uri Evaluare (Scăzut la Ridicat) Terminat Versiune @@ -472,11 +473,11 @@ Sortează Selectați Biblioteca Filtrați în funcție de limba media preferată - Episodul %d lansat! + Episodul %d a fost lansat! Android TV VLC Urmăriți videoclipuri în aceste limbi - Reveniți + Revenire Acțiuni Alfabetic (Z la A) URL invalid @@ -492,7 +493,7 @@ \nNu încarcă nicio extensie la pornire până când fișierul nu este eliminat. Scoateți de la urmărit Actualizat (Vechi la Nou) - Aplică la repornire + Reporniți aplicația pentru a vedea schimbările. Descriere Plugin Descărcat Sunteți sigur că vreți să ieșiți\? @@ -508,16 +509,16 @@ Nu s-a putut instala noua versiune a aplicației Piste Repornește - Activează NSFW la furnizori suportate + Activează conținutul pentru adulți pe extensiile suportate Nu s-a putut ajunge la GitHub. Se activează proxy-ul jsDelivr… Proxy GitHub - Depășește blocarea GitHub folosind jsDelivr. Poate cauza întârzieri de câteva zile la actualizări. + Ocolește blocarea URL-urilor brute de pe GitHub folosind jsDelivr. Poate cauza întârzieri în actualizări cu câteva zile. Următorul Toate %s deja descărcate - S-a descărcat: %d + Descărcat: %d Dezactivat: %d Toate subtitrările cu majuscule - Descărcați toate plugin-urile din acest depozit\? + Descărcați toate plugin-urile din acest depozit? Se actualizează emisiunile abonate Abonat Lista publică @@ -532,7 +533,7 @@ Suportat Playlist HLS Piste video - Arată Afișați pop-up-uri de săritură pentru deschidere/încheiere + Afișează opțiunea de omitere a ferestrelor pop-up pentru început/sfârșit Toate limbile Deschidere mixat Credite @@ -593,4 +594,51 @@ Adaugă o opțiune de viteză la player Favoriți/te Frecvența de backup - + Numele și URL-ul depozitului + Copiat! + Eroare la accesarea Clipboard-ului. Te rog să încerci din nou. + Eroare la copiere. Te rog să copiezi logcat-ul și să contactezi suportul aplicației. + PIN incorect. Te rog să încerci din nou. + PIN + Selectați un cont + Administrați conturile + Editare cont + Conectat ca %s + Rotire + Nefavorite + Deblocați CloudStream + Omiteți selecția contului la pornire + Linkuri reîncărcate + Utilizați contul implicit + Această testare este destinată doar dezvoltatorilor și nu verifică sau respinge funcționarea oricărei extensii. + Pentru a asigura descărcările neîntrerupte și notificările pentru serialele TV la care ești abonat, CloudStream are nevoie de permisiunea de a rula în fundal. Apăsând pe OK, vei fi direcționat către informațiile aplicației. Acolo, derulează la \"App battery usage\" și setează utilizarea bateriei la \"Unrestricted\". Te rog să reții, această permisiune nu înseamnă că CS3 îți va consuma bateria. Va opera în fundal doar când este necesar, cum ar fi atunci când primește notificări sau descarcă videoclipuri din extensiile oficiale. Dacă alegi să anulezi, poți ajusta această setare mai târziu în \"General Settings\". + PIN-ul trebuie să fie format din 4 caractere + Afișează un buton de comutare pentru orientarea ecranului + Autentificare parolă/PIN + Autentificarea biometrică nu este acceptată pe acest dispozitiv + Deblocați aplicația cu amprentă digitală, ID facial, PIN, model și parolă. + Acest ecran a fost închis din cauza mai multor încercări eșuate. Vă rugăm să reporniți aplicația. + Datele dvs. CloudStream au fost salvate acum. Deși posibilitatea acestui lucru este foarte mică, toate dispozitivele se pot comporta diferit. În cazul rar, în care nu aveți acces la aplicație, ștergeți complet datele aplicației și restaurați dintr-o copie de rezervă. Ne pare foarte rău pentru orice neplăcere care decurge din aceasta. + Ok + Dezactivează optimizarea bateriei + Utilizarea bateriei pentru aplicație este deja setată ca fiind nelimitată + Imposibil de deschis informațiile aplicației CloudStream. + Favorite + Muzică + Carte audio + Media + Caută în alte extensii + Testează toate extensiile + Rotire automată + Resetați + Activați comutarea automată a orientării ecranului pe baza orientării video + Blocare cu biometrie + %s +\nrămase + Următorul în %s + CloudStream Wiki + Sezonul %1$d Episod %2$d va fi lansat în + Selectați divece-ul pe care doriți să faceți cast + Cast mirror + Fcast + \ 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 cf456f56..79aa66e1 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -422,6 +422,7 @@ %s (отключено) Далее В CloudStream по умолчанию не установлены сайты. Вам необходимо установить сайты из репозиториев. +\n \nПрисоединяйтесь к нашему Discord-серверу или найдите в интернете. Недопустимые данные Разрешение и название @@ -450,7 +451,7 @@ Все %s уже скачаны Начата загрузка %1$d %2$s… Не скачано: %d - Скачать все плагины из этого репозитория\? + Скачать все плагины из этого репозитория? Включен безопасный режим Скачано: %d Обновлено %d плагинов @@ -616,4 +617,9 @@ Этот экран был закрыт из-за нескольких неудачных попыток. Пожалуйста, перезапустите приложение. Ваши данные в CloudStream были скопированы. Хотя вероятность этого очень мала, все устройства могут вести себя по-разному. В редких случаях, когда доступ к приложению заблокирован, полностью удалите данные приложения и восстановите их из резервной копии. Мы приносим свои извинения за любые неудобства, связанные с этим. Чтобы обеспечить бесперебойную загрузку и получение уведомлений о телепередачах, на которые вы подписаны, CloudStream необходимо разрешение на запуск в фоновом режиме. Нажав OK, вы перейдете к информации о приложении. Там перейдите к разделу 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 и установите значение \"Использование батареи\" 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Пожалуйста, обратите внимание, что это разрешение не означает, что CS3 разрядит вашу батарею. Он будет работать в фоновом режиме только при необходимости, например, при получении уведомлений или загрузке видео с официальных расширений. Если вы решите отменить, вы можете изменить эту настройку позже в 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨. - + Сброс + Сезон %1$d Эпизод %2$d выйдет + Выйдет %s + Fcast + Выберите девайс для трансляции + \ 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 ebaaa2ae..5ba29a00 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -112,7 +112,7 @@ Sledujem Popis sa nenašiel Ďalší náhodný - Stream + Sieťový stream Podržané Zobraziť Logcat 🐈 Protokol @@ -355,4 +355,26 @@ Maximálny počet znakov v názve prehrávača Spôsobuje problémy, ak je nastavená príliš vysoko v zariadeniach s malým ukladacím priestorom, ako je napríklad Android TV. Frekvencia zálohovania - + Toto tiež odstráni všetky doplnky repozitára + Sezóna %1$d Epizóda %2$d bude vydaná za + V repozitári neboli nájdené žiadne doplnky + Sťahuje sa aktualizácia aplikácie… + Inštaluje sa aktualizácia aplikácie… + skopírované! + Názov a URL repozitára + Aktualizujú sa odoberané relácie + Upozornenie na novú epizódu + Repozitár nebol nájdený, skontrolujte URL adresu a skúste VPN + Odkazy sa znovu načítali + Zmazať repozitár + URL adresa repozitára + Verejný zoznam + CloudStream nemá nainštalované žiadne stránky v predvolenom nastavení. Musíte nainštalovať stránky z repozitára. +\n +\nPripojte sa k nášmu Discord alebo vyhľadajte online. + Nepodarilo sa nainštalovať novú verziu aplikácie + Stiahnuť všetky doplnky z tohto repozitára? + Pridať repozitár + Názov repozitára + Zobraziť komunitné repozitáre + \ No newline at end of file diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 7b0d2870..90198dd5 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -440,7 +440,7 @@ \nSababtuna waa in mar dhexdaas ah na dacweeyeen shirkadda Sky UK Limited🤮, markaa si aan mar dambe taasi u dhicin anagu kuma rakibi karno... \n \nDiscord naga soo qabo ama internetka ka baadh. - Soo deji dhamaan sidkanayaasha reboositarkan\? + Soo deji dhamaan sidkanayaasha reboositarkan? Boodhka Boodhka xalqadda Boodhka weyn @@ -485,4 +485,4 @@ Bilowga Bilow isku qasan Qoraalka dhamaadka - + \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 76508c43..695cbd31 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -33,7 +33,7 @@ Försök ansluta igen… Gå tillbaka @string/result_poster_img_des - Spela Avsnitt + Spela avsnitt Ladda ner Intern lagring Dub @@ -71,7 +71,7 @@ Håll inne för att återställa till standard Fortsätt titta Ta bort - Mer information + Mer info En VPN kan behövas för att den här leverantören ska fungera korrekt Denna leverantör är en torrent, en VPN rekommenderas Beskrivning @@ -162,12 +162,12 @@ Visa inte igen Uppdatera Nerladdningar startad - Nerladdning Misslyckades + Nerladdning misslyckades Nerladdad Laddar ner - Nerladdning Pausad - Nerladdning Avbryten - Nerladdning Färdig + Nerladdning pausad + Nerladdning avbryten + Nerladdning färdig Återupta nerladdning Pausa nerladdning Pausa @@ -204,7 +204,7 @@ Logga ut konto Nerladdningsplats - Tittar på nytt + Ser om Automatisk DNS över HTTPS " " @@ -217,7 +217,7 @@ Dubbeltryck i mitten för att pausa Återställ data från backup Konton och säkerhet - Uppdateringar och backup + Uppdateringar och säkerhetskopiering Automatiska pluginuppdateringar %1$dd %2$dh %3$dm Sök %s… @@ -230,7 +230,7 @@ Autospela nästa episod Spela Trailer Starta nästa episod när nuvarande slutar - Episod %d kommer släppas om + Episod %d kommer att släppas om %d min Visa trailers @string/home_play @@ -366,7 +366,7 @@ Titta på videor på dessa språk Föregående Spår - Uppdatering påbörjad + Uppdatering startad Logg Videospelarens hoppsträcka (Sekunder) Ändra status @@ -436,7 +436,7 @@ All %s har redan laddats ner Ladda ner alla tillägg från den här databasen? Felsäkert läge på - Applicera vid omstart + Starta om appen för att se ändringar. Intern spelare Kamera HD Tillägg nedladdad @@ -460,7 +460,7 @@ Avsnitt %d släppt! Den här listan är tom. Försök byta till en annan. Tillägg borttagen - Tillägg laddade + Tillägg laddad Tillägg Säkerhetskopierings antal Uppdatera visnings förlopp @@ -490,7 +490,7 @@ Web Affischbild Vad vill du se - Lägg till databas + Lägg till tillägg Uppdaterade %d tillägg Nedladdat %1$d %2$s Inaktiverad: %d @@ -524,7 +524,7 @@ Förbikoppla ISP Kamera Kamera - Alla tillägg stängdes av på grund av en krasch för att hjälpa dig hitta den som orsakar problem. + Alla tillägg stängdes av på grund av en krasch för att hjälpa dig hitta det tillägget som orsakar problem. Storlek Författarna Stödd @@ -599,9 +599,31 @@ Lås upp appen med Fingerprint, Face ID, PIN, mönster eller lösenord. Lås upp CloudStream Biometrisk autentisering stöds inte på den här enheten - Detta fönster stängs efter några misslyckade försök. Du måste starta om appen. + Skärmen stängdes av på grund av flera misslyckade försök. Starta om applikationen. Favorit Ta bort från favoriter %s \nkvarstår - + kopierad! + Tilläggs namn och URL + För att säkerställa oavbrutna nedladdningar och aviseringar för prenumererade tv-program behöver CloudStream tillstånd att köras i bakgrunden. Genom att trycka på OK kommer du till App info. Där bläddrar du till appens batterianvändning och ställer in batterianvändningen på obegränsad. Observera att denna behörighet inte betyder att CS3 kommer att tömma ditt batteri. Den fungerar bara i bakgrunden när det behövs, till exempel när du tar emot aviseringar eller laddar ner videor från officiella tillägg. Om du väljer att avbryta kan du ändra denna inställning senare i allmänna inställningar. + Din CloudStream-data har säkerhetskopierats nu. Även om möjligheten till detta är mycket liten, kan alla enheter bete sig olika. I det sällsynta fallet att du blir utelåst från att komma åt appen, rensa appdata helt och återställ från en säkerhetskopia. Vi ber om ursäkt för eventuella besvär som detta uppstår. + Ljudbok + Det gick inte att komma åt urklipp. Försök igen. + OK + Inaktivera batterioptimering + Appens batterianvändning är redan inställd på obegränsad + Det gick inte att öppna CloudStreams appinformation. + Musik + Återställ + Kommer ut om %s + Fel vid kopiering, kopiera logcat och kontakta appsupport. + Media + Fcast + Cast mirror + Säsong %1$d Avsnitt %2$d kommer att släppas om + Välj cast-enhet + CloudStream Wiki + Konton + Säkerhet + \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index e981d05a..4b000304 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -10,17 +10,17 @@ மேலும் விருப்பங்கள் அடுத்த அத்தியாயம் வகைகள் - பகிர் + பங்கு உலாவியில் திற - ஏற்றுவதைத் தவிர் + ஏற்றுவதைத் தவிர்க்கவும் பார்த்து கொண்டிருப்பது - நிறுத்தி வைக்கப்பட்டுள்ளது - நிறைவடைந்தது + ஆன்-ஓல்ட் + முடிந்தது பார்க்கத் திட்டமிடப்பட்டுள்ளது மீண்டும் பார்க்கத் தொடங்கியது - ஸ்ட்ரீம் டோரண்ட் + ச்ட்ரீம் டொரண்ட் வசன வரிகள் - பின் செல் + திரும்பிச் செல்லுங்கள் அத்தியாயத்தை இயக்கு எபிசோட் பதிவிற்கான அனுமதி கொடுக்கவும் பதிவிறக்கப்பட்டது @@ -28,82 +28,82 @@ பதிவிறக்கம் இடைநிறுத்தப்பட்டது பதிவிறக்கம் தொடங்கியது பதிவிறக்கம் தோல்வியடைந்தது - ஸ்ட்ரீம் + பிணையம் ச்ட்ரீம் உள் சேமிப்பு மொழிபெயர்க்கப்பட்டது - கோப்பை நீக்கு - கோப்பை இயக்கவும் - பதிவிறக்கத்தை நிறுத்து + கோப்பை அழி + கோப்பு + இடைநிறுத்தம் பதிவிறக்கம் தானியங்கி பிழை அறிக்கையை முடக்கு - மேலும் தகவல்கள் + மேலும் செய்தி மறை - நீக்கு - நீக்கு - சேமிக்கவும் - உரை வண்ணம் + அகற்று + தெளிவான + சேமி + உரை நிறம் வெளிப்புற நிறம் பின்னணி நிறம் - வசன உயர்வு + வசன உயரம் எழுத்துரு வழங்குபவர்கள் பயன்படுத்தி தேடுங்கள் - வகைகளைப் பயன்படுத்தி தேடவும் + வகைகளைப் பயன்படுத்தி தேடுங்கள் மொழிகளைப் பதிவிறக்கவும் வசன மொழி - தொடர்ந்து பார்க்கவும் + தொடர்ந்து பார்த்துக் கொள்ளுங்கள் முறையாக இயங்க vpn பயன்படுத்தவும் - பிளேயர் அளவை மாற்றும் பொத்தான் - Chromecast வசனங்கள் - அமைப்புகளை மாற்ற ஸ்வைப் செய்யவும் - அடுத்த எபிசோடை தானாக இயக்கவும் - தற்போதைய அத்தியாயம் முடிந்ததும் அடுத்த அத்தியாயத்தைத் தொடங்கவும் - தேடுவதற்கு இருமுறை தட்டவும் - பிளேயரில் தேடுதல் வேகம் - இடைநிறுத்துவதற்கு நடுவில் தட்டவும் + பிளேயர் மறுஅளவிடுதல் பொத்தானை + Chromecast வசன வரிகள் + அமைப்புகளை மாற்ற ச்வைப் செய்யவும் + தன்னியக்க அடுத்த அத்தியாயம் + தற்போதைய ஒன்று முடிவடையும் போது அடுத்த அத்தியாயத்தைத் தொடங்கவும் + தேட இரட்டை தட்டு + வீரர் தொகை (விநாடிகள்) + இடைநிறுத்த நடுவில் இரண்டு முறை தட்டவும் நடிகர்கள்: %s - பின் செல் + திரும்பிச் செல்லுங்கள் அமைப்புகள் ஏற்றுகிறது… கைவிடப்பட்டது பதிவிறக்கம் முடிந்தது இணைப்பை மீண்டும் முயலவும்… - திரைப்படத்தை இயக்கு - லைவ்ஸ்ட்ரீம் இயக்கு + திரைப்படம் திரைப்படம் + லைவ்ச்ட்ரீம் விளையாடுங்கள் டிரெய்லரை இயக்கு - மூலம் + மூலங்கள் இணைப்புகளை ஏற்றுவதில் பிழை - இயக்கு + விளையாடுங்கள் பதிவிறக்கம் ரத்து செய்யப்பட்டது வசன அமைப்புகள் - பதிவிறக்கத்தை மீண்டும் தொடங்கவும் + பதிவிறக்கத்தை மீண்டும் தொடங்குங்கள் புக்மார்க்குகளை வடிகட்டவும் தகவல் - பிளேயர் வேகம் - புக்மார்க்கு - பயன்படுத்து - நகலெடுக்கவும் + பிளேயர் விரைவு + புக்மார்க்குகள் + இடு + நகலெடு மூடு எழுத்துரு அளவு - நீக்கு - மேலும் தகவல்கள் - தானாக மொழியை தேர்ந்தெடு - முன்னோக்கி அல்லது பின்னோக்கி தேட வலது அல்லது இடது பக்கத்தில் இருமுறை தட்டவும் + அகற்று + மேலும் செய்தி + தானாக தேர்ந்தெடுக்கப்பட்ட மொழி + முன்னோக்கி அல்லது பின்னோக்கி தேட வலது அல்லது இடது பக்கத்தில் இரண்டு முறை தட்டவும் மொபைலில் பிரகாசத்தை பயன்படுத்த - இயல்புநிலைக்கு மீட்டமைக்க அழுத்திப் பிடிக்கவும் + இயல்புநிலைக்கு மீட்டமைக்க பிடிக்கவும் முறையாக இயங்க vpn பரிந்துரைக்கப்பட்டது கருப்பு எல்லைகளை அகற்றவும் - விளக்கம் + விவரம் கதை எதுவும் காணப்படவில்லை - விளக்கம் ஏதும் காணப்படவில்லை - படத்தில்-படம் - பிளேயர் வசனங்கள் அமைப்புகள் - Logcat 🐈 காட்டு - பிற பயன்பாடுகளுக்கு மேல் மினியேச்சர் பிளேயரில் பிளேபேக் தொடர்கிறது + எந்த விளக்கமும் கிடைக்கவில்லை + படம்-படம் + பிளேயர் வசன வரிகள் அமைப்புகள் + LOGCAT ஐக் காட்டு + மற்ற பயன்பாடுகளின் மேல் ஒரு மினியேச்சர் பிளேயரில் பிளேபேக்கைத் தொடர்கிறது வசன வரிகள் - வீடியோ பிளேயரில் நேரத்தைக் கட்டுப்படுத்த இடது அல்லது வலதுபுறம் ஸ்வைப் செய்யவும் - பிரகாசம் அல்லது ஒலியளவை மாற்ற இடது அல்லது வலது பக்கத்தில் ஸ்வைப் செய்யவும் - இடைநிறுத்துவதற்கு இருமுறை தட்டவும் - Chromecast வசன அமைப்புகள் - இருண்ட மேலடுக்குக்குப் பதிலாக ஆப் பிளேயரில் சிஸ்டம் பிரகாசத்தைப் பயன்படுத்தவும் + ஒரு வீடியோவில் உங்கள் நிலையைக் கட்டுப்படுத்த பக்கத்திலிருந்து பக்கமாக ச்வைப் செய்யவும் + ஒளி அல்லது அளவை மாற்ற இடது அல்லது வலது பக்கத்தில் மேலே அல்லது கீழே சறுக்கி விடுங்கள் + இடைநிறுத்த இரட்டை தட்டு + Chromecast வசன வரிகள் அமைப்புகள் + இருண்ட மேலடுக்கு பதிலாக ஆப் பிளேயரில் கணினி பிரகாசத்தைப் பயன்படுத்தவும் அத்தியாயம் %d-இன் வெளியீட்டு நேரம் %1$dம %2$dநி %dநி @@ -118,5 +118,501 @@ எபிசோட்டின் போஸ்டர் போஸ்டர் பிரதான போஸ்டர் - %1$s Ep %2$d - + %1$s ep %2$d + %S ஏற்ற முடியவில்லை + %1$dd %2$dh %3$dm + வசன வரிகள் + முடிவு + முடிந்தது + சுயவிவரம் %d + வைஃபை + மொழி குறியீடு (en) + பதிவு + டப் சிட்டை + வாட்ச் முன்னேற்றத்தைப் புதுப்பிக்கவும் + ஏற்றப்பட்ட காப்புப்பிரதி கோப்பு + விரிவாக்க மொழிகள் + கணக்குகள் மற்றும் பாதுகாப்பு + எச்.எல்.எச் பிளேலிச்ட் + கலப்பு முடிவு + கிளவுட்ச்ட்ரீம் + பெனின்கள் எதுவும் கொடுக்கப்படவில்லை + பிளேபேக் விரைவு + தேட ச்வைப் + தரவை காப்புப் பிரதி எடுக்கவும் + மேம்பட்ட தேடல் + செருகுநிரல்களை தானாக பதிவிறக்கவும் + %1$d-%2$d + +30 + இது %s நிரந்தரமாக நீக்கும +\n நீ சொல்வது உறுதியா? + ஆண்டு + எதிர்பாராத பிளேயர் பிழை + பயன்பாட்டில் விளையாடுங்கள் + Chromecast அத்தியாயம் + ஆண்ட்ராய்டு டிவி போன்ற குறைந்த சேமிப்பு இடங்களைக் கொண்ட சாதனங்களில் மிக அதிகமாக அமைக்கப்பட்டால் சிக்கல்களை ஏற்படுத்துகிறது. + செயல்கள் + தலைப்பை சுவரொட்டியின் கீழ் வைக்கவும் + விரைவில் வருகிறது… + வீடியோ தடங்கள் + சிக்கலை ஏற்படுத்தும் ஒரு விபத்து காரணமாக அனைத்து நீட்டிப்புகளும் அணைக்கப்பட்டன. + சொருகி பதிவிறக்கம் செய்யப்பட்டது + பயன்பாடு கிடைக்கவில்லை + பிளேயர் காட்டப்பட்டுள்ளது - தொகையைத் தேடுங்கள் + பயன்பாட்டு புதுப்பிப்பைப் பதிவிறக்குகிறது… + கிட்அப்பை அடைய முடியவில்லை. Jsdelivr ப்ராக்சியை இயக்குதல்… + நிறுத்து + Chromecast கண்ணாடி + Hello@world.com + தோல்வி + /%d + லைவ்ச்ட்ரீம் + களஞ்சிய பெயர் மற்றும் முகவரி + நகலெடுக்கப்பட்டது! + நகலெடுப்பதில் பிழை, தயவுசெய்து LogCat ஐ நகலெடுத்து பயன்பாட்டு ஆதரவை தொடர்பு கொள்ளவும். + கிளிப்போர்டை அணுகுவதில் பிழை, மீண்டும் முயற்சிக்கவும். + அகரவரிசை (A முதல் சட் வரை) + %S க்கு முள் உள்ளிடவும் + தற்போதைய முள் உள்ளிடவும் + முள் + தவறான முள். தயவு செய்து மீண்டும் முயற்சிக்கவும். + தலைப்பு + சொருகி நீக்கப்பட்டது + தளம் + பாதுகாப்பான பயன்முறை + கொடுக்கப்பட்ட பெனீன் + திரைப்படங்கள் + இல்லை + முரண்பாட்டில் சேரவும் + ஆசிய நாடகங்கள் + மதிப்பிடப்பட்டது: %.1 எஃப் + \@string/home_play + செயல்வரம்பு + தேடல் + டிரெய்லர்களைக் காட்டு + இணைப்புகள் எதுவும் கிடைக்கவில்லை + கிளிப்போர்டில் இணைப்பு நகலெடுக்கப்பட்டது + கள் + அனைத்தும் + வசன நேரந்தவறுகை இல்லை + அதிக உரை. கிளிப்போர்டில் சேமிக்க முடியவில்லை. + பார்த்தபடி குறி + மற்றவைகள் + இணைப்புகள் மீண்டும் ஏற்றப்பட்டன + துணை + சாளரம் நிறம் + எழுத்துருக்களை %s இல் வைப்பதன் மூலம் இறக்குமதி செய்யுங்கள் + மேனிலை தரவு தளத்தால் வழங்கப்படவில்லை, தளத்தில் இல்லாவிட்டால் வீடியோ ஏற்றுதல் தோல்வியடையும். + காப்பு அதிர்வெண் + தரவு சேமிக்கப்பட்டது + சேமிப்பக அனுமதிகள் இல்லை. தயவு செய்து மீண்டும் முயற்சிக்கவும். + செயலிழப்புகள் குறித்த தரவை மட்டுமே அனுப்புகிறது + சுவரொட்டியில் இடைமுகம் கூறுகளை மாற்றவும் + மேம்படுத்தல் சோதிக்க + பூட்டு + அனிமேசன் டப்பிங்/துணை + சைகைகள் + விரைவான பழுப்பு நரி சோம்பேறி நாய் மீது குதிக்கிறது + மூலம் + கேம் + சுவரொட்டி படம் + செயலிழப்பு அறிக்கை + பொது பட்டியல் + பதிப்பு + நூலகத்தைத் தேர்ந்தெடுக்கவும் + பதிவு + கணக்கைத் திருத்தவும் + %1$s %2$d %3$s + ரத்துசெய் + இயல்புநிலை + ஓவா + டொரண்ட் + ஆவணப்படம் + ஆசிய நாடகம் + NSFW + மூலம் + விருப்பமான கண்காணிப்பு தகுதி (மொபைல் தரவு) + பெரிதாக்கு + ISP பைபாச் + நீட்டிப்புகள் + பிளேயர் நற்பொருத்தங்கள் + நற்பொருத்தங்கள் + பொது + ஆதரிக்கப்பட்ட நீட்டிப்புகளில் NSFW ஐ இயக்கவும் + முதன்மை நிறம் + பயன்பாட்டு கருப்பொருள் + சுவரொட்டி தலைப்பு இடம் + %கள் அங்கீகரிக்கப்பட்டவை + வசன நேரந்தவறுகை + வசன வரிகள் %d ms மிக விரைவாக காட்டப்பட்டால் இதைப் பயன்படுத்தவும் + பரிந்துரைக்கப்படுகிறது + ஏற்றப்பட்ட %s + கோப்பிலிருந்து ஏற்றவும் + இணையத்திலிருந்து ஏற்றவும் + ஆட்டக்காரர் + தீர்மானம் மற்றும் தலைப்பு + தலைப்பு + வசன வரிகளிலிருந்து மூடிய தலைப்புகளை அகற்றவும் + வசனங்களிலிருந்து வீக்கத்தை அகற்று + முந்தைய + நீட்டிப்புகள் + களஞ்சிய முகவரி + சொருகி ஏற்றப்பட்டது + %1$d %2$s ஐ பதிவிறக்கத் தொடங்கியது… + பதிவிறக்கம் %1$d %2$s + பதிவிறக்கம்: %d + அனைத்து %கள் ஏற்கனவே பதிவிறக்கம் செய்யப்பட்டுள்ளன + முடக்கப்பட்டது: %d + அனைத்து வசன வரிகள் + ஆடியோ தடங்கள் + மறுதொடக்கம் + விவரம் + ஆசிரியர்கள் + வலை வீடியோ நடிகர்கள் + இணைய உலாவி + %S ஐத் தவிர்க்கவும் + மறுபரிசீலனை செய்யுங்கள் + அறிமுகம் + வரலாற்றை அழிக்கவும் + அகரவரிசை (z முதல் A வரை) + உடன் திறந்திருக்கும் + குணங்கள் + கூட்டு + மாற்றவும் + அனைத்தையும் மாற்று + உங்கள் நூலகத்தில் ஏற்கனவே ஒரு நகல் உருப்படி இருப்பதாகத் தெரிகிறது: \'%கள்.\' +\n இந்த உருப்படியை எப்படியும் சேர்க்க விரும்புகிறீர்களா, இருக்கும் ஒன்றை மாற்ற விரும்புகிறீர்களா அல்லது செயலை ரத்து செய்ய விரும்புகிறீர்களா? + கடிகார நிலையை அமைக்கவும் + விளிம்பு வகை + பருவம் இல்லை + அத்தியாயம் + தற்குறிப்பு + -30 + ஒளிதோற்றம் + வீடியோ பிளேயர் தீர்மானம் + வீடியோ இடையக அளவு + நகலி தளம் + அறிவிலிமையம் பதிலாள் + JSdelivr ஐப் பயன்படுத்தி மூல அறிவிலிமையம் முகவரி களின் பைபாச். புதுப்பிப்புகள் சில நாட்களுக்கு தாமதமாகிவிடும். + களஞ்சியம் கிடைக்கவில்லை, முகவரி ஐ சரிபார்த்து VPN ஐ முயற்சிக்கவும் + தொகுதி பதிவிறக்கம் + சொருகு + இந்த களஞ்சியத்திலிருந்து அனைத்து செருகுநிரல்களையும் பதிவிறக்கவா? + மொழி + திரும்பவும் + %S இலிருந்து குழுவிலகப்பட்டது + இது அனைத்து களஞ்சிய செருகுநிரல்களையும் நீக்கிவிடும் + நீங்கள் பயன்படுத்த விரும்பும் தளங்களின் பட்டியலைப் பதிவிறக்கவும் + விருப்பமான வீடியோ பிளேயர் + திறப்பு/முடிவுக்கு ச்கிப் பாப்அப்களைக் காட்டு + பயன்படுத்தவும் + தொகு + NSFW + பிளேயர் மறைக்கப்பட்டுள்ளது - தொகையைத் தேடுங்கள் + Nginx சேவையக முகவரி + பின்னணி + மதிப்பீடு: %கள் + நிச்சயமாக நீங்கள் வெளியேற வேண்டுமா? + வீடியோ மற்றும் பட தற்காலிக சேமிப்பை அழிக்கவும் + பார்த்ததிலிருந்து அகற்று + APK நிறுவி + ஆண்ட்ராய்டு டிவி + அதிகபட்சம் + கேம் + சாதாரண + தடங்கள் + கிதப் + + வேறு முகவரி உடன் ஏற்கனவே இருக்கும் தளத்தின் குளோனைச் சேர்க்கவும் + Https க்கு மேல் dns + உங்கள் தற்போதைய அத்தியாயம் முன்னேற்றத்தை தானாக ஒத்திசைக்கவும் + சுருக்கம் + இந்த வழங்குநருக்கு Chromecast உதவி இல்லை + அடுத்தது + பிழை + பயன்பாட்டு தளவமைப்பு + இயல்புநிலை + டி.எச் + கணக்கு + வசன குறியீட்டு + பயன்பாட்டு மொழி + டிவி தளவமைப்பு + காப்புப்பிரதியிலிருந்து தரவை மீட்டெடுக்கவும் + பிழை %s + புதுப்பிப்புகள் மற்றும் காப்புப்பிரதி + PackactionInstaller + வெளியேறியதும் பயன்பாடு புதுப்பிக்கப்படும் + வரிசைப்படுத்தவும் + புதுப்பிக்கப்பட்டது (பழையது முதல் புதியது) + சுயவிவர பின்னணி + நீங்கள் ஏற்கனவே வாக்களித்து விட்டீர்கள் + பிடித்தவை + பிடித்தவைகளிலிருந்து அகற்று + சாத்தியமான நகல் காணப்படுகிறது + மாறாத + கிளவுட்ச்ட்ரீமைத் திறக்கவும் + பயோமெட்ரிக்சுடன் பூட்டு + ஆடியோ நூல் + புதிய அத்தியாயம் அறிவிப்பு + பிற நீட்டிப்புகளில் தேடுங்கள் + கிட்சுவிலிருந்து சுவரொட்டிகளைக் காட்டு + அத்தியாயம் விளையாடுங்கள் + இயல்புநிலை மதிப்புக்கு மீட்டமைக்கவும் + பருவம் + நிலை + இலவசம் + தொலைக்காட்சி தொடர் + அனிம் + மீண்டும் காட்ட வேண்டாம் + நீட்சி + அனைத்து நீட்டிப்புகளையும் சோதிக்கவும் + இந்த சோதனை டெவலப்பர்களுக்கு மட்டுமே, எந்தவொரு நீட்டிப்பையும் சரிபார்க்கவோ மறுக்கவோ இல்லை. + முன்மாதிரி தளவமைப்பு + பதிவிறக்கம் செய்யப்பட்ட கோப்பு + பகுத்தல் + எம்.பி.வி. + உங்கள் நூலகம் காலியாக உள்ளது :( +\n நூலகக் கணக்கில் உள்நுழைக அல்லது உங்கள் உள்ளக நூலகத்தில் காட்சிகளைச் சேர்க்கவும். + குழுவிலகவும் + சுயவிவரங்கள் + முள் 4 எழுத்துகளாக இருக்க வேண்டும் + ஒரு கணக்கைத் தேர்ந்தெடுக்கவும் + கணக்குகளை நிர்வகிக்கவும் + செருகுநிரல்கள் + தவறான வலைதள முகவரி + தானியங்கி சொருகி புதுப்பிப்புகள் + பதிவிறக்கத்தை வடிகட்ட பயன்முறையைத் தேர்ந்தெடுக்கவும் + மீட்டமை + களஞ்சியத்தில் செருகுநிரல்கள் எதுவும் காணப்படவில்லை + சீசன் %1$d எபிசோட் %2$d வெளியிடப்படும் + புதுப்பிப்பு தொடங்கியது + பரிந்துரைகளைக் காட்டு + டெவ்சுக்கு வழங்கப்பட்ட %d பெனின்கள் + பிளேயரில் வேக விருப்பத்தை சேர்க்கிறது + கோப்பு %s இலிருந்து தரவை மீட்டெடுப்பதில் தோல்வி + நூலகம் + தகவல் + வழங்குநரால் பிரிக்கப்பட்ட தேடல் முடிவுகளை உங்களுக்கு வழங்குகிறது + தேடல் முடிவுகளில் தேர்ந்தெடுக்கப்பட்ட வீடியோ தரத்தை மறைக்கவும் + பயன்பாட்டு புதுப்பிப்புகளைக் காட்டு + பயன்பாட்டைத் தொடங்கிய பின் புதிய புதுப்பிப்புகளைத் தானாகவே தேடுங்கள். + அமைவு செயல்முறை மீண்டும் + முன்நிபந்தனைகளுக்கு புதுப்பிக்கவும் + அதே தேவ்சின் ஒளி நாவல் பயன்பாடு + தேவ்சுக்கு ஒரு பெனீன் கொடுங்கள் + %1$d %2$s + அத்தியாயங்கள் எதுவும் கிடைக்கவில்லை + அழி + கோப்பை அழி + இடைநிறுத்தம் + தொடங்கு + கடந்து சென்றது + %டி.எம +\n மீதமுள்ள + %கள +\n மீதமுள்ள + நடந்து கொண்டிருக்கிறது + காலம் + வரிசையில் + பயன்படுத்தப்பட்டது + பயன்பாடு + ஆவணப்படங்கள் + லைவ்ச்ட்ரீம்கள் + தொடர் + கார்ட்டூன் + அனிம் + பிழையைப் பதிவிறக்குங்கள், சேமிப்பக அனுமதிகளை சரிபார்க்கவும் + வழங்குநரை மாற்றவும் + முன்னோட்டம் பின்னணி + எந்த தரவை அனுப்பவில்லை + அனிமேசுக்கு நிரப்பு அத்தியாயத்தைக் காட்டு + கூடுதல் களஞ்சியங்களிலிருந்து இன்னும் நிறுவப்படாத அனைத்து செருகுநிரல்களையும் தானாக நிறுவவும். + முழு வெளியீடுகளுக்கு பதிலாக மட்டுமே புதுப்பிப்புகளைத் தேடுங்கள் + அதே தேவ்சின் அனிம் பயன்பாடு + அத்தியாயங்கள் + %S இல் வரவிருக்கும் + மன்னிக்கவும், விண்ணப்பம் செயலிழந்தது. ஒரு அநாமதேய பிழை அறிக்கை டெவலப்பர்களுக்கு அனுப்பப்படும் + முடிந்தது + வசன வரிகள் இல்லை + கார்ட்டூன்கள் + டொரண்ட்ச் + படம் + %S இல் விளையாடுங்கள் + மூல பிழை + தொலை பிழை + ரெண்டரர் பிழை + உலாவியில் விளையாடுங்கள் + இணைப்பை நகலெடுக்கவும் + ஆட்டோ பதிவிறக்கம் + கண்ணாடியைப் பதிவிறக்கவும் + இணைப்புகளை மீண்டும் ஏற்றவும் + OP ஐத் தவிர்க்கவும் + இந்த புதுப்பிப்பைத் தவிர்க்கவும் + வசன வரிகள் பதிவிறக்கவும் + துணை சிட்டை + மறுஅளவிடுங்கள் + விருப்பமான கடிகார தகுதி (வைஃபை) + வீடியோ பிளேயர் தலைப்பு மேக்ச் சார்ச் + தளத்தை அகற்று + பாதை பதிவிறக்க + வீடியோ இடையக நீளம் + வட்டில் வீடியோ கேச் + பிளேயர் தெரியும் போது பயன்படுத்தப்படும் தேடல் தொகை + பிளேயர் மறைக்கப்படும்போது பயன்படுத்தப்படும் தேடல் தொகை + ஆண்ட்ராய்டு டிவி போன்ற குறைந்த நினைவகம் கொண்ட சாதனங்களில் மிக அதிகமாக அமைக்கப்பட்டால் செயலிழப்புகளை ஏற்படுத்துகிறது. + ISP தொகுதிகளைத் தவிர்ப்பதற்கு பயனுள்ளதாக இருக்கும் + திரைக்கு பொருந்தும் + மறுப்பு + இணைப்புகள் + பயன்பாட்டு புதுப்பிப்புகள் + காப்புப்பிரதி + கேச் + மனையமைவு + தெரிகிறது + சீரற்ற பொத்தான் + முகப்புப்பக்கம் மற்றும் நூலகத்தில் சீரற்ற பொத்தானைக் காட்டு + வழங்குநர் சோதனை + மனையமைவு + விருப்பமான மீடியா + வழங்குநர்கள் + தானி + தொலைபேசி தளவமைப்பு + கடவுச்சொல் 123 + பயனர்பெயர் + 127.0.0.1 + %1$s %2$s + புகுபதிகை + கணக்கு சேர்க்க + உங்கள் கணக்கை துவங்குங்கள் + கண்காணிப்பைச் சேர்க்கவும் + சேர்க்கப்பட்டது %கள் + ஒத்திசைவு + மதிப்பிடப்பட்டது + %d / 10 + /?? + %S இல் உள்நுழைய முடியவில்லை + முடக்கு + எதுவுமில்லை + மணித்துளி + அவுட்லைன் + மனச்சோர்வு + நிழல் + எழுப்பப்பட்ட + ஒத்திசைவு துணை + வசன வரிகள் காட்டப்பட்டால் இதைப் பயன்படுத்தவும் %d ms மிகவும் தாமதமானது + முக்கிய + துணை + கேம் + டி.சி. + ப்ளூ-ரே + Wp + டிவிடி + 4 கே + எச்.டி. + யுஎச்.டி + எச்.டி.ஆர் + எச்டி + எச்.டி.ஆர் + தவறான ஐடி + தவறான தரவு + விருப்பமான ஊடக மொழியால் வடிகட்டவும் + கூடுதல் + டிரெய்லர் + https://example.com/example.mp4 + குறிப்பாளர் (விரும்பினால்) + இந்த மொழிகளில் வீடியோக்களைப் பாருங்கள் + சமூக களஞ்சியங்களைக் காண்க + %கள் (முடக்கப்பட்டவை) + மாற்றங்களைக் காண பயன்பாட்டை மறுதொடக்கம் செய்யுங்கள். + செயலிழப்பு தகவலைக் காண்க + களஞ்சியத்தை நீக்கு + கிளவுட்ச்ட்ரீமில் இயல்புநிலையாக எந்த தளங்களும் நிறுவப்படவில்லை. நீங்கள் களஞ்சியங்களிலிருந்து தளங்களை நிறுவ வேண்டும். +\n எங்கள் முரண்பாட்டில் சேரவும் அல்லது ஆன்லைனில் தேடுங்கள். + நிலை + அளவு + ஆதரிக்கப்பட்டது + முதலில் நீட்டிப்பை நிறுவவும் + Fcast + காச்ட் சாதனத்தைத் தேர்ந்தெடுக்கவும் + அனைத்து மொழிகளும் + ஆம் + பேட்டரி தேர்வுமுறை முடக்கு + உங்கள் நூலகத்தில் சாத்தியமான நகல் உருப்படிகள் கண்டறியப்பட்டுள்ளன: +\n %கள் +\n இந்த உருப்படியை எப்படியும் சேர்க்க விரும்புகிறீர்களா, ஏற்கனவே உள்ளவற்றை மாற்ற விரும்புகிறீர்களா அல்லது செயலை ரத்து செய்ய விரும்புகிறீர்களா? + முள் உள்ளிடவும் + பூட்டு சுயவிவரம் + %S ஆக உள்நுழைந்துள்ளது + தொடக்கத்தில் கணக்கு தேர்வைத் தவிர்க்கவும் + இயல்புநிலை கணக்கைப் பயன்படுத்தவும் + கடவுச்சொல்/முள் ஏற்பு + இந்த சாதனத்தில் பயோமெட்ரிக் ஏற்பு ஆதரிக்கப்படவில்லை + கைரேகை, முகம் ஐடி, முள், முறை மற்றும் கடவுச்சொல் மூலம் பயன்பாட்டைத் திறக்கவும். + பல தோல்வியுற்ற முயற்சிகள் காரணமாக இந்த திரை மூடப்பட்டது. விண்ணப்பத்தை மறுதொடக்கம் செய்யுங்கள். + காச்ட் மிரர் + புதுப்பிப்பு எதுவும் கிடைக்கவில்லை + செய்தித் பெயர் + https://example.com + கணக்கை மாற்றவும் + 1000 எம்.எச் + சீரற்ற + Hq + அமைப்பைத் தவிர்க்கவும் + உங்கள் சாதனத்திற்கு ஏற்றவாறு பயன்பாட்டின் தோற்றத்தை மாற்றவும் + உனக்கு என்ன பார்க்க வேண்டும் + களஞ்சியத்தைச் சேர்க்கவும் + களஞ்சிய பெயர் + 18+ + பதிவிறக்கம் செய்யப்படவில்லை: %d + புதுப்பிக்கப்பட்டது %d செருகுநிரல்கள் + உள் வீரர் + வி.எல்.சி. + திறப்பு + கலப்பு திறப்பு + வரவு + வரலாறு + சரி + கிளவுட்ச்ட்ரீமின் பயன்பாட்டுத் தகவலைத் திறக்க முடியவில்லை. + %S க்கு குழுசேர்ந்தது + உதவி + %கள் பிடித்தவைகளில் சேர்க்கப்படுகின்றன + பிடித்தவையில் சேர் + சுழற்றுங்கள் + திரை நோக்குநிலைக்கு மாற்று பொத்தானைக் காண்பி + வீடியோ நோக்குநிலையின் அடிப்படையில் திரை நோக்குநிலையின் தானியங்கி மாறுவதை இயக்கவும் + ஆட்டோ சுழலும் + பிடித்த + இசை + ஓவா + தரமான சிட்டை + புதுப்பிப்பு + விடுபதிகை + விரலிடைத் தோல் + சில தொலைபேசிகள் புதிய தொகுப்பு நிறுவியை ஆதரிக்கவில்லை. புதுப்பிப்புகள் நிறுவப்படாவிட்டால் மரபு விருப்பத்தை முயற்சிக்கவும். + சந்தா தொலைக்காட்சி நிகழ்ச்சிகளுக்கான தடையற்ற பதிவிறக்கங்கள் மற்றும் அறிவிப்புகளை உறுதிப்படுத்த, கிளவுட்ச்ட்ரீம் பின்னணியில் இயங்க இசைவு தேவை. சரி என்பதை அழுத்துவதன் மூலம், நீங்கள் பயன்பாட்டுத் தகவலுக்கு அனுப்பப்படுவீர்கள். அங்கு, 𝘼𝙥𝙥 𝘼𝙥𝙥 பெறுநர் க்கு உருட்டி, பேட்டரி பயன்பாட்டை 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙 என அமைக்கவும். தயவுசெய்து கவனிக்கவும், இந்த இசைவு CS3 உங்கள் பேட்டரியை வெளியேற்றும் என்று அர்த்தமல்ல. அறிவிப்புகளைப் பெறும்போது அல்லது உத்தியோகபூர்வ நீட்டிப்புகளிலிருந்து வீடியோக்களைப் பதிவிறக்குவது போன்ற பின்னணியில் மட்டுமே இது செயல்படும். நீங்கள் ரத்து செய்ய தேர்வுசெய்தால், இந்த அமைப்பை பின்னர் 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 in இல் சரிசெய்யலாம். + பயன்பாட்டு பேட்டரி பயன்பாடு ஏற்கனவே கட்டுப்பாடற்றதாக அமைக்கப்பட்டுள்ளது + பயன்பாட்டு புதுப்பிப்பை நிறுவுகிறது… + பயன்பாட்டின் புதிய பதிப்பை நிறுவ முடியவில்லை + மரபு + வரிசைப்படுத்து + மதிப்பீடு (உயர் முதல் குறைந்த வரை) + மதிப்பீடு (குறைந்த முதல் உயர் வரை) + புதுப்பிக்கப்பட்டது (பழையது புதியது) + இந்த பட்டியல் காலியாக உள்ளது. இன்னொரு இடத்திற்கு மாற முயற்சிக்கவும். + பாதுகாப்பான பயன்முறை கோப்பு கிடைத்தது! +\n கோப்பு அகற்றப்படும் வரை தொடக்கத்தில் எந்த நீட்டிப்புகளையும் ஏற்றவில்லை. + சந்தா காட்சிகளைப் புதுப்பித்தல் + சந்தா + எபிசோட் %d வெளியானது! + மொபைல் தரவு + இயல்புநிலையை அமைக்கவும் + ஆதாரங்கள் எவ்வாறு உத்தரவிடப்படுகின்றன என்பதை இங்கே மாற்றலாம். ஒரு வீடியோவுக்கு அதிக முன்னுரிமை இருந்தால், அது மூல தேர்வில் அதிகமாகத் தோன்றும். மூல முன்னுரிமையின் தொகை மற்றும் தரமான முன்னுரிமை ஆகியவை வீடியோ முன்னுரிமை. +\n சான்று A: 3 +\n தகுதி பி: 7 +\n 10 இன் ஒருங்கிணைந்த வீடியோ முன்னுரிமை இருக்கும். +\n குறிப்பு: தொகை 10 அல்லது அதற்கு மேற்பட்டதாக இருந்தால், அந்த இணைப்பு ஏற்றப்படும்போது பிளேயர் தானாகவே ஏற்றுவதைத் தவிர்க்கும்! + இடைமுகம் ஐ சரியாக உருவாக்க முடியவில்லை, இது ஒரு பெரிய பிழை மற்றும் உடனடியாக %கள் தெரிவிக்க வேண்டும் + %கள் பிடித்தவைகளிலிருந்து அகற்றப்பட்டன + உங்கள் கிளவுட்ச்ட்ரீம் தரவு இப்போது காப்புப் பிரதி எடுக்கப்பட்டுள்ளது. இதன் சாத்தியம் மிகக் குறைவு என்றாலும், எல்லா சாதனங்களும் வித்தியாசமாக நடந்து கொள்ளலாம். அரிய விசயத்தில், பயன்பாட்டை அணுகுவதிலிருந்து நீங்கள் பூட்டப்படுகிறீர்கள், பயன்பாட்டு தரவை முழுவதுமாக அழித்து, காப்புப்பிரதியிலிருந்து மீட்டெடுக்கவும். இதிலிருந்து எழும் ஏதேனும் சிரமத்திற்கு நாங்கள் மிகவும் வருந்துகிறோம். + ஊடகம் + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c3e5959a..bd74194e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -18,10 +18,10 @@ %1$ds %2$dd %dm - Poster + Afiş Afiş - Bölüm Posteri - Ana Poster + Bölüm Afişi + Ana Afiş Sonraki Rastgele @string/play_episode Geri git @@ -62,7 +62,7 @@ Canlı yayını oynat Torrent oynat Kaynaklar - Alt yazılar + Altyazılar Yeniden bağlan… Geri dön Bölümü oynat @@ -80,7 +80,7 @@ Bağlantılar yüklenirken hata oluştu Dahili depolama Dublajlı - Alt yazılı + Altyazılı Dosyayı sil Dosyayı oynat İndirmeyi sürdür @@ -100,13 +100,13 @@ Temizle Kaydet Oynatıcı hızı - Alt yazı ayarları + Altyazı ayarları Yazı rengi Dış hat rengi Arka plan rengi Pencere rengi Kenar tipi - Alt yazı yüksekliği + Altyazı yüksekliği Yazı tipi Yazı boyutu Sağlayıcıları kullanarak ara @@ -116,7 +116,7 @@ Otomatik seçilecek dil İndirilecek diller Altyazı dili - Sıfırlamak için basılı tut + Varsayılana sıfırlamak için basılı tutun Fontları içe aktarmak için %s konumuna yerleştirin İzlemeye devam et Kaldır @@ -133,10 +133,10 @@ İçerik diğer uygulamaların üzerinde küçük bir pencerede oynatılmaya devam eder Oynatıcı yeniden boyutlandırma butonu Siyah sınır çizgilerini kaldır - Alt yazılar - Oynatıcı alt yazı ayarları - Chromecast alt yazıları - Chromecast alt yazı ayarları + Altyazılar + Oynatıcı altyazı ayarları + Chromecast altyazıları + Chromecast altyazı ayarları Oynatma hızı Atlamak için kaydır Zamanı ayarlamak için yanlardan kaydır @@ -220,7 +220,7 @@ Site Özet Sıraya alındı - Alt yazı yok + Altyazı yok Varsayılan Boş Kullanılan @@ -263,16 +263,16 @@ Otomatik indir Şu kaynaktan indir Bağlantıları yenile - Alt yazıları indir + Altyazıları indir Kalite etiketi Dublaj etiketi - Alt yazı etiketi + Altyazı etiketi Başlık show_hd_key show_dub_key show_sub_key show_title_key - Poster üzerindeki öğeler + Afiş üzerindeki öğeleri değiştir Güncelleme bulunamadı Güncellemeleri denetle Kilitle @@ -298,7 +298,7 @@ Farklı bir URL ile mevcut bir sitenin klonunu ekleyin İndirme konumu NGINX sunucu URL\'si - Dublajlı/Alt yazılı animeleri göster + Dublajlı/Altyazılı Anime Gösterimi Ekrana sığdır Uzat Yakınlaştır @@ -307,12 +307,12 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Genel Rastgele İçerik - Anasayfada ve Kütüphanede rastgele düğmesini göster + Ana sayfada ve Kütüphanede rastgele düğmesini göster Uzantı dilleri Uygulama düzeni Tercih edilen medya Desteklenen Uzantılarda NSFW\'yi etkinleştirin - Alt yazı kodlaması + Altyazı kodlaması Sağlayıcılar Düzen Otomatik @@ -321,8 +321,8 @@ Emülatör düzeni Birincil renk Uygulama teması - Poster başlık konumu - Başlığı posterin altına yerleştir + Afiş başlık konumu + Başlığı afişin altına yerleştir anilist_key mal_key @@ -344,7 +344,7 @@ Trakt --> %1$s %2$s - hesabı + hesap Çıkış yap Giriş yap Hesap değiştir @@ -360,7 +360,7 @@ %s başarıyla doğrulandı %s ile giriş yapılamadı - Hiçbiri + Yok Normal Hepsi Maksimum @@ -370,12 +370,12 @@ Çökmüş Gölge Yükseltilmiş - Alt yazı senkronu + Altyazı senkronu 1000 ms - Alt yazı gecikmesi - Alt yazılar %d ms erken görüntüleniyorsa bunu kullanın - Alt yazılar %d ms geç gözüküyorsa bunu kullanın - Alt yazı gecikmesi yok + Altyazı gecikmesi + Altyazılar %d ms erken görüntüleniyorsa bunu kullanın + Altyazılar %d ms geç gözüküyorsa bunu kullanın + Altyazı gecikmesi yok Movie Series From 02b956940a626daaed1ba2af70954ac152324237 Mon Sep 17 00:00:00 2001 From: CranberrySoup <142951702+CranberrySoup@users.noreply.github.com> Date: Thu, 4 Jul 2024 18:07:01 +0000 Subject: [PATCH 838/888] Port large parts of the API to crossplatform (#1163) --- app/build.gradle.kts | 2 + .../lagradost/cloudstream3/AcraApplication.kt | 4 +- .../lagradost/cloudstream3/CommonActivity.kt | 2 +- .../lagradost/cloudstream3/MainActivity.kt | 24 +- .../cloudstream3/network/CloudflareKiller.kt | 1 + .../cloudstream3/plugins/PluginManager.kt | 2 +- .../services/BackupWorkManager.kt | 2 +- .../services/SubscriptionWorkManager.kt | 4 +- .../syncproviders/AccountManager.kt | 13 +- .../syncproviders/{SyncAPI.kt => SyncApi.kt} | 10 - .../syncproviders/providers/AniListApi.kt | 2 +- .../syncproviders/providers/MALApi.kt | 2 +- .../providers/OpenSubtitlesApi.kt | 1 + .../syncproviders/providers/SimklApi.kt | 55 +--- .../cloudstream3/ui/ControllerActivity.kt | 2 +- .../cloudstream3/ui/WebviewFragment.kt | 2 +- .../cloudstream3/ui/account/AccountHelper.kt | 2 +- .../ui/download/DownloadAdapter.kt | 3 +- .../ui/download/DownloadButtonSetup.kt | 6 +- .../ui/download/DownloadFragment.kt | 3 +- .../cloudstream3/ui/home/HomeFragment.kt | 14 +- .../ui/home/HomeParentItemAdapter.kt | 2 +- .../ui/home/HomeParentItemAdapterPreview.kt | 2 +- .../cloudstream3/ui/home/HomeViewModel.kt | 10 +- .../ui/library/LibraryFragment.kt | 6 +- .../cloudstream3/ui/library/PageAdapter.kt | 4 +- .../ui/player/AbstractPlayerFragment.kt | 6 +- .../cloudstream3/ui/player/CS3IPlayer.kt | 3 +- .../ui/player/DownloadFileGenerator.kt | 1 - .../ui/player/DownloadedPlayerActivity.kt | 4 + .../ui/player/ExtractorLinkGenerator.kt | 1 - .../ui/player/FullScreenPlayer.kt | 2 +- .../cloudstream3/ui/player/GeneratorPlayer.kt | 1 + .../cloudstream3/ui/player/IGenerator.kt | 1 - .../cloudstream3/ui/player/IPlayer.kt | 1 - .../cloudstream3/ui/player/LinkGenerator.kt | 20 +- .../ui/player/OfflinePlaybackHelper.kt | 2 +- .../ui/player/PlayerGeneratorViewModel.kt | 1 - .../ui/player/PreviewGenerator.kt | 3 - .../ui/player/RepoLinkGenerator.kt | 1 - .../player/source_priority/PriorityAdapter.kt | 4 +- .../player/source_priority/ProfilesAdapter.kt | 4 +- .../ui/quicksearch/QuickSearchFragment.kt | 7 +- .../cloudstream3/ui/result/ActorAdaptor.kt | 2 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 2 +- .../cloudstream3/ui/result/ResultFragment.kt | 2 +- .../ui/result/ResultFragmentPhone.kt | 10 +- .../ui/result/ResultFragmentTv.kt | 9 +- .../ui/result/ResultViewModel2.kt | 108 +++++-- .../cloudstream3/ui/result/UiText.kt | 2 +- .../cloudstream3/ui/search/SearchFragment.kt | 14 +- .../cloudstream3/ui/search/SearchHelper.kt | 2 +- .../ui/search/SearchResultBuilder.kt | 2 +- .../ui/settings/SettingsAccount.kt | 6 +- .../ui/settings/SettingsProviders.kt | 6 +- .../settings/extensions/ExtensionsFragment.kt | 4 +- .../ui/settings/extensions/PluginAdapter.kt | 2 +- .../ui/settings/extensions/PluginsFragment.kt | 2 +- .../ui/settings/testing/TestResultAdapter.kt | 4 +- .../ui/settings/testing/TestView.kt | 2 +- .../ui/setup/SetupFragmentProviderLanguage.kt | 2 +- .../utils/{AppUtils.kt => AppContextUtils.kt} | 187 +++++++++-- .../cloudstream3/utils/DataStoreHelper.kt | 2 +- .../cloudstream3/utils/InAppUpdater.kt | 2 +- .../utils/PackageInstallerService.kt | 2 +- .../utils/VideoDownloadManager.kt | 11 +- library/build.gradle.kts | 9 + .../lagradost/api/ContextHelper.android.kt | 20 ++ .../network/WebViewResolver.android.kt | 43 +-- .../kotlin/com/lagradost/api/ContextHelper.kt | 16 + .../com/lagradost/cloudstream3/MainAPI.kt | 290 ++++-------------- .../cloudstream3/extractors/AStreamHub.kt | 2 +- .../cloudstream3/extractors/Acefile.kt | 0 .../cloudstream3/extractors/AsianLoad.kt | 0 .../cloudstream3/extractors/Blogger.kt | 0 .../cloudstream3/extractors/BullStream.kt | 0 .../cloudstream3/extractors/ByteShare.kt | 0 .../lagradost/cloudstream3/extractors/Cda.kt | 0 .../cloudstream3/extractors/Chillx.kt | 0 .../extractors/ContentXExtractor.kt | 2 +- .../cloudstream3/extractors/Dailymotion.kt | 0 .../cloudstream3/extractors/DoodExtractor.kt | 0 .../cloudstream3/extractors/EPlay.kt | 0 .../cloudstream3/extractors/Embedgram.kt | 0 .../extractors/EmturbovidExtractor.kt | 0 .../cloudstream3/extractors/Evolaod.kt | 0 .../cloudstream3/extractors/Fastream.kt | 0 .../cloudstream3/extractors/Filesim.kt | 0 .../cloudstream3/extractors/GMPlayer.kt | 0 .../cloudstream3/extractors/Gdriveplayer.kt | 0 .../cloudstream3/extractors/GenericM3U8.kt | 0 .../cloudstream3/extractors/Gofile.kt | 0 .../extractors/GoodstreamExtractor.kt | 0 .../cloudstream3/extractors/GuardareStream.kt | 0 .../extractors/HDMomPlayerExtractor.kt | 2 +- .../extractors/HDPlayerSystemExtractor.kt | 2 +- .../extractors/HDStreamAbleExtractor.kt | 0 .../extractors/HotlingerExtractor.kt | 0 .../cloudstream3/extractors/Hxfile.kt | 0 .../cloudstream3/extractors/JWPlayer.kt | 0 .../cloudstream3/extractors/Jawcloud.kt | 0 .../cloudstream3/extractors/Jeniusplay.kt | 0 .../cloudstream3/extractors/Krakenfiles.kt | 0 .../cloudstream3/extractors/Linkbox.kt | 0 .../cloudstream3/extractors/M3u8Manifest.kt | 0 .../extractors/MailRuExtractor.kt | 2 +- .../cloudstream3/extractors/Maxstream.kt | 0 .../cloudstream3/extractors/Mediafire.kt | 0 .../cloudstream3/extractors/Minoplres.kt | 0 .../cloudstream3/extractors/MixDrop.kt | 0 .../cloudstream3/extractors/Moviehab.kt | 0 .../cloudstream3/extractors/Mp4Upload.kt | 0 .../cloudstream3/extractors/MultiQuality.kt | 0 .../cloudstream3/extractors/Mvidoo.kt | 0 .../extractors/OdnoklassnikiExtractor.kt | 2 +- .../cloudstream3/extractors/OkRuExtractor.kt | 0 .../cloudstream3/extractors/Okrulink.kt | 0 .../extractors/PeaceMakerstExtractor.kt | 2 +- .../cloudstream3/extractors/Pelisplus.kt | 0 .../extractors/PixelDrainExtractor.kt | 0 .../cloudstream3/extractors/PlayLtXyz.kt | 2 +- .../cloudstream3/extractors/PlayerVoxzer.kt | 0 .../cloudstream3/extractors/Rabbitstream.kt | 0 .../extractors/RapidVidExtractor.kt | 2 +- .../cloudstream3/extractors/SBPlay.kt | 0 .../cloudstream3/extractors/Sendvid.kt | 0 .../extractors/SibNetExtractor.kt | 2 +- .../cloudstream3/extractors/Solidfiles.kt | 0 .../cloudstream3/extractors/StreamSB.kt | 0 .../cloudstream3/extractors/StreamTape.kt | 0 .../extractors/StreamWishExtractor.kt | 0 .../cloudstream3/extractors/Streamhub.kt | 0 .../cloudstream3/extractors/Streamlare.kt | 0 .../cloudstream3/extractors/StreamoUpload.kt | 0 .../cloudstream3/extractors/Streamplay.kt | 0 .../cloudstream3/extractors/Supervideo.kt | 0 .../cloudstream3/extractors/TRsTXExtractor.kt | 2 +- .../cloudstream3/extractors/Tantifilm.kt | 0 .../extractors/TauVideoExtractor.kt | 2 +- .../cloudstream3/extractors/Tomatomatela.kt | 0 .../extractors/UpstreamExtractor.kt | 0 .../cloudstream3/extractors/Uqload.kt | 0 .../cloudstream3/extractors/Userload.kt | 0 .../cloudstream3/extractors/Userscloud.kt | 0 .../cloudstream3/extractors/Uservideo.kt | 0 .../cloudstream3/extractors/Vicloud.kt | 0 .../extractors/VidMoxyExtractor.kt | 2 +- .../extractors/VidSrcExtractor.kt | 0 .../cloudstream3/extractors/VidSrcTo.kt | 142 ++++----- .../extractors/VideoSeyredExtractor.kt | 2 +- .../cloudstream3/extractors/VideoVard.kt | 0 .../cloudstream3/extractors/Vidguard.kt | 4 +- .../extractors/VidhideExtractor.kt | 0 .../cloudstream3/extractors/Vidmoly.kt | 0 .../lagradost/cloudstream3/extractors/Vido.kt | 0 .../cloudstream3/extractors/Vidplay.kt | 0 .../cloudstream3/extractors/Vidstream.kt | 0 .../lagradost/cloudstream3/extractors/Voe.kt | 6 +- .../lagradost/cloudstream3/extractors/Vtbe.kt | 0 .../cloudstream3/extractors/WatchSB.kt | 0 .../cloudstream3/extractors/WcoStream.kt | 0 .../cloudstream3/extractors/Wibufile.kt | 0 .../cloudstream3/extractors/XStreamCdn.kt | 0 .../cloudstream3/extractors/YourUpload.kt | 0 .../extractors/YoutubeExtractor.kt | 0 .../cloudstream3/extractors/Zorofile.kt | 0 .../cloudstream3/extractors/Zplayer.kt | 0 .../extractors/helper/AesHelper.kt | 0 .../extractors/helper/AsianEmbedHelper.kt | 2 +- .../extractors/helper/GogoHelper.kt | 0 .../extractors/helper/NineAnimeHelper.kt | 0 .../extractors/helper/VstreamhubHelper.kt | 0 .../extractors/helper/WcoHelper.kt | 10 +- .../cloudstream3/network/WebViewResolver.kt | 28 ++ .../cloudstream3/syncproviders/SyncAPI.kt | 10 + .../lagradost/cloudstream3/utils/AppUtils.kt | 24 ++ .../cloudstream3/utils/ExtractorApi.kt | 28 +- .../cloudstream3/utils/M3u8Helper.kt | 0 .../cloudstream3/utils/UnshortenUrl.kt | 6 +- .../com/lagradost/api/ContextHelper.jvm.kt | 10 + .../network/WebViewResolver.jvm.kt | 35 +++ 181 files changed, 730 insertions(+), 608 deletions(-) rename app/src/main/java/com/lagradost/cloudstream3/syncproviders/{SyncAPI.kt => SyncApi.kt} (97%) rename app/src/main/java/com/lagradost/cloudstream3/utils/{AppUtils.kt => AppContextUtils.kt} (82%) create mode 100644 library/src/androidMain/kotlin/com/lagradost/api/ContextHelper.android.kt rename app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt => library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt (90%) create mode 100644 library/src/commonMain/kotlin/com/lagradost/api/ContextHelper.kt rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/MainAPI.kt (86%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/AStreamHub.kt (97%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Acefile.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/AsianLoad.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Blogger.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/BullStream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/ByteShare.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Cda.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Chillx.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Dailymotion.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/DoodExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/EPlay.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Embedgram.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Evolaod.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Fastream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Filesim.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/GMPlayer.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/GenericM3U8.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Gofile.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/GuardareStream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/HDStreamAbleExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Hxfile.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/JWPlayer.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Jawcloud.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Jeniusplay.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Krakenfiles.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Linkbox.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/M3u8Manifest.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Maxstream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Mediafire.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Minoplres.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/MixDrop.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Moviehab.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Mp4Upload.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/MultiQuality.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Mvidoo.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/OkRuExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Okrulink.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt (99%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Pelisplus.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/PixelDrainExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt (99%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Rabbitstream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/SBPlay.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Sendvid.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt (97%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Solidfiles.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/StreamSB.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/StreamTape.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Streamhub.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Streamlare.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/StreamoUpload.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Streamplay.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Supervideo.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Tantifilm.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Tomatomatela.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Uqload.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Userload.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Userscloud.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Uservideo.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vicloud.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VidSrcTo.kt (88%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt (98%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VideoVard.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vidguard.kt (97%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/VidhideExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vidmoly.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vido.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vidplay.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vidstream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Voe.kt (93%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Vtbe.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/WatchSB.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/WcoStream.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Wibufile.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/XStreamCdn.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/YourUpload.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Zorofile.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/Zplayer.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt (97%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/NineAnimeHelper.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt (76%) create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.kt create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/AppUtils.kt rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/ExtractorApi.kt (97%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/M3u8Helper.kt (100%) rename {app/src/main/java => library/src/commonMain/kotlin}/com/lagradost/cloudstream3/utils/UnshortenUrl.kt (96%) create mode 100644 library/src/jvmMain/kotlin/com/lagradost/api/ContextHelper.jvm.kt create mode 100644 library/src/jvmMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.jvm.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9c75a90d..ebefa0ea 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -263,6 +263,8 @@ tasks.register("copyJar") { // Merge the app classes and the library classes into classes.jar tasks.register("makeJar") { + // Duplicates cause hard to catch errors, better to fail at compile time. + duplicatesStrategy = DuplicatesStrategy.FAIL dependsOn(tasks.getByName("copyJar")) from( zipTree("build/app-classes/classes.jar"), diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 1680d698..598ff540 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -8,13 +8,14 @@ import android.content.Intent import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import com.lagradost.api.setContext import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.openBrowser +import com.lagradost.cloudstream3.utils.AppContextUtils.openBrowser import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKeys @@ -151,6 +152,7 @@ class AcraApplication : Application() { get() = _context?.get() private set(value) { _context = WeakReference(value) + setContext(WeakReference(value)) } fun getKeyClass(path: String, valueType: Class): T? { diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index 82e985db..ba303fef 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -36,7 +36,7 @@ import com.lagradost.cloudstream3.ui.player.PlayerEventType import com.lagradost.cloudstream3.ui.result.ResultFragment import com.lagradost.cloudstream3.ui.result.UiText import com.lagradost.cloudstream3.ui.settings.Globals.updateTv -import com.lagradost.cloudstream3.utils.AppUtils.isRtl +import com.lagradost.cloudstream3.utils.AppContextUtils.isRtl import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.UIHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 21567e4d..a47e7685 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -56,9 +56,7 @@ import com.google.common.collect.Comparators.min import com.jaredrummler.android.colorpicker.ColorPickerDialogListener import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.APIHolder.apis -import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.initAll -import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -121,16 +119,18 @@ import com.lagradost.cloudstream3.ui.settings.SettingsGeneral import com.lagradost.cloudstream3.ui.setup.HAS_DONE_SETUP_KEY import com.lagradost.cloudstream3.ui.setup.SetupFragmentExtensions import com.lagradost.cloudstream3.utils.ApkInstaller -import com.lagradost.cloudstream3.utils.AppUtils.html -import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable -import com.lagradost.cloudstream3.utils.AppUtils.isLtr -import com.lagradost.cloudstream3.utils.AppUtils.isNetworkAvailable -import com.lagradost.cloudstream3.utils.AppUtils.isRtl -import com.lagradost.cloudstream3.utils.AppUtils.loadCache -import com.lagradost.cloudstream3.utils.AppUtils.loadRepository -import com.lagradost.cloudstream3.utils.AppUtils.loadResult -import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiDubstatusSettings +import com.lagradost.cloudstream3.utils.AppContextUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.isCastApiAvailable +import com.lagradost.cloudstream3.utils.AppContextUtils.isLtr +import com.lagradost.cloudstream3.utils.AppContextUtils.isNetworkAvailable +import com.lagradost.cloudstream3.utils.AppContextUtils.isRtl +import com.lagradost.cloudstream3.utils.AppContextUtils.loadCache +import com.lagradost.cloudstream3.utils.AppContextUtils.loadRepository +import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult +import com.lagradost.cloudstream3.utils.AppContextUtils.loadSearchResult +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.updateHasTrailers import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index c8c385cf..ce2fb3a2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.network +import android.util.Base64 import android.util.Log import android.webkit.CookieManager import androidx.annotation.AnyThread diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index a5631500..6b2b75f2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -14,7 +14,6 @@ import androidx.fragment.app.FragmentActivity import com.fasterxml.jackson.annotation.JsonProperty import com.google.gson.Gson import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.removePluginMapping import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -33,6 +32,7 @@ import com.lagradost.cloudstream3.ui.result.UiText import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.extensions.REPOSITORIES_KEY import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt index 6ed7a447..4ef841f5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/services/BackupWorkManager.kt @@ -10,7 +10,7 @@ import androidx.work.PeriodicWorkRequest import androidx.work.WorkManager import androidx.work.WorkerParameters import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.AppUtils.createNotificationChannel +import com.lagradost.cloudstream3.utils.AppContextUtils.createNotificationChannel import com.lagradost.cloudstream3.utils.BackupUtils import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt index e2bcd6e1..00c74dff 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/services/SubscriptionWorkManager.kt @@ -10,13 +10,13 @@ import androidx.core.app.NotificationCompat import androidx.core.net.toUri import androidx.work.* import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.ui.result.txt -import com.lagradost.cloudstream3.utils.AppUtils.createNotificationChannel +import com.lagradost.cloudstream3.utils.AppContextUtils.createNotificationChannel +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiDubstatusSettings import com.lagradost.cloudstream3.utils.Coroutines.ioWork import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllSubscriptions diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index a14f8438..e86d73aa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -3,15 +3,22 @@ package com.lagradost.cloudstream3.syncproviders import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey +import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.syncproviders.providers.* import java.util.concurrent.TimeUnit abstract class AccountManager(private val defIndex: Int) : AuthAPI { companion object { - val malApi = MALApi(0) - val aniListApi = AniListApi(0) + val malApi = MALApi(0).also { api -> + LoadResponse.Companion.malIdPrefix = api.idPrefix + } + val aniListApi = AniListApi(0).also { api -> + LoadResponse.Companion.aniListIdPrefix = api.idPrefix + } + val simklApi = SimklApi(0).also { api -> + LoadResponse.Companion.simklIdPrefix = api.idPrefix + } val openSubtitlesApi = OpenSubtitlesApi(0) - val simklApi = SimklApi(0) val addic7ed = Addic7ed() val subDlApi = SubDlApi(0) val localListApi = LocalList() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt rename to app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt index 045fdc94..878e0cb3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt @@ -2,20 +2,10 @@ package com.lagradost.cloudstream3.syncproviders import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.ui.SyncWatchType -import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.UiText import me.xdrop.fuzzywuzzy.FuzzySearch -enum class SyncIdName { - Anilist, - MyAnimeList, - Trakt, - Imdb, - Simkl, - LocalList, -} - interface SyncAPI : OAuth2API { /** * Set this to true if the user updates something on the list like watch status or score diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 0551fe6c..8a82cf94 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -17,7 +17,7 @@ import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.AppUtils.splitQuery +import com.lagradost.cloudstream3.utils.AppContextUtils.splitQuery import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.Coroutines.ioSafe 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 4249f949..24ef7136 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 @@ -20,7 +20,7 @@ import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.AppUtils.splitQuery +import com.lagradost.cloudstream3.utils.AppContextUtils.splitQuery import com.lagradost.cloudstream3.utils.DataStore.toKotlinObject import java.net.URL import java.security.SecureRandom diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt index 7d0514d1..6412ff1b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt @@ -15,6 +15,7 @@ import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPIManager +import com.lagradost.cloudstream3.utils.AppContextUtils import com.lagradost.cloudstream3.utils.AppUtils import okhttp3.Interceptor import okhttp3.Response diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index 4385fa5e..27975d19 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -12,7 +12,9 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.LoadResponse.Companion.readIdFromString import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.SimklSyncServices import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mapper @@ -29,7 +31,6 @@ import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.toJson -import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import okhttp3.Interceptor import okhttp3.Response import java.math.BigInteger @@ -184,32 +185,6 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } } - /** - * Set of sync services simkl is compatible with. - * Add more as required: https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id - */ - enum class SyncServices(val originalName: String) { - Simkl("simkl"), - Imdb("imdb"), - Tmdb("tmdb"), - AniList("anilist"), - Mal("mal"), - } - - /** - * The ID string is a way to keep a collection of services in one single ID using a map - * This adds a database service (like imdb) to the string and returns the new string. - */ - fun addIdToString(idString: String?, database: SyncServices, id: String?): String? { - if (id == null) return idString - return (readIdFromString(idString) + mapOf(database to id)).toJson() - } - - /** Read the id string to get all other ids */ - fun readIdFromString(idString: String?): Map { - return tryParseJson(idString) ?: return emptyMap() - } - fun getPosterUrl(poster: String): String { return "https://wsrv.nl/?url=https://simkl.in/posters/${poster}_m.webp" } @@ -361,13 +336,13 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("anilist") val anilist: String? = null, ) { companion object { - fun fromMap(map: Map): Ids { + fun fromMap(map: Map): Ids { return Ids( - simkl = map[SyncServices.Simkl]?.toIntOrNull(), - imdb = map[SyncServices.Imdb], - tmdb = map[SyncServices.Tmdb], - mal = map[SyncServices.Mal], - anilist = map[SyncServices.AniList] + simkl = map[SimklSyncServices.Simkl]?.toIntOrNull(), + imdb = map[SimklSyncServices.Imdb], + tmdb = map[SimklSyncServices.Tmdb], + mal = map[SimklSyncServices.Mal], + anilist = map[SimklSyncServices.AniList] ) } } @@ -749,13 +724,13 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("anilist") val anilist: String?, @JsonProperty("traktslug") val traktslug: String? ) { - fun matchesId(database: SyncServices, id: String): Boolean { + fun matchesId(database: SimklSyncServices, id: String): Boolean { return when (database) { - SyncServices.Simkl -> this.simkl == id.toIntOrNull() - SyncServices.AniList -> this.anilist == id - SyncServices.Mal -> this.mal == id - SyncServices.Tmdb -> this.tmdb == id - SyncServices.Imdb -> this.imdb == id + SimklSyncServices.Simkl -> this.simkl == id.toIntOrNull() + SimklSyncServices.AniList -> this.anilist == id + SimklSyncServices.Mal -> this.mal == id + SimklSyncServices.Tmdb -> this.tmdb == id + SimklSyncServices.Imdb -> this.imdb == id } } } @@ -916,7 +891,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { /** See https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id */ - suspend fun searchByIds(serviceMap: Map): Array? { + suspend fun searchByIds(serviceMap: Map): Array? { if (serviceMap.isEmpty()) return emptyArray() return app.get( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index 688363e9..6bafa975 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -23,13 +23,13 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.safeApiCall -import com.lagradost.cloudstream3.sortSubs import com.lagradost.cloudstream3.sortUrls import com.lagradost.cloudstream3.ui.player.LoadType import com.lagradost.cloudstream3.ui.player.RepoLinkGenerator import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.result.ResultEpisode import com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment +import com.lagradost.cloudstream3.utils.AppContextUtils.sortSubs import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.CastHelper.awaitLinks import com.lagradost.cloudstream3.utils.CastHelper.getMediaInfo diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index 9ed58e2c..15e66b38 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -15,7 +15,7 @@ import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.databinding.FragmentWebviewBinding import com.lagradost.cloudstream3.network.WebViewResolver -import com.lagradost.cloudstream3.utils.AppUtils.loadRepository +import com.lagradost.cloudstream3.utils.AppContextUtils.loadRepository class WebviewFragment : Fragment() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt index 1db49e27..d2aca862 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountHelper.kt @@ -27,7 +27,7 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.result.setImage import com.lagradost.cloudstream3.ui.result.setLinearListLayout -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getDefaultAccount import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt index 1132416a..b4a16a66 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt @@ -13,8 +13,9 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding import com.lagradost.cloudstream3.databinding.DownloadHeaderEpisodeBinding import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.ui.download.button.DownloadStatusTell -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.UIHelper.setImage diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt index 880d5f6c..c8c40e29 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt @@ -9,11 +9,11 @@ import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.DownloadFileGenerator +import com.lagradost.cloudstream3.ui.player.ExtractorUri import com.lagradost.cloudstream3.ui.player.GeneratorPlayer -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE -import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index d5427cd3..82c5ffb8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -39,7 +39,8 @@ import com.lagradost.cloudstream3.ui.result.FOCUS_SELF import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.loadResult +import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult +import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE import com.lagradost.cloudstream3.utils.DataStore import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 12185cbf..82a92d80 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -25,8 +25,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.chip.Chip import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.apis -import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.databinding.FragmentHomeBinding import com.lagradost.cloudstream3.databinding.HomeEpisodesExpandedBinding @@ -46,11 +44,13 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable -import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult -import com.lagradost.cloudstream3.utils.AppUtils.ownHide -import com.lagradost.cloudstream3.utils.AppUtils.ownShow -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings +import com.lagradost.cloudstream3.utils.AppContextUtils.isRecyclerScrollable +import com.lagradost.cloudstream3.utils.AppContextUtils.loadSearchResult +import com.lagradost.cloudstream3.utils.AppContextUtils.ownHide +import com.lagradost.cloudstream3.utils.AppContextUtils.ownShow +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.Event diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index 4b0360d7..916cb9ae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -22,7 +22,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable +import com.lagradost.cloudstream3.utils.AppContextUtils.isRecyclerScrollable class LoadClickCallback( val action: Int = 0, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 52ec06db..2e98dd1f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -16,7 +16,6 @@ import androidx.viewbinding.ViewBinding import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup -import com.lagradost.cloudstream3.APIHolder.getId import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.CommonActivity.activity import com.lagradost.cloudstream3.HomePageList @@ -36,6 +35,7 @@ import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.selectHomepage import com.lagradost.cloudstream3.ui.result.FOCUS_SELF import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST +import com.lagradost.cloudstream3.ui.result.getId import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_LOAD import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_SHOW_METADATA diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index a2c7583f..9e70d088 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -6,9 +6,6 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.lagradost.cloudstream3.APIHolder.apis -import com.lagradost.cloudstream3.APIHolder.filterHomePageListByFilmQuality -import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia -import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -36,8 +33,11 @@ import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.addProgramsToContinueWatching -import com.lagradost.cloudstream3.utils.AppUtils.loadResult +import com.lagradost.cloudstream3.utils.AppContextUtils.addProgramsToContinueWatching +import com.lagradost.cloudstream3.utils.AppContextUtils.filterHomePageListByFilmQuality +import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia +import com.lagradost.cloudstream3.utils.AppContextUtils.filterSearchResultByFilmQuality +import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE import com.lagradost.cloudstream3.utils.DataStoreHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index 90e57ef4..7144de09 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -53,9 +53,9 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.loadResult -import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult -import com.lagradost.cloudstream3.utils.AppUtils.reduceDragSensitivity +import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult +import com.lagradost.cloudstream3.utils.AppContextUtils.loadSearchResult +import com.lagradost.cloudstream3.utils.AppContextUtils.reduceDragSensitivity import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index b8feb656..b2de307f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -16,7 +16,7 @@ import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.AutofitRecyclerView import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder -import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.AppContextUtils import com.lagradost.cloudstream3.utils.UIHelper.toPx import kotlin.math.roundToInt @@ -26,7 +26,7 @@ class PageAdapter( private val resView: AutofitRecyclerView, val clickCallback: (SearchClickCallback) -> Unit ) : - AppUtils.DiffAdapter(items) { + AppContextUtils.DiffAdapter(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return LibraryItemViewHolder( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 0865b220..9d838c97 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -44,8 +44,8 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.unixTimeMs import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment -import com.lagradost.cloudstream3.utils.AppUtils -import com.lagradost.cloudstream3.utils.AppUtils.requestLocalAudioFocus +import com.lagradost.cloudstream3.utils.AppContextUtils +import com.lagradost.cloudstream3.utils.AppContextUtils.requestLocalAudioFocus import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.UIHelper @@ -258,7 +258,7 @@ abstract class AbstractPlayerFragment( private fun requestAudioFocus() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - activity?.requestLocalAudioFocus(AppUtils.getFocusRequest()) + activity?.requestLocalAudioFocus(AppContextUtils.getFocusRequest()) } } 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 31adbc87..8e322f73 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 @@ -57,14 +57,13 @@ import com.lagradost.cloudstream3.mvvm.debugAssert import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle -import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData +import com.lagradost.cloudstream3.utils.AppContextUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount import com.lagradost.cloudstream3.utils.DrmExtractorLink import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList import com.lagradost.cloudstream3.utils.ExtractorLinkType -import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import java.io.File import java.lang.IllegalArgumentException diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index 5585924e..3b242172 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -4,7 +4,6 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSubtitleMimeType import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.VideoDownloadManager import kotlin.math.max import kotlin.math.min diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 4279b542..92ef279d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -8,10 +8,14 @@ import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.utils.UIHelper.navigate +import com.lagradost.safefile.SafeFile import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playLink import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playUri +const val DTAG = "PlayerActivity" + class DownloadedPlayerActivity : AppCompatActivity() { private val dTAG = "DownloadedPlayerAct" diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt index d8d2d537..8255360c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/ExtractorLinkGenerator.kt @@ -1,7 +1,6 @@ package com.lagradost.cloudstream3.ui.player import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri class ExtractorLinkGenerator( private val links: List, 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 aa25157b..75a861c0 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 @@ -45,7 +45,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData +import com.lagradost.cloudstream3.utils.AppContextUtils.isUsingMobileData import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index c77f9404..d827d31e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -49,6 +49,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.subtitles.SUBTITLE_AUTO_SELECT_KEY import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.getAutoSelectLanguageISO639_1 import com.lagradost.cloudstream3.utils.* +import com.lagradost.cloudstream3.utils.AppContextUtils.sortSubs import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt index c5de1a1c..1e2cf4f5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IGenerator.kt @@ -2,7 +2,6 @@ package com.lagradost.cloudstream3.ui.player import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkType -import com.lagradost.cloudstream3.utils.ExtractorUri enum class LoadType { Unknown, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index 0e54e2cb..4bd5c769 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -6,7 +6,6 @@ import android.util.Rational import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri enum class PlayerEventType(val value: Int) { //Stop(-1), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 02f44eb9..89e3c8de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -1,13 +1,31 @@ package com.lagradost.cloudstream3.ui.player +import android.net.Uri +import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri +import com.lagradost.cloudstream3.ui.player.ExtractorUri import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.loadExtractor import com.lagradost.cloudstream3.utils.unshortenLinkSafe +data class ExtractorUri( + val uri: Uri, + val name: String, + + val basePath: String? = null, + val relativePath: String? = null, + val displayName: String? = null, + + val id: Int? = null, + val parentId: Int? = null, + val episode: Int? = null, + val season: Int? = null, + val headerName: String? = null, + val tvType: TvType? = null, +) + /** * Used to open the player more easily with the LinkGenerator **/ diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt index a52ce160..e6de1266 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt @@ -5,7 +5,7 @@ import android.content.ContentUris import android.net.Uri import androidx.core.content.ContextCompat.getString import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.ExtractorUri +import com.lagradost.cloudstream3.ui.player.ExtractorUri import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.safefile.SafeFile diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index ee44567f..1ba5a29f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -15,7 +15,6 @@ import com.lagradost.cloudstream3.ui.result.ResultEpisode import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri import kotlinx.coroutines.Job import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt index fb600ef1..7c78ce63 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -9,14 +9,11 @@ import android.util.Log import androidx.annotation.WorkerThread import androidx.core.graphics.scale import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.ui.settings.SettingsFragment import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLinkType -import com.lagradost.cloudstream3.utils.ExtractorUri import com.lagradost.cloudstream3.utils.M3u8Helper import com.lagradost.cloudstream3.utils.M3u8Helper2 import kotlinx.coroutines.CoroutineScope diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt index 0a194785..90bd1ca7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt @@ -7,7 +7,6 @@ import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.result.ResultEpisode import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.ExtractorUri import kotlin.math.max import kotlin.math.min diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt index fb60ccce..1e2c9f67 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt @@ -4,7 +4,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.databinding.PlayerPrioritizeItemBinding -import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.AppContextUtils data class SourcePriority( val data: T, @@ -13,7 +13,7 @@ data class SourcePriority( ) class PriorityAdapter(override val items: MutableList>) : - AppUtils.DiffAdapter>(items) { + AppContextUtils.DiffAdapter>(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return PriorityViewHolder( PlayerPrioritizeItemBinding.inflate(LayoutInflater.from(parent.context),parent,false), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt index 8153d7a1..b587276f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.PlayerQualityProfileItemBinding import com.lagradost.cloudstream3.ui.result.UiImage -import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.AppContextUtils import com.lagradost.cloudstream3.utils.UIHelper.setImage class ProfilesAdapter( @@ -21,7 +21,7 @@ class ProfilesAdapter( val usedProfile: Int, val clickCallback: (oldIndex: Int?, newIndex: Int) -> Unit, ) : - AppUtils.DiffAdapter( + AppContextUtils.DiffAdapter( items, comparison = { first: QualityDataHelper.QualityProfile, second: QualityDataHelper.QualityProfile -> first.id == second.id diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt index 85e20d1c..12adc040 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/quicksearch/QuickSearchFragment.kt @@ -17,8 +17,6 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager import com.google.android.material.bottomsheet.BottomSheetDialog -import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia -import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.CommonActivity.activity import com.lagradost.cloudstream3.HomePageList @@ -34,12 +32,13 @@ import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchHelper import com.lagradost.cloudstream3.ui.search.SearchViewModel -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.ownShow +import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia +import com.lagradost.cloudstream3.utils.AppContextUtils.filterSearchResultByFilmQuality +import com.lagradost.cloudstream3.utils.AppContextUtils.ownShow import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index 7b743388..61188905 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -138,7 +138,7 @@ class ActorAdaptor( voiceActorImageHolder.isVisible = false voiceActorName.isVisible = false } else { - voiceActorName.text = actor.voiceActor.name + voiceActorName.text = actor.voiceActor?.name voiceActorImageHolder.isVisible = voiceActorImage.setImage(vaImage) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 62b1fdd1..0a1b777d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -21,7 +21,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.html import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.VideoDownloadHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 1d3f5a08..c687eaa0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -3,12 +3,12 @@ package com.lagradost.cloudstream3.ui.result import android.os.Bundle import androidx.fragment.app.Fragment import androidx.preference.PreferenceManager -import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.DubStatus import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.ui.result.EpisodeAdapter.Companion.getPlayerAction +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiDubstatusSettings import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.getVideoWatchState import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index e185e75d..2f297098 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -29,7 +29,6 @@ import com.google.android.gms.cast.framework.CastContext import com.google.android.gms.cast.framework.CastState import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.APIHolder -import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.DubStatus import com.lagradost.cloudstream3.LoadResponse @@ -57,10 +56,11 @@ import com.lagradost.cloudstream3.ui.result.ResultFragment.getStoredData import com.lagradost.cloudstream3.ui.result.ResultFragment.updateUIEvent import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchHelper -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull -import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable -import com.lagradost.cloudstream3.utils.AppUtils.loadCache -import com.lagradost.cloudstream3.utils.AppUtils.openBrowser +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.isCastApiAvailable +import com.lagradost.cloudstream3.utils.AppContextUtils.loadCache +import com.lagradost.cloudstream3.utils.AppContextUtils.openBrowser +import com.lagradost.cloudstream3.utils.AppContextUtils.updateHasTrailers import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.openBatteryOptimizationSettings import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index 13621cda..a0207060 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -17,7 +17,6 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetDialog -import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.DubStatus import com.lagradost.cloudstream3.LoadResponse @@ -40,13 +39,13 @@ import com.lagradost.cloudstream3.ui.result.ResultFragment.updateUIEvent import com.lagradost.cloudstream3.ui.search.SEARCH_ACTION_FOCUSED import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchHelper -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.html -import com.lagradost.cloudstream3.utils.AppUtils.isRtl -import com.lagradost.cloudstream3.utils.AppUtils.loadCache +import com.lagradost.cloudstream3.utils.AppContextUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.isRtl +import com.lagradost.cloudstream3.utils.AppContextUtils.loadCache +import com.lagradost.cloudstream3.utils.AppContextUtils.updateHasTrailers import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogInstant import com.lagradost.cloudstream3.utils.UIHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index ac6527de..8e8dfe30 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -18,7 +18,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.apis -import com.lagradost.cloudstream3.APIHolder.getId +import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -27,9 +27,9 @@ import com.lagradost.cloudstream3.CommonActivity.getCastSession import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.LoadResponse.Companion.addTrailer import com.lagradost.cloudstream3.LoadResponse.Companion.getAniListId -import com.lagradost.cloudstream3.LoadResponse.Companion.getImdbId import com.lagradost.cloudstream3.LoadResponse.Companion.getMalId import com.lagradost.cloudstream3.LoadResponse.Companion.isMovie +import com.lagradost.cloudstream3.LoadResponse.Companion.readIdFromString import com.lagradost.cloudstream3.MainActivity.Companion.MPV import com.lagradost.cloudstream3.MainActivity.Companion.MPV_COMPONENT import com.lagradost.cloudstream3.MainActivity.Companion.MPV_PACKAGE @@ -56,10 +56,11 @@ import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.result.EpisodeAdapter.Companion.getPlayerAction import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.utils.* -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull -import com.lagradost.cloudstream3.utils.AppUtils.isAppInstalled -import com.lagradost.cloudstream3.utils.AppUtils.isConnectedToChromecast -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.isAppInstalled +import com.lagradost.cloudstream3.utils.AppContextUtils.isConnectedToChromecast +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.sortSubs import com.lagradost.cloudstream3.utils.CastHelper.startCast import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.ioWork @@ -301,6 +302,23 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData { ) } +data class ExtractorSubtitleLink( + val name: String, + override val url: String, + override val referer: String, + override val headers: Map = mapOf() +) : IDownloadableMinimum + +fun LoadResponse.getId(): Int { + // this fixes an issue with outdated api as getLoadResponseIdFromUrl might be fucked + return (if (this is ResultViewModel2.LoadResponseFromSearch) this.id else null) + ?: getLoadResponseIdFromUrl(url, apiName) +} + +private fun getLoadResponseIdFromUrl(url: String, apiName: String): Int { + return url.replace(getApiFromNameNull(apiName)?.mainUrl ?: "", "").replace("/", "") + .hashCode() +} data class LinkProgress( val linksLoaded: Int, @@ -856,7 +874,7 @@ class ResultViewModel2 : ViewModel() { loadResponse: LoadResponse? = null, statusChangedCallback: ((statusChanged: Boolean) -> Unit)? = null ) { - val (response,currentId) = loadResponse?.let { load -> + val (response, currentId) = loadResponse?.let { load -> (load to load.getId()) } ?: ((currentResponse ?: return) to (currentId ?: return)) @@ -1140,12 +1158,16 @@ class ResultViewModel2 : ViewModel() { val message = if (duplicateEntries.size == 1) { val list = when (listType) { - LibraryListType.BOOKMARKS -> getResultWatchState(duplicateEntries[0].id ?: 0).stringRes + LibraryListType.BOOKMARKS -> getResultWatchState( + duplicateEntries[0].id ?: 0 + ).stringRes + LibraryListType.FAVORITES -> R.string.favorites_list_name LibraryListType.SUBSCRIPTIONS -> R.string.subscription_list_name } - context.getString(R.string.duplicate_message_single, + context.getString( + R.string.duplicate_message_single, "${normalizeString(duplicateEntries[0].name)} (${context.getString(list)}) — ${duplicateEntries[0].apiName}" ) } else { @@ -1170,9 +1192,11 @@ class ResultViewModel2 : ViewModel() { DialogInterface.BUTTON_POSITIVE -> { checkDuplicatesCallback.invoke(true, emptyList()) } + DialogInterface.BUTTON_NEGATIVE -> { checkDuplicatesCallback.invoke(false, emptyList()) } + DialogInterface.BUTTON_NEUTRAL -> { checkDuplicatesCallback.invoke(true, duplicateEntries.map { it.id }) } @@ -1189,17 +1213,17 @@ class ResultViewModel2 : ViewModel() { private fun getImdbIdFromSyncData(syncData: Map?): String? { return normalSafeApiCall { - SimklApi.readIdFromString( + readIdFromString( syncData?.get(AccountManager.simklApi.idPrefix) - )[SimklApi.Companion.SyncServices.Imdb] + )[SimklSyncServices.Imdb] } } private fun getTMDbIdFromSyncData(syncData: Map?): String? { return normalSafeApiCall { - SimklApi.readIdFromString( + readIdFromString( syncData?.get(AccountManager.simklApi.idPrefix) - )[SimklApi.Companion.SyncServices.Tmdb] + )[SimklSyncServices.Tmdb] } } @@ -1303,7 +1327,8 @@ class ResultViewModel2 : ViewModel() { postPopup( text, links.links.apmap { - val size = it.getVideoSize()?.let { size -> " " + formatFileSize(context, size) } ?: "" + val size = + it.getVideoSize()?.let { size -> " " + formatFileSize(context, size) } ?: "" txt("${it.name} ${Qualities.getStringByInt(it.quality)}$size") }) { callback.invoke(links to (it ?: return@postPopup)) @@ -1928,7 +1953,8 @@ class ResultViewModel2 : ViewModel() { .distinct().map { // this actually would be nice if we improved a bit as 3rd season == season 3 == III ect // right now it just removes the dubbed status - it.lowercase().replace(Regex("""\(?[ds]ub(bed)?\)?(\s|$)""") , "").trim() + it.lowercase().replace(Regex("""\(?[ds]ub(bed)?\)?(\s|$)"""), "") + .trim() }, TrackerType.getTypes(this.type), this.year @@ -2276,7 +2302,7 @@ class ResultViewModel2 : ViewModel() { private suspend fun postSuccessful( loadResponse: LoadResponse, - mainId : Int, + mainId: Int, apiRepository: APIRepository, updateEpisodes: Boolean, updateFillers: Boolean, @@ -2292,7 +2318,11 @@ class ResultViewModel2 : ViewModel() { postEpisodes(loadResponse, mainId, updateFillers) } - private suspend fun postEpisodes(loadResponse: LoadResponse, mainId : Int, updateFillers: Boolean) { + private suspend fun postEpisodes( + loadResponse: LoadResponse, + mainId: Int, + updateFillers: Boolean + ) { _episodes.postValue(Resource.Loading()) if (updateFillers && loadResponse is AnimeLoadResponse) { @@ -2313,7 +2343,12 @@ class ResultViewModel2 : ViewModel() { ?: 0) val totalIndex = - i.season?.let { season -> loadResponse.getTotalEpisodeIndex(episode, season) } + i.season?.let { season -> + loadResponse.getTotalEpisodeIndex( + episode, + season + ) + } if (!existingEpisodes.contains(id)) { existingEpisodes.add(id) @@ -2366,7 +2401,12 @@ class ResultViewModel2 : ViewModel() { loadResponse.seasonNames.getSeason(episode.season) val totalIndex = - episode.season?.let { season -> loadResponse.getTotalEpisodeIndex(episodeIndex, season) } + episode.season?.let { season -> + loadResponse.getTotalEpisodeIndex( + episodeIndex, + season + ) + } val ep = buildResultEpisode( @@ -2546,7 +2586,13 @@ class ResultViewModel2 : ViewModel() { ResumeProgress( progress = (viewPos.position / 1000).toInt(), maxProgress = (viewPos.duration / 1000).toInt(), - txt(R.string.resume_remaining, secondsToReadable(((viewPos.duration - viewPos.position) / 1_000).toInt(), "0 mins")) + txt( + R.string.resume_remaining, + secondsToReadable( + ((viewPos.duration - viewPos.position) / 1_000).toInt(), + "0 mins" + ) + ) ) } @@ -2672,17 +2718,26 @@ class ResultViewModel2 : ViewModel() { override var posterHeaders: Map? = null, override var backgroundPosterUrl: String? = null, override var contentRating: String? = null, - val id : Int?, + val id: Int?, ) : LoadResponse - fun loadSmall(activity: Activity?, searchResponse : SearchResponse) = ioSafe { + fun loadSmall(activity: Activity?, searchResponse: SearchResponse) = ioSafe { val url = searchResponse.url _page.postValue(Resource.Loading(url)) _episodes.postValue(Resource.Loading()) - val api = APIHolder.getApiFromNameNull(searchResponse.apiName) ?: APIHolder.getApiFromUrlNull(searchResponse.url) ?: APIRepository.noneApi + val api = + APIHolder.getApiFromNameNull(searchResponse.apiName) ?: APIHolder.getApiFromUrlNull( + searchResponse.url + ) ?: APIRepository.noneApi val repo = APIRepository(api) - val response = LoadResponseFromSearch(name = searchResponse.name, url = searchResponse.url, apiName = api.name, type = searchResponse.type ?: TvType.Others, - posterUrl = searchResponse.posterUrl, id = searchResponse.id).apply { + val response = LoadResponseFromSearch( + name = searchResponse.name, + url = searchResponse.url, + apiName = api.name, + type = searchResponse.type ?: TvType.Others, + posterUrl = searchResponse.posterUrl, + id = searchResponse.id + ).apply { if (searchResponse is SyncAPI.LibraryItem) { this.plot = searchResponse.plot this.rating = searchResponse.personalRating?.times(100) ?: searchResponse.rating @@ -2701,7 +2756,8 @@ class ResultViewModel2 : ViewModel() { mainId = mainId, apiRepository = repo, updateEpisodes = false, - updateFillers = false) + updateFillers = false + ) } fun load( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt index e0762cc5..70919943 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/UiText.kt @@ -10,7 +10,7 @@ import androidx.annotation.StringRes import androidx.core.view.isGone import androidx.core.view.isVisible import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.utils.AppUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.html import com.lagradost.cloudstream3.utils.UIHelper.setImage sealed class UiText { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index 24e87d30..ef10fcee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -24,11 +24,7 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton -import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia -import com.lagradost.cloudstream3.APIHolder.filterSearchResultByFilmQuality import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings -import com.lagradost.cloudstream3.APIHolder.getApiSettings import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AllLanguagesName @@ -58,9 +54,13 @@ import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.ownHide -import com.lagradost.cloudstream3.utils.AppUtils.ownShow -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia +import com.lagradost.cloudstream3.utils.AppContextUtils.filterSearchResultByFilmQuality +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiSettings +import com.lagradost.cloudstream3.utils.AppContextUtils.ownHide +import com.lagradost.cloudstream3.utils.AppContextUtils.ownShow +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt index 66423982..ef1b8719 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHelper.kt @@ -11,7 +11,7 @@ import com.lagradost.cloudstream3.ui.download.DownloadClickEvent import com.lagradost.cloudstream3.ui.result.START_ACTION_LOAD_EP import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult +import com.lagradost.cloudstream3.utils.AppContextUtils.loadSearchResult import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.VideoDownloadHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index d18c0197..f597132b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -19,7 +19,7 @@ import com.lagradost.cloudstream3.isMovieType import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.SubtitleHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index 67a2a15b..15f8735f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -9,8 +9,6 @@ import android.view.inputmethod.EditorInfo import android.widget.TextView import androidx.annotation.UiThread import androidx.appcompat.app.AlertDialog -import androidx.core.content.ContextCompat -import androidx.core.graphics.drawable.toBitmapOrNull import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.FragmentActivity @@ -49,7 +47,7 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.AppUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.html import com.lagradost.cloudstream3.utils.BackupUtils import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback import com.lagradost.cloudstream3.utils.BiometricAuthenticator.authCallback @@ -64,9 +62,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.setImage -import com.lagradost.cloudstream3.utils.UIHelper.toPx import qrcode.QRCode -import java.io.ByteArrayOutputStream class SettingsAccount : PreferenceFragmentCompat(), BiometricCallback { companion object { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index 7dc73a46..cfb46c39 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -7,19 +7,17 @@ import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings -import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiDubstatusSettings +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard -import com.lagradost.cloudstream3.utils.UIHelper.navigate class SettingsProviders : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 1364c376..1b487629 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -33,8 +33,8 @@ import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar -import com.lagradost.cloudstream3.utils.AppUtils.addRepositoryDialog -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.addRepositoryDialog +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index cab029bb..909c30be 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -20,7 +20,7 @@ import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.AppUtils.html +import com.lagradost.cloudstream3.utils.AppContextUtils.html import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index 3bdcb251..c5319c37 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -8,7 +8,6 @@ import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.BuildConfig import com.lagradost.cloudstream3.R @@ -24,6 +23,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.appLanguages +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.toPx diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt index 023ecb4c..bad58a0e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestResultAdapter.kt @@ -15,7 +15,7 @@ import com.lagradost.cloudstream3.databinding.ProviderTestItemBinding import com.lagradost.cloudstream3.mvvm.getAllMessages import com.lagradost.cloudstream3.mvvm.getStackTracePretty import com.lagradost.cloudstream3.plugins.PluginManager -import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.AppContextUtils import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso @@ -23,7 +23,7 @@ import com.lagradost.cloudstream3.utils.TestingUtils import java.io.File class TestResultAdapter(override val items: MutableList>) : - AppUtils.DiffAdapter>(items) { + AppContextUtils.DiffAdapter>(items) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ProviderTestViewHolder( ProviderTestItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestView.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestView.kt index 26513f4a..eea495a2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestView.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/testing/TestView.kt @@ -13,7 +13,7 @@ import androidx.core.view.isVisible import androidx.core.widget.ContentLoadingProgressBar import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.AppUtils.animateProgressTo +import com.lagradost.cloudstream3.utils.AppContextUtils.animateProgressTo class TestView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt index 59dcc402..c12e9eb8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentProviderLanguage.kt @@ -11,11 +11,11 @@ import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.APIHolder -import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.AllLanguagesName import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentSetupProviderLanguagesBinding import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.utils.AppContextUtils.getApiProviderLangSettings import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt similarity index 82% rename from app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt rename to app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt index 626eca12..f0aae7bc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt @@ -51,6 +51,7 @@ import com.google.android.gms.common.GoogleApiAvailability import com.google.android.gms.common.wrappers.Wrappers import com.google.android.material.bottomsheet.BottomSheetDialog import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.CommonActivity.activity import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent @@ -60,9 +61,9 @@ import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching import com.lagradost.cloudstream3.syncproviders.providers.Kitsu import com.lagradost.cloudstream3.ui.WebviewFragment +import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.result.ResultFragment import com.lagradost.cloudstream3.ui.settings.Globals -import com.lagradost.cloudstream3.ui.settings.extensions.ExtensionsFragment import com.lagradost.cloudstream3.ui.settings.extensions.PluginsFragment import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData import com.lagradost.cloudstream3.utils.Coroutines.ioSafe @@ -79,7 +80,7 @@ import java.io.* import java.net.URL import java.net.URLDecoder -object AppUtils { +object AppContextUtils { fun RecyclerView.setMaxViewPoolSize(maxViewTypeId: Int, maxPoolSize: Int) { for (i in 0..maxViewTypeId) recycledViewPool.setMaxRecycledViews(i, maxPoolSize) @@ -371,6 +372,168 @@ object AppUtils { } } + fun sortSubs(subs: Set): List { + return subs.sortedBy { it.name } + } + + fun Context.getApiSettings(): HashSet { + //val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + + val hashSet = HashSet() + val activeLangs = getApiProviderLangSettings() + val hasUniversal = activeLangs.contains(AllLanguagesName) + hashSet.addAll(synchronized(apis) { apis.filter { hasUniversal || activeLangs.contains(it.lang) } } + .map { it.name }) + + /*val set = settingsManager.getStringSet( + this.getString(R.string.search_providers_list_key), + hashSet + )?.toHashSet() ?: hashSet + + val list = HashSet() + for (name in set) { + val api = getApiFromNameNull(name) ?: continue + if (activeLangs.contains(api.lang)) { + list.add(name) + } + }*/ + //if (list.isEmpty()) return hashSet + //return list + return hashSet + } + + fun Context.getApiDubstatusSettings(): HashSet { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + val hashSet = HashSet() + hashSet.addAll(DubStatus.values()) + val list = settingsManager.getStringSet( + this.getString(R.string.display_sub_key), + hashSet.map { it.name }.toMutableSet() + ) ?: return hashSet + + val names = DubStatus.values().map { it.name }.toHashSet() + //if(realSet.isEmpty()) return hashSet + + return list.filter { names.contains(it) }.map { DubStatus.valueOf(it) }.toHashSet() + } + + fun Context.getApiProviderLangSettings(): HashSet { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + val hashSet = hashSetOf(AllLanguagesName) // def is all languages +// hashSet.add("en") // def is only en + val list = settingsManager.getStringSet( + this.getString(R.string.provider_lang_key), + hashSet + ) + + if (list.isNullOrEmpty()) return hashSet + return list.toHashSet() + } + + fun Context.getApiTypeSettings(): HashSet { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + val hashSet = HashSet() + hashSet.addAll(TvType.values()) + val list = settingsManager.getStringSet( + this.getString(R.string.search_types_list_key), + hashSet.map { it.name }.toMutableSet() + ) + + if (list.isNullOrEmpty()) return hashSet + + val names = TvType.values().map { it.name }.toHashSet() + val realSet = list.filter { names.contains(it) }.map { TvType.valueOf(it) }.toHashSet() + if (realSet.isEmpty()) return hashSet + + return realSet + } + + fun Context.updateHasTrailers() { + LoadResponse.isTrailersEnabled = getHasTrailers() + } + + private fun Context.getHasTrailers(): Boolean { + val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) + return settingsManager.getBoolean(this.getString(R.string.show_trailers_key), true) + } + + fun Context.filterProviderByPreferredMedia(hasHomePageIsRequired: Boolean = true): List { + // We are getting the weirdest crash ever done: + // java.lang.ClassCastException: com.lagradost.cloudstream3.TvType cannot be cast to com.lagradost.cloudstream3.TvType + // Trying fixing using classloader fuckery + val oldLoader = Thread.currentThread().contextClassLoader + Thread.currentThread().contextClassLoader = TvType::class.java.classLoader + + val default = TvType.values() + .sorted() + .filter { it != TvType.NSFW } + .map { it.ordinal } + + Thread.currentThread().contextClassLoader = oldLoader + + val defaultSet = default.map { it.toString() }.toSet() + val currentPrefMedia = try { + PreferenceManager.getDefaultSharedPreferences(this) + .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) + ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } + } catch (e: Throwable) { + null + } ?: default + val langs = this.getApiProviderLangSettings() + val hasUniversal = langs.contains(AllLanguagesName) + val allApis = synchronized(apis) { + apis.filter { api -> (hasUniversal || langs.contains(api.lang)) && (api.hasMainPage || !hasHomePageIsRequired) } + } + return if (currentPrefMedia.isEmpty()) { + allApis + } else { + // Filter API depending on preferred media type + allApis.filter { api -> api.supportedTypes.any { currentPrefMedia.contains(it.ordinal) } } + } + } + + fun Context.filterSearchResultByFilmQuality(data: List): List { + // Filter results omitting entries with certain quality + if (data.isNotEmpty()) { + val filteredSearchQuality = PreferenceManager.getDefaultSharedPreferences(this) + ?.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf()) + ?.mapNotNull { entry -> + entry.toIntOrNull() ?: return@mapNotNull null + } ?: listOf() + if (filteredSearchQuality.isNotEmpty()) { + return data.filter { item -> + val searchQualVal = item.quality?.ordinal ?: -1 + //Log.i("filterSearch", "QuickSearch item => ${item.toJson()}") + !filteredSearchQuality.contains(searchQualVal) + } + } + } + return data + } + + fun Context.filterHomePageListByFilmQuality(data: HomePageList): HomePageList { + // Filter results omitting entries with certain quality + if (data.list.isNotEmpty()) { + val filteredSearchQuality = PreferenceManager.getDefaultSharedPreferences(this) + ?.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf()) + ?.mapNotNull { entry -> + entry.toIntOrNull() ?: return@mapNotNull null + } ?: listOf() + if (filteredSearchQuality.isNotEmpty()) { + return HomePageList( + name = data.name, + isHorizontalImages = data.isHorizontalImages, + list = data.list.filter { item -> + val searchQualVal = item.quality?.ordinal ?: -1 + //Log.i("filterSearch", "QuickSearch item => ${item.toJson()}") + !filteredSearchQuality.contains(searchQualVal) + } + ) + } + } + return data + } + fun Activity.loadRepository(url: String) { ioSafe { val repo = RepositoryManager.parseRepository(url) ?: return@ioSafe @@ -532,24 +695,6 @@ object AppUtils { return queryPairs } - /** Any object as json string */ - fun Any.toJson(): String { - if (this is String) return this - return mapper.writeValueAsString(this) - } - - inline fun parseJson(value: String): T { - return mapper.readValue(value) - } - - inline fun tryParseJson(value: String?): T? { - return try { - parseJson(value ?: return null) - } catch (_: Exception) { - null - } - } - /**| S1:E2 Hello World * | Episode 2. Hello world * | Hello World @@ -619,7 +764,7 @@ object AppUtils { val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) Kitsu.isEnabled = settingsManager.getBoolean(this.getString(R.string.show_kitsu_posters_key), true) - }catch (t : Throwable) { + } catch (t: Throwable) { logError(t) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 04387d80..43124a53 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.utils import android.content.Context import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.* -import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia import com.lagradost.cloudstream3.APIHolder.unixTimeMS import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -18,6 +17,7 @@ import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.UiImage import com.lagradost.cloudstream3.ui.result.VideoWatchState +import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia import kotlin.reflect.KClass import kotlin.reflect.KProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index d9a31b4e..89bb0031 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -24,7 +24,7 @@ import okio.sink import java.io.File import android.text.TextUtils import com.lagradost.cloudstream3.MainActivity.Companion.deleteFileOnExit -import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt index 322547f4..57b98dc2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt @@ -15,7 +15,7 @@ import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.MainActivity.Companion.deleteFileOnExit import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.createNotificationChannel +import com.lagradost.cloudstream3.utils.AppContextUtils.createNotificationChannel import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 421b09e2..f3cbdaf1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -24,6 +24,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.IDownloadableMinimum import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType @@ -107,16 +108,6 @@ object VideoDownloadManager { Stop, } - interface IDownloadableMinimum { - val url: String - val referer: String - val headers: Map - } - - fun IDownloadableMinimum.getId(): Int { - return url.hashCode() - } - data class DownloadEpisodeMetadata( @JsonProperty("id") val id: Int, @JsonProperty("mainName") val mainName: String, diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 46da8e84..516e1ee9 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -1,4 +1,5 @@ import com.codingfeline.buildkonfig.compiler.FieldSpec +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi plugins { kotlin("multiplatform") @@ -12,6 +13,11 @@ kotlin { androidTarget() jvm() + @OptIn(ExperimentalKotlinGradlePluginApi::class) + compilerOptions { + freeCompilerArgs.add("-Xexpect-actual-classes") + } + sourceSets { commonMain.dependencies { implementation("com.github.Blatzar:NiceHttp:0.4.11") // HTTP Lib @@ -19,6 +25,9 @@ kotlin { ^ Don't Bump Jackson above 2.13.1 , Crashes on Android TV's and FireSticks that have Min API Level 25 or Less. */ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0") + implementation("me.xdrop:fuzzywuzzy:1.4.0") // Match extractors + implementation("org.mozilla:rhino:1.7.15") // run JavaScript + implementation("com.github.teamnewpipe:NewPipeExtractor:fafd471") } } } diff --git a/library/src/androidMain/kotlin/com/lagradost/api/ContextHelper.android.kt b/library/src/androidMain/kotlin/com/lagradost/api/ContextHelper.android.kt new file mode 100644 index 00000000..a8472fea --- /dev/null +++ b/library/src/androidMain/kotlin/com/lagradost/api/ContextHelper.android.kt @@ -0,0 +1,20 @@ +package com.lagradost.api + +import android.content.Context +import java.lang.ref.WeakReference + +var ctx: WeakReference? = null + +/** + * Helper function for Android specific context. Not usable in JVM. + * Do not use this unless absolutely necessary. + */ +actual fun getContext(): Any? { + return ctx?.get() +} + +actual fun setContext(context: WeakReference) { + if (context.get() is Context) { + ctx = context as? WeakReference + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt similarity index 90% rename from app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt rename to library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt index 90872d94..0fbc5749 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/WebViewResolver.kt +++ b/library/src/androidMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.android.kt @@ -1,13 +1,12 @@ package com.lagradost.cloudstream3.network import android.annotation.SuppressLint +import android.content.Context import android.net.http.SslError import android.os.Handler import android.os.Looper import android.webkit.* -import com.lagradost.cloudstream3.AcraApplication -import com.lagradost.cloudstream3.AcraApplication.Companion.context -import com.lagradost.cloudstream3.USER_AGENT +import com.lagradost.api.getContext import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.mvvm.debugException import com.lagradost.cloudstream3.mvvm.logError @@ -33,40 +32,24 @@ import java.net.URI * @param scriptCallback will be called with the result from custom js * @param timeout close webview after timeout * */ -class WebViewResolver( +actual class WebViewResolver actual constructor( val interceptUrl: Regex, - val additionalUrls: List = emptyList(), - val userAgent: String? = USER_AGENT, - val useOkhttp: Boolean = true, - val script: String? = null, - val scriptCallback: ((String) -> Unit)? = null, - val timeout: Long = DEFAULT_TIMEOUT + val additionalUrls: List, + val userAgent: String?, + val useOkhttp: Boolean, + val script: String?, + val scriptCallback: ((String) -> Unit)?, + val timeout: Long ) : Interceptor { - constructor( - interceptUrl: Regex, - additionalUrls: List = emptyList(), - userAgent: String? = USER_AGENT, - useOkhttp: Boolean = true, - script: String? = null, - scriptCallback: ((String) -> Unit)? = null, - ) : this(interceptUrl, additionalUrls, userAgent, useOkhttp, script, scriptCallback, DEFAULT_TIMEOUT) - - constructor( - interceptUrl: Regex, - additionalUrls: List = emptyList(), - userAgent: String? = USER_AGENT, - useOkhttp: Boolean = true - ) : this(interceptUrl, additionalUrls, userAgent, useOkhttp, null, null, DEFAULT_TIMEOUT) - - companion object { - private const val DEFAULT_TIMEOUT = 60_000L + actual companion object { var webViewUserAgent: String? = null + actual val DEFAULT_TIMEOUT = 60_000L @JvmName("getWebViewUserAgent1") fun getWebViewUserAgent(): String? { - return webViewUserAgent ?: context?.let { ctx -> + return webViewUserAgent ?: (getContext() as? Context)?.let { ctx -> runBlocking { mainWork { WebView(ctx).settings.userAgentString.also { userAgent -> @@ -137,7 +120,7 @@ class WebViewResolver( WebView.setWebContentsDebuggingEnabled(true) try { webView = WebView( - AcraApplication.context + (getContext() as? Context) ?: throw RuntimeException("No base context in WebViewResolver") ).apply { // Bare minimum to bypass captcha diff --git a/library/src/commonMain/kotlin/com/lagradost/api/ContextHelper.kt b/library/src/commonMain/kotlin/com/lagradost/api/ContextHelper.kt new file mode 100644 index 00000000..fb54e3ca --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/api/ContextHelper.kt @@ -0,0 +1,16 @@ +package com.lagradost.api + +import java.lang.ref.WeakReference + +/** + * Set context for android specific code such as webview. + * Does nothing on JVM. + */ +expect fun setContext(context: WeakReference) +/** + * Helper function for Android specific context. + * Do not use this unless absolutely necessary. + * setContext() must be called before this is called. + * @return Context if on android, null if not. + */ +expect fun getContext(): Any? diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt similarity index 86% rename from app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt index 91da2ed0..47ef5382 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt @@ -1,34 +1,26 @@ package com.lagradost.cloudstream3 -import android.annotation.SuppressLint -import android.content.Context -import android.net.Uri -import android.util.Base64.encodeToString -import androidx.annotation.WorkerThread -import androidx.preference.PreferenceManager import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.kotlinModule import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi import com.lagradost.cloudstream3.syncproviders.SyncIdName -import com.lagradost.cloudstream3.syncproviders.providers.SimklApi -import com.lagradost.cloudstream3.ui.player.SubtitleData -import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.AppUtils.toJson +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.Coroutines.mainWork import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf import com.lagradost.nicehttp.RequestBodyTypes import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.toRequestBody +import java.net.URI import java.text.SimpleDateFormat import java.util.* +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi import kotlin.math.absoluteValue /** @@ -111,17 +103,6 @@ object APIHolder { return null } - private fun getLoadResponseIdFromUrl(url: String, apiName: String): Int { - return url.replace(getApiFromNameNull(apiName)?.mainUrl ?: "", "").replace("/", "") - .hashCode() - } - - fun LoadResponse.getId(): Int { - // this fixes an issue with outdated api as getLoadResponseIdFromUrl might be fucked - return (if (this is ResultViewModel2.LoadResponseFromSearch) this.id else null) - ?: getLoadResponseIdFromUrl(url, apiName) - } - /** * Gets the website captcha token * discovered originally by https://github.com/ahmedgamal17 @@ -137,10 +118,9 @@ object APIHolder { // To get the key suspend fun getCaptchaToken(url: String, key: String, referer: String? = null): String? { try { - val uri = Uri.parse(url) - val domain = encodeToString( + val uri = URI.create(url) + val domain = base64Encode( (uri.scheme + "://" + uri.host + ":443").encodeToByteArray(), - 0 ).replace("\n", "").replace("=", ".") val vToken = @@ -275,165 +255,6 @@ object APIHolder { return app.post("https://graphql.anilist.co", requestBody = data) .parsedSafe() } - - - fun Context.getApiSettings(): HashSet { - //val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - - val hashSet = HashSet() - val activeLangs = getApiProviderLangSettings() - val hasUniversal = activeLangs.contains(AllLanguagesName) - hashSet.addAll(synchronized(apis) { apis.filter { hasUniversal || activeLangs.contains(it.lang) } } - .map { it.name }) - - /*val set = settingsManager.getStringSet( - this.getString(R.string.search_providers_list_key), - hashSet - )?.toHashSet() ?: hashSet - - val list = HashSet() - for (name in set) { - val api = getApiFromNameNull(name) ?: continue - if (activeLangs.contains(api.lang)) { - list.add(name) - } - }*/ - //if (list.isEmpty()) return hashSet - //return list - return hashSet - } - - fun Context.getApiDubstatusSettings(): HashSet { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val hashSet = HashSet() - hashSet.addAll(DubStatus.values()) - val list = settingsManager.getStringSet( - this.getString(R.string.display_sub_key), - hashSet.map { it.name }.toMutableSet() - ) ?: return hashSet - - val names = DubStatus.values().map { it.name }.toHashSet() - //if(realSet.isEmpty()) return hashSet - - return list.filter { names.contains(it) }.map { DubStatus.valueOf(it) }.toHashSet() - } - - fun Context.getApiProviderLangSettings(): HashSet { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val hashSet = hashSetOf(AllLanguagesName) // def is all languages -// hashSet.add("en") // def is only en - val list = settingsManager.getStringSet( - this.getString(R.string.provider_lang_key), - hashSet - ) - - if (list.isNullOrEmpty()) return hashSet - return list.toHashSet() - } - - fun Context.getApiTypeSettings(): HashSet { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - val hashSet = HashSet() - hashSet.addAll(TvType.values()) - val list = settingsManager.getStringSet( - this.getString(R.string.search_types_list_key), - hashSet.map { it.name }.toMutableSet() - ) - - if (list.isNullOrEmpty()) return hashSet - - val names = TvType.values().map { it.name }.toHashSet() - val realSet = list.filter { names.contains(it) }.map { TvType.valueOf(it) }.toHashSet() - if (realSet.isEmpty()) return hashSet - - return realSet - } - - fun Context.updateHasTrailers() { - LoadResponse.isTrailersEnabled = getHasTrailers() - } - - private fun Context.getHasTrailers(): Boolean { - val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - return settingsManager.getBoolean(this.getString(R.string.show_trailers_key), true) - } - - fun Context.filterProviderByPreferredMedia(hasHomePageIsRequired: Boolean = true): List { - // We are getting the weirdest crash ever done: - // java.lang.ClassCastException: com.lagradost.cloudstream3.TvType cannot be cast to com.lagradost.cloudstream3.TvType - // Trying fixing using classloader fuckery - val oldLoader = Thread.currentThread().contextClassLoader - Thread.currentThread().contextClassLoader = TvType::class.java.classLoader - - val default = TvType.values() - .sorted() - .filter { it != TvType.NSFW } - .map { it.ordinal } - - Thread.currentThread().contextClassLoader = oldLoader - - val defaultSet = default.map { it.toString() }.toSet() - val currentPrefMedia = try { - PreferenceManager.getDefaultSharedPreferences(this) - .getStringSet(this.getString(R.string.prefer_media_type_key), defaultSet) - ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } - } catch (e: Throwable) { - null - } ?: default - val langs = this.getApiProviderLangSettings() - val hasUniversal = langs.contains(AllLanguagesName) - val allApis = synchronized(apis) { - apis.filter { api -> (hasUniversal || langs.contains(api.lang)) && (api.hasMainPage || !hasHomePageIsRequired) } - } - return if (currentPrefMedia.isEmpty()) { - allApis - } else { - // Filter API depending on preferred media type - allApis.filter { api -> api.supportedTypes.any { currentPrefMedia.contains(it.ordinal) } } - } - } - - fun Context.filterSearchResultByFilmQuality(data: List): List { - // Filter results omitting entries with certain quality - if (data.isNotEmpty()) { - val filteredSearchQuality = PreferenceManager.getDefaultSharedPreferences(this) - ?.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf()) - ?.mapNotNull { entry -> - entry.toIntOrNull() ?: return@mapNotNull null - } ?: listOf() - if (filteredSearchQuality.isNotEmpty()) { - return data.filter { item -> - val searchQualVal = item.quality?.ordinal ?: -1 - //Log.i("filterSearch", "QuickSearch item => ${item.toJson()}") - !filteredSearchQuality.contains(searchQualVal) - } - } - } - return data - } - - fun Context.filterHomePageListByFilmQuality(data: HomePageList): HomePageList { - // Filter results omitting entries with certain quality - if (data.list.isNotEmpty()) { - val filteredSearchQuality = PreferenceManager.getDefaultSharedPreferences(this) - ?.getStringSet(getString(R.string.pref_filter_search_quality_key), setOf()) - ?.mapNotNull { entry -> - entry.toIntOrNull() ?: return@mapNotNull null - } ?: listOf() - if (filteredSearchQuality.isNotEmpty()) { - return HomePageList( - name = data.name, - isHorizontalImages = data.isHorizontalImages, - list = data.list.filter { item -> - val searchQualVal = item.quality?.ordinal ?: -1 - //Log.i("filterSearch", "QuickSearch item => ${item.toJson()}") - !filteredSearchQuality.contains(searchQualVal) - } - ) - } - } - return data - } } /* @@ -656,7 +477,7 @@ abstract class MainAPI { //emptyList() // open val mainPage = listOf(MainPageData("", "", false)) - @WorkerThread + // @WorkerThread open suspend fun getMainPage( page: Int, request: MainPageRequest, @@ -664,17 +485,17 @@ abstract class MainAPI { throw NotImplementedError() } - @WorkerThread + // @WorkerThread open suspend fun search(query: String): List? { throw NotImplementedError() } - @WorkerThread + // @WorkerThread open suspend fun quickSearch(query: String): List? { throw NotImplementedError() } - @WorkerThread + // @WorkerThread /** * Based on data from search() or getMainPage() it generates a LoadResponse, * basically opening the info page from a link. @@ -692,13 +513,13 @@ abstract class MainAPI { * This function might be updated to include exoplayer timestamps etc in the future * if the need arises. * */ - @WorkerThread + // @WorkerThread open suspend fun extractorVerifierJob(extractorData: String?) { throw NotImplementedError() } /**Callback is fired once a link is found, will return true if method is executed successfully*/ - @WorkerThread + // @WorkerThread open suspend fun loadLinks( data: String, isCasting: Boolean, @@ -723,27 +544,16 @@ abstract class MainAPI { } /** Might need a different implementation for desktop*/ -@SuppressLint("NewApi") fun base64Decode(string: String): String { return String(base64DecodeArray(string), Charsets.ISO_8859_1) } - -@SuppressLint("NewApi") +@OptIn(ExperimentalEncodingApi::class) fun base64DecodeArray(string: String): ByteArray { - return try { - android.util.Base64.decode(string, android.util.Base64.DEFAULT) - } catch (e: Exception) { - Base64.getDecoder().decode(string) - } + return Base64.decode(string) } - -@SuppressLint("NewApi") +@OptIn(ExperimentalEncodingApi::class) fun base64Encode(array: ByteArray): String { - return try { - String(android.util.Base64.encode(array, android.util.Base64.NO_WRAP), Charsets.ISO_8859_1) - } catch (e: Exception) { - String(Base64.getEncoder().encode(array)) - } + return Base64.encode(array) } fun MainAPI.fixUrlNull(url: String?): String? { @@ -779,10 +589,6 @@ fun sortUrls(urls: Set): List { return urls.sortedBy { t -> -t.quality } } -fun sortSubs(subs: Set): List { - return subs.sortedBy { it.name } -} - fun capitalizeString(str: String): String { return capitalizeStringNullable(str) ?: str } @@ -1204,11 +1010,25 @@ interface LoadResponse { var contentRating: String? companion object { - private val malIdPrefix = malApi.idPrefix - private val aniListIdPrefix = aniListApi.idPrefix - private val simklIdPrefix = simklApi.idPrefix + var malIdPrefix = "" //malApi.idPrefix + var aniListIdPrefix = "" //aniListApi.idPrefix + var simklIdPrefix = "" //simklApi.idPrefix var isTrailersEnabled = true + /** + * The ID string is a way to keep a collection of services in one single ID using a map + * This adds a database service (like imdb) to the string and returns the new string. + */ + fun addIdToString(idString: String?, database: SimklSyncServices, id: String?): String? { + if (id == null) return idString + return (readIdFromString(idString) + mapOf(database to id)).toJson() + } + + /** Read the id string to get all other ids */ + fun readIdFromString(idString: String?): Map { + return tryParseJson(idString) ?: return emptyMap() + } + fun LoadResponse.isMovie(): Boolean { return this.type.isMovieType() || this is MovieLoadResponse } @@ -1232,12 +1052,12 @@ interface LoadResponse { * Internal helper function to add simkl ids from other databases. */ private fun LoadResponse.addSimklId( - database: SimklApi.Companion.SyncServices, + database: SimklSyncServices, id: String? ) { normalSafeApiCall { this.syncData[simklIdPrefix] = - SimklApi.addIdToString(this.syncData[simklIdPrefix], database, id.toString()) + addIdToString(this.syncData[simklIdPrefix], database, id.toString()) ?: return@normalSafeApiCall } } @@ -1257,30 +1077,28 @@ interface LoadResponse { fun LoadResponse.getImdbId(): String? { return normalSafeApiCall { - SimklApi.readIdFromString(this.syncData[simklIdPrefix]) - ?.get(SimklApi.Companion.SyncServices.Imdb) + readIdFromString(this.syncData[simklIdPrefix])[SimklSyncServices.Imdb] } } fun LoadResponse.getTMDbId(): String? { return normalSafeApiCall { - SimklApi.readIdFromString(this.syncData[simklIdPrefix]) - ?.get(SimklApi.Companion.SyncServices.Tmdb) + readIdFromString(this.syncData[simklIdPrefix])[SimklSyncServices.Tmdb] } } fun LoadResponse.addMalId(id: Int?) { this.syncData[malIdPrefix] = (id ?: return).toString() - this.addSimklId(SimklApi.Companion.SyncServices.Mal, id.toString()) + this.addSimklId(SimklSyncServices.Mal, id.toString()) } fun LoadResponse.addAniListId(id: Int?) { this.syncData[aniListIdPrefix] = (id ?: return).toString() - this.addSimklId(SimklApi.Companion.SyncServices.AniList, id.toString()) + this.addSimklId(SimklSyncServices.AniList, id.toString()) } fun LoadResponse.addSimklId(id: Int?) { - this.addSimklId(SimklApi.Companion.SyncServices.Simkl, id.toString()) + this.addSimklId(SimklSyncServices.Simkl, id.toString()) } fun LoadResponse.addImdbUrl(url: String?) { @@ -1362,7 +1180,7 @@ interface LoadResponse { fun LoadResponse.addImdbId(id: String?) { // TODO add imdb sync - this.addSimklId(SimklApi.Companion.SyncServices.Imdb, id) + this.addSimklId(SimklSyncServices.Imdb, id) } fun LoadResponse.addTrackId(id: String?) { @@ -1375,7 +1193,7 @@ interface LoadResponse { fun LoadResponse.addTMDbId(id: String?) { // TODO add TMDb sync - this.addSimklId(SimklApi.Companion.SyncServices.Tmdb, id) + this.addSimklId(SimklSyncServices.Tmdb, id) } fun LoadResponse.addRating(text: String?) { @@ -1466,7 +1284,7 @@ data class NextAiring( constructor( episode: Int, unixTime: Long, - ) : this ( + ) : this( episode, unixTime, null @@ -1929,6 +1747,28 @@ fun MainAPI.newEpisode( return builder } +interface IDownloadableMinimum { + val url: String + val referer: String + val headers: Map +} + +fun IDownloadableMinimum.getId(): Int { + return url.hashCode() +} + +/** + * Set of sync services simkl is compatible with. + * Add more as required: https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id + */ +enum class SimklSyncServices(val originalName: String) { + Simkl("simkl"), + Imdb("imdb"), + Tmdb("tmdb"), + AniList("anilist"), + Mal("mal"), +} + data class TvSeriesLoadResponse( override var name: String, override var url: String, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt index b0051ba7..23f8dcf4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AStreamHub.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Acefile.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AsianLoad.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/AsianLoad.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Blogger.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/BullStream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/BullStream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ByteShare.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/ByteShare.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ByteShare.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Cda.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Cda.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt index b7f84af1..27a5c52a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Dailymotion.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Dailymotion.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/DoodExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/DoodExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EPlay.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/EPlay.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EPlay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Embedgram.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/EmturbovidExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Evolaod.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Evolaod.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Fastream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Filesim.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GMPlayer.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GMPlayer.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gdriveplayer.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GenericM3U8.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GenericM3U8.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/GenericM3U8.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GenericM3U8.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Gofile.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GoodstreamExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GuardareStream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/GuardareStream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/GuardareStream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt index 03586386..1f70ce61 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.extractors.helper.AesHelper diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt index 14333d35..8318c3fb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/HDStreamAbleExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDStreamAbleExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/HDStreamAbleExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDStreamAbleExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Hxfile.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Hxfile.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/JWPlayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/JWPlayer.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/JWPlayer.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Jawcloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jawcloud.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Jawcloud.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jawcloud.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Jeniusplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Jeniusplay.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Jeniusplay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Krakenfiles.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Linkbox.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Linkbox.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/M3u8Manifest.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/M3u8Manifest.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/M3u8Manifest.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/M3u8Manifest.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt index 766c7762..ce742e97 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Maxstream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Maxstream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Maxstream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mediafire.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Mediafire.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mediafire.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Minoplres.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Minoplres.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Minoplres.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Minoplres.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MixDrop.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MixDrop.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/MixDrop.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MixDrop.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Moviehab.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Moviehab.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mp4Upload.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mp4Upload.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MultiQuality.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MultiQuality.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Mvidoo.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt index 46f6ad0f..6db0830c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/OkRuExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OkRuExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/OkRuExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OkRuExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Okrulink.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Okrulink.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Okrulink.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Okrulink.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt similarity index 99% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt index b57449bf..0a005036 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Pelisplus.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Pelisplus.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PixelDrainExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PixelDrainExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/PixelDrainExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PixelDrainExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt similarity index 99% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt index 2b286abb..a4dc694e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PlayerVoxzer.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Rabbitstream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Rabbitstream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt index a0d830cf..607d2d78 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SBPlay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/SBPlay.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SBPlay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Sendvid.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Sendvid.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Sendvid.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt index a8bcee31..ebd57f9c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Solidfiles.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Solidfiles.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSB.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamSB.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamTape.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamWishExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamhub.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamlare.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamlare.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Streamlare.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamlare.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamoUpload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/StreamoUpload.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/StreamoUpload.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Streamplay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Supervideo.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt index 645d7c0e..de5ca9a2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Tantifilm.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tantifilm.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt index 2478edc1..157374a3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Tomatomatela.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tomatomatela.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Tomatomatela.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Tomatomatela.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uqload.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Uqload.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uqload.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Userload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Userload.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userload.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Userscloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Userscloud.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Userscloud.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Uservideo.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vicloud.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt index b963fe56..e57772ce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt similarity index 88% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt index 2655670d..73857fb3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidSrcTo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt @@ -1,70 +1,72 @@ -package com.lagradost.cloudstream3.extractors - -import android.util.Base64 -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.amap -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import java.net.URLDecoder -import javax.crypto.Cipher -import javax.crypto.spec.SecretKeySpec - -class VidSrcTo : ExtractorApi() { - override val name = "VidSrcTo" - override val mainUrl = "https://vidsrc.to" - override val requiresReferer = true - - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val mediaId = app.get(url).document.selectFirst("ul.episodes li a")?.attr("data-id") ?: return - val res = app.get("$mainUrl/ajax/embed/episode/$mediaId/sources").parsedSafe() ?: return - if (res.status != 200) return - res.result?.amap { source -> - try { - val embedRes = app.get("$mainUrl/ajax/embed/source/${source.id}").parsedSafe() ?: return@amap - val finalUrl = DecryptUrl(embedRes.result.encUrl) - if(finalUrl.equals(embedRes.result.encUrl)) return@amap - when (source.title) { - "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) - "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) - } - } catch (e: Exception) { - logError(e) - } - } - } - - private fun DecryptUrl(encUrl: String): String { - var data = encUrl.toByteArray() - data = Base64.decode(data, Base64.URL_SAFE) - val rc4Key = SecretKeySpec("WXrUARXb1aDLaZjI".toByteArray(), "RC4") - val cipher = Cipher.getInstance("RC4") - cipher.init(Cipher.DECRYPT_MODE, rc4Key, cipher.parameters) - data = cipher.doFinal(data) - return URLDecoder.decode(data.toString(Charsets.UTF_8), "utf-8") - } - - data class VidsrctoEpisodeSources( - @JsonProperty("status") val status: Int, - @JsonProperty("result") val result: List? - ) - - data class VidsrctoResult( - @JsonProperty("id") val id: String, - @JsonProperty("title") val title: String - ) - - data class VidsrctoEmbedSource( - @JsonProperty("status") val status: Int, - @JsonProperty("result") val result: VidsrctoUrl - ) - - data class VidsrctoUrl(@JsonProperty("url") val encUrl: String) -} +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.amap +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Decode +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import java.net.URLDecoder +import javax.crypto.Cipher +import javax.crypto.spec.SecretKeySpec +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi + +class VidSrcTo : ExtractorApi() { + override val name = "VidSrcTo" + override val mainUrl = "https://vidsrc.to" + override val requiresReferer = true + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val mediaId = app.get(url).document.selectFirst("ul.episodes li a")?.attr("data-id") ?: return + val res = app.get("$mainUrl/ajax/embed/episode/$mediaId/sources").parsedSafe() ?: return + if (res.status != 200) return + res.result?.amap { source -> + try { + val embedRes = app.get("$mainUrl/ajax/embed/source/${source.id}").parsedSafe() ?: return@amap + val finalUrl = DecryptUrl(embedRes.result.encUrl) + if(finalUrl.equals(embedRes.result.encUrl)) return@amap + when (source.title) { + "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) + "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) + } + } catch (e: Exception) { + logError(e) + } + } + } + + @OptIn(ExperimentalEncodingApi::class) + private fun DecryptUrl(encUrl: String): String { + val data = Base64.UrlSafe.decode(encUrl) + val rc4Key = SecretKeySpec("WXrUARXb1aDLaZjI".toByteArray(), "RC4") + val cipher = Cipher.getInstance("RC4") + cipher.init(Cipher.DECRYPT_MODE, rc4Key, cipher.parameters) + val finalData = cipher.doFinal(data) + return URLDecoder.decode(finalData.toString(Charsets.UTF_8), "utf-8") + } + + data class VidsrctoEpisodeSources( + @JsonProperty("status") val status: Int, + @JsonProperty("result") val result: List? + ) + + data class VidsrctoResult( + @JsonProperty("id") val id: String, + @JsonProperty("title") val title: String + ) + + data class VidsrctoEmbedSource( + @JsonProperty("status") val status: Int, + @JsonProperty("result") val result: VidsrctoUrl + ) + + data class VidsrctoUrl(@JsonProperty("url") val encUrl: String) +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt similarity index 98% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt index 2439b8ad..1161ff66 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt @@ -2,7 +2,7 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoVard.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoVard.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt index 230a9e1a..c48b683c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidguard.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidguard.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.AppUtils @@ -87,7 +87,7 @@ open class Vidguardto : ExtractorApi() { } Log.d("runJS", "Result: $result") } catch (e: Exception) { - Log.e("runJS", "Error executing JavaScript", e) + Log.e("runJS", "Error executing JavaScript: ${e.message}") } finally { Context.exit() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VidhideExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidhideExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/VidhideExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidhideExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vidmoly.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidmoly.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vido.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vido.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vido.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vidplay.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidstream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vidstream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidstream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt similarity index 93% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt index 67fd7eea..1d7dee7c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Voe.kt @@ -1,9 +1,9 @@ package com.lagradost.cloudstream3.extractors -import android.util.Base64 import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Decode import com.lagradost.cloudstream3.utils.AppUtils import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink @@ -58,12 +58,12 @@ open class Voe : ExtractorApi() { videoLinks.add( when { linkRegex.matches(link) -> link - else -> String(Base64.decode(link, Base64.DEFAULT)) + else -> base64Decode(link) } ) } else { val link2 = base64Regex.find(script)?.value ?: return - val decoded = Base64.decode(link2, Base64.DEFAULT).toString() + val decoded = base64Decode(link2) val videoLinkDTO = AppUtils.parseJson(decoded) videoLinkDTO.let { videoLinks.add(it.toString()) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Vtbe.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vtbe.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/WatchSB.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WatchSB.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/WatchSB.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WatchSB.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WcoStream.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/WcoStream.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Wibufile.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Wibufile.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/XStreamCdn.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/XStreamCdn.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YourUpload.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zorofile.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zorofile.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/Zplayer.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Zplayer.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AesHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt index 0b401c06..bd42424f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/AsianEmbedHelper.kt @@ -1,6 +1,6 @@ package com.lagradost.cloudstream3.extractors.helper -import android.util.Log +import com.lagradost.api.Log import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/NineAnimeHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/NineAnimeHelper.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/NineAnimeHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/NineAnimeHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/VstreamhubHelper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt similarity index 76% rename from app/src/main/java/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt index 768fa1f6..35aec2b1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/helper/WcoHelper.kt @@ -1,8 +1,6 @@ package com.lagradost.cloudstream3.extractors.helper import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.AcraApplication.Companion.getKey -import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.app class WcoHelper { @@ -30,9 +28,7 @@ class WcoHelper { private suspend fun getKeys() { keys = keys ?: app.get("https://raw.githubusercontent.com/reduplicated/Cloudstream/master/docs/keys.json") - .parsedSafe()?.also { setKey(BACKUP_KEY_DATA, it) } ?: getKey( - BACKUP_KEY_DATA - ) + .parsedSafe() } suspend fun getWcoKey(): ExternalKeys? { @@ -43,9 +39,7 @@ class WcoHelper { private suspend fun getNewKeys() { newKeys = newKeys ?: app.get("https://raw.githubusercontent.com/chekaslowakiya/BruhFlow/main/keys.json") - .parsedSafe()?.also { setKey(BACKUP_KEY_DATA, it) } ?: getKey( - BACKUP_KEY_DATA - ) + .parsedSafe() } suspend fun getNewWcoKey(): NewExternalKeys? { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.kt new file mode 100644 index 00000000..8baf2f31 --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.kt @@ -0,0 +1,28 @@ +package com.lagradost.cloudstream3.network + +import com.lagradost.cloudstream3.USER_AGENT +import okhttp3.Interceptor + +/** + * When used as Interceptor additionalUrls cannot be returned, use WebViewResolver(...).resolveUsingWebView(...) + * @param interceptUrl will stop the WebView when reaching this url. + * @param additionalUrls this will make resolveUsingWebView also return all other requests matching the list of Regex. + * @param userAgent if null then will use the default user agent + * @param useOkhttp will try to use the okhttp client as much as possible, but this might cause some requests to fail. Disable for cloudflare. + * @param script pass custom js to execute + * @param scriptCallback will be called with the result from custom js + * @param timeout close webview after timeout + * */ +expect class WebViewResolver( + interceptUrl: Regex, + additionalUrls: List = emptyList(), + userAgent: String? = USER_AGENT, + useOkhttp: Boolean = true, + script: String? = null, + scriptCallback: ((String) -> Unit)? = null, + timeout: Long = DEFAULT_TIMEOUT +) : Interceptor { + companion object { + val DEFAULT_TIMEOUT: Long + } +} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt new file mode 100644 index 00000000..676ac6fe --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/syncproviders/SyncAPI.kt @@ -0,0 +1,10 @@ +package com.lagradost.cloudstream3.syncproviders + +enum class SyncIdName { + Anilist, + MyAnimeList, + Trakt, + Imdb, + Simkl, + LocalList, +} diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/AppUtils.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/AppUtils.kt new file mode 100644 index 00000000..374751a8 --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -0,0 +1,24 @@ +package com.lagradost.cloudstream3.utils + +import com.fasterxml.jackson.module.kotlin.readValue +import com.lagradost.cloudstream3.mapper + +object AppUtils { + /** Any object as json string */ + fun Any.toJson(): String { + if (this is String) return this + return mapper.writeValueAsString(this) + } + + inline fun parseJson(value: String): T { + return mapper.readValue(value) + } + + inline fun tryParseJson(value: String?): T? { + return try { + parseJson(value ?: return null) + } catch (_: Exception) { + null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt similarity index 97% rename from app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt index ce6e5ecc..566e29f0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -1,9 +1,8 @@ package com.lagradost.cloudstream3.utils -import android.net.Uri import com.fasterxml.jackson.annotation.JsonIgnore +import com.lagradost.cloudstream3.IDownloadableMinimum import com.lagradost.cloudstream3.SubtitleFile -import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.extractors.AStreamHub @@ -431,7 +430,7 @@ open class ExtractorLink constructor( /** Used for getExtractorVerifierJob() */ open val extractorData: String? = null, open val type: ExtractorLinkType, -) : VideoDownloadManager.IDownloadableMinimum { +) : IDownloadableMinimum { val isM3u8: Boolean get() = type == ExtractorLinkType.M3U8 val isDash: Boolean get() = type == ExtractorLinkType.DASH @@ -530,29 +529,6 @@ open class ExtractorLink constructor( } } -data class ExtractorUri( - val uri: Uri, - val name: String, - - val basePath: String? = null, - val relativePath: String? = null, - val displayName: String? = null, - - val id: Int? = null, - val parentId: Int? = null, - val episode: Int? = null, - val season: Int? = null, - val headerName: String? = null, - val tvType: TvType? = null, -) - -data class ExtractorSubtitleLink( - val name: String, - override val url: String, - override val referer: String, - override val headers: Map = mapOf() -) : VideoDownloadManager.IDownloadableMinimum - /** * Removes https:// and www. * To match urls regardless of schema, perhaps Uri() can be used? diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt similarity index 100% rename from app/src/main/java/com/lagradost/cloudstream3/utils/M3u8Helper.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/M3u8Helper.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UnshortenUrl.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt similarity index 96% rename from app/src/main/java/com/lagradost/cloudstream3/utils/UnshortenUrl.kt rename to library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt index 46b232f6..b13e88e5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UnshortenUrl.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/UnshortenUrl.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.utils -import android.util.Base64 import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.base64Decode import com.lagradost.nicehttp.NiceResponse @@ -91,13 +90,12 @@ object ShortLink { } val encodedbytearray = encodedUri.map { it.code.toByte() }.toByteArray() var decodedUri = - Base64.decode(encodedbytearray, Base64.DEFAULT).decodeToString().dropLast(16) + base64Decode(encodedbytearray.toString()).dropLast(16) .drop(16) if (Regex("""go\.php\?u=""").find(decodedUri) != null) { decodedUri = - Base64.decode(decodedUri.replace(Regex("""(.*?)u="""), ""), Base64.DEFAULT) - .decodeToString() + base64Decode(decodedUri.replace(Regex("""(.*?)u="""), "")) } return decodedUri diff --git a/library/src/jvmMain/kotlin/com/lagradost/api/ContextHelper.jvm.kt b/library/src/jvmMain/kotlin/com/lagradost/api/ContextHelper.jvm.kt new file mode 100644 index 00000000..a30810b8 --- /dev/null +++ b/library/src/jvmMain/kotlin/com/lagradost/api/ContextHelper.jvm.kt @@ -0,0 +1,10 @@ +package com.lagradost.api + +import java.lang.ref.WeakReference + +actual fun getContext(): Any? { + return null +} + +actual fun setContext(context: WeakReference) { +} \ No newline at end of file diff --git a/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.jvm.kt b/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.jvm.kt new file mode 100644 index 00000000..6b99ef3b --- /dev/null +++ b/library/src/jvmMain/kotlin/com/lagradost/cloudstream3/network/WebViewResolver.jvm.kt @@ -0,0 +1,35 @@ +package com.lagradost.cloudstream3.network + +import okhttp3.Interceptor +import okhttp3.Response + +/** + * When used as Interceptor additionalUrls cannot be returned, use WebViewResolver(...).resolveUsingWebView(...) + * @param interceptUrl will stop the WebView when reaching this url. + * @param additionalUrls this will make resolveUsingWebView also return all other requests matching the list of Regex. + * @param userAgent if null then will use the default user agent + * @param useOkhttp will try to use the okhttp client as much as possible, but this might cause some requests to fail. Disable for cloudflare. + * @param script pass custom js to execute + * @param scriptCallback will be called with the result from custom js + * @param timeout close webview after timeout + * */ +actual class WebViewResolver actual constructor( + interceptUrl: Regex, + additionalUrls: List, + userAgent: String?, + useOkhttp: Boolean, + script: String?, + scriptCallback: ((String) -> Unit)?, + timeout: Long +) : + Interceptor { + + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + return chain.proceed(request) + } + + actual companion object { + actual val DEFAULT_TIMEOUT = 60_000L + } +} From e5c9e96c8347cf31cc7ee25e2490cc70046167c3 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Thu, 4 Jul 2024 22:33:21 +0200 Subject: [PATCH 839/888] fix filesystem --- .../commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt | 5 +++++ .../commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) delete mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt index 47ef5382..aa08cb59 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainAPI.kt @@ -29,6 +29,11 @@ import kotlin.math.absoluteValue **/ const val AllLanguagesName = "universal" +const val USER_AGENT = + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" + +class ErrorLoadingException(message: String? = null) : Exception(message) + //val baseHeader = mapOf("User-Agent" to USER_AGENT) val mapper = JsonMapper.builder().addModule(kotlinModule()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build()!! diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt deleted file mode 100644 index 160ff098..00000000 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/MainApi.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.lagradost.cloudstream3 - -const val USER_AGENT = - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" - -class ErrorLoadingException(message: String? = null) : Exception(message) \ No newline at end of file From c1b5f5c128859158a5ef022d0f16eb129b963651 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Thu, 4 Jul 2024 15:51:07 -0600 Subject: [PATCH 840/888] Fix download button display bug in adapter (#1175) --- .../ui/download/DownloadAdapter.kt | 22 ++++++-- .../ui/download/DownloadFragment.kt | 3 +- .../ui/download/button/PieFetchButton.kt | 50 +++++++++---------- 3 files changed, 42 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt index b4a16a66..9a026334 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.text.format.Formatter.formatShortFileSize import android.view.LayoutInflater import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter @@ -13,9 +14,8 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding import com.lagradost.cloudstream3.databinding.DownloadHeaderEpisodeBinding import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull -import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.ui.download.button.DownloadStatusTell +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.UIHelper.setImage @@ -135,8 +135,15 @@ class DownloadAdapter( downloadButton.applyMetaData(card.child.id, card.currentBytes, card.totalBytes) // We will let the view model handle this downloadButton.doSetProgress = false + downloadButton.progressBar.progressDrawable = + downloadButton.getDrawableFromStatus(status) + ?.let { ContextCompat.getDrawable(downloadButton.context, it) } downloadHeaderInfo.text = formattedSizeString - } else downloadButton.doSetProgress = true + } else { + downloadButton.doSetProgress = true + downloadButton.progressBar.progressDrawable = + ContextCompat.getDrawable(downloadButton.context, downloadButton.progressDrawable) + } downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, mediaClickCallback) downloadButton.isVisible = true @@ -197,8 +204,15 @@ class DownloadAdapter( downloadButton.applyMetaData(d.id, card.currentBytes, card.totalBytes) // We will let the view model handle this downloadButton.doSetProgress = false + downloadButton.progressBar.progressDrawable = + downloadButton.getDrawableFromStatus(status) + ?.let { ContextCompat.getDrawable(downloadButton.context, it) } downloadChildEpisodeTextExtra.text = formatShortFileSize(downloadChildEpisodeTextExtra.context, card.totalBytes) - } else downloadButton.doSetProgress = true + } else { + downloadButton.doSetProgress = true + downloadButton.progressBar.progressDrawable = + ContextCompat.getDrawable(downloadButton.context, downloadButton.progressDrawable) + } downloadButton.setDefaultClickListener(d, downloadChildEpisodeTextExtra, mediaClickCallback) downloadButton.isVisible = true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 82c5ffb8..23d546e1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -40,7 +40,6 @@ import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult -import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE import com.lagradost.cloudstream3.utils.DataStore import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe @@ -273,4 +272,4 @@ class DownloadFragment : Fragment() { val selectedVideoUri = result?.data?.data ?: return@registerForActivityResult playUri(activity ?: return@registerForActivityResult, selectedVideoUri) } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt index a6dc5c56..abc159d0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt @@ -1,7 +1,6 @@ package com.lagradost.cloudstream3.ui.download.button import android.content.Context -import android.graphics.drawable.Drawable import android.os.Looper import android.util.AttributeSet import android.util.Log @@ -45,6 +44,8 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : private var iconPaused: Int = 0 private var hideWhenIcon: Boolean = true + var progressDrawable: Int = 0 + var overrideLayout: Int? = null companion object { @@ -115,10 +116,10 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : R.styleable.PieFetchButton_download_icon_complete, R.drawable.download_icon_done ) iconPaused = getResourceId( - R.styleable.PieFetchButton_download_icon_paused, 0//R.drawable.download_icon_pause + R.styleable.PieFetchButton_download_icon_paused, 0 // R.drawable.download_icon_pause ) iconActive = getResourceId( - R.styleable.PieFetchButton_download_icon_active, 0 //R.drawable.download_icon_load + R.styleable.PieFetchButton_download_icon_active, 0 // R.drawable.download_icon_load ) iconWaiting = getResourceId( R.styleable.PieFetchButton_download_icon_waiting, 0 @@ -129,7 +130,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : val fillIndex = getInt(R.styleable.PieFetchButton_download_fill, 0) - val progressDrawable = getResourceId( + progressDrawable = getResourceId( R.styleable.PieFetchButton_download_fill_override, fillArray[fillIndex] ) @@ -170,7 +171,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : if (isZeroBytes) { removeKey(KEY_RESUME_PACKAGES, card.id.toString()) callback(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, card)) - //callback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, data)) + // callback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_DOWNLOAD, data)) } else { val list = arrayListOf( Pair(DOWNLOAD_ACTION_PLAY_FILE, R.string.popup_play_file), @@ -197,7 +198,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : list ) { callback(DownloadClickEvent(itemId, card)) - //callback.invoke(DownloadClickEvent(itemId, data)) + // callback.invoke(DownloadClickEvent(itemId, data)) } } } @@ -205,7 +206,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : view.setOnLongClickListener { callback(DownloadClickEvent(DOWNLOAD_ACTION_LONG_CLICK, card)) - //clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_LONG_CLICK, data)) + // clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_LONG_CLICK, data)) return@setOnLongClickListener true } } @@ -218,7 +219,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : setDefaultClickListener(this, textView, card, callback) } - /*open fun setDefaultClickListener(requestGetter: suspend BaseFetchButton.() -> List) { + /* open fun setDefaultClickListener(requestGetter: suspend BaseFetchButton.() -> List) { this.setOnClickListener { when (this.currentStatus) { null -> { @@ -244,7 +245,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : else -> {} } } - }*/ + } */ @MainThread private fun setStatusInternal(status : DownloadStatusTell?) { @@ -262,7 +263,8 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : progressBarBackground.background = ContextCompat.getDrawable(context, progressDrawable) - val drawable = getDrawableFromStatus(status) + val drawable = + getDrawableFromStatus(status)?.let { ContextCompat.getDrawable(this.context, it) } statusView.setImageDrawable(drawable) val isDrawable = drawable != null @@ -280,12 +282,12 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : override fun setStatus(status: DownloadStatusTell?) { currentStatus = status - // runs on the main thread, but also instant if it already is + // Runs on the main thread, but also instant if it already is if (Looper.myLooper() == Looper.getMainLooper()) { try { setStatusInternal(status) } catch (t : Throwable) { - logError(t) // just in case setStatusInternal throws because thread + logError(t) // Just in case setStatusInternal throws because thread progressBarBackground.post { setStatusInternal(status) } @@ -325,19 +327,13 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : } } - open fun getDrawableFromStatus(status: DownloadStatusTell?): Drawable? { - val drawableInt = when (status) { - DownloadStatusTell.IsPaused -> iconPaused - DownloadStatusTell.IsPending -> iconWaiting - DownloadStatusTell.IsDownloading -> iconActive - DownloadStatusTell.IsFailed -> iconError - DownloadStatusTell.IsDone -> iconComplete - DownloadStatusTell.IsStopped -> iconRemoved - null -> iconInit - } - if (drawableInt == 0) { - return null - } - return ContextCompat.getDrawable(this.context, drawableInt) - } + open fun getDrawableFromStatus(status: DownloadStatusTell?): Int? = when (status) { + DownloadStatusTell.IsPaused -> iconPaused + DownloadStatusTell.IsPending -> iconWaiting + DownloadStatusTell.IsDownloading -> iconActive + DownloadStatusTell.IsFailed -> iconError + DownloadStatusTell.IsDone -> iconComplete + DownloadStatusTell.IsStopped -> iconRemoved + else -> iconInit + }.takeIf { it != 0 } } \ No newline at end of file From e1d4a46309f8a979327e5b5486f2f8753f0a0639 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Fri, 5 Jul 2024 15:26:44 +0200 Subject: [PATCH 841/888] bugfix on lib startup --- .../lagradost/cloudstream3/MainActivity.kt | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a47e7685..59f499c5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1112,23 +1112,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa MainAPI.settingsForProvider = settingsForProvider - // Change library icon with logo of current api in sync - libraryViewModel = ViewModelProvider(this)[LibraryViewModel::class.java] - libraryViewModel?.currentApiName?.observe(this) { - val syncAPI = libraryViewModel?.currentSyncApi - Log.i("SYNC_API", "${syncAPI?.name}, ${syncAPI?.idPrefix}") - val icon = if (syncAPI?.idPrefix == localListApi.idPrefix) { - R.drawable.library_icon - } else { - syncAPI?.icon ?: R.drawable.library_icon - } - - binding?.apply { - navRailView.menu.findItem(R.id.navigation_library)?.setIcon(icon) - navView.menu.findItem(R.id.navigation_library)?.setIcon(icon) - } - } - loadThemes(this) updateLocale() super.onCreate(savedInstanceState) @@ -1538,6 +1521,26 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa logError(e) } } + + // we need to run this after we init all apis, otherwise currentSyncApi will fuck itself + this@MainActivity.runOnUiThread { + // Change library icon with logo of current api in sync + libraryViewModel = ViewModelProvider(this@MainActivity)[LibraryViewModel::class.java] + libraryViewModel?.currentApiName?.observe(this@MainActivity) { + val syncAPI = libraryViewModel?.currentSyncApi + Log.i("SYNC_API", "${syncAPI?.name}, ${syncAPI?.idPrefix}") + val icon = if (syncAPI?.idPrefix == localListApi.idPrefix) { + R.drawable.library_icon + } else { + syncAPI?.icon ?: R.drawable.library_icon + } + + binding?.apply { + navRailView.menu.findItem(R.id.navigation_library)?.setIcon(icon) + navView.menu.findItem(R.id.navigation_library)?.setIcon(icon) + } + } + } } SearchResultBuilder.updateCache(this) From 699a6979a5d6a924859d5dff122de34389a100a7 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Fri, 5 Jul 2024 19:04:32 +0300 Subject: [PATCH 842/888] feat(TV UI): Fix clone site focus (#1179) --- app/src/main/res/layout/add_remove_sites.xml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/layout/add_remove_sites.xml b/app/src/main/res/layout/add_remove_sites.xml index 9ef6ad6a..653f607f 100644 --- a/app/src/main/res/layout/add_remove_sites.xml +++ b/app/src/main/res/layout/add_remove_sites.xml @@ -1,19 +1,21 @@ + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:id="@+id/add_site" + android:text="@string/add_site_pref" + android:focusable="true" + style="@style/SettingsItem"> + android:id="@+id/remove_site" + android:text="@string/remove_site_pref" + android:focusable="true" + style="@style/SettingsItem" /> \ No newline at end of file From 9b1ac5fc28774585f207acd0a5444cc9d09933b6 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Fri, 5 Jul 2024 19:05:32 +0300 Subject: [PATCH 843/888] feat(Trakt): Skip specials season for next airing (#1181) --- .../com/lagradost/cloudstream3/metaproviders/TraktProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 736e05f2..7c375e0a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -238,7 +238,7 @@ open class TraktProvider : MainAPI() { description = episode.overview, ).apply { this.addDate(episode.firstAired, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") - if (nextAir == null && this.date != null && this.date!! > unixTimeMS) { + if (nextAir == null && this.date != null && this.date!! > unixTimeMS && this.season != 0) { nextAir = NextAiring( episode = this.episode!!, unixTime = this.date!!.div(1000L), From 145c42f1c8bdbd53a18733786778be6ff9f77d2b Mon Sep 17 00:00:00 2001 From: KingLucius Date: Fri, 5 Jul 2024 19:10:58 +0300 Subject: [PATCH 844/888] feat(UI): Use same Episode holder size (#1180) --- .../cloudstream3/ui/result/EpisodeAdapter.kt | 7 +++---- app/src/main/res/layout/result_episode.xml | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 0a1b777d..ed5e51f1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -57,8 +57,7 @@ const val ACTION_PLAY_EPISODE_IN_MPV = 17 const val ACTION_MARK_AS_WATCHED = 18 const val ACTION_FCAST = 19 -const val TV_EP_SIZE_LARGE = 400 -const val TV_EP_SIZE_SMALL = 300 +const val TV_EP_SIZE = 400 data class EpisodeClickEvent(val action: Int, val data: ResultEpisode) class EpisodeAdapter( @@ -181,7 +180,7 @@ class EpisodeAdapter( fun bind(card: ResultEpisode) { localCard = card val setWidth = - if (isLayout(TV or EMULATOR)) TV_EP_SIZE_LARGE.toPx else ViewGroup.LayoutParams.MATCH_PARENT + if (isLayout(TV or EMULATOR)) TV_EP_SIZE.toPx else ViewGroup.LayoutParams.MATCH_PARENT binding.episodeLinHolder.layoutParams.width = setWidth binding.episodeHolderLarge.layoutParams.width = setWidth @@ -336,7 +335,7 @@ class EpisodeAdapter( fun bind(card: ResultEpisode) { binding.episodeHolder.layoutParams.apply { width = - if (isLayout(TV or EMULATOR)) TV_EP_SIZE_SMALL.toPx else ViewGroup.LayoutParams.MATCH_PARENT + if (isLayout(TV or EMULATOR)) TV_EP_SIZE.toPx else ViewGroup.LayoutParams.MATCH_PARENT } binding.apply { diff --git a/app/src/main/res/layout/result_episode.xml b/app/src/main/res/layout/result_episode.xml index b56cdb1d..36d60bd6 100644 --- a/app/src/main/res/layout/result_episode.xml +++ b/app/src/main/res/layout/result_episode.xml @@ -90,14 +90,15 @@ android:textColor="?attr/textColor" tools:text="Episode 1" /> - - + + + \ No newline at end of file From e86c926c30d565841d0701adac937d48dc9a8d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Sancak?= Date: Mon, 8 Jul 2024 23:59:02 +0300 Subject: [PATCH 845/888] Extractor: added Pichive & Sobreatsesuyp (#1184) --- .../extractors/HotlingerExtractor.kt | 5 ++ .../extractors/SobreatsesuypExtractor.kt | 56 +++++++++++++++++++ .../cloudstream3/utils/ExtractorApi.kt | 4 ++ 3 files changed, 65 insertions(+) create mode 100644 library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt index db721108..11f8ccaf 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HotlingerExtractor.kt @@ -22,6 +22,11 @@ class FourPlayRu : ContentX() { override var mainUrl = "https://four.playru.net" } +class Pichive : ContentX() { + override var name = "Pichive" + override var mainUrl = "https://pichive.online" +} + class FourPichive : ContentX() { override var name = "FourPichive" override var mainUrl = "https://four.pichive.online" diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt new file mode 100644 index 00000000..91b60dac --- /dev/null +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt @@ -0,0 +1,56 @@ +// ! Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır. + +package com.lagradost.cloudstream3.extractors + +import android.util.Log +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.* +import com.fasterxml.jackson.annotation.JsonProperty + +open class Sobreatsesuyp : ExtractorApi() { + override val name = "Sobreatsesuyp" + override val mainUrl = "https://sobreatsesuyp.com" + override val requiresReferer = true + + override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { + val extRef = referer ?: "" + + val videoReq = app.get(url, referer = extRef).text + + val file = Regex("""file\":\"([^\"]+)""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + val postLink = "${mainUrl}/" + file.replace("\\", "") + val rawList = app.post(postLink, referer = extRef).parsedSafe>() ?: throw ErrorLoadingException("Post link not found") + + val postJson: List = rawList.drop(1).map { item -> + val mapItem = item as Map<*, *> + SobreatsesuypVideoData( + title = mapItem["title"] as? String, + file = mapItem["file"] as? String + ) + } + Log.d("Kekik_${this.name}", "postJson » ${postJson}") + + for (item in postJson) { + if (item.file == null || item.title == null) continue + + val fileUrl = "${mainUrl}/playlist/${item.file.substring(1)}.txt" + val videoData = app.post(fileUrl, referer = extRef).text + + callback.invoke( + ExtractorLink( + source = this.name, + name = "${this.name} - ${item.title}", + url = videoData, + referer = extRef, + quality = Qualities.Unknown.value, + type = INFER_TYPE + ) + ) + } + } + + data class SobreatsesuypVideoData( + @JsonProperty("title") val title: String? = null, + @JsonProperty("file") val file: String? = null + ) +} \ No newline at end of file diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 566e29f0..0df73a0e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -115,6 +115,7 @@ import com.lagradost.cloudstream3.extractors.Hotlinger import com.lagradost.cloudstream3.extractors.FourCX import com.lagradost.cloudstream3.extractors.PlayRu import com.lagradost.cloudstream3.extractors.FourPlayRu +import com.lagradost.cloudstream3.extractors.Pichive import com.lagradost.cloudstream3.extractors.FourPichive import com.lagradost.cloudstream3.extractors.HDMomPlayer import com.lagradost.cloudstream3.extractors.HDPlayerSystem @@ -124,6 +125,7 @@ import com.lagradost.cloudstream3.extractors.HDStreamAble import com.lagradost.cloudstream3.extractors.RapidVid import com.lagradost.cloudstream3.extractors.TRsTX import com.lagradost.cloudstream3.extractors.VidMoxy +import com.lagradost.cloudstream3.extractors.Sobreatsesuyp import com.lagradost.cloudstream3.extractors.PixelDrain import com.lagradost.cloudstream3.extractors.MailRu import com.lagradost.cloudstream3.extractors.Mediafire @@ -734,6 +736,7 @@ val extractorApis: MutableList = arrayListOf( FourCX(), PlayRu(), FourPlayRu(), + Pichive(), FourPichive(), HDMomPlayer(), HDPlayerSystem(), @@ -743,6 +746,7 @@ val extractorApis: MutableList = arrayListOf( RapidVid(), TRsTX(), VidMoxy(), + Sobreatsesuyp(), PixelDrain(), MailRu(), From 8be8e5474647e5aeb31cb1026fe2e350dbf3c139 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Mon, 8 Jul 2024 23:17:25 +0200 Subject: [PATCH 846/888] Fixed log --- .../cloudstream3/extractors/SobreatsesuypExtractor.kt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt index 91b60dac..c90b22f4 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SobreatsesuypExtractor.kt @@ -2,7 +2,6 @@ package com.lagradost.cloudstream3.extractors -import android.util.Log import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.utils.* import com.fasterxml.jackson.annotation.JsonProperty @@ -28,15 +27,13 @@ open class Sobreatsesuyp : ExtractorApi() { file = mapItem["file"] as? String ) } - Log.d("Kekik_${this.name}", "postJson » ${postJson}") for (item in postJson) { if (item.file == null || item.title == null) continue - val fileUrl = "${mainUrl}/playlist/${item.file.substring(1)}.txt" - val videoData = app.post(fileUrl, referer = extRef).text + val videoData = app.post("${mainUrl}/playlist/${item.file.substring(1)}.txt", referer = extRef).text - callback.invoke( + callback.invoke( ExtractorLink( source = this.name, name = "${this.name} - ${item.title}", From febb843424e0331b63b2e26ad796e797f7267ccc Mon Sep 17 00:00:00 2001 From: RowdyRushya Date: Mon, 15 Jul 2024 08:06:20 -0700 Subject: [PATCH 847/888] Fix VidSrcTo extractor (#1198) --- .../cloudstream3/extractors/Chillx.kt | 29 +++++++++---------- .../cloudstream3/extractors/VidSrcTo.kt | 14 ++++++++- .../cloudstream3/extractors/Vidplay.kt | 27 +++++++++++++---- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt index 26567c7a..dd22efb2 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -6,6 +6,7 @@ import com.lagradost.cloudstream3.extractors.helper.AesHelper.cryptoAESHandler import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +import kotlin.run class Moviesapi : Chillx() { override val name = "Moviesapi" @@ -28,17 +29,22 @@ open class Chillx : ExtractorApi() { override val requiresReferer = true companion object { + private val keySource = "https://rowdy-avocado.github.io/multi-keys/" + private var key: String? = null - suspend fun fetchKey(): String { - return if (key != null) { - key!! - } else { - val fetch = app.get("https://raw.githubusercontent.com/rushi-chavan/multi-keys/keys/keys.json").parsedSafe()?.key?.get(0) ?: throw ErrorLoadingException("Unable to get key") - key = fetch - key!! - } + private suspend fun fetchKey(): String { + return key + ?: run { + val res = + app.get(keySource).parsedSafe() + ?: throw ErrorLoadingException("Unable to get keys") + key = res.keys.get(0) + res.keys.get(0) + } } + + private data class KeysData(@JsonProperty("chillx") val keys: List) } @Suppress("NAME_SHADOWING") @@ -97,11 +103,4 @@ open class Chillx : ExtractorApi() { it.groupValues[1].toInt(16).toChar().toString() } } - - - - data class Keys( - @JsonProperty("chillx") val key: List - ) - } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt index 73857fb3..578f5fb9 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt @@ -26,7 +26,13 @@ class VidSrcTo : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val mediaId = app.get(url).document.selectFirst("ul.episodes li a")?.attr("data-id") ?: return - val res = app.get("$mainUrl/ajax/embed/episode/$mediaId/sources").parsedSafe() ?: return + val subtitlesLink = "$mainUrl/ajax/embed/episode/$mediaId/subtitles" + val subRes = app.get(subtitlesLink).parsedSafe>() + subRes?.forEach { + if (it.kind.equals("captions")) subtitleCallback.invoke(SubtitleFile(it.label, it.file)) + } + val sourcesLink = "$mainUrl/ajax/embed/episode/$mediaId/sources" + val res = app.get(sourcesLink).parsedSafe() ?: return if (res.status != 200) return res.result?.amap { source -> try { @@ -68,5 +74,11 @@ class VidSrcTo : ExtractorApi() { @JsonProperty("result") val result: VidsrctoUrl ) + data class VidsrctoSubtitles( + @JsonProperty("file") val file: String, + @JsonProperty("label") val label: String, + @JsonProperty("kind") val kind: String + ) + data class VidsrctoUrl(@JsonProperty("url") val encUrl: String) } diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt index cb9eaf1e..6202800f 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.extractors import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.ErrorLoadingException import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.base64Encode @@ -9,6 +10,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec +import kotlin.run // Code found in https://github.com/KillerDogeEmpire/vidplay-keys // special credits to @KillerDogeEmpire for providing key @@ -35,8 +37,25 @@ open class Vidplay : ExtractorApi() { override val name = "Vidplay" override val mainUrl = "https://vidplay.site" override val requiresReferer = true - open val key = - "https://raw.githubusercontent.com/KillerDogeEmpire/vidplay-keys/keys/keys.json" + + companion object { + private val keySource = "https://rowdy-avocado.github.io/multi-keys/" + + private var keys: List? = null + + private suspend fun getKeys(): List { + return keys + ?: run { + val res = + app.get(keySource).parsedSafe() + ?: throw ErrorLoadingException("Unable to get keys") + keys = res.keys + res.keys + } + } + + private data class KeysData(@JsonProperty("vidplay") val keys: List) + } override suspend fun getUrl( url: String, @@ -70,10 +89,6 @@ open class Vidplay : ExtractorApi() { } - private suspend fun getKeys(): List { - return app.get(key).parsed() - } - private suspend fun callFutoken(id: String, url: String): String? { val script = app.get("$mainUrl/futoken", referer = url).text val k = "k='(\\S+)'".toRegex().find(script)?.groupValues?.get(1) ?: return null From 694193fa3eeada9388d68be521822ecf4f659bd4 Mon Sep 17 00:00:00 2001 From: IndusAryan <125901294+IndusAryan@users.noreply.github.com> Date: Mon, 15 Jul 2024 20:40:41 +0530 Subject: [PATCH 848/888] refactor(fix): result sync, fix slider theme and trailer fix (#1187) --- app/build.gradle.kts | 24 +- app/src/main/res/layout/result_sync.xml | 397 ++++++++++-------------- 2 files changed, 168 insertions(+), 253 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ebefa0ea..6e439d53 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,16 +157,16 @@ dependencies { testImplementation("junit:junit:4.13.2") testImplementation("org.json:json:20240303") androidTestImplementation("androidx.test:core") - implementation("androidx.test.ext:junit-ktx:1.1.5") - androidTestImplementation("androidx.test.ext:junit:1.1.5") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + implementation("androidx.test.ext:junit-ktx:1.2.1") + androidTestImplementation("androidx.test.ext:junit:1.2.1") + androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") // Android Core & Lifecycle implementation("androidx.core:core-ktx:1.13.1") implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.navigation:navigation-ui-ktx:2.7.7") - implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.2") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.2") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.3") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3") implementation("androidx.navigation:navigation-fragment-ktx:2.7.7") // Design & UI @@ -182,9 +182,9 @@ dependencies { implementation("com.github.bumptech.glide:okhttp3-integration:4.16.0") // For KSP -> Official Annotation Processors are Not Yet Supported for KSP - ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") - implementation("com.google.guava:guava:33.2.0-android") - implementation("dev.zacsweers.autoservice:auto-service-ksp:1.1.0") + ksp("dev.zacsweers.autoservice:auto-service-ksp:1.2.0") + implementation("com.google.guava:guava:33.2.1-android") + implementation("dev.zacsweers.autoservice:auto-service-ksp:1.2.0") // Media 3 (ExoPlayer) implementation("androidx.media3:media3-ui:1.1.1") @@ -200,9 +200,9 @@ dependencies { // PlayBack implementation("com.jaredrummler:colorpicker:1.1.0") // Subtitle Color Picker implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Custom FF-MPEG Lib for Audio Codecs - implementation("com.github.teamnewpipe:NewPipeExtractor:fafd471") /* For Trailers + implementation("com.github.teamnewpipe:NewPipeExtractor:592f159") /* For Trailers ^ Update to Latest Commits if Trailers Misbehave, github.com/TeamNewPipe/NewPipeExtractor/commits/dev */ - implementation("com.github.albfernandez:juniversalchardet:2.4.0") // Subtitle Decoding + implementation("com.github.albfernandez:juniversalchardet:2.5.0") // Subtitle Decoding // Crash Reports (AcraApplication.kt) implementation("ch.acra:acra-core:5.11.3") @@ -215,14 +215,14 @@ dependencies { implementation("com.github.discord:OverlappingPanels:0.1.5") // Gestures implementation ("androidx.biometric:biometric:1.2.0-alpha05") // Fingerprint Authentication implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") // SeekBar Preview - implementation("io.github.g0dkar:qrcode-kotlin:4.1.1") // QR code for PIN Auth on TV + implementation("io.github.g0dkar:qrcode-kotlin:4.2.0") // QR code for PIN Auth on TV // Extensions & Other Libs implementation("org.mozilla:rhino:1.7.15") // run JavaScript implementation("me.xdrop:fuzzywuzzy:1.4.0") // Library/Ext Searching with Levenshtein Distance implementation("com.github.LagradOst:SafeFile:0.0.6") // To Prevent the URI File Fu*kery implementation("org.conscrypt:conscrypt-android:2.5.2") // To Fix SSL Fu*kery on Android 9 - implementation("com.uwetrottmann.tmdb2:tmdb-java:2.10.0") // TMDB API v3 Wrapper Made with RetroFit + implementation("com.uwetrottmann.tmdb2:tmdb-java:2.11.0") // TMDB API v3 Wrapper Made with RetroFit coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") /* JSON Parser ^ Don't Bump Jackson above 2.13.1 , Crashes on Android TV's and FireSticks that have Min API diff --git a/app/src/main/res/layout/result_sync.xml b/app/src/main/res/layout/result_sync.xml index 9cde195c..8b7b33c0 100644 --- a/app/src/main/res/layout/result_sync.xml +++ b/app/src/main/res/layout/result_sync.xml @@ -1,306 +1,221 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:id="@+id/result_sync_holder" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp" + android:visibility="gone" + tools:visibility="visible"> + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:id="@+id/result_sync_names" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="10dp" + android:text="MyAnimeList, AniList" + android:textSize="16sp" + android:textStyle="bold" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:visibility="visible"> + android:id="@+id/result_sync_sub_episode" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|center_vertical" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:padding="10dp" + android:src="@drawable/baseline_remove_24" + app:tint="?attr/textColor" /> + android:id="@+id/result_sync_current_episodes" + style="@style/AppEditStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:inputType="number" + android:textColorHint="?attr/grayTextColor" + android:textSize="20sp" + tools:hint="20" + tools:ignore="LabelFor" /> + android:id="@+id/result_sync_max_episodes" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:paddingBottom="1dp" + android:textColor="?attr/textColor" + android:textSize="20sp" + tools:text="30" /> + android:id="@+id/result_sync_add_episode" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|center_vertical" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:padding="10dp" + android:src="@drawable/ic_baseline_add_24" + app:tint="?attr/textColor" /> - - + android:id="@+id/result_sync_episodes" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="match_parent" + android:layout_height="20dp" + android:layout_gravity="end|center_vertical" + android:indeterminate="false" + android:max="100" + android:padding="10dp" + android:progress="0" + android:progressBackgroundTint="?attr/colorPrimary" + tools:visibility="visible" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:padding="10dp" + android:text="@string/sync_score" + android:textColor="?attr/textColor" + android:textSize="17sp" /> + style="@style/BlackButton" + android:layout_width="wrap_content" + android:layout_height="30dp" + android:layout_gravity="center_vertical" + android:layout_marginStart="0dp" + android:minWidth="0dp" + android:text="7/10" /> + android:id="@+id/result_sync_rating" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="-5dp" + android:layout_marginEnd="-5dp" + app:thumbHeight="20dp" + android:stepSize="1" + android:value="4" + android:valueFrom="0" + android:valueTo="10" + app:labelStyle="@style/BlackLabel" + app:thumbRadius="10dp" + app:tickVisible="false" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp" + android:visibility="gone"> + android:id="@+id/home_parent_item_title" + style="@style/WatchHeaderText" + tools:text="Recommended" /> + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_gravity="end|center_vertical" + android:layout_marginEnd="5dp" + android:contentDescription="@string/home_more_info" + android:src="@drawable/ic_baseline_arrow_forward_24" + app:tint="?attr/textColor" /> + android:id="@+id/result_sync_check" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_rowWeight="1" + tools:listitem="@layout/sort_bottom_single_choice" /> + style="@style/WhiteButton" + android:layout_width="match_parent" + android:layout_marginTop="10dp" + android:text="@string/type_watching" + android:visibility="gone" /> + android:id="@+id/result_sync_set_score" + style="@style/BlackButton" + android:layout_width="match_parent" + android:layout_marginTop="10dp" + android:text="@string/upload_sync" + app:icon="@drawable/baseline_sync_24" /> + android:id="@+id/result_sync_loading_shimmer" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:orientation="vertical" + android:padding="15dp" + app:shimmer_auto_start="true" + app:shimmer_base_alpha="0.2" + app:shimmer_duration="@integer/loading_time" + app:shimmer_highlight_alpha="0.3" + tools:visibility="gone" + tools:ignore="MissingClass"> + + - - + android:layout_height="30dp" /> + android:layout_width="match_parent" + android:layout_height="30dp" /> + android:layout_width="match_parent" + android:layout_height="30dp" /> @@ -313,8 +228,8 @@ + android:layout_width="match_parent" + android:layout_height="30dp" /> From a157115cfac1ef3f3c532198a931873d6cee9097 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Mon, 15 Jul 2024 18:15:59 +0300 Subject: [PATCH 849/888] feat(Subtitles): SubSource subtitles provider (#1199) --- .../syncproviders/AccountManager.kt | 4 +- .../syncproviders/providers/SubSource.kt | 158 ++++++++++++++++++ 2 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index e86d73aa..0259ccad 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -22,6 +22,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { val addic7ed = Addic7ed() val subDlApi = SubDlApi(0) val localListApi = LocalList() + val subSourceApi = SubSourceApi() // used to login via app intent val OAuth2Apis @@ -51,7 +52,8 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { get() = listOf( openSubtitlesApi, addic7ed, - subDlApi + subDlApi, + subSourceApi ) const val appString = "cloudstreamapp" diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt new file mode 100644 index 00000000..0e233ece --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt @@ -0,0 +1,158 @@ +package com.lagradost.cloudstream3.syncproviders.providers + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.TvType +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.subtitles.AbstractSubProvider +import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities +import com.lagradost.cloudstream3.subtitles.SubtitleResource +import com.lagradost.cloudstream3.utils.AppUtils.parseJson +import com.lagradost.cloudstream3.utils.AppUtils.toJson +import com.lagradost.cloudstream3.utils.SubtitleHelper + +class SubSourceApi : AbstractSubProvider { + override val idPrefix = "subsource" + val name = "SubSource" + + companion object { + const val APIURL = "https://api.subsource.net/api" + const val DOWNLOADENDPOINT = "https://api.subsource.net/api/downloadSub" + } + + override suspend fun search(query: AbstractSubtitleEntities.SubtitleSearch): List? { + + //Only supports Imdb Id search for now + if (query.imdbId == null) return null + val queryLang = SubtitleHelper.fromTwoLettersToLanguage(query.lang!!) + val type = if ((query.seasonNumber ?: 0) > 0) TvType.TvSeries else TvType.Movie + + val searchRes = app.post( + url = "$APIURL/searchMovie", + data = mapOf( + "query" to query.imdbId!! + ) + ).parsedSafe() ?: return null + + val postData = if (type == TvType.TvSeries) { + mapOf( + "langs" to "[]", + "movieName" to searchRes.found.first().linkName, + "season" to "season-${query.seasonNumber}" + ) + } else { + mapOf( + "langs" to "[]", + "movieName" to searchRes.found.first().linkName, + ) + } + + val getMovieRes = app.post( + url = "$APIURL/getMovie", + data = postData + ).parsedSafe().let { + // api doesn't has episode number or lang filtering + if (type == TvType.Movie) { + it?.subs?.filter { sub -> + sub.lang == queryLang + } + } else { + it?.subs?.filter { sub -> + sub.releaseName!!.contains( + String.format( + "E%02d", + query.epNumber + ) + ) && sub.lang == queryLang + } + } + } ?: return null + + return getMovieRes.map { subtitle -> + AbstractSubtitleEntities.SubtitleEntity( + idPrefix = this.idPrefix, + name = subtitle.releaseName!!, + lang = subtitle.lang!!, + data = SubData( + movie = subtitle.linkName!!, + lang = subtitle.lang, + id = subtitle.subId.toString(), + ).toJson(), + type = type, + source = this.name, + epNumber = query.epNumber, + seasonNumber = query.seasonNumber, + isHearingImpaired = subtitle.hi == 1, + ) + } + } + + override suspend fun SubtitleResource.getResources(data: AbstractSubtitleEntities.SubtitleEntity) { + + val parsedSub = parseJson(data.data) + + val subRes = app.post( + url = "$APIURL/getSub", + data = mapOf( + "movie" to parsedSub.movie, + "lang" to data.lang, + "id" to parsedSub.id + ) + ).parsedSafe() ?: return + + this.addZipUrl( + "$DOWNLOADENDPOINT/${subRes.sub.downloadToken}" + ) { name, _ -> + name + } + } + + data class ApiSearch( + @JsonProperty("success") val success: Boolean, + @JsonProperty("found") val found: List, + ) + + data class Found( + @JsonProperty("id") val id: Long, + @JsonProperty("title") val title: String, + @JsonProperty("seasons") val seasons: Long, + @JsonProperty("type") val type: String, + @JsonProperty("releaseYear") val releaseYear: Long, + @JsonProperty("linkName") val linkName: String, + ) + + data class ApiResponse( + @JsonProperty("success") val success: Boolean, + @JsonProperty("movie") val movie: Movie, + @JsonProperty("subs") val subs: List, + ) + + data class Movie( + @JsonProperty("id") val id: Long? = null, + @JsonProperty("type") val type: String? = null, + @JsonProperty("year") val year: Long? = null, + @JsonProperty("fullName") val fullName: String? = null, + ) + + data class Sub( + @JsonProperty("hi") val hi: Int? = null, + @JsonProperty("fullLink") val fullLink: String? = null, + @JsonProperty("linkName") val linkName: String? = null, + @JsonProperty("lang") val lang: String? = null, + @JsonProperty("releaseName") val releaseName: String? = null, + @JsonProperty("subId") val subId: Long? = null, + ) + + data class SubData( + @JsonProperty("movie") val movie: String, + @JsonProperty("lang") val lang: String, + @JsonProperty("id") val id: String, + ) + + data class SubTitleLink( + @JsonProperty("sub") val sub: SubToken, + ) + + data class SubToken( + @JsonProperty("downloadToken") val downloadToken: String, + ) +} \ No newline at end of file From 627dd453093f3246afbc606d83fa13284ce16e5e Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Thu, 18 Jul 2024 02:02:35 +0200 Subject: [PATCH 850/888] 0bytes downloads fix --- .../utils/VideoDownloadManager.kt | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index f3cbdaf1..197bacc6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -546,7 +546,8 @@ object VideoDownloadManager { tryResume: Boolean, ): StreamData { return setupStream( - context.getBasePath().first ?: getDefaultDir(context) ?: throw IOException("Bad config"), + context.getBasePath().first ?: getDefaultDir(context) + ?: throw IOException("Bad config"), name, folder, extension, @@ -945,7 +946,7 @@ object VideoDownloadManager { bufferSize: Int = DEFAULT_BUFFER_SIZE, /** how many bytes bytes it should require to use the parallel downloader instead, * if we download a very small file we don't want it parallel */ - maximumSmallSize : Long = chuckSize * 2 + maximumSmallSize: Long = chuckSize * 2 ): LazyStreamDownloadData { // we don't want to make a separate connection for every 1kb require(chuckSize > 1000) @@ -1028,7 +1029,10 @@ object VideoDownloadManager { tryResume: Boolean, parentId: Int?, createNotificationCallback: (CreateNotificationMetadata) -> Unit, - parallelConnections: Int = 3 + parallelConnections: Int = 3, + /** how many bytes a valid file must be in bytes, + * this should be different for subtitles and video */ + minimumSize: Long = 100 ): DownloadStatus = withContext(Dispatchers.IO) { if (parallelConnections < 1) { return@withContext DOWNLOAD_INVALID_INPUT @@ -1074,6 +1078,13 @@ object VideoDownloadManager { ) ) + if (items.totalLength != null && items.totalLength < minimumSize) { + fileStream.closeQuietly() + metadata.onDelete() + stream.delete() + return@withContext DOWNLOAD_INVALID_INPUT + } + metadata.totalBytes = items.totalLength metadata.type = DownloadType.IsDownloading metadata.setDownloadFileInfoTemplate( @@ -1223,6 +1234,16 @@ object VideoDownloadManager { return@withContext DOWNLOAD_STOPPED } + // in case the head request lies about content-size, + // then we don't want shit output + if (metadata.bytesDownloaded < minimumSize) { + // we need to close before delete + fileStream.closeQuietly() + metadata.onDelete() + stream.delete() + return@withContext DOWNLOAD_INVALID_INPUT + } + metadata.type = DownloadType.IsDone return@withContext DOWNLOAD_SUCCESS } catch (e: IOException) { @@ -1274,6 +1295,7 @@ object VideoDownloadManager { val displayName = getDisplayName(name, extension) val stream = setupStream(baseFile, name, folder, extension, startAt > 0) + if (!stream.resume) startAt = 0 fileStream = stream.open() @@ -1300,6 +1322,7 @@ object VideoDownloadManager { ) + if (link.referer.isNotBlank()) mapOf("referer" to link.referer) else emptyMap() ) ) + val items = M3u8Helper2.hslLazy(listOf(m3u8)) metadata.hlsTotal = items.size @@ -1397,7 +1420,7 @@ object VideoDownloadManager { try { // may cause java.lang.IllegalStateException: Mutex is not locked because of cancelling fileMutex.unlock() - } catch (t : Throwable) { + } catch (t: Throwable) { logError(t) } } @@ -1524,7 +1547,7 @@ object VideoDownloadManager { tryResume: Boolean = false, ): DownloadStatus { // no support for these file formats - if(link.type == ExtractorLinkType.MAGNET || link.type == ExtractorLinkType.TORRENT || link.type == ExtractorLinkType.DASH) { + if (link.type == ExtractorLinkType.MAGNET || link.type == ExtractorLinkType.TORRENT || link.type == ExtractorLinkType.DASH) { return DOWNLOAD_INVALID_INPUT } @@ -1556,7 +1579,7 @@ object VideoDownloadManager { } try { - when(link.type) { + when (link.type) { ExtractorLinkType.M3U8 -> { val startIndex = if (tryResume) { context.getKey( @@ -1576,6 +1599,7 @@ object VideoDownloadManager { callback, parallelConnections = maxConcurrentConnections ) } + ExtractorLinkType.VIDEO -> { return downloadThing( context, @@ -1585,9 +1609,13 @@ object VideoDownloadManager { "mp4", tryResume, ep.id, - callback, parallelConnections = maxConcurrentConnections + callback, + parallelConnections = maxConcurrentConnections, + /** We require at least 10 MB video files */ + minimumSize = (1 shl 20) * 10 ) } + else -> throw IllegalArgumentException("unsuported download type") } } catch (t: Throwable) { From 12de92455960f012bb0298723127061b90932327 Mon Sep 17 00:00:00 2001 From: RowdyRushya Date: Fri, 19 Jul 2024 09:10:34 -0700 Subject: [PATCH 851/888] updating vidplay encryption method (#1202) --- .../cloudstream3/extractors/VidSrcTo.kt | 2 +- .../cloudstream3/extractors/Vidplay.kt | 101 ++++++++---------- 2 files changed, 43 insertions(+), 60 deletions(-) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt index 578f5fb9..e974f23a 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcTo.kt @@ -40,7 +40,7 @@ class VidSrcTo : ExtractorApi() { val finalUrl = DecryptUrl(embedRes.result.encUrl) if(finalUrl.equals(embedRes.result.encUrl)) return@amap when (source.title) { - "Vidplay" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) + "F2Cloud" -> AnyVidplay(finalUrl.substringBefore("/e/")).getUrl(finalUrl, referer, subtitleCallback, callback) "Filemoon" -> FileMoon().getUrl(finalUrl, referer, subtitleCallback, callback) } } catch (e: Exception) { diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt index 6202800f..d7e7ce18 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/Vidplay.kt @@ -4,13 +4,14 @@ import com.fasterxml.jackson.annotation.JsonProperty import com.lagradost.cloudstream3.ErrorLoadingException import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.base64Encode +import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +import java.net.URLDecoder import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec -import kotlin.run +import kotlin.io.encoding.Base64 // Code found in https://github.com/KillerDogeEmpire/vidplay-keys // special credits to @KillerDogeEmpire for providing key @@ -33,6 +34,7 @@ class VidplayOnline : Vidplay() { override val mainUrl = "https://vidplay.online" } +@OptIn(kotlin.io.encoding.ExperimentalEncodingApi::class) open class Vidplay : ExtractorApi() { override val name = "Vidplay" override val mainUrl = "https://vidplay.site" @@ -58,83 +60,64 @@ open class Vidplay : ExtractorApi() { } override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit ) { + val myKeys = getKeys() + val domain = url.substringBefore("/e/") val id = url.substringBefore("?").substringAfterLast("/") - val encodeId = encodeId(id, getKeys()) - val mediaUrl = callFutoken(encodeId, url) - val res = app.get( - "$mediaUrl", headers = mapOf( - "Accept" to "application/json, text/javascript, */*; q=0.01", - "X-Requested-With" to "XMLHttpRequest", - ), referer = url - ).parsedSafe()?.result - + val encodedId = encode(id, myKeys.get(0)) + val t = url.substringAfter("t=").substringBefore("&") + val h = encode(id, myKeys.get(1)) + val mediaUrl = "$domain/mediainfo/$encodedId?t=$t&h=$h" + val encodedRes = + app.get("$mediaUrl").parsedSafe()?.result + ?: throw Exception("Unable to fetch link") + val decodedRes = decode(encodedRes, myKeys.get(2)) + val res = tryParseJson(decodedRes) res?.sources?.map { - M3u8Helper.generateM3u8( - this.name, - it.file ?: return@map, - "$mainUrl/" - ).forEach(callback) + M3u8Helper.generateM3u8(this.name, it.file ?: return@map, "$mainUrl/").forEach(callback) } res?.tracks?.filter { it.kind == "captions" }?.map { - subtitleCallback.invoke( - SubtitleFile(it.label ?: return@map, it.file ?: return@map) - ) + subtitleCallback.invoke(SubtitleFile(it.label ?: return@map, it.file ?: return@map)) } - } - private suspend fun callFutoken(id: String, url: String): String? { - val script = app.get("$mainUrl/futoken", referer = url).text - val k = "k='(\\S+)'".toRegex().find(script)?.groupValues?.get(1) ?: return null - val a = mutableListOf(k) - for (i in id.indices) { - a.add((k[i % k.length].code + id[i].code).toString()) - } - return "$mainUrl/mediainfo/${a.joinToString(",")}?${url.substringAfter("?")}" + private fun encode(input: String, key: String): String { + val rc4Key = SecretKeySpec(key.toByteArray(Charsets.UTF_8), "RC4") + val cipher = Cipher.getInstance("RC4") + cipher.init(Cipher.ENCRYPT_MODE, rc4Key) + val encryptedBytes = cipher.doFinal(input.toByteArray(Charsets.UTF_8)) + return Base64.UrlSafe.encode(encryptedBytes) } - private fun encodeId(id: String, keyList: List): String { - val cipher1 = Cipher.getInstance("RC4") - val cipher2 = Cipher.getInstance("RC4") - cipher1.init( - Cipher.DECRYPT_MODE, - SecretKeySpec(keyList[0].toByteArray(), "RC4"), - cipher1.parameters - ) - cipher2.init( - Cipher.DECRYPT_MODE, - SecretKeySpec(keyList[1].toByteArray(), "RC4"), - cipher2.parameters - ) - var input = id.toByteArray() - input = cipher1.doFinal(input) - input = cipher2.doFinal(input) - return base64Encode(input).replace("/", "_") + fun decode(input: String, key: String): String { + val decodedBytes = Base64.UrlSafe.decode(input) + val rc4Key = SecretKeySpec(key.toByteArray(Charsets.UTF_8), "RC4") + val cipher = Cipher.getInstance("RC4") + cipher.init(Cipher.DECRYPT_MODE, rc4Key) + val decryptedBytes = cipher.doFinal(decodedBytes) + val decodedString = String(decryptedBytes, Charsets.UTF_8) + return URLDecoder.decode(decodedString, "UTF-8") } data class Tracks( - @JsonProperty("file") val file: String? = null, - @JsonProperty("label") val label: String? = null, - @JsonProperty("kind") val kind: String? = null, + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + @JsonProperty("kind") val kind: String? = null, ) data class Sources( - @JsonProperty("file") val file: String? = null, + @JsonProperty("file") val file: String? = null, ) data class Result( - @JsonProperty("sources") val sources: ArrayList? = arrayListOf(), - @JsonProperty("tracks") val tracks: ArrayList? = arrayListOf(), - ) - - data class Response( - @JsonProperty("result") val result: Result? = null, + @JsonProperty("sources") val sources: ArrayList? = arrayListOf(), + @JsonProperty("tracks") val tracks: ArrayList? = arrayListOf(), ) + data class Response(@JsonProperty("result") val result: String? = null) } From 63465ed7a9cfb2121eb91015671872f9a14deefd Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:24:06 +0200 Subject: [PATCH 852/888] fix autohide --- .../lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 9 +++++++++ .../lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 1 + 2 files changed, 10 insertions(+) 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 75a861c0..97075136 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 @@ -728,6 +728,15 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private var currentTapIndex = 0 protected fun autoHide() { currentTapIndex++ + delayHide() + } + + override fun playerStatusChanged() { + super.playerStatusChanged() + delayHide() + } + + private fun delayHide() { val index = currentTapIndex playerBinding?.playerHolder?.postDelayed({ if (!isCurrentTouchValid && isShowing && index == currentTapIndex && player.getIsPlaying()) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index d827d31e..f6c78b07 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -158,6 +158,7 @@ class GeneratorPlayer : FullScreenPlayer() { } override fun playerStatusChanged() { + super.playerStatusChanged() if (player.getIsPlaying()) { viewModel.forceClearCache = false } From 073af50f5f09a3ca6b4bc21d0c84ff1bf2264e8f Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:28:36 +0200 Subject: [PATCH 853/888] fixed html plot in preview --- app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 59f499c5..e8cbc4d8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -107,6 +107,7 @@ import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST import com.lagradost.cloudstream3.ui.result.SyncViewModel import com.lagradost.cloudstream3.ui.result.setImage import com.lagradost.cloudstream3.ui.result.setText +import com.lagradost.cloudstream3.ui.result.setTextHtml import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.ui.search.SearchFragment import com.lagradost.cloudstream3.ui.search.SearchResultBuilder @@ -1404,7 +1405,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa resultviewPreviewMetaDuration.setText(d.durationText) resultviewPreviewMetaRating.setText(d.ratingText) - resultviewPreviewDescription.setText(d.plotText) + resultviewPreviewDescription.setTextHtml(d.plotText) resultviewPreviewPoster.setImage( d.posterImage ?: d.posterBackgroundImage ) From bb8144a52ecd4f6518eaca41bebd7cdf2ce31e1d Mon Sep 17 00:00:00 2001 From: KingLucius Date: Fri, 19 Jul 2024 20:35:29 +0300 Subject: [PATCH 854/888] feat(TV UI): Player's Top controls redesign (#1203) --- .../cloudstream3/ui/player/CS3IPlayer.kt | 4 + .../ui/player/FullScreenPlayer.kt | 72 +++++++-- .../cloudstream3/ui/player/GeneratorPlayer.kt | 19 ++- .../cloudstream3/ui/player/IPlayer.kt | 2 + .../res/drawable/ic_baseline_equalizer_24.xml | 9 ++ .../res/drawable/ic_baseline_replay_24.xml | 9 ++ .../res/drawable/ic_baseline_restart_24.xml | 9 ++ .../drawable/ic_baseline_skip_next_24_big.xml | 10 ++ .../ic_baseline_skip_next_rounded_24.xml | 9 ++ .../main/res/layout/fragment_player_tv.xml | 11 +- .../main/res/layout/player_custom_layout.xml | 119 +++++++++++--- .../res/layout/player_custom_layout_tv.xml | 148 ++++++++++++++---- app/src/main/res/layout/subtitle_offset.xml | 31 ++-- .../main/res/layout/trailer_custom_layout.xml | 123 ++++++++++++--- app/src/main/res/values/strings.xml | 1 + 15 files changed, 467 insertions(+), 109 deletions(-) create mode 100644 app/src/main/res/drawable/ic_baseline_equalizer_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_replay_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_restart_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_skip_next_24_big.xml create mode 100644 app/src/main/res/drawable/ic_baseline_skip_next_rounded_24.xml 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 8e322f73..735e4095 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 @@ -912,7 +912,11 @@ class CS3IPlayer : IPlayer { } CSPlayerEvent.SeekForward -> seekTime(seekActionTime, source) + CSPlayerEvent.SeekBack -> seekTime(-seekActionTime, source) + + CSPlayerEvent.Restart -> seekTo(0, source) + CSPlayerEvent.NextEpisode -> event( EpisodeSeekEvent( offset = 1, 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 97075136..a75b9899 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 @@ -14,7 +14,13 @@ import android.os.Bundle import android.provider.Settings import android.text.Editable import android.text.format.DateUtils -import android.view.* +import android.view.KeyEvent +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.Surface +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES import android.view.animation.AlphaAnimation import android.view.animation.Animation @@ -58,7 +64,11 @@ import com.lagradost.cloudstream3.utils.UIHelper.showSystemUI import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.UserPreferenceDelegate import com.lagradost.cloudstream3.utils.Vector2 -import kotlin.math.* +import kotlin.math.abs +import kotlin.math.ceil +import kotlin.math.max +import kotlin.math.min +import kotlin.math.round const val MINIMUM_SEEK_TIME = 7000L // when swipe seeking const val MINIMUM_VERTICAL_SWIPE = 2.0f // in percentage @@ -77,7 +87,8 @@ open class FullScreenPlayer : AbstractPlayerFragment() { protected open var isFullScreenPlayer = true protected var playerBinding: PlayerCustomLayoutBinding? = null - private var durationMode : Boolean by UserPreferenceDelegate("duration_mode", false) + private var durationMode: Boolean by UserPreferenceDelegate("duration_mode", false) + // state of player UI protected var isShowing = false protected var isLocked = false @@ -243,7 +254,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() { val playerSourceMove = if (isShowing) 0f else -50.toPx.toFloat() - playerBinding?.apply { playerOpenSource.let { ObjectAnimator.ofFloat(it, "translationY", playerSourceMove).apply { @@ -284,7 +294,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { player.getCurrentPreferredSubtitle() == null } - private fun restoreOrientationWithSensor(activity: Activity){ + private fun restoreOrientationWithSensor(activity: Activity) { val currentOrientation = activity.resources.configuration.orientation var orientation = 0 when (currentOrientation) { @@ -300,7 +310,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { activity.requestedOrientation = orientation } - private fun toggleOrientationWithSensor(activity: Activity){ + private fun toggleOrientationWithSensor(activity: Activity) { val currentOrientation = activity.resources.configuration.orientation var orientation = 0 when (currentOrientation) { @@ -345,12 +355,11 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private fun updateOrientation(ignoreDynamicOrientation: Boolean = false) { activity?.apply { - if(lockRotation) { - if(isLocked) { + if (lockRotation) { + if (isLocked) { lockOrientation(this) - } - else { - if(ignoreDynamicOrientation){ + } else { + if (ignoreDynamicOrientation) { // restore when lock is disabled restoreOrientationWithSensor(this) } else { @@ -958,7 +967,10 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } else -> { - player.handleEvent(CSPlayerEvent.PlayPauseToggle, PlayerEventSource.UI) + player.handleEvent( + CSPlayerEvent.PlayPauseToggle, + PlayerEventSource.UI + ) } } } else if (doubleTapEnabled && isFullScreenPlayer) { @@ -1234,6 +1246,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { // if nothing has loaded these buttons should not be visible playerBinding?.apply { playerSkipEpisode.isVisible = false + playerGoForward.isVisible = false playerTracksBtt.isVisible = false playerSkipOp.isVisible = false shadowOverlay.isVisible = false @@ -1307,6 +1320,10 @@ open class FullScreenPlayer : AbstractPlayerFragment() { player.handleEvent(CSPlayerEvent.SeekBack) } + PlayerEventType.Restart -> { + player.handleEvent(CSPlayerEvent.Restart) + } + PlayerEventType.ToggleMute -> { player.handleEvent(CSPlayerEvent.ToggleMute) } @@ -1428,6 +1445,25 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } playerBinding?.apply { + + if (isLayout(TV or EMULATOR)) { + mapOf( + playerGoBack to playerGoBackText, + playerRestart to playerRestartText, + playerGoForward to playerGoForwardText + ).forEach { (button, text) -> + button.setOnFocusChangeListener { _, hasFocus -> + if (!hasFocus) { + text.isSelected = false + text.isVisible = false + return@setOnFocusChangeListener + } + text.isSelected = true + text.isVisible = true + } + } + } + playerPausePlay.setOnClickListener { autoHide() player.handleEvent(CSPlayerEvent.PlayPauseToggle) @@ -1471,6 +1507,16 @@ open class FullScreenPlayer : AbstractPlayerFragment() { player.handleEvent(CSPlayerEvent.NextEpisode) } + playerGoForward.setOnClickListener { + autoHide() + player.handleEvent(CSPlayerEvent.NextEpisode) + } + + playerRestart.setOnClickListener { + autoHide() + player.handleEvent(CSPlayerEvent.Restart) + } + playerLock.setOnClickListener { autoHide() toggleLock() @@ -1564,7 +1610,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private fun setRemainingTimeCounter(showRemaining: Boolean) { durationMode = showRemaining - playerBinding?.exoDuration?.isInvisible= showRemaining + playerBinding?.exoDuration?.isInvisible = showRemaining playerBinding?.timeLeft?.isVisible = showRemaining } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index f6c78b07..1f7cc5bd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -44,6 +44,7 @@ import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.ui.player.source_priority.QualityProfileDialog import com.lagradost.cloudstream3.ui.result.* import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR +import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.subtitles.SUBTITLE_AUTO_SELECT_KEY @@ -1097,8 +1098,15 @@ class GeneratorPlayer : FullScreenPlayer() { } playerBinding?.playerSkipOp?.isVisible = isOpVisible - playerBinding?.playerSkipEpisode?.isVisible = - !isOpVisible && viewModel.hasNextEpisode() == true + + when { + isLayout(PHONE) -> + playerBinding?.playerSkipEpisode?.isVisible = + !isOpVisible && viewModel.hasNextEpisode() == true + + else -> + playerBinding?.playerGoForward?.isVisible = viewModel.hasNextEpisode() == true + } if (percentage >= PRELOAD_NEXT_EPISODE_PERCENTAGE) { viewModel.preLoadNextLinks() @@ -1254,7 +1262,7 @@ class GeneratorPlayer : FullScreenPlayer() { fun setPlayerDimen(widthHeight: Pair?) { val extra = if (widthHeight != null) { val (width, height) = widthHeight - "${width}x${height}" + "- ${width}x${height}" } else { "" } @@ -1265,7 +1273,7 @@ class GeneratorPlayer : FullScreenPlayer() { 0 -> "" 1 -> extra 2 -> source - 3 -> "$source - $extra" + 3 -> "$source $extra" else -> "" } playerBinding?.playerVideoTitleRez?.apply { @@ -1290,7 +1298,8 @@ class GeneratorPlayer : FullScreenPlayer() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // this is used instead of layout-television to follow the settings and some TV devices are not classified as TV for some reason - layout = if (isLayout(TV or EMULATOR)) R.layout.fragment_player_tv else R.layout.fragment_player + layout = + if (isLayout(TV or EMULATOR)) R.layout.fragment_player_tv else R.layout.fragment_player viewModel = ViewModelProvider(this)[PlayerGeneratorViewModel::class.java] sync = ViewModelProvider(this)[SyncViewModel::class.java] diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index 4bd5c769..5f7161f7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -26,6 +26,7 @@ enum class PlayerEventType(val value: Int) { Resize(13), SearchSubtitlesOnline(14), SkipOp(15), + Restart(16), } enum class CSPlayerEvent(val value: Int) { @@ -39,6 +40,7 @@ enum class CSPlayerEvent(val value: Int) { PrevEpisode(6), PlayPauseToggle(7), ToggleMute(8), + Restart(9), } enum class CSPlayerLoading { diff --git a/app/src/main/res/drawable/ic_baseline_equalizer_24.xml b/app/src/main/res/drawable/ic_baseline_equalizer_24.xml new file mode 100644 index 00000000..cd20ad15 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_equalizer_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_replay_24.xml b/app/src/main/res/drawable/ic_baseline_replay_24.xml new file mode 100644 index 00000000..e247aa92 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_replay_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_restart_24.xml b/app/src/main/res/drawable/ic_baseline_restart_24.xml new file mode 100644 index 00000000..aed3a562 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_restart_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_skip_next_24_big.xml b/app/src/main/res/drawable/ic_baseline_skip_next_24_big.xml new file mode 100644 index 00000000..a8c43bbd --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_skip_next_24_big.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_skip_next_rounded_24.xml b/app/src/main/res/drawable/ic_baseline_skip_next_rounded_24.xml new file mode 100644 index 00000000..452c4dd9 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_skip_next_rounded_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_player_tv.xml b/app/src/main/res/layout/fragment_player_tv.xml index 07cbb3c3..3c0ac05e 100644 --- a/app/src/main/res/layout/fragment_player_tv.xml +++ b/app/src/main/res/layout/fragment_player_tv.xml @@ -68,7 +68,9 @@ android:layout_height="wrap_content" android:layout_margin="5dp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> + app:layout_constraintTop_toTopOf="parent" + android:visibility="gone" + tools:visibility="visible"> diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 83be8832..be97b978 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -172,27 +172,108 @@ android:id="@+id/player_go_back_holder" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="5dp" + android:layout_margin="20dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + + + + + + + + + + - @@ -626,7 +707,7 @@ android:nextFocusLeft="@id/player_sources_btt" android:nextFocusRight="@id/player_skip_op" android:text="@string/tracks" - app:icon="@drawable/ic_baseline_playlist_play_24" /> + app:icon="@drawable/ic_baseline_equalizer_24" /> + diff --git a/app/src/main/res/layout/player_custom_layout_tv.xml b/app/src/main/res/layout/player_custom_layout_tv.xml index d8406b35..98eb58ac 100644 --- a/app/src/main/res/layout/player_custom_layout_tv.xml +++ b/app/src/main/res/layout/player_custom_layout_tv.xml @@ -231,7 +231,7 @@ @@ -240,6 +240,7 @@ android:id="@+id/player_video_title" android:layout_width="match_parent" android:layout_height="wrap_content" + android:textAlignment="viewEnd" android:gravity="end" android:textColor="@color/white" android:textSize="16sp" @@ -250,6 +251,7 @@ android:id="@+id/player_video_title_rez" android:layout_width="match_parent" android:layout_height="wrap_content" + android:textAlignment="viewEnd" android:gravity="end" android:textColor="@color/white" android:textSize="16sp" @@ -285,28 +287,116 @@ android:id="@+id/player_go_back_holder" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="5dp" + android:layout_marginStart="17dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="17dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + + + + + + + + + + - @@ -509,6 +599,7 @@ android:layout_height="wrap_content" android:layoutDirection="ltr" android:orientation="horizontal"> + + app:layout_constraintStart_toStartOf="parent" + app:tint="@color/player_button_tv" + tools:ignore="ContentDescription" /> + tools:text="-23:20" /> @@ -672,12 +763,13 @@ android:id="@+id/player_skip_episode" style="@style/VideoButtonTV" android:nextFocusLeft="@id/player_skip_op" - android:nextFocusRight="@id/player_resize_btt" android:nextFocusUp="@id/player_pause_play" android:nextFocusDown="@id/player_resize_btt" android:text="@string/next_episode" - app:icon="@drawable/ic_baseline_skip_next_24" /> + app:icon="@drawable/ic_baseline_skip_next_24" + android:visibility="gone" + tools:visibility="visible"/> + app:icon="@drawable/ic_baseline_equalizer_24" /> diff --git a/app/src/main/res/layout/subtitle_offset.xml b/app/src/main/res/layout/subtitle_offset.xml index d5e303b6..82c24e61 100644 --- a/app/src/main/res/layout/subtitle_offset.xml +++ b/app/src/main/res/layout/subtitle_offset.xml @@ -30,28 +30,27 @@ @@ -67,29 +66,29 @@ diff --git a/app/src/main/res/layout/trailer_custom_layout.xml b/app/src/main/res/layout/trailer_custom_layout.xml index 59104ca7..20b73630 100644 --- a/app/src/main/res/layout/trailer_custom_layout.xml +++ b/app/src/main/res/layout/trailer_custom_layout.xml @@ -137,33 +137,110 @@ - + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e3f788f..e68c22b9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -96,6 +96,7 @@ Next Random @string/play_episode Go back + Play from the Beginning @string/home_change_provider_img_des Change Provider Preview Background From 4c7379c766837ffc11c62d4fa2c4e7aaa8afd5fc Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Sat, 20 Jul 2024 19:14:11 +0200 Subject: [PATCH 855/888] Revert #979 Episode download cache --- .../main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 1d23e503..802c1a64 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -67,8 +67,6 @@ object BackupUtils { OPEN_SUBTITLES_USER_KEY, SUBDL_SUBTITLES_USER_KEY, - DOWNLOAD_EPISODE_CACHE, - "biometric_key", // can lock down users if backup is shared on a incompatible device "nginx_user", // Nginx user key "download_path_key" // No access rights after restore data from backup @@ -266,4 +264,4 @@ object BackupUtils { } editor.apply() } -} \ No newline at end of file +} From 0c418fdf9bd41f6a94e9a8063c48bc4acd44ffb1 Mon Sep 17 00:00:00 2001 From: RowdyRushya Date: Sat, 20 Jul 2024 15:06:04 -0700 Subject: [PATCH 856/888] Updated VidSrc encryption methods (#1205) --- .../extractors/VidSrcExtractor.kt | 301 +++++++++++++----- 1 file changed, 227 insertions(+), 74 deletions(-) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt index a27bf188..5da919e2 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidSrcExtractor.kt @@ -3,98 +3,251 @@ package com.lagradost.cloudstream3.extractors import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.* -import kotlinx.coroutines.delay -import java.net.URI +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.loadExtractor +import java.util.Base64 class VidSrcExtractor2 : VidSrcExtractor() { - override val mainUrl = "https://vidsrc.me/embed" - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val newUrl = url.lowercase().replace(mainUrl, super.mainUrl) - super.getUrl(newUrl, referer, subtitleCallback, callback) - } + override val mainUrl = "https://vidsrc.me" } open class VidSrcExtractor : ExtractorApi() { override val name = "VidSrc" - private val absoluteUrl = "https://v2.vidsrc.me" - override val mainUrl = "$absoluteUrl/embed" + override val mainUrl = "https://vidsrc.net" + private val apiUrl = "https://vidsrc.stream" 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?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit ) { val iframedoc = app.get(url).document - val serverslist = - iframedoc.select("div#sources.button_content div#content div#list div").map { - val datahash = it.attr("data-hash") - if (datahash.isNotBlank()) { - val links = try { - app.get( - "$absoluteUrl/srcrcp/$datahash", - referer = "https://rcp.vidsrc.me/" - ).url - } catch (e: Exception) { - "" - } - links - } else "" - } + val srcrcpList = + iframedoc.select("div.serversList > div.server").mapNotNull { + val datahash = it.attr("data-hash") ?: return@mapNotNull null + val rcpLink = "$apiUrl/rcp/$datahash" + val rcpRes = app.get(rcpLink, referer = apiUrl).text + val srcrcpLink = + Regex("src:\\s*'(.*)',").find(rcpRes)?.destructured?.component1() + ?: return@mapNotNull null + "https:$srcrcpLink" + } - serverslist.amap { server -> - val linkfixed = server.replace("https://vidsrc.xyz/", "https://embedsito.com/") - if (linkfixed.contains("/prorcp")) { - val srcresponse = app.get(server, referer = absoluteUrl).text - val m3u8Regex = Regex("((https:|http:)//.*\\.m3u8)") - val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@amap - val passRegex = Regex("""['"](.*set_pass[^"']*)""") - val pass = passRegex.find(srcresponse)?.groupValues?.get(1)?.replace( - Regex("""^//"""), "https://" - ) + srcrcpList.amap { server -> + val res = app.get(server, referer = apiUrl) + if (res.url.contains("/prorcp")) { + val encodedElement = res.document.select("div#reporting_content+div") + val decodedUrl = + decodeUrl(encodedElement.attr("id"), encodedElement.text()) ?: return@amap callback.invoke( - ExtractorLink( - this.name, - this.name, - srcm3u8, - "https://vidsrc.stream/", - Qualities.Unknown.value, - extractorData = pass, - isM3u8 = true - ) + ExtractorLink( + this.name, + this.name, + decodedUrl, + apiUrl, + Qualities.Unknown.value, + isM3u8 = true + ) ) } else { - loadExtractor(linkfixed, url, subtitleCallback, callback) + loadExtractor(res.url, url, subtitleCallback, callback) } } } -} \ No newline at end of file + private fun decodeUrl(encType: String, url: String): String? { + return when (encType) { + "NdonQLf1Tzyx7bMG" -> bMGyx71TzQLfdonN(url) + "sXnL9MQIry" -> Iry9MQXnLs(url) + "IhWrImMIGL" -> IGLImMhWrI(url) + "xTyBxQyGTA" -> GTAxQyTyBx(url) + "ux8qjPHC66" -> C66jPHx8qu(url) + "eSfH1IRMyL" -> MyL1IRSfHe(url) + "KJHidj7det" -> detdj7JHiK(url) + "o2VSUnjnZl" -> nZlUnj2VSo(url) + "Oi3v1dAlaM" -> laM1dAi3vO(url) + "TsA2KGDGux" -> GuxKGDsA2T(url) + "JoAHUMCLXV" -> LXVUMCoAHJ(url) + else -> null + } + } + + private fun bMGyx71TzQLfdonN(a: String): String { + val b = 3 + val c = mutableListOf() + var d = 0 + while (d < a.length) { + c.add(a.substring(d, minOf(d + b, a.length))) + d += b + } + val e = c.reversed().joinToString("") + return e + } + + private fun Iry9MQXnLs(a: String): String { + val b = "pWB9V)[*4I`nJpp?ozyB~dbr9yt!_n4u" + val d = a.chunked(2).map { it.toInt(16).toChar() }.joinToString("") + var c = "" + for (e in d.indices) { + c += (d[e].code xor b[e % b.length].code).toChar() + } + var e = "" + for (ch in c) { + e += (ch.code - 3).toChar() + } + return String(Base64.getDecoder().decode(e)) + } + + private fun IGLImMhWrI(a: String): String { + val b = a.reversed() + val c = + b + .map { + when (it) { + in 'a'..'m', in 'A'..'M' -> it + 13 + in 'n'..'z', in 'N'..'Z' -> it - 13 + else -> it + } + } + .joinToString("") + val d = c.reversed() + return String(Base64.getDecoder().decode(d)) + } + + private fun GTAxQyTyBx(a: String): String { + val b = a.reversed() + val c = b.filterIndexed { index, _ -> index % 2 == 0 } + return String(Base64.getDecoder().decode(c)) + } + + private fun C66jPHx8qu(a: String): String { + val b = a.reversed() + val c = "X9a(O;FMV2-7VO5x;Ao:dN1NoFs?j," + val d = b.chunked(2).map { it.toInt(16).toChar() }.joinToString("") + var e = "" + for (i in d.indices) { + e += (d[i].code xor c[i % c.length].code).toChar() + } + return e + } + + private fun MyL1IRSfHe(a: String): String { + val b = a.reversed() + val c = b.map { (it.code - 1).toChar() }.joinToString("") + val d = c.chunked(2).map { it.toInt(16).toChar() }.joinToString("") + return d + } + + private fun detdj7JHiK(a: String): String { + val b = a.substring(10, a.length - 16) + val c = "3SAY~#%Y(V%>5d/Yg\"\$G[Lh1rK4a;7ok" + val d = String(Base64.getDecoder().decode(b)) + val e = c.repeat((d.length + c.length - 1) / c.length).substring(0, d.length) + var f = "" + for (i in d.indices) { + f += (d[i].code xor e[i].code).toChar() + } + return f + } + + private fun nZlUnj2VSo(a: String): String { + val b = + mapOf( + 'x' to 'a', + 'y' to 'b', + 'z' to 'c', + 'a' to 'd', + 'b' to 'e', + 'c' to 'f', + 'd' to 'g', + 'e' to 'h', + 'f' to 'i', + 'g' to 'j', + 'h' to 'k', + 'i' to 'l', + 'j' to 'm', + 'k' to 'n', + 'l' to 'o', + 'm' to 'p', + 'n' to 'q', + 'o' to 'r', + 'p' to 's', + 'q' to 't', + 'r' to 'u', + 's' to 'v', + 't' to 'w', + 'u' to 'x', + 'v' to 'y', + 'w' to 'z', + 'X' to 'A', + 'Y' to 'B', + 'Z' to 'C', + 'A' to 'D', + 'B' to 'E', + 'C' to 'F', + 'D' to 'G', + 'E' to 'H', + 'F' to 'I', + 'G' to 'J', + 'H' to 'K', + 'I' to 'L', + 'J' to 'M', + 'K' to 'N', + 'L' to 'O', + 'M' to 'P', + 'N' to 'Q', + 'O' to 'R', + 'P' to 'S', + 'Q' to 'T', + 'R' to 'U', + 'S' to 'V', + 'T' to 'W', + 'U' to 'X', + 'V' to 'Y', + 'W' to 'Z' + ) + return a.map { b[it] ?: it }.joinToString("") + } + + private fun laM1dAi3vO(a: String): String { + val b = a.reversed() + val c = b.replace("-", "+").replace("_", "/") + val d = String(Base64.getDecoder().decode(c)) + var e = "" + val f = 5 + for (ch in d) { + e += (ch.code - f).toChar() + } + return e + } + + private fun GuxKGDsA2T(a: String): String { + val b = a.reversed() + val c = b.replace("-", "+").replace("_", "/") + val d = String(Base64.getDecoder().decode(c)) + var e = "" + val f = 7 + for (ch in d) { + e += (ch.code - f).toChar() + } + return e + } + + private fun LXVUMCoAHJ(a: String): String { + val b = a.reversed() + val c = b.replace("-", "+").replace("_", "/") + val d = String(Base64.getDecoder().decode(c)) + var e = "" + val f = 3 + for (ch in d) { + e += (ch.code - f).toChar() + } + return e + } +} From c8a863e332d0d952568385f438b2a035cca5b816 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Wed, 24 Jul 2024 22:38:16 +0200 Subject: [PATCH 857/888] Fixed ExampleInstrumentedTest --- .../java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt index faacdf50..c7f02baf 100644 --- a/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/lagradost/cloudstream3/ExampleInstrumentedTest.kt @@ -154,7 +154,7 @@ class ExampleInstrumentedTest { fun providerCorrectHomepage() { runBlocking { getAllProviders().toList().amap { api -> - TestingUtils.testHomepage(api, ::println) + TestingUtils.testHomepage(api, TestingUtils.Logger()) } } println("Done providerCorrectHomepage") @@ -166,7 +166,6 @@ class ExampleInstrumentedTest { TestingUtils.getDeferredProviderTests( this, getAllProviders(), - ::println ) { _, _ -> } } } From dfd127265a066dfec18e797b3b2ddc7bf2ae51ef Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 25 Jul 2024 21:23:31 +0300 Subject: [PATCH 858/888] Trailers Fix (#1213) --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6e439d53..1ad35d89 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -200,7 +200,7 @@ dependencies { // PlayBack implementation("com.jaredrummler:colorpicker:1.1.0") // Subtitle Color Picker implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Custom FF-MPEG Lib for Audio Codecs - implementation("com.github.teamnewpipe:NewPipeExtractor:592f159") /* For Trailers + implementation("com.github.teamnewpipe:NewPipeExtractor:2d36945") /* For Trailers ^ Update to Latest Commits if Trailers Misbehave, github.com/TeamNewPipe/NewPipeExtractor/commits/dev */ implementation("com.github.albfernandez:juniversalchardet:2.5.0") // Subtitle Decoding From e3ff1cf4554bc1bea1333a456c62becb987fd01b Mon Sep 17 00:00:00 2001 From: KingLucius Date: Thu, 25 Jul 2024 21:23:49 +0300 Subject: [PATCH 859/888] feat(UI): Show Episode Runtime (#1207) --- .../metaproviders/TraktProvider.kt | 1 + .../cloudstream3/ui/result/EpisodeAdapter.kt | 15 +++++++-- .../cloudstream3/ui/result/ResultFragment.kt | 3 ++ .../ui/result/ResultViewModel2.kt | 6 ++-- .../main/res/layout/result_episode_large.xml | 30 +++++++++++++---- .../com/lagradost/cloudstream3/MainAPI.kt | 32 +++++++++++++++++-- 6 files changed, 75 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index 7c375e0a..a1b9ff34 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -236,6 +236,7 @@ open class TraktProvider : MainAPI() { posterUrl = fixPath(episode.images?.screenshot?.firstOrNull()), rating = episode.rating?.times(10)?.roundToInt(), description = episode.overview, + runTime = episode.runtime ).apply { this.addDate(episode.firstAired, "yyyy-MM-dd'T'HH:mm:ss.SSSXXX") if (nextAir == null && this.date != null && this.date!! > unixTimeMS && this.season != 0) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index ed5e51f1..06be6bd5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -27,7 +27,8 @@ import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.VideoDownloadHelper import java.text.DateFormat import java.text.SimpleDateFormat -import java.util.* +import java.util.Date +import java.util.Locale const val ACTION_PLAY_EPISODE_IN_PLAYER = 1 const val ACTION_PLAY_EPISODE_IN_VLC_PLAYER = 2 @@ -58,6 +59,7 @@ const val ACTION_MARK_AS_WATCHED = 18 const val ACTION_FCAST = 19 const val TV_EP_SIZE = 400 + data class EpisodeClickEvent(val action: Int, val data: ResultEpisode) class EpisodeAdapter( @@ -274,7 +276,10 @@ class EpisodeAdapter( episodeDate.setText( txt( R.string.episode_upcoming_format, - secondsToReadable(card.airDate.minus(unixTimeMS).div(1000).toInt(), "") + secondsToReadable( + card.airDate.minus(unixTimeMS).div(1000).toInt(), + "" + ) ) ) } else { @@ -292,6 +297,12 @@ class EpisodeAdapter( episodeDate.isVisible = false } + episodeRuntime.setText( + txt( + card.runTime?.times(60L)?.toInt()?.let { secondsToReadable(it, "") } + ) + ) + if (isLayout(EMULATOR or PHONE)) { episodePoster.setOnClickListener { clickCallback.invoke(EpisodeClickEvent(ACTION_CLICK_DEFAULT, card)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index c687eaa0..3eab0c71 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -51,6 +51,7 @@ data class ResultEpisode( /** Sum of all previous season episode counts + episode */ val totalEpisodeIndex: Int? = null, val airDate: Long? = null, + val runTime: Int? = null, ) fun ResultEpisode.getRealPosition(): Long { @@ -87,6 +88,7 @@ fun buildResultEpisode( parentId: Int, totalEpisodeIndex: Int? = null, airDate: Long? = null, + runTime: Int? = null, ): ResultEpisode { val posDur = getViewPos(id) val videoWatchState = getVideoWatchState(id) ?: VideoWatchState.None @@ -111,6 +113,7 @@ fun buildResultEpisode( videoWatchState, totalEpisodeIndex, airDate, + runTime, ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 8e8dfe30..5086426f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -2371,7 +2371,8 @@ class ResultViewModel2 : ViewModel() { loadResponse.type, mainId, totalIndex, - airDate = i.date + airDate = i.date, + runTime = i.runTime, ) val season = eps.seasonIndex ?: 0 @@ -2426,7 +2427,8 @@ class ResultViewModel2 : ViewModel() { loadResponse.type, mainId, totalIndex, - airDate = episode.date + airDate = episode.date, + runTime = episode.runTime, ) val season = ep.seasonIndex ?: 0 diff --git a/app/src/main/res/layout/result_episode_large.xml b/app/src/main/res/layout/result_episode_large.xml index e5a6881a..935beac1 100644 --- a/app/src/main/res/layout/result_episode_large.xml +++ b/app/src/main/res/layout/result_episode_large.xml @@ -44,7 +44,7 @@ android:nextFocusRight="@id/download_button" android:scaleType="centerCrop" tools:src="@drawable/example_poster" - tools:visibility="invisible"/> + tools:visibility="invisible" /> + tools:visibility="invisible" /> - + android:layout_gravity="start" + android:orientation="horizontal"> + + + + + + + Date: Thu, 25 Jul 2024 20:25:17 +0200 Subject: [PATCH 860/888] Add the option to hide video controls (#1210) --- .../ui/player/FullScreenPlayer.kt | 25 +++++++++++++++++++ .../ui/settings/SettingsPlayer.kt | 6 ++--- app/src/main/res/values-af/strings.xml | 1 + app/src/main/res/values-ajp/strings.xml | 1 + app/src/main/res/values-am/strings.xml | 1 + app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-ars/strings.xml | 1 + app/src/main/res/values-as/strings.xml | 1 + app/src/main/res/values-bg/strings.xml | 1 + app/src/main/res/values-bn/strings.xml | 1 + app/src/main/res/values-bp/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-el/strings.xml | 1 + app/src/main/res/values-eo/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fa/strings.xml | 1 + app/src/main/res/values-fil/strings.xml | 4 ++- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-gl/strings.xml | 1 + app/src/main/res/values-hi/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-in/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-kn/strings.xml | 1 + app/src/main/res/values-ko/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-lv/strings.xml | 1 + app/src/main/res/values-mk/strings.xml | 1 + app/src/main/res/values-ml/strings.xml | 1 + app/src/main/res/values-ms/strings.xml | 1 + app/src/main/res/values-mt/strings.xml | 1 + app/src/main/res/values-my/strings.xml | 1 + app/src/main/res/values-ne/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-nn/strings.xml | 1 + app/src/main/res/values-no/strings.xml | 1 + app/src/main/res/values-or/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-qt/strings.xml | 1 + app/src/main/res/values-ro/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values-so/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-ta/strings.xml | 1 + app/src/main/res/values-ti/strings.xml | 1 + app/src/main/res/values-tl/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-ur/strings.xml | 1 + app/src/main/res/values-vi/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/settings_player.xml | 6 +++++ 60 files changed, 93 insertions(+), 5 deletions(-) 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 a75b9899..ef7d6bc1 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 @@ -25,15 +25,18 @@ import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHO import android.view.animation.AlphaAnimation import android.view.animation.Animation import android.view.animation.AnimationUtils +import android.widget.LinearLayout import androidx.appcompat.app.AlertDialog import androidx.core.graphics.blue import androidx.core.graphics.green import androidx.core.graphics.red +import androidx.core.view.children import androidx.core.view.isGone import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.preference.PreferenceManager +import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.CommonActivity.keyEventListener import com.lagradost.cloudstream3.CommonActivity.playerEventListener import com.lagradost.cloudstream3.CommonActivity.screenHeight @@ -120,6 +123,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { protected var doubleTapPauseEnabled = true protected var playerRotateEnabled = false protected var autoPlayerRotateEnabled = false + private var hideControlsNames = false protected var subtitleDelay set(value) = try { @@ -1419,6 +1423,8 @@ open class FullScreenPlayer : AbstractPlayerFragment() { false ) + hideControlsNames = settingsManager.getBoolean(ctx.getString(R.string.hide_player_control_names_key), false) + val profiles = QualityDataHelper.getProfiles() val type = if (ctx.isUsingMobileData()) QualityDataHelper.QualityProfileType.Data @@ -1439,6 +1445,9 @@ open class FullScreenPlayer : AbstractPlayerFragment() { playerSpeedBtt.isVisible = playBackSpeedEnabled playerResizeBtt.isVisible = playerResizeEnabled playerRotateBtt.isVisible = playerRotateEnabled + if (hideControlsNames) { + hideControlsNames() + } } } catch (e: Exception) { logError(e) @@ -1591,6 +1600,22 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } } + private fun PlayerCustomLayoutBinding.hideControlsNames() { + fun iterate(layout: LinearLayout) { + layout.children.forEach { + if (it is MaterialButton) { + it.textSize = 0f + it.iconPadding = 0 + it.iconGravity = MaterialButton.ICON_GRAVITY_TEXT_START + it.setPadding(0,0,0,0) + } else if (it is LinearLayout) { + iterate(it) + } + } + } + iterate(playerLockHolder.parent as LinearLayout) + } + override fun playerDimensionsLoaded(width: Int, height: Int) { isVerticalOrientation = height > width updateOrientation() 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 20279cd1..7560d75f 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 @@ -87,10 +87,6 @@ class SettingsPlayer : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } - /*(getPref(R.string.double_tap_seek_time_key) as? SeekBarPreference?)?.let { - - }*/ - getPref(R.string.prefer_limit_title_rez_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.limit_title_rez_pref_names) val prefValues = resources.getIntArray(R.array.limit_title_rez_pref_values) @@ -109,6 +105,8 @@ class SettingsPlayer : PreferenceFragmentCompat() { return@setOnPreferenceClickListener true } + getPref(R.string.hide_player_control_names_key)?.hideOn(TV) + getPref(R.string.quality_pref_key)?.setOnPreferenceClickListener { val prefValues = Qualities.values().map { it.value }.reversed().toMutableList() prefValues.remove(Qualities.Unknown.value) diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 45e9a1d4..4adafee4 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -106,4 +106,5 @@ Voer lettertipes in deur dit in %s te plaas Rolverdeling: %s Nuwe episode notifikasie + hide_player_control_names_key diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml index c78b6924..718b5235 100644 --- a/app/src/main/res/values-ajp/strings.xml +++ b/app/src/main/res/values-ajp/strings.xml @@ -640,4 +640,5 @@ تجاهل متاح الريپوزيتوري فتاح %s ع تلفونك أو كمپيوترك، وحط الكود اللي فوق + hide_player_control_names_key diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index 7fd3274b..26fb84dd 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -108,4 +108,5 @@ ተጨማሪ መረጃ ዓይነቶችን በመጠቀም ይፈልጉ ቅርጸ-ቁምፊዎችን በ%s ውስጥ በማስቀመጥ ያጫኑ + hide_player_control_names_key diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index c2ed35cb..e85fee04 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -666,4 +666,5 @@ قم بزيارة %s على هاتفك الذكي أو جهاز الكمبيوتر وأدخل الرمز أعلاه لا يمكن الحصول على رمز PIN للجهاز، حاول المصادقة المحلية تنتهي صلاحية الرمز خلال %1$dm %2$ds + hide_player_control_names_key diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml index f3811d3d..f028ef5d 100644 --- a/app/src/main/res/values-ars/strings.xml +++ b/app/src/main/res/values-ars/strings.xml @@ -352,4 +352,5 @@ وثائقي موقع عنوان مشغل الفيديو بحد أقصى لعدد الأحرف + hide_player_control_names_key diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml index 7fb0e7bd..dd1b2eed 100644 --- a/app/src/main/res/values-as/strings.xml +++ b/app/src/main/res/values-as/strings.xml @@ -621,4 +621,5 @@ ছাবটাইটেল বাছনি কৰক পৰ্ব খেলাওক প্ৰয়োগ কৰক + hide_player_control_names_key diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 66e29882..89801322 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -601,4 +601,5 @@ Покажи предложения Добавя опция за промяна на скоростта в плеъра Този тест е направен за програмисти и не проверява работата на никакви добавки. + hide_player_control_names_key diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 3500e85a..1a02eebc 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -359,4 +359,5 @@ অ্যাকাউন্ট প্রস্থান %1$d%2$s + hide_player_control_names_key diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 6dc38cd8..51138312 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -656,4 +656,5 @@ Não é possível obter o código PIN do dispositivo, tente a autenticação local O código PIN expirou! O código expira em %1$dm %2$ds + hide_player_control_names_key diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 8e40b12b..2f7dcfed 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -658,4 +658,5 @@ Účty Lokální ověření PIN kód vypršel! + hide_player_control_names_key diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ee378ff6..12a68dbc 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -615,4 +615,5 @@ Zurücksetzen Akkuverbrauch der App ist bereits auf unbeschränkt eingestellt CloudStreams App-Info kann nicht geöffnet werden. + hide_player_control_names_key diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e7fa1f6a..269626cb 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -625,4 +625,5 @@ Τα δεδομένα σας στο CloudStream έχουν κάνει back up. Αν και η πιθανότητα είναι πολύ χαμηλή, όλες οι συσκευές συμπεριφέρονται διαφορετικά. Στη σπάνια περίπτωση, που απαγορευτεί η πρόσβασή σας από την εφαρμογή, διαγράψτε τα δεδομένα εφαρμογής και επαναφέρετέ τα από ένα ήδη υπάρχον backup. Συγνώμη για οποιαδήποτε ταλαιπωρία. Λογαριασμοί Ασφάλεια + hide_player_control_names_key diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 275a4bfb..9d3d07bc 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -127,4 +127,5 @@ Elŝutite Elŝutante Elŝuto Malsukcesite + hide_player_control_names_key diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 82f29381..bd281b55 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -634,4 +634,5 @@ ¡El código PIN ya ha caducado! El código caduca en %1$d mín y %2$d s No puedo obtener el código PIN del dispositivo; intente con la autenticación local + hide_player_control_names_key diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index db432a61..86dee8ef 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -191,4 +191,5 @@ پیش‌فرض کارتون تورنت + hide_player_control_names_key diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 42eba3cc..2189dd75 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -1,2 +1,4 @@ - + + hide_player_control_names_key + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index fa1e1b61..78f3f2a5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -620,4 +620,5 @@ Verrouillage biométrique Sélectionnez un appareil de diffusion Saison %1$d Episode %2$d sera publié dans + hide_player_control_names_key diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index ae3105cf..d04792f8 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -164,4 +164,5 @@ Selecciona o modo para filtrar a descarga dos complementos Instala automáticamente todos os complementos aínda non instalados dos repositorios engadidos. Mostrar actualizacións da aplicación + hide_player_control_names_key diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index e08a3b8b..bd50953c 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -209,4 +209,5 @@ रूपरेखा रंग उपशीर्षक ऊंचाई अक्षर शैली + hide_player_control_names_key diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 54448e58..90dbee79 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -651,4 +651,5 @@ CloudStream Wiki Računi Sigurnost + hide_player_control_names_key diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index ebaff041..72213b02 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -592,4 +592,5 @@ A PIN 4 karakter hosszú kell legyen Auto elforgatás Az automatikus videó orientáció alapján való képernyő elforgatás bekapcsolása + hide_player_control_names_key diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 951ba417..0edae603 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -647,4 +647,5 @@ CloudStream Wiki Keamanan Akun + hide_player_control_names_key diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ff7ea6bd..8671a73a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -654,4 +654,5 @@ Impossibile ottenere il codice PIN del dispositivo, prova l\'autenticazione locale Il codice PIN è scaduto! Il codice scadrà tra %1$dm %2$ds + hide_player_control_names_key diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 22626f50..1f34f0e1 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -550,4 +550,5 @@ \nיגרמו לעדיפות הסרטון להיות 10. \n \nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען! + hide_player_control_names_key diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index acb2cfc3..fb2ca02d 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -242,4 +242,5 @@ 現在のエピソードが終了したら次のエピソードを開始する 長押しするとデフォルトにリセットされます ダウンロードを再開 + hide_player_control_names_key diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index f3fb665d..75f62bcc 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -130,4 +130,5 @@ Brightness ಅಥವಾ volume ಬದಲಾಯಿಸಲು ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ ಈಗಿನ ಎಪಿಸೋಡ್ ಮುಗಿದಾಗ ಮುಂದಿನ ಎಪಿಸೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ + hide_player_control_names_key diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index bda82057..ec570e69 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -634,4 +634,5 @@ %s의 PIN 입력 즐겨찾기에서 제거 캐스트미러 + hide_player_control_names_key diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index f61bcfc0..0cb3addf 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -260,4 +260,5 @@ Ar tikrai norite išeiti\? Pašalinti iš žiūrimų Garso takelis + hide_player_control_names_key diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 566c721d..96272e71 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -527,4 +527,5 @@ Abonēto šovu atjaunināšana Abonēts Abonēts %s + hide_player_control_names_key diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 5e4d5c06..d4023ec4 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -624,4 +624,5 @@ Грешка при пристапот до таблата со исечоци, обидете се повторно. Грешка при копирање, копирајте го logcat и контактирајте со поддршката за апликацијата. Аудио книга + hide_player_control_names_key diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index d97e666c..213d4a00 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -280,4 +280,5 @@ എഡ്ജ് തരം ഔട്ട്ലൈൻ നിറം പശ്ചാത്തല നിറം + hide_player_control_names_key diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index dca98e53..aae74f4e 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -57,4 +57,5 @@ Tutup Ep cuba + hide_player_control_names_key diff --git a/app/src/main/res/values-mt/strings.xml b/app/src/main/res/values-mt/strings.xml index b2c0356a..37da0580 100644 --- a/app/src/main/res/values-mt/strings.xml +++ b/app/src/main/res/values-mt/strings.xml @@ -123,4 +123,5 @@ Bookmarks Neħħi Falla t-tniżżil + hide_player_control_names_key diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index 0ebe3c6b..e7007d12 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -550,4 +550,5 @@ သင်နဂိုတည်းကသတ်မှတ်ပြီး လိုက်ဘရီရွေးချယ်ရန် ဖြင့်ဖွင့်မည် + hide_player_control_names_key diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 49cb6cfa..bc0199a1 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -128,4 +128,5 @@ प्लेयरको उपशीर्षकको सेटिङ रिपोजिटरी को नाम र यूआरएल कपी गरियो! + hide_player_control_names_key diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b685489b..6029f78b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -608,4 +608,5 @@ Link opnieuw geladen Autoroteer Roteer + hide_player_control_names_key diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 95c527f9..930841db 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -195,4 +195,5 @@ Bilde i bilde Fortsett å sjå Prøv tilkopling på nytt… + hide_player_control_names_key diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 7b013653..115cd2d3 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -538,4 +538,5 @@ Bruk Hjelp Profilbakgrunn + hide_player_control_names_key diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index bdc55780..07fc8a1d 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -159,4 +159,5 @@ କୌଣସି ତଥ୍ୟ ନାହିଁ %1$s ଅ %2$d ଆଦ୍ୟ ବାଦ୍ ଦିଅ + hide_player_control_names_key diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 8e940c61..209c9d8e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -635,4 +635,5 @@ Odrzuć Otwórz repozytorium Odwiedź %s na swoim smartfonie lub komputerze i wprowadź powyższy kod + hide_player_control_names_key diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index ce20a8af..59406383 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -621,4 +621,5 @@ Fcast Escolha o dispositivo Transmitir + hide_player_control_names_key diff --git a/app/src/main/res/values-qt/strings.xml b/app/src/main/res/values-qt/strings.xml index 5de97c7d..258552e2 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -247,4 +247,5 @@ oooooh uuaagh @string/home_play oouuhhh ahhooo-ahah + hide_player_control_names_key diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 344eae21..609190cf 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -641,4 +641,5 @@ Selectați divece-ul pe care doriți să faceți cast Cast mirror Fcast + hide_player_control_names_key diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5a9b843e..7f19ac8c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -622,4 +622,5 @@ Выйдет %s Fcast Выберите девайс для трансляции + hide_player_control_names_key diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index a53e1f53..947e2b6d 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -377,4 +377,5 @@ Pridať repozitár Názov repozitára Zobraziť komunitné repozitáre + hide_player_control_names_key diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index c750ea7a..5dc0bc23 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -485,4 +485,5 @@ Bilowga Bilow isku qasan Qoraalka dhamaadka + hide_player_control_names_key diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 04230ab8..dd2dffb9 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -626,4 +626,5 @@ CloudStream Wiki Konton Säkerhet + hide_player_control_names_key diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 9378e400..44729e09 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -615,4 +615,5 @@ %கள் பிடித்தவைகளிலிருந்து அகற்றப்பட்டன உங்கள் கிளவுட்ச்ட்ரீம் தரவு இப்போது காப்புப் பிரதி எடுக்கப்பட்டுள்ளது. இதன் சாத்தியம் மிகக் குறைவு என்றாலும், எல்லா சாதனங்களும் வித்தியாசமாக நடந்து கொள்ளலாம். அரிய விசயத்தில், பயன்பாட்டை அணுகுவதிலிருந்து நீங்கள் பூட்டப்படுகிறீர்கள், பயன்பாட்டு தரவை முழுவதுமாக அழித்து, காப்புப்பிரதியிலிருந்து மீட்டெடுக்கவும். இதிலிருந்து எழும் ஏதேனும் சிரமத்திற்கு நாங்கள் மிகவும் வருந்துகிறோம். ஊடகம் + hide_player_control_names_key diff --git a/app/src/main/res/values-ti/strings.xml b/app/src/main/res/values-ti/strings.xml index 46235bbd..6c154c8d 100644 --- a/app/src/main/res/values-ti/strings.xml +++ b/app/src/main/res/values-ti/strings.xml @@ -3,4 +3,5 @@ %1$s ክፋል %2$d ክፋል %d በ ላይ ይወጣል ተዋሳእቲ፡ %s + hide_player_control_names_key diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index b4308eb7..dd964877 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -265,4 +265,5 @@ Mga Subtitle ng Chromecast Mga setting ng mga subtitle ng Chromecast Maglaro ng Trailer + hide_player_control_names_key diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3273a901..a55750e9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -681,4 +681,5 @@ Cihaz PIN kodu alınamıyor, yerel kimlik doğrulamayı deneyin PIN kodunun süresi doldu! Kodun süresi %1$dm %2$ds içinde doluyor + hide_player_control_names_key diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f5770e86..fd24274c 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -634,4 +634,5 @@ Термін дії коду закінчується через %1$dхв %2$dс Автентифікація по місцю Відхилити + hide_player_control_names_key diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 04cfd381..c87be59c 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -617,4 +617,5 @@ دیگر ایکسٹینشنز میں تلاش کریں سفارشات دکھائیں آپ کے CloudStream ڈیٹا کا اب بیک اپ لیا گیا ہے۔ اگرچہ اس کا امکان بہت کم ہے، لیکن مختلف ڈیوائس مختلف طریقے سے کام کر سکتے ہیں۔ اگر آپ ایپ تک رسائی حاصل کرنے سے قاصر ہیں تو، ایپ کا ڈیٹا مکمل طور پر صاف کریں اور بیک اپ سے بحال کریں۔ اس سے ہونے والی کسی بھی تکلیف کے لیے ہم بہت معذرت خواہ ہیں۔ + hide_player_control_names_key diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 92e088bf..44868647 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -643,4 +643,5 @@ Truy cập %s trên điện thoại hoặc máy tính và nhập mã bên trên Mã PIN đã hết hạn! Mã sẽ hết hạn trong %1$dm %2$ds + hide_player_control_names_key diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c50f284c..69eb8741 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -671,4 +671,5 @@ 為了確保下載與通知已訂閱的電視節目的不間斷,CloudStream 需要取得在背景執行的權限。若點選「確定」,將移至「應用程式資訊」,請找到「應用程式電池使用」並將電池用量設置為「無限制」。請注意,取得此權限並不表示 CS3 會明顯增加電池用量,而是只在必要時在背景執行,例如取得通知或使用官方擴充功能下載影片時。若選擇「取消」,您可以稍後在「一般設定」中調整此設定。 CloudStream Wiki 此裝置不支援生物特徵認證 + hide_player_control_names_key diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 97ba24ea..f2db04e2 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -673,4 +673,5 @@ 选择投射设备 %1$d季%2$d集将在 投射镜像 + hide_player_control_names_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e68c22b9..21067fff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -797,4 +797,6 @@ Can\'t get the device PIN code, try local authentication PIN code is now expired ! Code expires in %1$dm %2$ds + hide_player_control_names_key + Hide names of the player\'s controls \ 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 5d5b11d0..0039af3a 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -37,6 +37,12 @@ android:icon="@drawable/ic_baseline_text_format_24" android:key="@string/prefer_limit_title_rez_key" android:title="@string/limit_title_rez" /> + Date: Thu, 25 Jul 2024 20:26:21 +0200 Subject: [PATCH 861/888] Bump 4.4.0 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1ad35d89..2040cf39 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -60,8 +60,8 @@ android { minSdk = 21 targetSdk = 33 /* Android 14 is Fu*ked ^ https://developer.android.com/about/versions/14/behavior-changes-14#safer-dynamic-code-loading*/ - versionCode = 63 - versionName = "4.3.2" + versionCode = 64 + versionName = "4.4.0" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") resValue("string", "commit_hash", "git rev-parse --short HEAD".execute() ?: "") From a28ee413680da64d059bdc90510f67b816e62568 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:59:37 -0600 Subject: [PATCH 862/888] Fix for navigation UI bug (#1220) --- .../lagradost/cloudstream3/MainActivity.kt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index e8cbc4d8..bc2cb88e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -572,6 +572,35 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa binding?.apply { navRailView.isVisible = isNavVisible && landscape navView.isVisible = isNavVisible && !landscape + + /** + * We need to make sure if we return to a sub-fragment, + * the correct navigation item is selected so that it does not + * highlight the wrong one in UI. + */ + when (destination.id) { + in listOf(R.id.navigation_downloads, R.id.navigation_download_child) -> { + navRailView.menu.findItem(R.id.navigation_downloads).isChecked = true + navView.menu.findItem(R.id.navigation_downloads).isChecked = true + } + in listOf( + R.id.navigation_settings, + R.id.navigation_subtitles, + R.id.navigation_chrome_subtitles, + R.id.navigation_settings_player, + R.id.navigation_settings_updates, + R.id.navigation_settings_ui, + R.id.navigation_settings_account, + R.id.navigation_settings_providers, + R.id.navigation_settings_general, + R.id.navigation_settings_extensions, + R.id.navigation_settings_plugins, + R.id.navigation_test_providers + ) -> { + navRailView.menu.findItem(R.id.navigation_settings).isChecked = true + navView.menu.findItem(R.id.navigation_settings).isChecked = true + } + } } } From 0aa48f335a818e0ebf0e1cf045d302a782e79857 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 28 Jul 2024 16:26:22 -0600 Subject: [PATCH 863/888] Fix subscription icon displaying for movie types in result previews (#1222) --- .../com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 5086426f..ce0fbdc5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -2163,7 +2163,7 @@ class ResultViewModel2 : ViewModel() { // lets say that we have subscribed, then we must be able to unsubscribe no matter what else if (data != null) { _subscribeStatus.postValue(true) - } + } else _subscribeStatus.postValue(null) } private fun postFavorites(loadResponse: LoadResponse) { @@ -2861,4 +2861,4 @@ class ResultViewModel2 : ViewModel() { } } } -} +} \ No newline at end of file From 04dda008c40bae83ca076c24f2c8f75f6fcdb870 Mon Sep 17 00:00:00 2001 From: epireyn <48213068+epireyn@users.noreply.github.com> Date: Mon, 29 Jul 2024 00:39:04 +0200 Subject: [PATCH 864/888] Clean up and mark questionable code issues (#1209) --- .../lagradost/cloudstream3/AcraApplication.kt | 12 +- .../lagradost/cloudstream3/CommonActivity.kt | 16 +- .../cloudstream3/DownloaderTestImpl.kt | 6 +- .../lagradost/cloudstream3/MainActivity.kt | 49 +++---- .../cloudstream3/NativeCrashHandler.kt | 53 ------- .../metaproviders/SyncRedirector.kt | 6 +- .../metaproviders/TraktProvider.kt | 2 +- .../cloudstream3/network/CloudflareKiller.kt | 6 +- .../cloudstream3/plugins/CloudstreamPlugin.kt | 3 +- .../lagradost/cloudstream3/plugins/Plugin.kt | 10 +- .../cloudstream3/plugins/PluginManager.kt | 34 +++-- .../cloudstream3/plugins/RepositoryManager.kt | 2 +- .../cloudstream3/plugins/VotingApi.kt | 9 +- .../subtitles/AbstractSubProvider.kt | 2 +- .../subtitles/AbstractSubtitleEntities.kt | 1 - .../syncproviders/AccountManager.kt | 12 +- .../syncproviders/providers/Addic7ed.kt | 14 +- .../syncproviders/providers/AniListApi.kt | 40 ++--- .../syncproviders/providers/LocalList.kt | 2 - .../syncproviders/providers/MALApi.kt | 128 ++++++++-------- .../providers/OpenSubtitlesApi.kt | 29 ++-- .../syncproviders/providers/SimklApi.kt | 137 +++++++++--------- .../syncproviders/providers/SubSource.kt | 1 + .../cloudstream3/ui/APIRepository.kt | 6 +- .../lagradost/cloudstream3/ui/BaseAdapter.kt | 2 + .../cloudstream3/ui/ControllerActivity.kt | 2 + .../cloudstream3/ui/CustomRecyclerViews.kt | 4 +- .../cloudstream3/ui/EasterEggMonke.kt | 2 +- .../ui/NonFinalAdapterListUpdateCallback.kt | 2 +- .../lagradost/cloudstream3/ui/WatchType.kt | 4 +- .../cloudstream3/ui/WebviewFragment.kt | 3 + .../ui/download/button/BaseFetchButton.kt | 1 + .../ui/download/button/DownloadButton.kt | 2 +- .../ui/home/HomeChildItemAdapter.kt | 5 +- .../cloudstream3/ui/home/HomeFragment.kt | 3 +- .../ui/home/HomeParentItemAdapter.kt | 13 +- .../ui/home/HomeParentItemAdapterPreview.kt | 7 +- .../cloudstream3/ui/home/HomeViewModel.kt | 10 +- .../ui/library/LibraryFragment.kt | 6 +- .../ui/library/ViewpagerAdapter.kt | 3 +- .../ui/player/AbstractPlayerFragment.kt | 7 +- .../cloudstream3/ui/player/CS3IPlayer.kt | 82 ++--------- .../ui/player/CustomSubtitleDecoderFactory.kt | 7 +- .../ui/player/CustomTextRenderer.kt | 3 +- .../ui/player/DownloadFileGenerator.kt | 2 +- .../ui/player/DownloadedPlayerActivity.kt | 4 - .../ui/player/FullScreenPlayer.kt | 42 +++--- .../cloudstream3/ui/player/GeneratorPlayer.kt | 20 ++- .../cloudstream3/ui/player/IPlayer.kt | 1 - .../cloudstream3/ui/player/LinkGenerator.kt | 1 - .../ui/player/NonFinalTextRenderer.java | 16 +- .../ui/player/OfflinePlaybackHelper.kt | 2 +- .../ui/player/PlayerGeneratorViewModel.kt | 2 +- .../ui/player/PlayerSubtitleHelper.kt | 3 + .../ui/player/PreviewGenerator.kt | 21 ++- .../ui/player/RepoLinkGenerator.kt | 1 + .../player/source_priority/PriorityAdapter.kt | 5 - .../player/source_priority/ProfilesAdapter.kt | 2 - .../source_priority/QualityDataHelper.kt | 7 +- .../source_priority/QualityProfileDialog.kt | 2 +- .../source_priority/SourcePriorityDialog.kt | 2 +- .../cloudstream3/ui/result/ActorAdaptor.kt | 5 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 6 +- .../cloudstream3/ui/result/ImageAdapter.kt | 15 +- .../ui/result/ResultFragmentPhone.kt | 49 ++++--- .../ui/result/ResultFragmentTv.kt | 45 +----- .../ui/result/ResultViewModel2.kt | 2 +- .../cloudstream3/ui/result/SelectAdaptor.kt | 3 +- .../cloudstream3/ui/search/SearchAdaptor.kt | 7 +- .../ui/search/SearchHistoryAdaptor.kt | 8 +- .../ui/search/SearchResultBuilder.kt | 7 +- .../ui/search/SyncSearchViewModel.kt | 4 +- .../ui/settings/AccountAdapter.kt | 7 +- .../ui/settings/SettingsFragment.kt | 1 - .../ui/settings/SettingsGeneral.kt | 2 - .../ui/settings/SettingsPlayer.kt | 9 +- .../ui/settings/SettingsProviders.kt | 2 +- .../ui/settings/SettingsUpdates.kt | 10 +- .../ui/settings/extensions/PluginAdapter.kt | 23 +-- .../ui/settings/extensions/PluginsFragment.kt | 2 +- .../settings/extensions/PluginsViewModel.kt | 1 - .../ui/setup/SetupFragmentMedia.kt | 1 - .../subtitles/ChromecastSubtitlesFragment.kt | 29 ++-- .../ui/subtitles/SubtitlesFragment.kt | 9 +- .../lagradost/cloudstream3/utils/AniSkip.kt | 2 +- .../cloudstream3/utils/AppContextUtils.kt | 5 +- .../cloudstream3/utils/BackupUtils.kt | 36 ++--- .../lagradost/cloudstream3/utils/DataStore.kt | 25 +++- .../utils/DownloadFileWorkManager.kt | 1 - .../cloudstream3/utils/InAppUpdater.kt | 40 ++--- .../cloudstream3/utils/PackageInstaller.kt | 5 +- .../cloudstream3/utils/PowerManagerAPI.kt | 6 +- .../lagradost/cloudstream3/utils/SyncUtil.kt | 8 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 2 +- .../utils/VideoDownloadManager.kt | 8 +- .../cloudstream3/widget/FlowLayout.kt | 2 +- .../cloudstream3/PluginAdapterTest.kt | 16 ++ 97 files changed, 563 insertions(+), 721 deletions(-) delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt create mode 100644 app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt index 598ff540..d6f978fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/AcraApplication.kt @@ -35,6 +35,7 @@ import java.io.File import java.io.FileNotFoundException import java.io.PrintStream import java.lang.ref.WeakReference +import java.util.Locale import kotlin.concurrent.thread import kotlin.system.exitProcess @@ -81,14 +82,8 @@ class ExceptionHandler(val errorFile: File, val onError: (() -> Unit)) : ACRA.errorReporter.handleException(error) try { PrintStream(errorFile).use { ps -> - ps.println(String.format("Currently loading extension: ${PluginManager.currentlyLoading ?: "none"}")) - ps.println( - String.format( - "Fatal exception on thread %s (%d)", - thread.name, - thread.id - ) - ) + ps.println("Currently loading extension: ${PluginManager.currentlyLoading ?: "none"}") + ps.println("Fatal exception on thread ${thread.name} (${thread.id})") error.printStackTrace(ps) } } catch (ignored: FileNotFoundException) { @@ -106,7 +101,6 @@ class AcraApplication : Application() { override fun onCreate() { super.onCreate() - //NativeCrashHandler.initCrashHandler() ExceptionHandler(filesDir.resolve("last_error")) { val intent = context!!.packageManager.getLaunchIntentForPackage(context!!.packageName) startActivity(Intent.makeRestartActivityTask(intent!!.component)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt index ba303fef..63912114 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt @@ -164,7 +164,7 @@ object CommonActivity { val toast = Toast(act) toast.duration = duration ?: Toast.LENGTH_SHORT toast.setGravity(Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, 0, 5.toPx) - toast.view = binding.root + toast.view = binding.root //fixme Find an alternative using default Toasts since custom toasts are deprecated and won't appear with api30 set as minSDK version. currentToast = toast toast.show() @@ -464,20 +464,6 @@ object CommonActivity { fun onKeyDown(act: Activity?, keyCode: Int, event: KeyEvent?) { - //println("Keycode: $keyCode") - //showToast( - // this, - // "Got Keycode $keyCode | ${KeyEvent.keyCodeToString(keyCode)} \n ${event?.action}", - // Toast.LENGTH_LONG - //) - - // Tested keycodes on remote: - // KeyEvent.KEYCODE_MEDIA_FAST_FORWARD - // KeyEvent.KEYCODE_MEDIA_REWIND - // KeyEvent.KEYCODE_MENU - // KeyEvent.KEYCODE_MEDIA_NEXT - // KeyEvent.KEYCODE_MEDIA_PREVIOUS - // KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE // 149 keycode_numpad 5 when (keyCode) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt b/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt index 934dd58a..8da7ca38 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/DownloaderTestImpl.kt @@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit class DownloaderTestImpl private constructor(builder: OkHttpClient.Builder) : Downloader() { - private val client: OkHttpClient + private val client: OkHttpClient = builder.readTimeout(30, TimeUnit.SECONDS).build() override fun execute(request: Request): Response { val httpMethod: String = request.httpMethod() val url: String = request.url() @@ -74,8 +74,4 @@ class DownloaderTestImpl private constructor(builder: OkHttpClient.Builder) : Do return instance } } - - init { - client = builder.readTimeout(30, TimeUnit.SECONDS).build() - } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index bc2cb88e..eed69a50 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -82,13 +82,13 @@ import com.lagradost.cloudstream3.plugins.PluginManager.loadAllOnlinePlugins import com.lagradost.cloudstream3.plugins.PluginManager.loadSinglePlugin import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver import com.lagradost.cloudstream3.services.SubscriptionWorkManager +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING_PLAYER +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING_REPO +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING_RESUME_WATCHING +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING_SEARCH import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringPlayer -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.inAppAuths import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.localListApi import com.lagradost.cloudstream3.syncproviders.SyncAPI @@ -347,7 +347,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa println("Repository url: $realUrl") loadRepository(realUrl) return true - } else if (str.contains(appString)) { + } else if (str.contains(APP_STRING)) { for (api in OAuth2Apis) { if (str.contains("/${api.redirectUrl}")) { ioSafe { @@ -377,15 +377,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa } // This specific intent is used for the gradle deployWithAdb // https://github.com/recloudstream/gradle/blob/master/src/main/kotlin/com/lagradost/cloudstream3/gradle/tasks/DeployWithAdbTask.kt#L46 - if (str == "$appString:") { + if (str == "$APP_STRING:") { PluginManager.hotReloadAllLocalPlugins(activity) } - } else if (safeURI(str)?.scheme == appStringRepo) { - val url = str.replaceFirst(appStringRepo, "https") + } else if (safeURI(str)?.scheme == APP_STRING_REPO) { + val url = str.replaceFirst(APP_STRING_REPO, "https") loadRepository(url) return true - } else if (safeURI(str)?.scheme == appStringSearch) { - val query = str.substringAfter("$appStringSearch://") + } else if (safeURI(str)?.scheme == APP_STRING_SEARCH) { + val query = str.substringAfter("$APP_STRING_SEARCH://") nextSearchQuery = try { URLDecoder.decode(query, "UTF-8") @@ -399,7 +399,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa R.id.navigation_search activity?.findViewById(R.id.nav_rail_view)?.selectedItemId = R.id.navigation_search - } else if (safeURI(str)?.scheme == appStringPlayer) { + } else if (safeURI(str)?.scheme == APP_STRING_PLAYER) { val uri = Uri.parse(str) val name = uri.getQueryParameter("name") val url = URLDecoder.decode(uri.authority, "UTF-8") @@ -413,9 +413,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa ) ) ) - } else if (safeURI(str)?.scheme == appStringResumeWatching) { + } else if (safeURI(str)?.scheme == APP_STRING_RESUME_WATCHING) { val id = - str.substringAfter("$appStringResumeWatching://").toIntOrNull() + str.substringAfter("$APP_STRING_RESUME_WATCHING://").toIntOrNull() ?: return false ioSafe { val resumeWatchingCard = @@ -469,7 +469,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa ) DubStatus.Dubbed else DubStatus.Subbed, null ) } else { - viewModel.loadSmall(this, result) + viewModel.loadSmall(result) } } @@ -605,7 +605,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa } //private var mCastSession: CastSession? = null - lateinit var mSessionManager: SessionManager + var mSessionManager: SessionManager? = null private val mSessionManagerListener: SessionManagerListener by lazy { SessionManagerListenerImpl() } private inner class SessionManagerListenerImpl : SessionManagerListener { @@ -645,8 +645,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa setActivityInstance(this) try { if (isCastApiAvailable()) { - //mCastSession = mSessionManager.currentCastSession - mSessionManager.addSessionManagerListener(mSessionManagerListener) + mSessionManager?.addSessionManagerListener(mSessionManagerListener) } } catch (e: Exception) { logError(e) @@ -662,7 +661,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa } try { if (isCastApiAvailable()) { - mSessionManager.removeSessionManagerListener(mSessionManagerListener) + mSessionManager?.removeSessionManagerListener(mSessionManagerListener) //mCastSession = null } } catch (e: Exception) { @@ -766,7 +765,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa list.forEach { custom -> allProviders.firstOrNull { it.javaClass.simpleName == custom.parentJavaClass } ?.let { - allProviders.add(it.javaClass.newInstance().apply { + allProviders.add(it.javaClass.getDeclaredConstructor().newInstance().apply { name = custom.name lang = custom.lang mainUrl = custom.url.trimEnd('/') @@ -1147,7 +1146,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa super.onCreate(savedInstanceState) try { if (isCastApiAvailable()) { - mSessionManager = CastContext.getSharedInstance(this).sessionManager + CastContext.getSharedInstance(this) {it.run()}.addOnSuccessListener { mSessionManager = it.sessionManager } } } catch (t: Throwable) { logError(t) @@ -1449,13 +1448,13 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa val value = viewModel.watchStatus.value ?: WatchType.NONE this@MainActivity.showBottomDialog( - WatchType.values().map { getString(it.stringRes) }.toList(), + WatchType.entries.map { getString(it.stringRes) }.toList(), value.ordinal, this@MainActivity.getString(R.string.action_add_to_bookmarks), showApply = false, {}) { viewModel.updateWatchStatus( - WatchType.values()[it], + WatchType.entries[it], this@MainActivity ) } @@ -1465,12 +1464,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa ?: SyncWatchType.NONE this@MainActivity.showBottomDialog( - SyncWatchType.values().map { getString(it.stringRes) }.toList(), + SyncWatchType.entries.map { getString(it.stringRes) }.toList(), value.ordinal, this@MainActivity.getString(R.string.action_add_to_bookmarks), showApply = false, {}) { - syncViewModel.setStatus(SyncWatchType.values()[it].internalId) + syncViewModel.setStatus(SyncWatchType.entries[it].internalId) syncViewModel.publishUserData() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt b/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt deleted file mode 100644 index 7be90440..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/NativeCrashHandler.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.lagradost.cloudstream3 - -import com.lagradost.cloudstream3.MainActivity.Companion.lastError -import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.plugins.PluginManager.checkSafeModeFile -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch - -object NativeCrashHandler { - // external fun triggerNativeCrash() - /*private external fun initNativeCrashHandler() - private external fun getSignalStatus(): Int - - private fun initSignalPolling() = CoroutineScope(Dispatchers.IO).launch { - - //launch { - // delay(10000) - // triggerNativeCrash() - //} - - while (true) { - delay(10_000) - val signal = getSignalStatus() - // Signal is initialized to zero - if (signal == 0) continue - - // Do not crash in safe mode! - if (lastError != null) continue - if (checkSafeModeFile()) continue - - AcraApplication.exceptionHandler?.uncaughtException( - Thread.currentThread(), - RuntimeException("Native crash with code: $signal. Try uninstalling extensions.\n") - ) - } - } - - fun initCrashHandler() { - try { - System.loadLibrary("native-lib") - initNativeCrashHandler() - } catch (t: Throwable) { - // Make debug crash. - if (BuildConfig.DEBUG) throw t - logError(t) - return - } - - initSignalPolling() - }*/ -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/SyncRedirector.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/SyncRedirector.kt index 75e96bec..bc646a8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/SyncRedirector.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/SyncRedirector.kt @@ -2,15 +2,13 @@ package com.lagradost.cloudstream3.metaproviders import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.mvvm.suspendSafeApiCall -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis import com.lagradost.cloudstream3.syncproviders.SyncIdName object SyncRedirector { - val syncApis = SyncApis private val syncIds = listOf( - SyncIdName.MyAnimeList to Regex("""myanimelist\.net\/anime\/(\d+)"""), - SyncIdName.Anilist to Regex("""anilist\.co\/anime\/(\d+)""") + SyncIdName.MyAnimeList to Regex("""myanimelist\.net/anime/(\d+)"""), + SyncIdName.Anilist to Regex("""anilist\.co/anime/(\d+)""") ) suspend fun redirect( diff --git a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt index a1b9ff34..addee9a0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/metaproviders/TraktProvider.kt @@ -296,7 +296,7 @@ open class TraktProvider : MainAPI() { return try { val format = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) val dateTime = dateString?.let { format.parse(it)?.time } ?: return false - APIHolder.unixTimeMS < dateTime + unixTimeMS < dateTime } catch (t: Throwable) { logError(t) false diff --git a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt index ce2fb3a2..85a9db5d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/network/CloudflareKiller.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.network -import android.util.Base64 import android.util.Log import android.webkit.CookieManager import androidx.annotation.AnyThread @@ -10,7 +9,10 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.nicehttp.Requests.Companion.await import com.lagradost.nicehttp.cookies import kotlinx.coroutines.runBlocking -import okhttp3.* +import okhttp3.Headers +import okhttp3.Interceptor +import okhttp3.Request +import okhttp3.Response import java.net.URI diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/CloudstreamPlugin.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/CloudstreamPlugin.kt index e89ccfeb..ddf5b286 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/CloudstreamPlugin.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/CloudstreamPlugin.kt @@ -2,5 +2,4 @@ package com.lagradost.cloudstream3.plugins @Suppress("unused") @Target(AnnotationTarget.CLASS) -annotation class CloudstreamPlugin( -) \ No newline at end of file +annotation class CloudstreamPlugin \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt index 7f08af92..fc836587 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt @@ -34,7 +34,7 @@ abstract class Plugin { */ fun registerMainAPI(element: MainAPI) { Log.i(PLUGIN_TAG, "Adding ${element.name} (${element.mainUrl}) MainAPI") - element.sourcePlugin = this.__filename + element.sourcePlugin = this.filename // Race condition causing which would case duplicates if not for distinctBy synchronized(APIHolder.allProviders) { APIHolder.allProviders.add(element) @@ -48,7 +48,7 @@ abstract class Plugin { */ fun registerExtractorAPI(element: ExtractorApi) { Log.i(PLUGIN_TAG, "Adding ${element.name} (${element.mainUrl}) ExtractorApi") - element.sourcePlugin = this.__filename + element.sourcePlugin = this.filename extractorApis.add(element) } @@ -68,7 +68,11 @@ abstract class Plugin { */ var resources: Resources? = null /** Full file path to the plugin. */ - var __filename: String? = null + @Deprecated("Renamed to `filename` to follow conventions", replaceWith = ReplaceWith("filename")) + var __filename: String? + get() = filename + set(value) {filename = value} + var filename: String? = null /** * This will add a button in the settings allowing you to add custom settings diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt index 6b2b75f2..bc2a1780 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -1,13 +1,16 @@ package com.lagradost.cloudstream3.plugins +import android.Manifest import android.app.* import android.content.Context +import android.content.pm.PackageManager import android.content.res.AssetManager import android.content.res.Resources import android.os.Build import android.os.Environment import android.util.Log import android.widget.Toast +import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.fragment.app.FragmentActivity @@ -163,7 +166,7 @@ object PluginManager { private val LOCAL_PLUGINS_PATH = CLOUD_STREAM_FOLDER + "plugins" - public var currentlyLoading: String? = null + var currentlyLoading: String? = null // Maps filepath to plugin val plugins: MutableMap = @@ -339,7 +342,7 @@ object PluginManager { //Omit non-NSFW if mode is set to NSFW only if (mode == AutoDownloadMode.NsfwOnly) { - if (tvtypes.contains(TvType.NSFW.name) == false) { + if (!tvtypes.contains(TvType.NSFW.name)) { return@mapNotNull null } } @@ -504,10 +507,12 @@ object PluginManager { val version: Int = manifest.version ?: PLUGIN_VERSION_NOT_SET.also { Log.d(TAG, "No manifest version for ${data.internalName}") } + + @Suppress("UNCHECKED_CAST") val pluginClass: Class<*> = loader.loadClass(manifest.pluginClassName) as Class val pluginInstance: Plugin = - pluginClass.newInstance() as Plugin + pluginClass.getDeclaredConstructor().newInstance() as Plugin // Sets with the proper version setPluginData(data.copy(version = version)) @@ -517,14 +522,16 @@ object PluginManager { return true } - pluginInstance.__filename = file.absolutePath + pluginInstance.filename = file.absolutePath if (manifest.requiresResources) { Log.d(TAG, "Loading resources for ${data.internalName}") // based on https://stackoverflow.com/questions/7483568/dynamic-resource-loading-from-other-apk - val assets = AssetManager::class.java.newInstance() + val assets = AssetManager::class.java.getDeclaredConstructor().newInstance() val addAssetPath = AssetManager::class.java.getMethod("addAssetPath", String::class.java) addAssetPath.invoke(assets, file.absolutePath) + + @Suppress("DEPRECATION") pluginInstance.resources = Resources( assets, context.resources.displayMetrics, @@ -566,14 +573,14 @@ object PluginManager { // remove all registered apis synchronized(APIHolder.apis) { - APIHolder.apis.filter { api -> api.sourcePlugin == plugin.__filename }.forEach { + APIHolder.apis.filter { api -> api.sourcePlugin == plugin.filename }.forEach { removePluginMapping(it) } } synchronized(APIHolder.allProviders) { - APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.__filename } + APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.filename } } - extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.__filename } + extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.filename } classLoaders.values.removeIf { v -> v == plugin } @@ -720,9 +727,14 @@ object PluginManager { } val notification = builder.build() - with(NotificationManagerCompat.from(context)) { - // notificationId is a unique int for each notification that you must define - notify((System.currentTimeMillis() / 1000).toInt(), notification) + // notificationId is a unique int for each notification that you must define + if (ActivityCompat.checkSelfPermission( + context, + Manifest.permission.POST_NOTIFICATIONS + ) == PackageManager.PERMISSION_GRANTED + ) { + NotificationManagerCompat.from(context) + .notify((System.currentTimeMillis() / 1000).toInt(), notification) } return notification } catch (e: Exception) { 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 b80a590e..c6ec9df7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -73,7 +73,7 @@ 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_.-]+)/(.*)$") + private 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 { diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt index a45ab5f0..d1b702f4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/VotingApi.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.sync.withLock object VotingApi { // please do not cheat the votes lol private const val LOGKEY = "VotingApi" - private const val apiDomain = "https://counterapi.com/api" + private const val API_DOMAIN = "https://counterapi.com/api" private fun transformUrl(url: String): String = // dont touch or all votes get reset MessageDigest @@ -49,13 +49,13 @@ object VotingApi { // please do not cheat the votes lol .joinToString("-") private suspend fun readVote(pluginUrl: String): Int { - var url = "${apiDomain}/cs-${getRepository(pluginUrl)}/vote/${transformUrl(pluginUrl)}?readOnly=true" + val url = "${API_DOMAIN}/cs-${getRepository(pluginUrl)}/vote/${transformUrl(pluginUrl)}?readOnly=true" Log.d(LOGKEY, "Requesting: $url") return app.get(url).parsedSafe()?.value ?: 0 } private suspend fun writeVote(pluginUrl: String): Boolean { - var url = "${apiDomain}/cs-${getRepository(pluginUrl)}/vote/${transformUrl(pluginUrl)}" + val url = "${API_DOMAIN}/cs-${getRepository(pluginUrl)}/vote/${transformUrl(pluginUrl)}" Log.d(LOGKEY, "Requesting: $url") return app.get(url).parsedSafe()?.value != null } @@ -69,8 +69,7 @@ object VotingApi { // please do not cheat the votes lol getKey("cs3-votes/${transformUrl(pluginUrl)}") ?: false fun canVote(pluginUrl: String): Boolean { - if (!PluginManager.urlPlugins.contains(pluginUrl)) return false - return true + return PluginManager.urlPlugins.contains(pluginUrl) } private val voteLock = Mutex() diff --git a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt index 857fba11..df64caab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubProvider.kt @@ -59,7 +59,7 @@ class SubtitleResource { return file } - fun unzip(file: File): List> { + private fun unzip(file: File): List> { val entries = mutableListOf>() ZipInputStream(file.inputStream()).use { zipInputStream -> diff --git a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt index ed4ccb74..685b499b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/subtitles/AbstractSubtitleEntities.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.subtitles -import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.TvType class AbstractSubtitleEntities { diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index 0259ccad..2e14c3c4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -56,22 +56,22 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { subSourceApi ) - const val appString = "cloudstreamapp" - const val appStringRepo = "cloudstreamrepo" - const val appStringPlayer = "cloudstreamplayer" + const val APP_STRING = "cloudstreamapp" + const val APP_STRING_REPO = "cloudstreamrepo" + const val APP_STRING_PLAYER = "cloudstreamplayer" // Instantly start the search given a query - const val appStringSearch = "cloudstreamsearch" + const val APP_STRING_SEARCH = "cloudstreamsearch" // Instantly resume watching a show - const val appStringResumeWatching = "cloudstreamcontinuewatching" + const val APP_STRING_RESUME_WATCHING = "cloudstreamcontinuewatching" val unixTime: Long get() = System.currentTimeMillis() / 1000L val unixTimeMs: Long get() = System.currentTimeMillis() - const val maxStale = 60 * 10 + const val MAX_STALE = 60 * 10 fun secondsToReadable(seconds: Int, completedValue: String): String { var secondsLong = seconds.toLong() diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt index 507c5e2a..db467639 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/Addic7ed.kt @@ -18,13 +18,13 @@ class Addic7ed : AbstractSubApi { override fun logOut() {} companion object { - const val host = "https://www.addic7ed.com" + const val HOST = "https://www.addic7ed.com" const val TAG = "ADDIC7ED" } private fun fixUrl(url: String): String { - return if (url.startsWith("/")) host + url - else if (!url.startsWith("http")) "$host/$url" + return if (url.startsWith("/")) HOST + url + else if (!url.startsWith("http")) "$HOST/$url" else url } @@ -62,7 +62,7 @@ class Addic7ed : AbstractSubApi { } val title = queryText.substringBefore("(").trim() - val url = "$host/search.php?search=${title}&Submit=Search" + val url = "$HOST/search.php?search=${title}&Submit=Search" val hostDocument = app.get(url).document var searchResult = "" if (!hostDocument.select("span:contains($title)").isNullOrEmpty()) searchResult = url @@ -74,8 +74,8 @@ class Addic7ed : AbstractSubApi { hostDocument.selectFirst("#sl button")?.attr("onmouseup")?.substringAfter("(") ?.substringBefore(",") val doc = app.get( - "$host/ajax_loadShow.php?show=$show&season=$seasonNum&langs=&hd=undefined&hi=undefined", - referer = "$host/" + "$HOST/ajax_loadShow.php?show=$show&season=$seasonNum&langs=&hd=undefined&hi=undefined", + referer = "$HOST/" ).document doc.select("#season tr:contains($queryLang)").mapNotNull { node -> if (node.selectFirst("td")?.text() @@ -97,7 +97,7 @@ class Addic7ed : AbstractSubApi { val link = fixUrl(node.select("a.buttonDownload").attr("href")) val isHearingImpaired = !node.parent()!!.select("tr:last-child [title=\"Hearing Impaired\"]").isNullOrEmpty() - cleanResources(results, name, link, mapOf("referer" to "$host/"), isHearingImpaired) + cleanResources(results, name, link, mapOf("referer" to "$HOST/"), isHearingImpaired) } return results } diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index 8a82cf94..e51d3d65 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -63,7 +63,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun handleRedirect(url: String): Boolean { val sanitizer = - splitQuery(URL(url.replace(appString, "https").replace("/#", "?"))) // FIX ERROR + splitQuery(URL(url.replace(APP_STRING, "https").replace("/#", "?"))) // FIX ERROR val token = sanitizer["access_token"]!! val expiresIn = sanitizer["expires_in"]!! @@ -87,7 +87,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun search(name: String): List? { val data = searchShows(name) ?: return null - return data.data?.Page?.media?.map { + return data.data?.page?.media?.map { SyncAPI.SyncSearchResult( it.title.romaji ?: return null, this.name, @@ -101,7 +101,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun getResult(id: String): SyncAPI.SyncResult { val internalId = (Regex("anilist\\.co/anime/(\\d*)").find(id)?.groupValues?.getOrNull(1) ?: id).toIntOrNull() ?: throw ErrorLoadingException("Invalid internalId") - val season = getSeason(internalId).data.Media + val season = getSeason(internalId).data.media return SyncAPI.SyncResult( season.id.toString(), @@ -301,12 +301,12 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { //println("NAME $name NEW NAME ${name.replace(blackListRegex, "")}") val shows = searchShows(name.replace(blackListRegex, "")) - shows?.data?.Page?.media?.find { + shows?.data?.page?.media?.find { (malId ?: "NONE") == it.idMal.toString() }?.let { return it } val filtered = - shows?.data?.Page?.media?.filter { + shows?.data?.page?.media?.filter { (((it.startDate.year ?: year.toString()) == year.toString() || year == null)) } @@ -496,7 +496,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { val data = postApi(q, true) val d = parseJson(data ?: return null) - val main = d.data?.Media + val main = d.data?.media if (main?.mediaListEntry != null) { return AniListTitleHolder( title = main.title, @@ -536,7 +536,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { headers = mapOf( "Authorization" to "Bearer " + (getAuth() ?: return@suspendSafeApiCall null), - if (cache) "Cache-Control" to "max-stale=$maxStale" else "Cache-Control" to "no-cache" + if (cache) "Cache-Control" to "max-stale=$MAX_STALE" else "Cache-Control" to "no-cache" ), cacheTime = 0, data = mapOf( @@ -647,7 +647,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class Data( - @JsonProperty("MediaListCollection") val MediaListCollection: MediaListCollection + @JsonProperty("MediaListCollection") val mediaListCollection: MediaListCollection ) private fun getAniListListCached(): Array? { @@ -659,7 +659,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { if (checkToken()) return null return if (requireLibraryRefresh) { - val list = getFullAniListList()?.data?.MediaListCollection?.lists?.toTypedArray() + val list = getFullAniListList()?.data?.mediaListCollection?.lists?.toTypedArray() if (list != null) { setKey(ANILIST_CACHED_LIST, list) } @@ -678,7 +678,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { // To fill empty lists when AniList does not return them val baseMap = - AniListStatusType.values().filter { it.value >= 0 }.associate { + AniListStatusType.entries.filter { it.value >= 0 }.associate { it.stringRes to emptyList() } @@ -764,7 +764,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { /** Used to query a saved MediaItem on the list to get the id for removal */ data class MediaListItemRoot(@JsonProperty("data") val data: MediaListItem? = null) - data class MediaListItem(@JsonProperty("MediaList") val MediaList: MediaListId? = null) + data class MediaListItem(@JsonProperty("MediaList") val mediaList: MediaListId? = null) data class MediaListId(@JsonProperty("id") val id: Long? = null) private suspend fun postDataAboutId( @@ -787,7 +787,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { """ val response = postApi(idQuery) val listId = - tryParseJson(response)?.data?.MediaList?.id ?: return false + tryParseJson(response)?.data?.mediaList?.id ?: return false """ mutation(${'$'}id: Int = $listId) { DeleteMediaListEntry(id: ${'$'}id) { @@ -836,7 +836,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { val data = postApi(q) if (data.isNullOrBlank()) return null val userData = parseJson(data) - val u = userData.data?.Viewer + val u = userData.data?.viewer val user = AniListUser( u?.id, u?.name, @@ -858,8 +858,8 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { suspend fun getSeasonRecursive(id: Int) { val season = getSeason(id) seasons.add(season) - if (season.data.Media.format?.startsWith("TV") == true) { - season.data.Media.relations?.edges?.forEach { + if (season.data.media.format?.startsWith("TV") == true) { + season.data.media.relations?.edges?.forEach { if (it.node?.format != null) { if (it.relationType == "SEQUEL" && it.node.format.startsWith("TV")) { getSeasonRecursive(it.node.id) @@ -878,7 +878,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class SeasonData( - @JsonProperty("Media") val Media: SeasonMedia, + @JsonProperty("Media") val media: SeasonMedia, ) data class SeasonMedia( @@ -1050,7 +1050,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class AniListData( - @JsonProperty("Viewer") val Viewer: AniListViewer?, + @JsonProperty("Viewer") val viewer: AniListViewer?, ) data class AniListRoot( @@ -1090,7 +1090,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class LikeData( - @JsonProperty("Viewer") val Viewer: LikeViewer?, + @JsonProperty("Viewer") val viewer: LikeViewer?, ) data class LikeRoot( @@ -1130,7 +1130,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class GetDataData( - @JsonProperty("Media") val Media: GetDataMedia?, + @JsonProperty("Media") val media: GetDataMedia?, ) data class GetDataRoot( @@ -1163,7 +1163,7 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ) data class GetSearchPage( - @JsonProperty("Page") val Page: GetSearchData?, + @JsonProperty("Page") val page: GetSearchData?, ) data class GetSearchData( diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt index 00f8d00c..f819cd3b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt @@ -119,8 +119,6 @@ class LocalList : SyncAPI { ListSorting.AlphabeticalZ, ListSorting.UpdatedNew, ListSorting.UpdatedOld, -// ListSorting.RatingHigh, -// ListSorting.RatingLow, ) ) } 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 24ef7136..6046a0f2 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 @@ -19,14 +19,18 @@ import com.lagradost.cloudstream3.syncproviders.SyncIdName import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt -import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppContextUtils.splitQuery +import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.DataStore.toKotlinObject import java.net.URL import java.security.SecureRandom import java.text.ParseException import java.text.SimpleDateFormat -import java.util.* +import java.time.Instant +import java.util.Calendar +import java.util.Date +import java.util.Locale +import java.util.TimeZone /** max 100 via https://myanimelist.net/apiconfig/references/api/v2#tag/anime */ const val MAL_MAX_SEARCH_LIMIT = 25 @@ -51,7 +55,6 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { } override fun loginInfo(): AuthAPI.LoginInfo? { - //getMalUser(true)? getKey(accountId, MAL_USER_KEY)?.let { user -> return AuthAPI.LoginInfo( profilePicture = user.picture, @@ -84,7 +87,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { this.name, node.id.toString(), "$mainUrl/anime/${node.id}/", - node.main_picture?.large ?: node.main_picture?.medium + node.mainPicture?.large ?: node.mainPicture?.medium ) } } @@ -178,7 +181,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { private fun parseDate(string: String?): Long? { return try { - SimpleDateFormat("yyyy-MM-dd")?.parse(string ?: return null)?.time + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse(string ?: return null)?.time } catch (e: Exception) { null } @@ -190,7 +193,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { apiName = this.name, syncId = node.id.toString(), url = "$mainUrl/anime/${node.id}", - posterUrl = node.main_picture?.large + posterUrl = node.mainPicture?.large ) } @@ -244,12 +247,12 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { val internalId = id.toIntOrNull() ?: return null val data = - getDataAboutMalId(internalId)?.my_list_status //?: throw ErrorLoadingException("No my_list_status") + getDataAboutMalId(internalId)?.myListStatus //?: throw ErrorLoadingException("No my_list_status") return SyncAPI.SyncStatus( score = data?.score, - status = SyncWatchType.fromInternalId(malStatusAsString.indexOf(data?.status)) , + status = SyncWatchType.fromInternalId(malStatusAsString.indexOf(data?.status)), isFavorite = null, - watchedEpisodes = data?.num_episodes_watched, + watchedEpisodes = data?.numEpisodesWatched, ) } @@ -291,7 +294,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { private fun parseDateLong(string: String?): Long? { return try { - SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse( + SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()).parse( string ?: return null )?.time?.div(1000) } catch (e: Exception) { @@ -302,7 +305,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun handleRedirect(url: String): Boolean { val sanitizer = - splitQuery(URL(url.replace(appString, "https").replace("/#", "?"))) // FIX ERROR + splitQuery(URL(url.replace(APP_STRING, "https").replace("/#", "?"))) // FIX ERROR val state = sanitizer["state"]!! if (state == "RequestID$requestId") { val currentCode = sanitizer["code"]!! @@ -351,9 +354,9 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { try { if (response != "") { val token = parseJson(response) - setKey(accountId, MAL_UNIXTIME_KEY, (token.expires_in + unixTime)) - setKey(accountId, MAL_REFRESH_TOKEN_KEY, token.refresh_token) - setKey(accountId, MAL_TOKEN_KEY, token.access_token) + setKey(accountId, MAL_UNIXTIME_KEY, (token.expiresIn + unixTime)) + setKey(accountId, MAL_REFRESH_TOKEN_KEY, token.refreshToken) + setKey(accountId, MAL_TOKEN_KEY, token.accessToken) requireLibraryRefresh = true } } catch (e: Exception) { @@ -395,53 +398,53 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { data class Node( @JsonProperty("id") val id: Int, @JsonProperty("title") val title: String, - @JsonProperty("main_picture") val main_picture: MainPicture?, - @JsonProperty("alternative_titles") val alternative_titles: AlternativeTitles?, - @JsonProperty("media_type") val media_type: String?, - @JsonProperty("num_episodes") val num_episodes: Int?, + @JsonProperty("main_picture") val mainPicture: MainPicture?, + @JsonProperty("alternative_titles") val alternativeTitles: AlternativeTitles?, + @JsonProperty("media_type") val mediaType: String?, + @JsonProperty("num_episodes") val numEpisodes: Int?, @JsonProperty("status") val status: String?, - @JsonProperty("start_date") val start_date: String?, - @JsonProperty("end_date") val end_date: String?, - @JsonProperty("average_episode_duration") val average_episode_duration: Int?, + @JsonProperty("start_date") val startDate: String?, + @JsonProperty("end_date") val endDate: String?, + @JsonProperty("average_episode_duration") val averageEpisodeDuration: Int?, @JsonProperty("synopsis") val synopsis: String?, @JsonProperty("mean") val mean: Double?, @JsonProperty("genres") val genres: List?, @JsonProperty("rank") val rank: Int?, @JsonProperty("popularity") val popularity: Int?, - @JsonProperty("num_list_users") val num_list_users: Int?, - @JsonProperty("num_favorites") val num_favorites: Int?, - @JsonProperty("num_scoring_users") val num_scoring_users: Int?, - @JsonProperty("start_season") val start_season: StartSeason?, + @JsonProperty("num_list_users") val numListUsers: Int?, + @JsonProperty("num_favorites") val numFavorites: Int?, + @JsonProperty("num_scoring_users") val numScoringUsers: Int?, + @JsonProperty("start_season") val startSeason: StartSeason?, @JsonProperty("broadcast") val broadcast: Broadcast?, @JsonProperty("nsfw") val nsfw: String?, - @JsonProperty("created_at") val created_at: String?, - @JsonProperty("updated_at") val updated_at: String? + @JsonProperty("created_at") val createdAt: String?, + @JsonProperty("updated_at") val updatedAt: String? ) data class ListStatus( @JsonProperty("status") val status: String?, @JsonProperty("score") val score: Int, - @JsonProperty("num_episodes_watched") val num_episodes_watched: Int, - @JsonProperty("is_rewatching") val is_rewatching: Boolean, - @JsonProperty("updated_at") val updated_at: String, + @JsonProperty("num_episodes_watched") val numEpisodesWatched: Int, + @JsonProperty("is_rewatching") val isRewatching: Boolean, + @JsonProperty("updated_at") val updatedAt: String, ) data class Data( @JsonProperty("node") val node: Node, - @JsonProperty("list_status") val list_status: ListStatus?, + @JsonProperty("list_status") val listStatus: ListStatus?, ) { fun toLibraryItem(): SyncAPI.LibraryItem { return SyncAPI.LibraryItem( this.node.title, "https://myanimelist.net/anime/${this.node.id}/", this.node.id.toString(), - this.list_status?.num_episodes_watched, - this.node.num_episodes, - this.list_status?.score?.times(10), - parseDateLong(this.list_status?.updated_at), + this.listStatus?.numEpisodesWatched, + this.node.numEpisodes, + this.listStatus?.score?.times(10), + parseDateLong(this.listStatus?.updatedAt), "MAL", TvType.Anime, - this.node.main_picture?.large ?: this.node.main_picture?.medium, + this.node.mainPicture?.large ?: this.node.mainPicture?.medium, null, null, plot = this.node.synopsis, @@ -470,8 +473,8 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { ) data class Broadcast( - @JsonProperty("day_of_the_week") val day_of_the_week: String?, - @JsonProperty("start_time") val start_time: String? + @JsonProperty("day_of_the_week") val dayOfTheWeek: String?, + @JsonProperty("start_time") val startTime: String? ) private fun getMalAnimeListCached(): Array? { @@ -491,14 +494,14 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun getPersonalLibrary(): SyncAPI.LibraryMetadata { val list = getMalAnimeListSmart()?.groupBy { - convertToStatus(it.list_status?.status ?: "").stringRes + convertToStatus(it.listStatus?.status ?: "").stringRes }?.mapValues { group -> group.value.map { it.toLibraryItem() } } ?: emptyMap() // To fill empty lists when MAL does not return them val baseMap = - MalStatusType.values().filter { it.value >= 0 }.associate { + MalStatusType.entries.filter { it.value >= 0 }.associate { it.stringRes to emptyList() } @@ -573,7 +576,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { ).text val values = parseJson(res) val titles = - values.data.map { MalTitleHolder(it.list_status, it.node.id, it.node.title) } + values.data.map { MalTitleHolder(it.listStatus, it.node.id, it.node.title) } for (t in titles) { allTitles[t.id] = t } @@ -582,11 +585,13 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { } } - fun convertJapanTimeToTimeRemaining(date: String, endDate: String? = null): String? { + private fun convertJapanTimeToTimeRemaining(date: String, endDate: String? = null): String? { // No time remaining if the show has already ended try { endDate?.let { - if (SimpleDateFormat("yyyy-MM-dd").parse(it).time < System.currentTimeMillis()) return@convertJapanTimeToTimeRemaining null + if (SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse(it) + ?.before(Date.from(Instant.now())) != false + ) return@convertJapanTimeToTimeRemaining null } } catch (e: ParseException) { logError(e) @@ -603,7 +608,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { val currentWeek = currentDate.get(Calendar.WEEK_OF_MONTH) val currentYear = currentDate.get(Calendar.YEAR) - val dateFormat = SimpleDateFormat("yyyy MM W EEEE HH:mm") + val dateFormat = SimpleDateFormat("yyyy MM W EEEE HH:mm", Locale.getDefault()) dateFormat.timeZone = TimeZone.getTimeZone("Japan") val parsedDate = dateFormat.parse("$currentYear $currentMonth $currentWeek $date") ?: return null @@ -647,13 +652,13 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { id: Int, status: MalStatusType? = null, score: Int? = null, - num_watched_episodes: Int? = null, + numWatchedEpisodes: Int? = null, ): Boolean { val res = setScoreRequest( id, if (status == null) null else malStatusAsString[maxOf(0, status.value)], score, - num_watched_episodes + numWatchedEpisodes ) return if (res.isNullOrBlank()) { @@ -670,17 +675,18 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { } } + @Suppress("UNCHECKED_CAST") private suspend fun setScoreRequest( id: Int, status: String? = null, score: Int? = null, - num_watched_episodes: Int? = null, + numWatchedEpisodes: 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 + "num_watched_episodes" to numWatchedEpisodes?.toString() + ).filterValues { it != null } as Map return app.put( "$apiUrl/v2/anime/$id/my_list_status", @@ -693,10 +699,10 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { data class ResponseToken( - @JsonProperty("token_type") val token_type: String, - @JsonProperty("expires_in") val expires_in: Int, - @JsonProperty("access_token") val access_token: String, - @JsonProperty("refresh_token") val refresh_token: String, + @JsonProperty("token_type") val tokenType: String, + @JsonProperty("expires_in") val expiresIn: Int, + @JsonProperty("access_token") val accessToken: String, + @JsonProperty("refresh_token") val refreshToken: String, ) data class MalRoot( @@ -705,7 +711,7 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { data class MalDatum( @JsonProperty("node") val node: MalNode, - @JsonProperty("list_status") val list_status: MalStatus, + @JsonProperty("list_status") val listStatus: MalStatus, ) data class MalNode( @@ -722,16 +728,16 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { data class MalStatus( @JsonProperty("status") val status: String, @JsonProperty("score") val score: Int, - @JsonProperty("num_episodes_watched") val num_episodes_watched: Int, - @JsonProperty("is_rewatching") val is_rewatching: Boolean, - @JsonProperty("updated_at") val updated_at: String, + @JsonProperty("num_episodes_watched") val numEpisodesWatched: Int, + @JsonProperty("is_rewatching") val isRewatching: Boolean, + @JsonProperty("updated_at") val updatedAt: String, ) data class MalUser( @JsonProperty("id") val id: Int, @JsonProperty("name") val name: String, @JsonProperty("location") val location: String, - @JsonProperty("joined_at") val joined_at: String, + @JsonProperty("joined_at") val joinedAt: String, @JsonProperty("picture") val picture: String?, ) @@ -744,9 +750,9 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { data class SmallMalAnime( @JsonProperty("id") val id: Int, @JsonProperty("title") val title: String?, - @JsonProperty("num_episodes") val num_episodes: Int, - @JsonProperty("my_list_status") val my_list_status: MalStatus?, - @JsonProperty("main_picture") val main_picture: MalMainPicture?, + @JsonProperty("num_episodes") val numEpisodes: Int, + @JsonProperty("my_list_status") val myListStatus: MalStatus?, + @JsonProperty("main_picture") val mainPicture: MalMainPicture?, ) data class MalSearchNode( diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt index 6412ff1b..37b95614 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/OpenSubtitlesApi.kt @@ -15,7 +15,6 @@ import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities import com.lagradost.cloudstream3.syncproviders.AuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI import com.lagradost.cloudstream3.syncproviders.InAppAuthAPIManager -import com.lagradost.cloudstream3.utils.AppContextUtils import com.lagradost.cloudstream3.utils.AppUtils import okhttp3.Interceptor import okhttp3.Response @@ -30,10 +29,10 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi companion object { const val OPEN_SUBTITLES_USER_KEY: String = "open_subtitles_user" // user data like profile - const val apiKey = "uyBLgFD17MgrYmA0gSXoKllMJBelOYj2" - const val host = "https://api.opensubtitles.com/api/v1" + const val API_KEY = "uyBLgFD17MgrYmA0gSXoKllMJBelOYj2" + const val HOST = "https://api.opensubtitles.com/api/v1" const val TAG = "OPENSUBS" - const val coolDownDuration: Long = 1000L * 30L // CoolDown if 429 error code in ms + const val COOLDOWN_DURATION: Long = 1000L * 30L // CoolDown if 429 error code in ms var currentCoolDown: Long = 0L var currentSession: SubtitleOAuthEntity? = null } @@ -49,7 +48,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi chain.request().newBuilder() .removeHeader("user-agent") .addHeader("user-agent", userAgent) - .addHeader("Api-Key", apiKey) + .addHeader("Api-Key", API_KEY) .build() ) } @@ -66,7 +65,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi } private fun throwGotTooManyRequests() { - currentCoolDown = unixTimeMs + coolDownDuration + currentCoolDown = unixTimeMs + COOLDOWN_DURATION throw ErrorLoadingException("Too many requests") } @@ -115,7 +114,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi private suspend fun initLogin(username: String, password: String): Boolean { //Log.i(TAG, "DATA = [$username] [$password]") val response = app.post( - url = "$host/login", + url = "$HOST/login", headers = mapOf( "Content-Type" to "application/json", ), @@ -134,7 +133,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi SubtitleOAuthEntity( user = username, pass = password, - access_token = token.token ?: run { + accessToken = token.token ?: run { return false }) ) @@ -197,8 +196,8 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi val searchQueryUrl = when (imdbId > 0) { //Use imdb_id to search if its valid - true -> "$host/subtitles?imdb_id=$imdbId&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" - false -> "$host/subtitles?query=${queryText}&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" + true -> "$HOST/subtitles?imdb_id=$imdbId&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" + false -> "$HOST/subtitles?query=${queryText}&languages=${fixedLang}$yearQuery$epQuery$seasonQuery" } val req = app.get( @@ -233,7 +232,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi val resSeasonNum = featureDetails?.seasonNumber ?: query.seasonNumber val year = featureDetails?.year ?: query.year val type = if ((resSeasonNum ?: 0) > 0) TvType.TvSeries else TvType.Movie - val isHearingImpaired = attr.hearing_impaired ?: false + val isHearingImpaired = attr.hearingImpaired ?: false //Log.i(TAG, "Result id/name => ${item.id} / $name") item.attributes?.files?.forEach { file -> val resultData = file.fileId?.toString() ?: "" @@ -266,11 +265,11 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi throwIfCantDoRequest() val req = app.post( - url = "$host/download", + url = "$HOST/download", headers = mapOf( Pair( "Authorization", - "Bearer ${currentSession?.access_token ?: throw ErrorLoadingException("No access token active in current session")}" + "Bearer ${currentSession?.accessToken ?: throw ErrorLoadingException("No access token active in current session")}" ), Pair("Content-Type", "application/json"), Pair("Accept", "*/*") @@ -299,7 +298,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi data class SubtitleOAuthEntity( var user: String, var pass: String, - var access_token: String, + var accessToken: String, ) data class OAuthToken( @@ -324,7 +323,7 @@ class OpenSubtitlesApi(index: Int) : InAppAuthAPIManager(index), AbstractSubApi @JsonProperty("url") var url: String? = null, @JsonProperty("files") var files: List? = listOf(), @JsonProperty("feature_details") var featDetails: ResultFeatureDetails? = ResultFeatureDetails(), - @JsonProperty("hearing_impaired") var hearing_impaired: Boolean? = null, + @JsonProperty("hearing_impaired") var hearingImpaired: Boolean? = null, ) data class ResultFiles( diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index 27975d19..e5db626b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -38,6 +38,7 @@ import java.security.SecureRandom import java.text.SimpleDateFormat import java.time.Instant import java.util.Date +import java.util.Locale import java.util.TimeZone import kotlin.time.Duration import kotlin.time.DurationUnit @@ -144,8 +145,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } companion object { - private const val clientId: String = BuildConfig.SIMKL_CLIENT_ID - private const val clientSecret: String = BuildConfig.SIMKL_CLIENT_SECRET + private const val CLIENT_ID: String = BuildConfig.SIMKL_CLIENT_ID + private const val CLIENT_SECRET: String = BuildConfig.SIMKL_CLIENT_SECRET private var lastLoginState = "" const val SIMKL_TOKEN_KEY: String = "simkl_token" @@ -154,10 +155,10 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { const val SIMKL_CACHED_LIST_TIME: String = "simkl_cached_time" /** 2014-09-01T09:10:11Z -> 1409562611 */ - private const val simklDateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" + private const val SIMKL_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'" fun getUnixTime(string: String?): Long? { return try { - SimpleDateFormat(simklDateFormat).apply { + SimpleDateFormat(SIMKL_DATE_FORMAT, Locale.getDefault()).apply { this.timeZone = TimeZone.getTimeZone("UTC") }.parse( string ?: return null @@ -171,7 +172,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { /** 1409562611 -> 2014-09-01T09:10:11Z */ fun getDateTime(unixTime: Long?): String? { return try { - SimpleDateFormat(simklDateFormat).apply { + SimpleDateFormat(SIMKL_DATE_FORMAT, Locale.getDefault()).apply { this.timeZone = TimeZone.getTimeZone("UTC") }.format( Date.from( @@ -208,7 +209,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { companion object { fun fromString(string: String): SimklListStatusType? { - return SimklListStatusType.values().firstOrNull { + return SimklListStatusType.entries.firstOrNull { it.originalName == string } } @@ -219,17 +220,17 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonInclude(JsonInclude.Include.NON_EMPTY) data class TokenRequest( @JsonProperty("code") val code: String, - @JsonProperty("client_id") val client_id: String = clientId, - @JsonProperty("client_secret") val client_secret: String = clientSecret, - @JsonProperty("redirect_uri") val redirect_uri: String = "$appString://simkl", - @JsonProperty("grant_type") val grant_type: String = "authorization_code" + @JsonProperty("client_id") val clientId: String = CLIENT_ID, + @JsonProperty("client_secret") val clientSecret: String = CLIENT_SECRET, + @JsonProperty("redirect_uri") val redirectUri: String = "$APP_STRING://simkl", + @JsonProperty("grant_type") val grantType: String = "authorization_code" ) data class TokenResponse( /** No expiration date */ - val access_token: String, - val token_type: String, - val scope: String + @JsonProperty("access_token") val accessToken: String, + @JsonProperty("token_type") val tokenType: String, + @JsonProperty("scope") val scope: String ) // ------------------- @@ -261,15 +262,15 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { // ------------------- data class ActivitiesResponse( - val all: String?, - val tv_shows: UpdatedAt, - val anime: UpdatedAt, - val movies: UpdatedAt, + @JsonProperty("all") val all: String?, + @JsonProperty("tv_shows") val tvShows: UpdatedAt, + @JsonProperty("anime") val anime: UpdatedAt, + @JsonProperty("movies") val movies: UpdatedAt, ) { data class UpdatedAt( - val all: String?, - val removed_from_list: String?, - val rated_at: String?, + @JsonProperty("all") val all: String?, + @JsonProperty("removed_from_list") val removedFromList: String?, + @JsonProperty("rated_at") val ratedAt: String?, ) } @@ -308,7 +309,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("title") val title: String?, @JsonProperty("year") val year: Int?, @JsonProperty("ids") val ids: Ids?, - @JsonProperty("total_episodes") val total_episodes: Int? = null, + @JsonProperty("total_episodes") val totalEpisodes: Int? = null, @JsonProperty("status") val status: String? = null, @JsonProperty("poster") val poster: String? = null, @JsonProperty("type") val type: String? = null, @@ -540,7 +541,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } debugPrint { "Requesting episodes from $url" } - return app.get(url, params = mapOf("client_id" to clientId)) + return app.get(url, params = mapOf("client_id" to CLIENT_ID)) .parsedSafe>()?.also { val cacheTime = if (hasEnded == true) SimklCache.CacheTimes.OneMonth.value else SimklCache.CacheTimes.ThirtyMinutes.value @@ -558,7 +559,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("seasons") seasons: List? = null, @JsonProperty("episodes") episodes: List? = null, @JsonProperty("rating") val rating: Int? = null, - @JsonProperty("rated_at") val rated_at: String? = null, + @JsonProperty("rated_at") val ratedAt: String? = null, ) : MediaObject(title, year, ids, seasons = seasons, episodes = episodes) @JsonInclude(JsonInclude.Include.NON_EMPTY) @@ -567,7 +568,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("year") year: Int?, @JsonProperty("ids") ids: Ids?, @JsonProperty("rating") val rating: Int, - @JsonProperty("rated_at") val rated_at: String? = getDateTime(unixTime) + @JsonProperty("rated_at") val ratedAt: String? = getDateTime(unixTime) ) : MediaObject(title, year, ids) @JsonInclude(JsonInclude.Include.NON_EMPTY) @@ -576,7 +577,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { @JsonProperty("year") year: Int?, @JsonProperty("ids") ids: Ids?, @JsonProperty("to") val to: String, - @JsonProperty("watched_at") val watched_at: String? = getDateTime(unixTime) + @JsonProperty("watched_at") val watchedAt: String? = getDateTime(unixTime) ) : MediaObject(title, year, ids) @JsonInclude(JsonInclude.Include.NON_EMPTY) @@ -631,24 +632,24 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } interface Metadata { - val last_watched_at: String? + val lastWatchedAt: String? val status: String? - val user_rating: Int? - val last_watched: String? - val watched_episodes_count: Int? - val total_episodes_count: Int? + val userRating: Int? + val lastWatched: String? + val watchedEpisodesCount: Int? + val totalEpisodesCount: Int? fun getIds(): ShowMetadata.Show.Ids fun toLibraryItem(): SyncAPI.LibraryItem } data class MovieMetadata( - override val last_watched_at: String?, - override val status: String, - override val user_rating: Int?, - override val last_watched: String?, - override val watched_episodes_count: Int?, - override val total_episodes_count: Int?, + @JsonProperty("last_watched_at") override val lastWatchedAt: String?, + @JsonProperty("status") override val status: String, + @JsonProperty("user_rating") override val userRating: Int?, + @JsonProperty("last_watched") override val lastWatched: String?, + @JsonProperty("watched_episodes_count") override val watchedEpisodesCount: Int?, + @JsonProperty("total_episodes_count") override val totalEpisodesCount: Int?, val movie: ShowMetadata.Show ) : Metadata { override fun getIds(): ShowMetadata.Show.Ids { @@ -660,10 +661,10 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { this.movie.title, "https://simkl.com/tv/${movie.ids.simkl}", movie.ids.simkl.toString(), - this.watched_episodes_count, - this.total_episodes_count, - this.user_rating?.times(10), - getUnixTime(last_watched_at) ?: 0, + this.watchedEpisodesCount, + this.totalEpisodesCount, + this.userRating?.times(10), + getUnixTime(lastWatchedAt) ?: 0, "Simkl", TvType.Movie, this.movie.poster?.let { getPosterUrl(it) }, @@ -675,12 +676,12 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { } data class ShowMetadata( - @JsonProperty("last_watched_at") override val last_watched_at: String?, + @JsonProperty("last_watched_at") override val lastWatchedAt: String?, @JsonProperty("status") override val status: String, - @JsonProperty("user_rating") override val user_rating: Int?, - @JsonProperty("last_watched") override val last_watched: String?, - @JsonProperty("watched_episodes_count") override val watched_episodes_count: Int?, - @JsonProperty("total_episodes_count") override val total_episodes_count: Int?, + @JsonProperty("user_rating") override val userRating: Int?, + @JsonProperty("last_watched") override val lastWatched: String?, + @JsonProperty("watched_episodes_count") override val watchedEpisodesCount: Int?, + @JsonProperty("total_episodes_count") override val totalEpisodesCount: Int?, @JsonProperty("show") val show: Show ) : Metadata { override fun getIds(): Show.Ids { @@ -692,10 +693,10 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { this.show.title, "https://simkl.com/tv/${show.ids.simkl}", show.ids.simkl.toString(), - this.watched_episodes_count, - this.total_episodes_count, - this.user_rating?.times(10), - getUnixTime(last_watched_at) ?: 0, + this.watchedEpisodesCount, + this.totalEpisodesCount, + this.userRating?.times(10), + getUnixTime(lastWatchedAt) ?: 0, "Simkl", TvType.Anime, this.show.poster?.let { getPosterUrl(it) }, @@ -749,7 +750,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { chain.request() .newBuilder() .addHeader("Authorization", "Bearer $token") - .addHeader("simkl-api-key", clientId) + .addHeader("simkl-api-key", CLIENT_ID) .build() ) } @@ -810,7 +811,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { val episodeConstructor = SimklEpisodeConstructor( searchResult.ids?.simkl, searchResult.type, - searchResult.total_episodes, + searchResult.totalEpisodes, searchResult.hasEnded() ) @@ -832,12 +833,12 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { ) } ?: return null, - score = foundItem.user_rating, - watchedEpisodes = foundItem.watched_episodes_count, - maxEpisodes = searchResult.total_episodes, + score = foundItem.userRating, + watchedEpisodes = foundItem.watchedEpisodesCount, + maxEpisodes = searchResult.totalEpisodes, episodeConstructor = episodeConstructor, - oldEpisodes = foundItem.watched_episodes_count ?: 0, - oldScore = foundItem.user_rating, + oldEpisodes = foundItem.watchedEpisodesCount ?: 0, + oldScore = foundItem.userRating, oldStatus = foundItem.status ) } else { @@ -845,7 +846,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { status = SyncWatchType.fromInternalId(SimklListStatusType.None.value), score = 0, watchedEpisodes = 0, - maxEpisodes = if (searchResult.type == "movie") 0 else searchResult.total_episodes, + maxEpisodes = if (searchResult.type == "movie") 0 else searchResult.totalEpisodes, episodeConstructor = episodeConstructor, oldEpisodes = 0, oldStatus = null, @@ -891,12 +892,12 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { /** See https://simkl.docs.apiary.io/#reference/search/id-lookup/get-items-by-id */ - suspend fun searchByIds(serviceMap: Map): Array? { + private suspend fun searchByIds(serviceMap: Map): Array? { if (serviceMap.isEmpty()) return emptyArray() return app.get( "$mainUrl/search/id", - params = mapOf("client_id" to clientId) + serviceMap.map { (service, id) -> + params = mapOf("client_id" to CLIENT_ID) + serviceMap.map { (service, id) -> service.originalName to id } ).parsedSafe() @@ -904,14 +905,14 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun search(name: String): List? { return app.get( - "$mainUrl/search/", params = mapOf("client_id" to clientId, "q" to name) + "$mainUrl/search/", params = mapOf("client_id" to CLIENT_ID, "q" to name) ).parsedSafe>()?.mapNotNull { it.toSyncSearchResult() } } override fun authenticate(activity: FragmentActivity?) { lastLoginState = BigInteger(130, SecureRandom()).toString(32) val url = - "https://simkl.com/oauth/authorize?response_type=code&client_id=$clientId&redirect_uri=$appString://${redirectUrl}&state=$lastLoginState" + "https://simkl.com/oauth/authorize?response_type=code&client_id=$CLIENT_ID&redirect_uri=$APP_STRING://${redirectUrl}&state=$lastLoginState" openBrowser(url, activity) } @@ -961,15 +962,15 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { val activities = getActivities() val lastCacheUpdate = getKey(accountId, SIMKL_CACHED_LIST_TIME) val lastRemoval = listOf( - activities?.tv_shows?.removed_from_list, - activities?.anime?.removed_from_list, - activities?.movies?.removed_from_list + activities?.tvShows?.removedFromList, + activities?.anime?.removedFromList, + activities?.movies?.removedFromList ).maxOf { getUnixTime(it) ?: -1 } val lastRealUpdate = listOf( - activities?.tv_shows?.all, + activities?.tvShows?.all, activities?.anime?.all, activities?.movies?.all, ).maxOf { @@ -1039,7 +1040,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun getDevicePin(): OAuth2API.PinAuthData? { val pinAuthResp = app.get( - "$mainUrl/oauth/pin?client_id=$clientId&redirect_uri=$appString://${redirectUrl}" + "$mainUrl/oauth/pin?client_id=$CLIENT_ID&redirect_uri=$APP_STRING://${redirectUrl}" ).parsedSafe() ?: return null return OAuth2API.PinAuthData( @@ -1053,7 +1054,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { override suspend fun handleDeviceAuth(pinAuthData: OAuth2API.PinAuthData): Boolean { val pinAuthResp = app.get( - "$mainUrl/oauth/pin/${pinAuthData.userCode}?client_id=$clientId" + "$mainUrl/oauth/pin/${pinAuthData.userCode}?client_id=$CLIENT_ID" ).parsedSafe() ?: return false if (pinAuthResp.accessToken != null) { @@ -1088,7 +1089,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { ).parsedSafe() ?: return false switchToNewAccount() - setKey(accountId, SIMKL_TOKEN_KEY, token.access_token) + setKey(accountId, SIMKL_TOKEN_KEY, token.accessToken) val user = getUser() if (user == null) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt index 0e233ece..8dad1f88 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SubSource.kt @@ -59,6 +59,7 @@ class SubSourceApi : AbstractSubProvider { it?.subs?.filter { sub -> sub.releaseName!!.contains( String.format( + null, "E%02d", query.epNumber ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt index a075cc2e..9150cfc5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/APIRepository.kt @@ -50,7 +50,7 @@ class APIRepository(val api: MainAPI) { private val cache = threadSafeListOf() private var cacheIndex: Int = 0 - const val cacheSize = 20 + const val CACHE_SIZE = 20 } private fun afterPluginsLoaded(forceReload: Boolean) { @@ -94,9 +94,9 @@ class APIRepository(val api: MainAPI) { val add = SavedLoadResponse(unixTime, response, lookingForHash) synchronized(cache) { - if (cache.size > cacheSize) { + if (cache.size > CACHE_SIZE) { cache[cacheIndex] = add // rolling cache - cacheIndex = (cacheIndex + 1) % cacheSize + cacheIndex = (cacheIndex + 1) % CACHE_SIZE } else { cache.add(add) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt index d90177f5..e930961c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/BaseAdapter.kt @@ -112,6 +112,7 @@ abstract class BaseAdapter< holder.onViewDetachedFromWindow() } + @Suppress("UNCHECKED_CAST") fun save(recyclerView: RecyclerView) { for (child in recyclerView.children) { val holder = @@ -124,6 +125,7 @@ abstract class BaseAdapter< stateViewModel.layoutManagerStates[id]?.clear() } + @Suppress("UNCHECKED_CAST") private fun getState(holder: ViewHolderState): S? = stateViewModel.layoutManagerStates[id]?.get(holder.absoluteAdapterPosition) as? S diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index 6bafa975..1eaac505 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -6,6 +6,7 @@ import android.view.Menu import android.view.View.* import android.widget.* import androidx.appcompat.app.AlertDialog +import androidx.media3.common.util.UnstableApi import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.kotlinModule @@ -263,6 +264,7 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi var isLoadingMore = false + override fun onMediaStatusUpdated() { super.onMediaStatusUpdated() val meta = getCurrentMetaData() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt index 1a9549e1..78ad2a6b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt @@ -8,8 +8,8 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlin.math.abs -class GrdLayoutManager(val context: Context, _spanCount: Int) : - GridLayoutManager(context, _spanCount) { +class GrdLayoutManager(val context: Context, spanCount: Int) : + GridLayoutManager(context, spanCount) { override fun onFocusSearchFailed( focused: View, focusDirection: Int, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt index c7041776..4879d2e0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/EasterEggMonke.kt @@ -51,7 +51,7 @@ class EasterEggMonke : AppCompatActivity() { FrameLayout.LayoutParams.WRAP_CONTENT) binding.frame.addView(newStar) - newStar.scaleX = Math.random().toFloat() * 1.5f + newStar.scaleX + newStar.scaleX += Math.random().toFloat() * 1.5f newStar.scaleY = newStar.scaleX starW *= newStar.scaleX starH *= newStar.scaleY diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/NonFinalAdapterListUpdateCallback.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/NonFinalAdapterListUpdateCallback.kt index f721401e..12a5ae2a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/NonFinalAdapterListUpdateCallback.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/NonFinalAdapterListUpdateCallback.kt @@ -15,7 +15,7 @@ open class NonFinalAdapterListUpdateCallback /** * Creates an AdapterListUpdateCallback that will dispatch update events to the given adapter. * - * @param adapter The Adapter to send updates to. + * @param mAdapter The Adapter to send updates to. */(private var mAdapter: RecyclerView.Adapter<*>) : ListUpdateCallback { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WatchType.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WatchType.kt index 9532d1a9..b778ba5a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WatchType.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WatchType.kt @@ -13,7 +13,7 @@ enum class WatchType(val internalId: Int, @StringRes val stringRes: Int, @Drawab NONE(5, R.string.type_none, R.drawable.ic_baseline_add_24); companion object { - fun fromInternalId(id: Int?) = values().find { value -> value.internalId == id } ?: NONE + fun fromInternalId(id: Int?) = entries.find { value -> value.internalId == id } ?: NONE } } @@ -36,6 +36,6 @@ enum class SyncWatchType(val internalId: Int, @StringRes val stringRes: Int, @Dr REWATCHING(5, R.string.type_re_watching, R.drawable.ic_baseline_bookmark_24); companion object { - fun fromInternalId(id: Int?) = values().find { value -> value.internalId == id } ?: NONE + fun fromInternalId(id: Int?) = entries.find { value -> value.internalId == id } ?: NONE } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt index 15e66b38..5e2b97e5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/WebviewFragment.kt @@ -8,8 +8,10 @@ import android.webkit.JavascriptInterface import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient +import androidx.annotation.OptIn import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import androidx.media3.common.util.UnstableApi import androidx.navigation.fragment.findNavController import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.USER_AGENT @@ -29,6 +31,7 @@ class WebviewFragment : Fragment() { } binding?.webView?.webViewClient = object : WebViewClient() { + @OptIn(UnstableApi::class) override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest? diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt index f10e103e..45132131 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt @@ -54,6 +54,7 @@ abstract class BaseFetchButton(context: Context, attributeSet: AttributeSet) : } init { + @Suppress("LeakingThis") resetViewData() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt index d97a4b88..20a44461 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/DownloadButton.kt @@ -13,7 +13,7 @@ import com.lagradost.cloudstream3.utils.VideoDownloadHelper class DownloadButton(context: Context, attributeSet: AttributeSet) : PieFetchButton(context, attributeSet) { - var mainText: TextView? = null + private var mainText: TextView? = null override fun onAttachedToWindow() { super.onAttachedToWindow() progressText = findViewById(R.id.result_movie_download_text_precentage) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt index ebed901f..b25486eb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeChildItemAdapter.kt @@ -15,7 +15,7 @@ import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.UIHelper.IsBottomLayout +import com.lagradost.cloudstream3.utils.UIHelper.isBottomLayout import com.lagradost.cloudstream3.utils.UIHelper.toPx class HomeScrollViewHolderState(view: ViewBinding) : ViewHolderState(view) { @@ -54,7 +54,7 @@ class HomeChildItemAdapter( var hasNext: Boolean = false override fun onCreateContent(parent: ViewGroup): ViewHolderState { - val expanded = parent.context.IsBottomLayout() + val expanded = parent.context.isBottomLayout() /* val layout = if (bottom) R.layout.home_result_grid_expanded else R.layout.home_result_grid val root = LayoutInflater.from(parent.context).inflate(layout, parent, false) @@ -133,7 +133,6 @@ class HomeChildItemAdapter( item, position, holder.itemView, - null, // nextFocusBehavior, nextFocusUp, nextFocusDown ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 82a92d80..49de2503 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -17,7 +17,6 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.lifecycle.* import androidx.preference.PreferenceManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -234,7 +233,7 @@ class HomeFragment : Fragment() { return bottomSheetDialogBuilder } - fun getPairList( + private fun getPairList( anime: Chip?, cartoons: Chip?, tvs: Chip?, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index 916cb9ae..8bc0aa28 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -1,6 +1,8 @@ package com.lagradost.cloudstream3.ui.home +import android.os.Build import android.os.Bundle +import android.os.Parcelable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -53,12 +55,12 @@ open class ParentItemAdapter( "value", recyclerView?.layoutManager?.onSaveInstanceState() ) - (recyclerView?.adapter as? BaseAdapter<*,*>)?.save(recyclerView) + (recyclerView?.adapter as? BaseAdapter<*, *>)?.save(recyclerView) } override fun restore(state: Bundle) { (binding as? HomepageParentBinding)?.homeChildRecyclerview?.layoutManager?.onRestoreInstanceState( - state.getParcelable("value") + state.getSafeParcelable("value") ) } } @@ -169,4 +171,9 @@ open class ParentItemAdapter( submitList(newList.map { HomeViewModel.ExpandableHomepageList(it, 1, false) } .toMutableList()) } -} \ No newline at end of file +} + +@Suppress("DEPRECATION") +inline fun Bundle.getSafeParcelable(key: String): T? = + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) getParcelable(key) + else getParcelable(key, T::class.java) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index 2e98dd1f..339ef1e1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -117,15 +117,12 @@ class HomeParentItemAdapterPreview( } override fun restore(state: Bundle) { - state.getParcelable("resumeRecyclerView")?.let { recycle -> + state.getSafeParcelable("resumeRecyclerView")?.let { recycle -> resumeRecyclerView.layoutManager?.onRestoreInstanceState(recycle) } - state.getParcelable("bookmarkRecyclerView")?.let { recycle -> + state.getSafeParcelable("bookmarkRecyclerView")?.let { recycle -> bookmarkRecyclerView.layoutManager?.onRestoreInstanceState(recycle) } - //state.getInt("previewViewpager").let { recycle -> - // previewViewpager.setCurrentItem(recycle,true) - //} } val previewAdapter = HomeScrollAdapter(fragment = fragment) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt index 9e70d088..24ca4df2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeViewModel.kt @@ -152,7 +152,7 @@ class HomeViewModel : ViewModel() { } }?.distinctBy { it.first } ?: return@launchSafe - val length = WatchType.values().size + val length = WatchType.entries.size val currentWatchTypes = mutableSetOf() for (watch in watchStatusIds) { @@ -387,7 +387,9 @@ class HomeViewModel : ViewModel() { } is Resource.Failure -> { + @Suppress("UNNECESSARY_NOT_NULL_ASSERTION") _page.postValue(data!!) + @Suppress("UNNECESSARY_NOT_NULL_ASSERTION") _preview.postValue(data!!) } @@ -397,9 +399,7 @@ class HomeViewModel : ViewModel() { } fun click(callback: SearchClickCallback) { - if (callback.action == SEARCH_ACTION_FOCUSED) { - //focusCallback(callback.card) - } else { + if (callback.action != SEARCH_ACTION_FOCUSED) { SearchHelper.handleSearchClickCallback(callback) } } @@ -516,7 +516,7 @@ class HomeViewModel : ViewModel() { } else { _page.postValue(Resource.Loading()) if (preferredApiName != null) - _apiName.postValue(preferredApiName) + _apiName.postValue(preferredApiName!!) } } else { // if the api is found, then set it to it and save key diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt index 7144de09..5b240693 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryFragment.kt @@ -600,8 +600,4 @@ class LibraryFragment : Fragment() { } } -class MenuSearchView(context: Context) : SearchView(context) { - override fun onActionViewCollapsed() { - super.onActionViewCollapsed() - } -} \ No newline at end of file +class MenuSearchView(context: Context) : SearchView(context) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index cfd22220..0110187f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -15,6 +15,7 @@ import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.BaseAdapter import com.lagradost.cloudstream3.ui.BaseDiffCallback import com.lagradost.cloudstream3.ui.ViewHolderState +import com.lagradost.cloudstream3.ui.home.getSafeParcelable import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV @@ -32,7 +33,7 @@ class ViewpagerAdapterViewHolderState(val binding: LibraryViewpagerPageBinding) } override fun restore(state: Bundle) { - state.getParcelable("pageRecyclerview")?.let { recycle -> + state.getSafeParcelable("pageRecyclerview")?.let { recycle -> binding.pageRecyclerview.layoutManager?.onRestoreInstanceState(recycle) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 9d838c97..88c34c87 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -25,6 +25,7 @@ import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.media3.common.PlaybackException +import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession import androidx.media3.ui.* @@ -216,7 +217,7 @@ abstract class AbstractPlayerFragment( return } player.handleEvent( - CSPlayerEvent.values()[intent.getIntExtra( + CSPlayerEvent.entries[intent.getIntExtra( EXTRA_CONTROL_TYPE, 0 )], source = PlayerEventSource.UI @@ -603,12 +604,12 @@ abstract class AbstractPlayerFragment( } fun nextResize() { - resizeMode = (resizeMode + 1) % PlayerResize.values().size + resizeMode = (resizeMode + 1) % PlayerResize.entries.size resize(resizeMode, true) } fun resize(resize: Int, showToast: Boolean) { - resize(PlayerResize.values()[resize], showToast) + resize(PlayerResize.entries[resize], showToast) } @SuppressLint("UnsafeOptInUsageError") 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 735e4095..86d67b28 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 @@ -9,7 +9,11 @@ import android.os.Looper import android.util.Log import android.util.Rational import android.widget.FrameLayout -import androidx.media3.common.C.* +import androidx.annotation.OptIn +import androidx.media3.common.C.TIME_UNSET +import androidx.media3.common.C.TRACK_TYPE_AUDIO +import androidx.media3.common.C.TRACK_TYPE_TEXT +import androidx.media3.common.C.TRACK_TYPE_VIDEO import androidx.media3.common.Format import androidx.media3.common.MediaItem import androidx.media3.common.MimeTypes @@ -19,9 +23,10 @@ import androidx.media3.common.TrackGroup import androidx.media3.common.TrackSelectionOverride import androidx.media3.common.Tracks import androidx.media3.common.VideoSize +import androidx.media3.common.util.UnstableApi import androidx.media3.database.StandaloneDatabaseProvider import androidx.media3.datasource.DataSource -import androidx.media3.datasource.DefaultDataSourceFactory +import androidx.media3.datasource.DefaultDataSource import androidx.media3.datasource.DefaultHttpDataSource import androidx.media3.datasource.HttpDataSource import androidx.media3.datasource.cache.CacheDataSource @@ -66,7 +71,6 @@ import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList import com.lagradost.cloudstream3.utils.ExtractorLinkType import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import java.io.File -import java.lang.IllegalArgumentException import java.util.UUID import javax.net.ssl.HttpsURLConnection import javax.net.ssl.SSLContext @@ -84,7 +88,7 @@ const val toleranceBeforeUs = 300_000L * seek position, in microseconds. Must be non-negative. */ const val toleranceAfterUs = 300_000L - +@OptIn(UnstableApi::class) class CS3IPlayer : IPlayer { private var isPlaying = false private var exoPlayer: ExoPlayer? = null @@ -257,7 +261,6 @@ class CS3IPlayer : IPlayer { private var currentSubtitles: SubtitleData? = null - @SuppressLint("UnsafeOptInUsageError") private fun List.getTrack(id: String?): Pair? { if (id == null) return null // This beast of an expression does: @@ -342,7 +345,6 @@ class CS3IPlayer : IPlayer { }.flatten() } - @SuppressLint("UnsafeOptInUsageError") private fun Tracks.Group.getFormats(): List> { return (0 until this.mediaTrackGroup.length).mapNotNull { i -> if (this.isSupported) @@ -371,7 +373,6 @@ class CS3IPlayer : IPlayer { ) } - @SuppressLint("UnsafeOptInUsageError") override fun getVideoTracks(): CurrentTracks { val allTracks = exoPlayer?.currentTracks?.groups ?: emptyList() val videoTracks = allTracks.filter { it.type == TRACK_TYPE_VIDEO } @@ -391,7 +392,6 @@ class CS3IPlayer : IPlayer { /** * @return True if the player should be reloaded * */ - @SuppressLint("UnsafeOptInUsageError") override fun setPreferredSubtitles(subtitle: SubtitleData?): Boolean { Log.i(TAG, "setPreferredSubtitles init $subtitle") currentSubtitles = subtitle @@ -451,7 +451,7 @@ class CS3IPlayer : IPlayer { } ?: false } - var currentSubtitleOffset: Long = 0 + private var currentSubtitleOffset: Long = 0 override fun setSubtitleOffset(offset: Long) { currentSubtitleOffset = offset @@ -459,7 +459,7 @@ class CS3IPlayer : IPlayer { } override fun getSubtitleOffset(): Long { - return currentSubtitleOffset //currentTextRenderer?.getRenderOffsetMs() ?: currentSubtitleOffset + return currentSubtitleOffset } override fun getCurrentPreferredSubtitle(): SubtitleData? { @@ -470,7 +470,6 @@ class CS3IPlayer : IPlayer { } } - @SuppressLint("UnsafeOptInUsageError") override fun getAspectRatio(): Rational? { return exoPlayer?.videoFormat?.let { format -> Rational(format.width, format.height) @@ -481,14 +480,13 @@ class CS3IPlayer : IPlayer { subtitleHelper.setSubStyle(style) } - @SuppressLint("UnsafeOptInUsageError") override fun saveData() { Log.i(TAG, "saveData") updatedTime() exoPlayer?.let { exo -> playbackPosition = exo.currentPosition - currentWindow = exo.currentWindowIndex + currentWindow = exo.currentMediaItemIndex isPlaying = exo.isPlaying } } @@ -500,7 +498,7 @@ class CS3IPlayer : IPlayer { updatedTime() exoPlayer?.apply { - setPlayWhenReady(false) + playWhenReady = false stop() release() } @@ -563,7 +561,6 @@ class CS3IPlayer : IPlayer { var requestSubtitleUpdate: (() -> Unit)? = null - @SuppressLint("UnsafeOptInUsageError") private fun createOnlineSource(headers: Map): HttpDataSource.Factory { val source = OkHttpDataSource.Factory(app.baseClient).setUserAgent(USER_AGENT) return source.apply { @@ -571,7 +568,6 @@ class CS3IPlayer : IPlayer { } } - @SuppressLint("UnsafeOptInUsageError") private fun createOnlineSource(link: ExtractorLink): HttpDataSource.Factory { val provider = getApiFromNameNull(link.source) val interceptor = provider?.getVideoInterceptor(link) @@ -604,53 +600,10 @@ class CS3IPlayer : IPlayer { } } - @SuppressLint("UnsafeOptInUsageError") private fun Context.createOfflineSource(): DataSource.Factory { - return DefaultDataSourceFactory(this, USER_AGENT) + return DefaultDataSource.Factory(this, DefaultHttpDataSource.Factory().setUserAgent(USER_AGENT)) } - /*private fun getSubSources( - onlineSourceFactory: DataSource.Factory?, - offlineSourceFactory: DataSource.Factory?, - subHelper: PlayerSubtitleHelper, - ): Pair, List> { - val activeSubtitles = ArrayList() - val subSources = subHelper.getAllSubtitles().mapNotNull { sub -> - val subConfig = MediaItem.SubtitleConfiguration.Builder(Uri.parse(sub.url)) - .setMimeType(sub.mimeType) - .setLanguage("_${sub.name}") - .setSelectionFlags(C.SELECTION_FLAG_DEFAULT) - .build() - when (sub.origin) { - SubtitleOrigin.DOWNLOADED_FILE -> { - if (offlineSourceFactory != null) { - activeSubtitles.add(sub) - SingleSampleMediaSource.Factory(offlineSourceFactory) - .createMediaSource(subConfig, C.TIME_UNSET) - } else { - null - } - } - SubtitleOrigin.URL -> { - if (onlineSourceFactory != null) { - activeSubtitles.add(sub) - SingleSampleMediaSource.Factory(onlineSourceFactory) - .createMediaSource(subConfig, C.TIME_UNSET) - } else { - null - } - } - SubtitleOrigin.OPEN_SUBTITLES -> { - // TODO - throw NotImplementedError() - } - } - } - println("SUBSRC: ${subSources.size} activeSubtitles : ${activeSubtitles.size} of ${subHelper.getAllSubtitles().size} ") - return Pair(subSources, activeSubtitles) - }*/ - - @SuppressLint("UnsafeOptInUsageError") private fun getCache(context: Context, cacheSize: Long): SimpleCache? { return try { val databaseProvider = StandaloneDatabaseProvider(context) @@ -682,7 +635,6 @@ class CS3IPlayer : IPlayer { return getMediaItemBuilder(mimeType).setUri(url).build() } - @SuppressLint("UnsafeOptInUsageError") private fun getTrackSelector(context: Context, maxVideoHeight: Int?): TrackSelector { val trackSelector = DefaultTrackSelector(context) trackSelector.parameters = trackSelector.buildUponParameters() @@ -696,7 +648,6 @@ class CS3IPlayer : IPlayer { var currentTextRenderer: CustomTextRenderer? = null - @SuppressLint("UnsafeOptInUsageError") private fun buildExoPlayer( context: Context, mediaItemSlices: List, @@ -736,7 +687,7 @@ class CS3IPlayer : IPlayer { textRendererOutput, eventHandler.looper, CustomSubtitleDecoderFactory() - ).also { this.currentTextRenderer = it } + ).also { renderer -> this.currentTextRenderer = renderer } currentTextRenderer } else it }.toTypedArray() @@ -1033,7 +984,7 @@ class CS3IPlayer : IPlayer { } } - @SuppressLint("UnsafeOptInUsageError") + //fixme: Use onPlaybackStateChanged(int) and onPlayWhenReadyChanged(boolean, int) instead. override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { exoPlayer?.let { exo -> event( @@ -1169,7 +1120,6 @@ class CS3IPlayer : IPlayer { private var lastTimeStamps: List = emptyList() - @SuppressLint("UnsafeOptInUsageError") override fun addTimeStamps(timeStamps: List) { lastTimeStamps = timeStamps timeStamps.forEach { timestamp -> @@ -1187,7 +1137,6 @@ class CS3IPlayer : IPlayer { updatedTime(source = PlayerEventSource.Player) } - @SuppressLint("UnsafeOptInUsageError") fun onRenderFirst() { if (hasUsedFirstRender) { // this insures that we only call this once per player load return @@ -1254,7 +1203,6 @@ class CS3IPlayer : IPlayer { } } - @SuppressLint("UnsafeOptInUsageError") private fun getSubSources( onlineSourceFactory: HttpDataSource.Factory?, offlineSourceFactory: DataSource.Factory?, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt index 20d093a6..07ce413e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt @@ -2,6 +2,7 @@ package com.lagradost.cloudstream3.ui.player import android.content.Context import android.util.Log +import androidx.annotation.OptIn import androidx.preference.PreferenceManager import androidx.media3.common.Format import androidx.media3.common.MimeTypes @@ -31,7 +32,7 @@ import java.nio.charset.Charset * @param fallbackFormat used to create a decoder based on mimetype if the subtitle string is not * enough to identify the subtitle format. **/ -@UnstableApi +@OptIn(UnstableApi::class) class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder { companion object { fun updateForcedEncoding(context: Context) { @@ -72,7 +73,7 @@ class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder { RegexOption.IGNORE_CASE ), ) - val captionRegex = listOf(Regex("""(-\s?|)[\[({][\w\d\s]*?[])}]\s*""")) + val captionRegex = listOf(Regex("""(-\s?|)[\[({][\w\s]*?[])}]\s*""")) //https://emptycharacter.com/ //https://www.fileformat.info/info/unicode/char/200b/index.htm @@ -262,7 +263,7 @@ class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder { } /** See https://github.com/google/ExoPlayer/blob/release-v2/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleDecoderFactory.java */ -@UnstableApi +@OptIn(UnstableApi::class) class CustomSubtitleDecoderFactory : SubtitleDecoderFactory { override fun supportsFormat(format: Format): Boolean { // return SubtitleDecoderFactory.DEFAULT.supportsFormat(format) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomTextRenderer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomTextRenderer.kt index d6b0735d..f2b863fb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomTextRenderer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomTextRenderer.kt @@ -1,11 +1,12 @@ package com.lagradost.cloudstream3.ui.player import android.os.Looper +import androidx.annotation.OptIn import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.text.SubtitleDecoderFactory import androidx.media3.exoplayer.text.TextOutput -@UnstableApi +@OptIn(UnstableApi::class) class CustomTextRenderer( offset: Long, output: TextOutput?, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index 3b242172..a8a3106a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -49,7 +49,7 @@ class DownloadFileGenerator( return null } - fun cleanDisplayName(name: String): String { + private fun cleanDisplayName(name: String): String { return name.substringBeforeLast('.').trim() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 92ef279d..4279b542 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -8,14 +8,10 @@ import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.UIHelper.navigate -import com.lagradost.safefile.SafeFile import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playLink import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playUri -const val DTAG = "PlayerActivity" - class DownloadedPlayerActivity : AppCompatActivity() { private val dTAG = "DownloadedPlayerAct" 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 ef7d6bc1..b2e80749 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 @@ -25,6 +25,7 @@ import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHO import android.view.animation.AlphaAnimation import android.view.animation.Animation import android.view.animation.AnimationUtils +import androidx.annotation.OptIn import android.widget.LinearLayout import androidx.appcompat.app.AlertDialog import androidx.core.graphics.blue @@ -35,6 +36,7 @@ import androidx.core.view.isGone import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged +import androidx.media3.common.util.UnstableApi import androidx.preference.PreferenceManager import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.CommonActivity.keyEventListener @@ -50,7 +52,6 @@ import com.lagradost.cloudstream3.ui.player.GeneratorPlayer.Companion.subsProvid import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper import com.lagradost.cloudstream3.ui.result.setText import com.lagradost.cloudstream3.ui.result.txt -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout @@ -245,6 +246,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { fadeAnimation.duration = 100 fadeAnimation.fillAfter = true + @OptIn(UnstableApi::class) val sView = subView val sStyle = subStyle if (sView != null && sStyle != null) { @@ -300,42 +302,40 @@ open class FullScreenPlayer : AbstractPlayerFragment() { private fun restoreOrientationWithSensor(activity: Activity) { val currentOrientation = activity.resources.configuration.orientation - var orientation = 0 - when (currentOrientation) { + val orientation = when (currentOrientation) { Configuration.ORIENTATION_LANDSCAPE -> - orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE - - Configuration.ORIENTATION_SQUARE, Configuration.ORIENTATION_UNDEFINED -> - orientation = dynamicOrientation() + ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE Configuration.ORIENTATION_PORTRAIT -> - orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + + else -> dynamicOrientation() } activity.requestedOrientation = orientation } private fun toggleOrientationWithSensor(activity: Activity) { val currentOrientation = activity.resources.configuration.orientation - var orientation = 0 - when (currentOrientation) { + val orientation: Int = when (currentOrientation) { Configuration.ORIENTATION_LANDSCAPE -> - orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT - - Configuration.ORIENTATION_SQUARE, Configuration.ORIENTATION_UNDEFINED -> - orientation = dynamicOrientation() + ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT Configuration.ORIENTATION_PORTRAIT -> - orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + + else -> dynamicOrientation() } activity.requestedOrientation = orientation } open fun lockOrientation(activity: Activity) { - val display = + @Suppress("DEPRECATION") + val display = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) (activity.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay + else activity.display!! val rotation = display.rotation val currentOrientation = activity.resources.configuration.orientation - var orientation = 0 + val orientation: Int when (currentOrientation) { Configuration.ORIENTATION_LANDSCAPE -> orientation = @@ -344,15 +344,14 @@ open class FullScreenPlayer : AbstractPlayerFragment() { else ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE - Configuration.ORIENTATION_SQUARE, Configuration.ORIENTATION_UNDEFINED -> - orientation = dynamicOrientation() - Configuration.ORIENTATION_PORTRAIT -> orientation = if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT + + else -> orientation = dynamicOrientation() } activity.requestedOrientation = orientation } @@ -1167,6 +1166,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { return true } + @SuppressLint("GestureBackNavigation") private fun handleKeyEvent(event: KeyEvent, hasNavigated: Boolean): Boolean { if (hasNavigated) { autoHide() @@ -1581,7 +1581,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } } // cs3 is peak media center - setRemainingTimeCounter(durationMode || Globals.isLayout(Globals.TV)) + setRemainingTimeCounter(durationMode || isLayout(TV)) playerBinding?.exoPosition?.doOnTextChanged { _, _, _, _ -> updateRemainingTime() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 1f7cc5bd..8e8f6bf5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -6,6 +6,7 @@ import android.app.Dialog import android.content.Context import android.content.Intent import android.content.res.ColorStateList +import android.os.Build import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -13,6 +14,7 @@ import android.view.View import android.view.ViewGroup import android.widget.* import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.OptIn import androidx.core.animation.addListener import androidx.core.content.ContextCompat import androidx.core.view.isGone @@ -21,6 +23,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager import androidx.media3.common.Format.NO_VALUE import androidx.media3.common.MimeTypes +import androidx.media3.common.util.UnstableApi import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -63,6 +66,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.safefile.SafeFile import kotlinx.coroutines.Job +import java.io.Serializable import java.util.* import kotlin.math.abs @@ -234,7 +238,7 @@ class GeneratorPlayer : FullScreenPlayer() { private fun closestQuality(target: Int?): Qualities { if (target == null) return Qualities.Unknown - return Qualities.values().minBy { abs(it.value - target) } + return Qualities.entries.minBy { abs(it.value - target) } } private fun getLinkPriority( @@ -367,8 +371,6 @@ class GeneratorPlayer : FullScreenPlayer() { binding.subtitleAdapter.choiceMode = AbsListView.CHOICE_MODE_SINGLE binding.subtitleAdapter.adapter = arrayAdapter - val adapter = - binding.subtitleAdapter.adapter as? ArrayAdapter binding.subtitleAdapter.setOnItemClickListener { _, _, position, _ -> currentSubtitle = currentSubtitles.getOrNull(position) ?: return@setOnItemClickListener @@ -379,8 +381,8 @@ class GeneratorPlayer : FullScreenPlayer() { fun setSubtitlesList(list: List) { currentSubtitles = list - adapter?.clear() - adapter?.addAll(currentSubtitles) + arrayAdapter.clear() + arrayAdapter.addAll(currentSubtitles) } val currentTempMeta = getMetaData() @@ -522,7 +524,7 @@ class GeneratorPlayer : FullScreenPlayer() { //TODO: Set year text from currently loaded movie on Player //dialog.subtitles_search_year?.setText(currentTempMeta.year) } - + @OptIn(UnstableApi::class) private fun openSubPicker() { try { subsPathPicker.launch( @@ -795,7 +797,6 @@ class GeneratorPlayer : FullScreenPlayer() { settingsManager.edit().putString( ctx.getString(R.string.subtitles_encoding_key), prefValues[it] ).apply() - updateForcedEncoding(ctx) dismiss() player.seekTime(-1) // to update subtitles, a dirty trick @@ -1290,7 +1291,7 @@ class GeneratorPlayer : FullScreenPlayer() { private fun unwrapBundle(savedInstanceState: Bundle?) { Log.i(TAG, "unwrapBundle = $savedInstanceState") savedInstanceState?.let { bundle -> - sync.addSyncs(bundle.getSerializable("syncData") as? HashMap?) + sync.addSyncs(bundle.getSafeSerializable>("syncData")) } } @@ -1507,3 +1508,6 @@ class GeneratorPlayer : FullScreenPlayer() { } } } + +@Suppress("DEPRECATION") +inline fun Bundle.getSafeSerializable(key: String) : T? = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) getSerializable(key) as? T else getSerializable(key, T::class.java) \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt index 5f7161f7..89c6f73b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/IPlayer.kt @@ -8,7 +8,6 @@ import com.lagradost.cloudstream3.utils.EpisodeSkip import com.lagradost.cloudstream3.utils.ExtractorLink enum class PlayerEventType(val value: Int) { - //Stop(-1), Pause(0), Play(1), SeekForward(2), diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 89e3c8de..07ea56dd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -4,7 +4,6 @@ import android.net.Uri import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.amap import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.ui.player.ExtractorUri import com.lagradost.cloudstream3.utils.INFER_TYPE import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.loadExtractor diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java b/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java index 3482f21c..232440cc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/NonFinalTextRenderer.java @@ -29,6 +29,7 @@ import android.os.Message; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.OptIn; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.text.Cue; @@ -66,7 +67,7 @@ import java.util.stream.Collectors; * obtained from a {@link SubtitleDecoderFactory}. The actual rendering of the subtitle {@link Cue}s * is delegated to a {@link TextOutput}. */ -@UnstableApi +@OptIn(markerClass = UnstableApi.class) public class NonFinalTextRenderer extends BaseRenderer implements Callback { private static final String TAG = "TextRenderer"; @@ -74,7 +75,7 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback { /** * @param trackType The track type that the renderer handles. One of the {@link C} {@code * TRACK_TYPE_*} constants. - * @param outputHandler + * @param outputHandler todo description */ public NonFinalTextRenderer(int trackType, @Nullable Handler outputHandler) { super(trackType); @@ -416,13 +417,11 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback { @SuppressWarnings("unchecked") @Override public boolean handleMessage(Message msg) { - switch (msg.what) { - case MSG_UPDATE_OUTPUT: - invokeUpdateOutputInternal((List) msg.obj); - return true; - default: - throw new IllegalStateException(); + if (msg.what == MSG_UPDATE_OUTPUT) { + invokeUpdateOutputInternal((List) msg.obj); + return true; } + throw new IllegalStateException(); } private void invokeUpdateOutputInternal(List cues) { @@ -441,7 +440,6 @@ public class NonFinalTextRenderer extends BaseRenderer implements Callback { } ).collect(Collectors.toList()); - output.onCues(fixedCues); output.onCues(new CueGroup(fixedCues, 0L)); } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt index e6de1266..f00f8a61 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/OfflinePlaybackHelper.kt @@ -4,8 +4,8 @@ import android.app.Activity import android.content.ContentUris import android.net.Uri import androidx.core.content.ContextCompat.getString +import androidx.media3.common.util.UnstableApi import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.ui.player.ExtractorUri import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.safefile.SafeFile diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index 1ba5a29f..122eaa97 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.launch class PlayerGeneratorViewModel : ViewModel() { companion object { - val TAG = "PlayViewGen" + const val TAG = "PlayViewGen" } private var generator: IGenerator? = null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt index 25d7e3dd..02a7ee03 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt @@ -4,7 +4,9 @@ import android.util.Log import android.util.TypedValue import android.view.ViewGroup import android.widget.FrameLayout +import androidx.annotation.OptIn import androidx.media3.common.MimeTypes +import androidx.media3.common.util.UnstableApi import androidx.media3.ui.SubtitleView import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.regexSubtitlesToRemoveBloat @@ -47,6 +49,7 @@ data class SubtitleData( } } +@OptIn(UnstableApi::class) class PlayerSubtitleHelper { private var activeSubtitles: Set = emptySet() private var allSubtitles: Set = emptySet() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt index 7c78ce63..2d1feaab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt @@ -239,7 +239,11 @@ private class M3u8PreviewGenerator(override var params: ImageParams) : IPreviewG // generated images 1:1 to idx of hsl private var images: Array = arrayOf() - private val TAG = "PreviewImgM3u8" + companion object { + private const val TAG = "PreviewImgM3u8" + } + + // prefixSum[i] = sum(hsl.ts[0..i].time) // where [0] = 0, [1] = hsl.ts[0].time aka time at start of segment, do [b] - [a] for range a,b @@ -388,13 +392,6 @@ private class M3u8PreviewGenerator(override var params: ImageParams) : IPreviewG logError(t) continue } - - /* - val buffer = hsl.resolveLinkSafe(index) ?: continue - tmpFile?.writeBytes(buffer) - val buff = FileOutputStream(tmpFile) - retriever.setDataSource(buff.fd) - val frame = retriever.getFrameAtTime(0L)*/ } } @@ -412,14 +409,16 @@ private class Mp4PreviewGenerator(override var params: ImageParams) : IPreviewGe null } + companion object { + private const val TAG = "PreviewImgMp4" + } + override fun hasPreview(): Boolean { synchronized(images) { return loadedLod >= MIN_LOD } } - val TAG = "PreviewImgMp4" - override fun getPreviewImage(fraction: Float): Bitmap? { synchronized(images) { if (loadedLod < MIN_LOD) { @@ -524,7 +523,7 @@ private class Mp4PreviewGenerator(override var params: ImageParams) : IPreviewGe val fraction = (1.0f.div((1 shl l).toFloat()) + i * 1.0f.div(items.toFloat())) Log.i(TAG, "Generating preview for ${fraction * 100}%") val frame = durationUs * fraction - val img = retriever.image(frame.toLong(), params); + val img = retriever.image(frame.toLong(), params) if (!scope.isActive) return if (img == null || img.width <= 1 || img.height <= 1) continue synchronized(images) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt index 90bd1ca7..6943c641 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/RepoLinkGenerator.kt @@ -1,6 +1,7 @@ package com.lagradost.cloudstream3.ui.player import android.util.Log +import androidx.media3.common.util.UnstableApi import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.LoadResponse diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt index 1e2c9f67..ce457740 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/PriorityAdapter.kt @@ -17,7 +17,6 @@ class PriorityAdapter(override val items: MutableList>) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return PriorityViewHolder( PlayerPrioritizeItemBinding.inflate(LayoutInflater.from(parent.context),parent,false), - //LayoutInflater.from(parent.context).inflate(R.layout.player_prioritize_item, parent, false) ) } @@ -31,10 +30,6 @@ class PriorityAdapter(override val items: MutableList>) : val binding: PlayerPrioritizeItemBinding, ) : RecyclerView.ViewHolder(binding.root) { fun bind(item: SourcePriority) { - /* val plusButton: ImageView = itemView.add_button - val subtractButton: ImageView = itemView.subtract_button - val priorityText: TextView = itemView.priority_text - val priorityNumber: TextView = itemView.priority_number*/ binding.priorityText.text = item.name fun updatePriority() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt index b587276f..45f6aa66 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/ProfilesAdapter.kt @@ -29,8 +29,6 @@ class ProfilesAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ProfilesViewHolder( PlayerQualityProfileItemBinding.inflate(LayoutInflater.from(parent.context),parent,false) - //LayoutInflater.from(parent.context) - // .inflate(R.layout.player_quality_profile_item, parent, false) ) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt index 96249db4..3267efd7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityDataHelper.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.player.source_priority -import android.content.Context import androidx.annotation.StringRes import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey @@ -104,7 +103,7 @@ object QualityDataHelper { * Must under all circumstances at least return one profile **/ fun getProfiles(): List { - val availableTypes = QualityProfileType.values().toMutableList() + val availableTypes = QualityProfileType.entries.toMutableList() val profiles = (1..PROFILE_COUNT).map { profileNumber -> // Get the real type val type = getQualityProfileType(profileNumber) @@ -140,12 +139,12 @@ object QualityDataHelper { } } - QualityProfileType.values().forEach { + QualityProfileType.entries.forEach { if (it.unique) insertType(profiles, it) } debugAssert({ - !QualityProfileType.values().all { type -> + !QualityProfileType.entries.all { type -> !type.unique || profiles.any { it.type == type } } }, { "All unique quality types do not exist" }) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt index e3629158..0537092c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt @@ -65,7 +65,7 @@ class QualityProfileDialog( setDefaultBtt.setOnClickListener { val currentProfile = getCurrentProfile() ?: return@setOnClickListener - val choices = QualityDataHelper.QualityProfileType.values() + val choices = QualityDataHelper.QualityProfileType.entries .filter { it != QualityDataHelper.QualityProfileType.None } val choiceNames = choices.map { txt(it.stringRes).asString(context) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt index 1b59882e..bc6282af 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt @@ -47,7 +47,7 @@ class SourcePriorityDialog( ) qualitiesRecyclerView.adapter = PriorityAdapter( - Qualities.values().mapNotNull { + Qualities.entries.mapNotNull { SourcePriority( it, Qualities.getStringByIntFull(it.value).ifBlank { return@mapNotNull null }, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index 61188905..0ca326dd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -3,8 +3,6 @@ package com.lagradost.cloudstream3.ui.result import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.annotation.IdRes -import androidx.annotation.LayoutRes import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView @@ -70,8 +68,7 @@ class ActorAdaptor( } } - private inner class CardViewHolder - constructor( + private inner class CardViewHolder( val binding: CastItemBinding, private val focusCallback: (View?) -> Unit = {} ) : diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 06be6bd5..d12521b3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -169,8 +169,7 @@ class EpisodeAdapter( return cardList.size } - class EpisodeCardViewHolderLarge - constructor( + class EpisodeCardViewHolderLarge( val binding: ResultEpisodeLargeBinding, private val hasDownloadSupport: Boolean, private val clickCallback: (EpisodeClickEvent) -> Unit, @@ -335,8 +334,7 @@ class EpisodeAdapter( } } - class EpisodeCardViewHolderSmall - constructor( + class EpisodeCardViewHolderSmall( val binding: ResultEpisodeBinding, private val hasDownloadSupport: Boolean, private val clickCallback: (EpisodeClickEvent) -> Unit, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt index 7b7bae43..eecd6262 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ImageAdapter.kt @@ -8,18 +8,6 @@ import com.lagradost.cloudstream3.databinding.ResultMiniImageBinding import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -/* -class ImageAdapter(context: Context, val resource: Int) : ArrayAdapter(context, resource) { - override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { - val newConvertView = convertView ?: run { - val mInflater = context - .getSystemService(Activity.LAYOUT_INFLATER_SERVICE) as LayoutInflater - mInflater.inflate(resource, null) - } - getItem(position)?.let { (newConvertView as? ImageView?)?.setImageResource(it) } - return newConvertView - } -}*/ const val IMAGE_CLICK = 0 const val IMAGE_LONG_CLICK = 1 @@ -66,8 +54,7 @@ class ImageAdapter( diffResult.dispatchUpdatesTo(this) } - class ImageViewHolder - constructor(val binding: ResultMiniImageBinding) : + class ImageViewHolder(val binding: ResultMiniImageBinding) : RecyclerView.ViewHolder(binding.root) { fun bind( img: Int, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 2f297098..f1399e8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -78,11 +78,12 @@ import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.VideoDownloadHelper open class ResultFragmentPhone : FullScreenPlayer() { - private val gestureRegionsListener = object : PanelsChildGestureRegionObserver.GestureRegionsListener { - override fun onGestureRegionsUpdate(gestureRegions: List) { - binding?.resultOverlappingPanels?.setChildGestureRegions(gestureRegions) + private val gestureRegionsListener = + object : PanelsChildGestureRegionObserver.GestureRegionsListener { + override fun onGestureRegionsUpdate(gestureRegions: List) { + binding?.resultOverlappingPanels?.setChildGestureRegions(gestureRegions) + } } - } protected lateinit var viewModel: ResultViewModel2 protected lateinit var syncModel: SyncViewModel @@ -336,7 +337,6 @@ open class ResultFragmentPhone : FullScreenPlayer() { } - // ===== ===== ===== resultBinding?.apply { @@ -430,16 +430,16 @@ open class ResultFragmentPhone : FullScreenPlayer() { if (newStatus == null) return@toggleSubscriptionStatus val message = if (newStatus) { - // Kinda icky to have this here, but it works. - SubscriptionWorkManager.enqueuePeriodicWork(context) - R.string.subscription_new - } else { - R.string.subscription_deleted - } + // Kinda icky to have this here, but it works. + SubscriptionWorkManager.enqueuePeriodicWork(context) + R.string.subscription_new + } else { + R.string.subscription_deleted + } - val name = (viewModel.page.value as? Resource.Success)?.value?.title - ?: txt(R.string.no_data).asStringNull(context) ?: "" - showToast(txt(message, name), Toast.LENGTH_SHORT) + val name = (viewModel.page.value as? Resource.Success)?.value?.title + ?: txt(R.string.no_data).asStringNull(context) ?: "" + showToast(txt(message, name), Toast.LENGTH_SHORT) } context?.let { openBatteryOptimizationSettings(it) } } @@ -473,8 +473,16 @@ open class ResultFragmentPhone : FullScreenPlayer() { if (act.isCastApiAvailable()) { try { CastButtonFactory.setUpMediaRouteButton(act, this) - val castContext = CastContext.getSharedInstance(act.applicationContext) - isGone = castContext.castState == CastState.NO_DEVICES_AVAILABLE + CastContext.getSharedInstance(act.applicationContext) { + it.run() + }.addOnCompleteListener { + isGone = if (it.isSuccessful) { + it.result.castState == CastState.NO_DEVICES_AVAILABLE + } else { + true + } + + } // this shit leaks for some reason //castContext.addCastStateListener { state -> // media_route_button?.isGone = state == CastState.NO_DEVICES_AVAILABLE @@ -961,12 +969,12 @@ open class ResultFragmentPhone : FullScreenPlayer() { setOnClickListener { fab -> activity?.showBottomDialog( - WatchType.values().map { fab.context.getString(it.stringRes) }.toList(), + WatchType.entries.map { fab.context.getString(it.stringRes) }.toList(), watchType.ordinal, fab.context.getString(R.string.action_add_to_bookmarks), showApply = false, {}) { - viewModel.updateWatchStatus(WatchType.values()[it], context) + viewModel.updateWatchStatus(WatchType.entries[it], context) } } } @@ -1046,7 +1054,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { text?.asStringNull(ctx) ?: return@mapNotNull null ) }) { - viewModel.changeDubStatus(DubStatus.values()[itemId]) + viewModel.changeDubStatus(DubStatus.entries[itemId]) } } } @@ -1103,7 +1111,8 @@ open class ResultFragmentPhone : FullScreenPlayer() { override fun onPause() { super.onPause() - PanelsChildGestureRegionObserver.Provider.get().addGestureRegionsUpdateListener(gestureRegionsListener) + PanelsChildGestureRegionObserver.Provider.get() + .addGestureRegionsUpdateListener(gestureRegionsListener) } private fun setRecommendations(rec: List?, validApiName: String?) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index a0207060..1878f0b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -56,7 +56,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setImage class ResultFragmentTv : Fragment() { - protected lateinit var viewModel: ResultViewModel2 + private lateinit var viewModel: ResultViewModel2 private var binding: FragmentResultTvBinding? = null override fun onDestroyView() { @@ -418,10 +418,6 @@ class ResultFragmentTv : Fragment() { resultCastItems.layoutManager = object : LinearListLayout(view.context) { - override fun onInterceptFocusSearch(focused: View, direction: Int): View? { - return super.onInterceptFocusSearch(focused, direction) - } - override fun onRequestChildFocus( parent: RecyclerView, state: RecyclerView.State, @@ -649,7 +645,7 @@ class ResultFragmentTv : Fragment() { binding?.apply { - (data as? Resource.Success)?.value?.let { (text, ep) -> + (data as? Resource.Success)?.value?.let { (_, ep) -> resultPlayMovieButton.setOnClickListener { viewModel.handleAction( @@ -817,45 +813,8 @@ class ResultFragmentTv : Fragment() { } } - /* - * Okay so what is this fuckery? - * Basically Android TV will crash if you request a new focus while - * the adapter gets updated. - * - * This means that if you load thumbnails and request a next focus at the same time - * the app will crash without any way to catch it! - * - * How to bypass this? - * This code basically steals the focus for 500ms and puts it in an inescapable view - * then lets out the focus by requesting focus to result_episodes - */ - - val hasEpisodes = - !(resultEpisodes.adapter as? EpisodeAdapter?)?.cardList.isNullOrEmpty() - /*val focus = activity?.currentFocus - - if (hasEpisodes) { - // Make it impossible to focus anywhere else! - temporaryNoFocus.isFocusable = true - temporaryNoFocus.requestFocus() - }*/ (resultEpisodes.adapter as? EpisodeAdapter)?.updateList(episodes.value) - - /* if (hasEpisodes) main { - - delay(500) - // This might make some people sad as it changes the focus when leaving an episode :( - if(focus?.requestFocus() == true) { - temporaryNoFocus.isFocusable = false - return@main - } - temporaryNoFocus.isFocusable = false - temporaryNoFocus.requestFocus() - } - - if (hasNoFocus()) - binding?.resultEpisodes?.requestFocus()*/ } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index ce0fbdc5..6443a923 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -2723,7 +2723,7 @@ class ResultViewModel2 : ViewModel() { val id: Int?, ) : LoadResponse - fun loadSmall(activity: Activity?, searchResponse: SearchResponse) = ioSafe { + fun loadSmall(searchResponse: SearchResponse) = ioSafe { val url = searchResponse.url _page.postValue(Resource.Loading(url)) _episodes.postValue(Resource.Loading()) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt index 5a23bfc1..8752e275 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/SelectAdaptor.kt @@ -63,8 +63,7 @@ class SelectAdaptor(val callback: (Any) -> Unit) : RecyclerView.Adapter Unit, resView: AutofitRecyclerView diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt index 0a2ecb81..4ef5fa69 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchHistoryAdaptor.kt @@ -1,16 +1,11 @@ package com.lagradost.cloudstream3.ui.search import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.databinding.AccountSingleBinding import com.lagradost.cloudstream3.databinding.SearchHistoryItemBinding data class SearchHistoryItem( @@ -63,8 +58,7 @@ class SearchHistoryAdaptor( diffResult.dispatchUpdatesTo(this) } - class CardViewHolder - constructor( + class CardViewHolder( val binding: SearchHistoryItemBinding, private val clickCallback: (SearchHistoryCallback) -> Unit, ) : diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index f597132b..92575e58 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.search +import android.annotation.SuppressLint import android.content.Context import android.view.View import android.widget.ImageView @@ -37,16 +38,12 @@ object SearchResultBuilder { } } - /** - * @param nextFocusBehavior True if first, False if last, Null if between. - * Used to prevent escaping the adapter horizontally (focus wise). - */ + @SuppressLint("StringFormatInvalid") fun bind( clickCallback: (SearchClickCallback) -> Unit, card: SearchResponse, position: Int, itemView: View, - nextFocusBehavior: Boolean? = null, nextFocusUp: Int? = null, nextFocusDown: Int? = null, colorCallback : ((Palette) -> Unit)? = null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SyncSearchViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SyncSearchViewModel.kt index 9e03079f..71077e91 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SyncSearchViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SyncSearchViewModel.kt @@ -3,11 +3,9 @@ package com.lagradost.cloudstream3.ui.search import com.lagradost.cloudstream3.SearchQuality import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.TvType -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.SyncApis +//TODO Relevance of this class since it's not used class SyncSearchViewModel { - private val repos = SyncApis - data class SyncSearchResultSearchResponse( override val name: String, override val url: String, diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt index 1dc79dc0..d7bd69f1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/AccountAdapter.kt @@ -1,5 +1,6 @@ package com.lagradost.cloudstream3.ui.settings +import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -13,7 +14,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.setImage class AccountClickCallback(val action: Int, val view: View, val card: AuthAPI.LoginInfo) class AccountAdapter( - val cardList: List, + private val cardList: List, private val clickCallback: (AccountClickCallback) -> Unit ) : RecyclerView.Adapter() { @@ -42,12 +43,12 @@ class AccountAdapter( return cardList[position].accountIndex.toLong() } - class CardViewHolder - constructor(val binding: AccountSingleBinding, private val clickCallback: (AccountClickCallback) -> Unit) : + class CardViewHolder(val binding: AccountSingleBinding, private val clickCallback: (AccountClickCallback) -> Unit) : RecyclerView.ViewHolder(binding.root) { // private val pfp: ImageView = itemView.findViewById(R.id.account_profile_picture)!! // private val accountName: TextView = itemView.findViewById(R.id.account_name)!! + @SuppressLint("StringFormatInvalid") fun bind(card: AuthAPI.LoginInfo) { // just in case name is null account index will show, should never happened binding.accountName.text = card.name ?: "%s %d".format( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 6ba93c0f..88335eea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -26,7 +26,6 @@ import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.UIHelper import com.lagradost.cloudstream3.utils.UIHelper.clipboardHelper 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 fd61962c..7cb1a848 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 @@ -28,10 +28,8 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.network.initClient import com.lagradost.cloudstream3.ui.EasterEggMonke import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR -import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.beneneCount -import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom 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 7560d75f..21707ca7 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 @@ -10,7 +10,6 @@ import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.TV -import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.hideOn @@ -108,7 +107,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { getPref(R.string.hide_player_control_names_key)?.hideOn(TV) getPref(R.string.quality_pref_key)?.setOnPreferenceClickListener { - val prefValues = Qualities.values().map { it.value }.reversed().toMutableList() + val prefValues = Qualities.entries.map { it.value }.reversed().toMutableList() prefValues.remove(Qualities.Unknown.value) val prefNames = prefValues.map { Qualities.getStringByInt(it) } @@ -116,7 +115,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { val currentQuality = settingsManager.getInt( getString(R.string.quality_pref_key), - Qualities.values().last().value + Qualities.entries.last().value ) activity?.showBottomDialog( @@ -132,7 +131,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { } getPref(R.string.quality_pref_mobile_data_key)?.setOnPreferenceClickListener { - val prefValues = Qualities.values().map { it.value }.reversed().toMutableList() + val prefValues = Qualities.entries.map { it.value }.reversed().toMutableList() prefValues.remove(Qualities.Unknown.value) val prefNames = prefValues.map { Qualities.getStringByInt(it) } @@ -140,7 +139,7 @@ class SettingsPlayer : PreferenceFragmentCompat() { val currentQuality = settingsManager.getInt( getString(R.string.quality_pref_mobile_data_key), - Qualities.values().last().value + Qualities.entries.last().value ) activity?.showBottomDialog( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt index cfb46c39..cb7d25fd 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsProviders.kt @@ -34,7 +34,7 @@ class SettingsProviders : PreferenceFragmentCompat() { getPref(R.string.display_sub_key)?.setOnPreferenceClickListener { activity?.getApiDubstatusSettings()?.let { current -> - val dublist = DubStatus.values() + val dublist = DubStatus.entries val names = dublist.map { it.name } val currentList = ArrayList() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt index 4aaa5e12..260c6674 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt @@ -128,7 +128,7 @@ class SettingsUpdates : PreferenceFragmentCompat() { } binding.saveBtt.setOnClickListener { - val date = SimpleDateFormat("yyyy_MM_dd_HH_mm").format(Date(currentTimeMillis())) + val date = SimpleDateFormat("yyyy_MM_dd_HH_mm", Locale.getDefault()).format(Date(currentTimeMillis())) var fileStream: OutputStream? = null try { fileStream = VideoDownloadManager.setupStream( @@ -169,10 +169,10 @@ class SettingsUpdates : PreferenceFragmentCompat() { prefValues.indexOf(currentInstaller), getString(R.string.apk_installer_settings), true, - {}) { + {}) { num -> try { settingsManager.edit() - .putInt(getString(R.string.apk_installer_key), prefValues[it]) + .putInt(getString(R.string.apk_installer_key), prefValues[num]) .apply() } catch (e: Exception) { logError(e) @@ -209,9 +209,9 @@ class SettingsUpdates : PreferenceFragmentCompat() { prefValues.indexOf(current), getString(R.string.automatic_plugin_download_mode_title), true, - {}) { + {}) { num -> settingsManager.edit() - .putInt(getString(R.string.auto_download_plugins_key), prefValues[it]).apply() + .putInt(getString(R.string.auto_download_plugins_key), prefValues[num]).apply() (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } } return@setOnPreferenceClickListener true diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 909c30be..9fb3f282 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -1,9 +1,11 @@ package com.lagradost.cloudstream3.ui.settings.extensions +import android.annotation.SuppressLint import android.text.format.Formatter.formatShortFileSize import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isGone import androidx.core.view.isVisible @@ -27,11 +29,10 @@ import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTwoLettersToLanguage import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso import com.lagradost.cloudstream3.utils.UIHelper.setImage import com.lagradost.cloudstream3.utils.UIHelper.toPx -import org.junit.Assert -import org.junit.Test import java.text.DecimalFormat import kotlin.math.floor import kotlin.math.log10 +import kotlin.math.pow data class PluginViewData( @@ -95,21 +96,13 @@ class PluginAdapter( } companion object { - private tailrec fun findClosestBase2(target: Int, current: Int = 16, max: Int = 512): Int { + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + tailrec fun findClosestBase2(target: Int, current: Int = 16, max: Int = 512): Int { if (current >= max) return max if (current >= target) return current return findClosestBase2(target, current * 2, max) } - @Test - fun testFindClosestBase2() { - Assert.assertEquals(16, findClosestBase2(0)) - Assert.assertEquals(256, findClosestBase2(170)) - Assert.assertEquals(256, findClosestBase2(256)) - Assert.assertEquals(512, findClosestBase2(257)) - Assert.assertEquals(512, findClosestBase2(700)) - } - private val iconSizeExact = 32.toPx private val iconSize by lazy { findClosestBase2(iconSizeExact, 16, 512) @@ -122,10 +115,7 @@ class PluginAdapter( val base = value / 3 return if (value >= 3 && base < suffix.size) { DecimalFormat("#0.00").format( - numValue / Math.pow( - 10.0, - (base * 3).toDouble() - ) + numValue / 10.0.pow((base * 3).toDouble()) ) + suffix[base] } else { DecimalFormat().format(numValue) @@ -136,6 +126,7 @@ class PluginAdapter( inner class PluginViewHolder(val binding: RepositoryItemBinding) : RecyclerView.ViewHolder(binding.root) { + @SuppressLint("SetTextI18n") fun bind( data: PluginViewData, ) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt index c5319c37..4878049b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsFragment.kt @@ -190,7 +190,7 @@ class PluginsFragment : Fragment() { bindChips( binding?.tvtypesChipsScroll?.tvtypesChips, emptyList(), - TvType.values().toList(), + TvType.entries.toList(), callback = { list -> pluginViewModel.tvTypes.clear() pluginViewModel.tvTypes.addAll(list.map { it.name }) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt index 56014eb4..fd5422b2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginsViewModel.kt @@ -10,7 +10,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.preference.PreferenceManager import com.lagradost.cloudstream3.CommonActivity.showToast -import com.lagradost.cloudstream3.MainAPI.Companion.settingsForProvider import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt index f9197213..49a93608 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentMedia.kt @@ -10,7 +10,6 @@ import androidx.core.util.forEach import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager -import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt index bb9558b8..c76a218e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/ChromecastSubtitlesFragment.kt @@ -15,8 +15,11 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.media3.common.text.Cue import com.fasterxml.jackson.annotation.JsonProperty -import com.google.android.gms.cast.TextTrackStyle -import com.google.android.gms.cast.TextTrackStyle.* +import com.google.android.gms.cast.TextTrackStyle.EDGE_TYPE_DEPRESSED +import com.google.android.gms.cast.TextTrackStyle.EDGE_TYPE_DROP_SHADOW +import com.google.android.gms.cast.TextTrackStyle.EDGE_TYPE_NONE +import com.google.android.gms.cast.TextTrackStyle.EDGE_TYPE_OUTLINE +import com.google.android.gms.cast.TextTrackStyle.EDGE_TYPE_RAISED import com.jaredrummler.android.colorpicker.ColorPickerDialog import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.CommonActivity.onColorSelectedEvent @@ -42,7 +45,7 @@ data class SaveChromeCaptionStyle( @JsonProperty("fontGenericFamily") var fontGenericFamily: Int? = null, @JsonProperty("backgroundColor") var backgroundColor: Int = 0x00FFFFFF, // transparent @JsonProperty("edgeColor") var edgeColor: Int = Color.BLACK, // BLACK - @JsonProperty("edgeType") var edgeType: Int = TextTrackStyle.EDGE_TYPE_OUTLINE, + @JsonProperty("edgeType") var edgeType: Int = EDGE_TYPE_OUTLINE, @JsonProperty("foregroundColor") var foregroundColor: Int = Color.WHITE, @JsonProperty("fontScale") var fontScale: Float = 1.05f, @JsonProperty("windowColor") var windowColor: Int = Color.TRANSPARENT, @@ -99,7 +102,7 @@ class ChromecastSubtitlesFragment : Fragment() { } private fun onColorSelected(stuff: Pair) { - context?.setColor(stuff.first, stuff.second) + setColor(stuff.first, stuff.second) if (hide) activity?.hideSystemUI() } @@ -122,7 +125,7 @@ class ChromecastSubtitlesFragment : Fragment() { return if (color == Color.TRANSPARENT) Color.BLACK else color } - private fun Context.setColor(id: Int, color: Int?) { + private fun setColor(id: Int, color: Int?) { val realColor = color ?: getDefColor(id) when (id) { 0 -> state.foregroundColor = realColor @@ -135,7 +138,7 @@ class ChromecastSubtitlesFragment : Fragment() { updateState() } - private fun Context.updateState() { + private fun updateState() { //subtitle_text?.setStyle(fromSaveToStyle(state)) } @@ -173,7 +176,7 @@ class ChromecastSubtitlesFragment : Fragment() { fixPaddingStatusbar(binding?.subsRoot) state = getCurrentSavedStyle() - context?.updateState() + updateState() val isTvSettings = isLayout(TV or EMULATOR) @@ -195,7 +198,7 @@ class ChromecastSubtitlesFragment : Fragment() { } this.setOnLongClickListener { - it.context.setColor(id, null) + setColor(id, null) showToast(R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -247,13 +250,13 @@ class ChromecastSubtitlesFragment : Fragment() { dismissCallback ) { index -> state.edgeType = edgeTypes.map { it.first }[index] - textView.context.updateState() + updateState() } } binding?.subsEdgeType?.setOnLongClickListener { state.edgeType = defaultState.edgeType - it.context.updateState() + updateState() showToast(R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } @@ -323,12 +326,12 @@ class ChromecastSubtitlesFragment : Fragment() { dismissCallback ) { index -> state.fontFamily = fontTypes.map { it.first }[index] - textView.context.updateState() + updateState() } } - binding?.subsFont?.setOnLongClickListener { textView -> + binding?.subsFont?.setOnLongClickListener { _ -> state.fontFamily = defaultState.fontFamily - textView.context.updateState() + updateState() showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT) return@setOnLongClickListener true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index 1466afed..8821905e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -14,11 +14,13 @@ import android.view.ViewGroup import android.widget.TextView import android.widget.Toast import androidx.annotation.FontRes +import androidx.annotation.OptIn import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import androidx.preference.PreferenceManager import com.fasterxml.jackson.annotation.JsonProperty import androidx.media3.common.text.Cue +import androidx.media3.common.util.UnstableApi import androidx.media3.ui.CaptionStyleCompat import com.jaredrummler.android.colorpicker.ColorPickerDialog import com.lagradost.cloudstream3.AcraApplication.Companion.getKey @@ -28,7 +30,6 @@ import com.lagradost.cloudstream3.CommonActivity.onDialogDismissedEvent import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.SubtitleSettingsBinding -import com.lagradost.cloudstream3.ui.settings.Globals import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.DataStore.setKey @@ -46,7 +47,7 @@ const val SUBTITLE_KEY = "subtitle_settings" const val SUBTITLE_AUTO_SELECT_KEY = "subs_auto_select" const val SUBTITLE_DOWNLOAD_KEY = "subs_auto_download" -data class SaveCaptionStyle( +data class SaveCaptionStyle @OptIn(UnstableApi::class) constructor( @JsonProperty("foregroundColor") var foregroundColor: Int, @JsonProperty("backgroundColor") var backgroundColor: Int, @JsonProperty("windowColor") var windowColor: Int, @@ -67,7 +68,7 @@ data class SaveCaptionStyle( const val DEF_SUBS_ELEVATION = 20 -@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class) +@OptIn(androidx.media3.common.util.UnstableApi::class) class SubtitlesFragment : Fragment() { companion object { val applyStyleEvent = Event() @@ -167,7 +168,7 @@ class SubtitlesFragment : Fragment() { activity?.hideSystemUI() } - private fun onDialogDismissed(id: Int) { + private fun onDialogDismissed(@Suppress("UNUSED_PARAMETER") id: Int) { if (hide) activity?.hideSystemUI() } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AniSkip.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AniSkip.kt index e9b69c5b..f0c948a4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AniSkip.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AniSkip.kt @@ -83,7 +83,7 @@ object EpisodeSkip { startMs = start, endMs = end ) - }?.let { list -> + }.let { list -> out.addAll(list) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt index f0aae7bc..b13de062 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt @@ -43,7 +43,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.tvprovider.media.tv.* import androidx.tvprovider.media.tv.WatchNextProgram.fromCursor import androidx.viewpager2.widget.ViewPager2 -import com.fasterxml.jackson.module.kotlin.readValue import com.google.android.gms.cast.framework.CastContext import com.google.android.gms.cast.framework.CastState import com.google.android.gms.common.ConnectionResult @@ -58,7 +57,7 @@ import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEv import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.plugins.RepositoryManager -import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING_RESUME_WATCHING import com.lagradost.cloudstream3.syncproviders.providers.Kitsu import com.lagradost.cloudstream3.ui.WebviewFragment import com.lagradost.cloudstream3.ui.player.SubtitleData @@ -161,7 +160,7 @@ object AppContextUtils { .setTitle(title) .setPosterArtUri(Uri.parse(card.posterUrl)) .setIntentUri(Uri.parse(card.id?.let { - "$appStringResumeWatching://$it" + "$APP_STRING_RESUME_WATCHING://$it" } ?: card.url)) .setInternalProviderId(card.url) .setLastEngagementTimeUtcMillis( diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt index 802c1a64..b25be59f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackupUtils.kt @@ -81,12 +81,12 @@ object BackupUtils { // Kinda hack, but I couldn't think of a better way data class BackupVars( - @JsonProperty("_Bool") val _Bool: Map?, - @JsonProperty("_Int") val _Int: Map?, - @JsonProperty("_String") val _String: Map?, - @JsonProperty("_Float") val _Float: Map?, - @JsonProperty("_Long") val _Long: Map?, - @JsonProperty("_StringSet") val _StringSet: Map?>?, + @JsonProperty("_Bool") val bool: Map?, + @JsonProperty("_Int") val int: Map?, + @JsonProperty("_String") val string: Map?, + @JsonProperty("_Float") val float: Map?, + @JsonProperty("_Long") val long: Map?, + @JsonProperty("_StringSet") val stringSet: Map?>?, ) data class BackupFile( @@ -134,21 +134,21 @@ object BackupUtils { ) { if (context == null) return if (restoreSettings) { - context.restoreMap(backupFile.settings._Bool, true) - context.restoreMap(backupFile.settings._Int, true) - context.restoreMap(backupFile.settings._String, true) - context.restoreMap(backupFile.settings._Float, true) - context.restoreMap(backupFile.settings._Long, true) - context.restoreMap(backupFile.settings._StringSet, true) + context.restoreMap(backupFile.settings.bool, true) + context.restoreMap(backupFile.settings.int, true) + context.restoreMap(backupFile.settings.string, true) + context.restoreMap(backupFile.settings.float, true) + context.restoreMap(backupFile.settings.long, true) + context.restoreMap(backupFile.settings.stringSet, true) } if (restoreDataStore) { - context.restoreMap(backupFile.datastore._Bool) - context.restoreMap(backupFile.datastore._Int) - context.restoreMap(backupFile.datastore._String) - context.restoreMap(backupFile.datastore._Float) - context.restoreMap(backupFile.datastore._Long) - context.restoreMap(backupFile.datastore._StringSet) + context.restoreMap(backupFile.datastore.bool) + context.restoreMap(backupFile.datastore.int) + context.restoreMap(backupFile.datastore.string) + context.restoreMap(backupFile.datastore.float) + context.restoreMap(backupFile.datastore.long) + context.restoreMap(backupFile.datastore.stringSet) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt index 19c817b9..b5192aae 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStore.kt @@ -56,16 +56,27 @@ data class Editor( ) { /** Always remember to call apply after */ fun setKeyRaw(path: String, value: T) { - when (value) { - is Boolean -> editor.putBoolean(path, value) - is Int -> editor.putInt(path, value) - is String -> editor.putString(path, value) - is Float -> editor.putFloat(path, value) - is Long -> editor.putLong(path, value) - (value as? Set != null) -> editor.putStringSet(path, value as Set) + @Suppress("UNCHECKED_CAST") + if (isStringSet(value)) { + editor.putStringSet(path, value as Set) + } else { + when (value) { + is Boolean -> editor.putBoolean(path, value) + is Int -> editor.putInt(path, value) + is String -> editor.putString(path, value) + is Float -> editor.putFloat(path, value) + is Long -> editor.putLong(path, value) + } } } + private fun isStringSet(value: Any?) : Boolean { + if (value is Set<*>) { + return value.filterIsInstance().size == value.size + } + return false + } + fun apply() { editor.apply() System.gc() diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt index 421e4420..c92da214 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DownloadFileWorkManager.kt @@ -7,7 +7,6 @@ import androidx.work.ForegroundInfo import androidx.work.WorkerParameters import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.mvvm.logError -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.VideoDownloadManager.WORK_KEY_INFO diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt index 89bb0031..59f534ff 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/InAppUpdater.kt @@ -32,26 +32,26 @@ import java.io.InputStreamReader class InAppUpdater { companion object { - const val GITHUB_USER_NAME = "recloudstream" - const val GITHUB_REPO = "cloudstream" + private const val GITHUB_USER_NAME = "recloudstream" + private const val GITHUB_REPO = "cloudstream" - const val LOG_TAG = "InAppUpdater" + private const val LOG_TAG = "InAppUpdater" // === IN APP UPDATER === data class GithubAsset( @JsonProperty("name") val name: String, @JsonProperty("size") val size: Int, // Size bytes - @JsonProperty("browser_download_url") val browser_download_url: String, // download link - @JsonProperty("content_type") val content_type: String, // application/vnd.android.package-archive + @JsonProperty("browser_download_url") val browserDownloadUrl: String, // download link + @JsonProperty("content_type") val contentType: String, // application/vnd.android.package-archive ) data class GithubRelease( - @JsonProperty("tag_name") val tag_name: String, // Version code + @JsonProperty("tag_name") val tagName: String, // Version code @JsonProperty("body") val body: String, // Desc @JsonProperty("assets") val assets: List, - @JsonProperty("target_commitish") val target_commitish: String, // branch + @JsonProperty("target_commitish") val targetCommitish: String, // branch @JsonProperty("prerelease") val prerelease: Boolean, - @JsonProperty("node_id") val node_id: String //Node Id + @JsonProperty("node_id") val nodeId: String //Node Id ) data class GithubObject( @@ -61,7 +61,7 @@ class InAppUpdater { ) data class GithubTag( - @JsonProperty("object") val github_object: GithubObject, + @JsonProperty("object") val githubObject: GithubObject, ) data class Update( @@ -114,7 +114,7 @@ class InAppUpdater { response.filter { rel -> !rel.prerelease }.sortedWith(compareBy { release -> - release.assets.firstOrNull { it.content_type == "application/vnd.android.package-archive" }?.name?.let { it1 -> + release.assets.firstOrNull { it.contentType == "application/vnd.android.package-archive" }?.name?.let { it1 -> versionRegex.find( it1 )?.groupValues?.let { @@ -134,7 +134,7 @@ class InAppUpdater { foundAsset?.name?.let { assetName -> val foundVersion = versionRegex.find(assetName) val shouldUpdate = - if (foundAsset.browser_download_url != "" && foundVersion != null) currentVersion?.versionName?.let { versionName -> + if (foundAsset.browserDownloadUrl != "" && foundVersion != null) currentVersion?.versionName?.let { versionName -> versionRegexLocal.find(versionName)?.groupValues?.let { it[3].toInt() * 100_000_000 + it[4].toInt() * 10_000 + it[5].toInt() } @@ -146,10 +146,10 @@ class InAppUpdater { return if (foundVersion != null) { Update( shouldUpdate, - foundAsset.browser_download_url, + foundAsset.browserDownloadUrl, foundVersion.groupValues[2], found.body, - found.node_id + found.nodeId ) } else { Update(false, null, null, null, null) @@ -168,33 +168,33 @@ class InAppUpdater { val found = response.lastOrNull { rel -> - rel.prerelease || rel.tag_name == "pre-release" + rel.prerelease || rel.tagName == "pre-release" } val foundAsset = found?.assets?.filter { it -> - it.content_type == "application/vnd.android.package-archive" + it.contentType == "application/vnd.android.package-archive" }?.getOrNull(0) val tagResponse = parseJson(app.get(tagUrl, headers = headers).text) - Log.d(LOG_TAG, "Fetched GitHub tag: ${tagResponse.github_object.sha.take(7)}") + Log.d(LOG_TAG, "Fetched GitHub tag: ${tagResponse.githubObject.sha.take(7)}") val shouldUpdate = (getString(R.string.commit_hash) .trim { c -> c.isWhitespace() } .take(7) != - tagResponse.github_object.sha + tagResponse.githubObject.sha .trim { c -> c.isWhitespace() } .take(7)) return if (foundAsset != null) { Update( shouldUpdate, - foundAsset.browser_download_url, - tagResponse.github_object.sha.take(10), + foundAsset.browserDownloadUrl, + tagResponse.githubObject.sha.take(10), found.body, - found.node_id + found.nodeId ) } else { Update(false, null, null, null, null) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstaller.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstaller.kt index bc81a5b9..4b3f02f1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstaller.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstaller.kt @@ -11,7 +11,6 @@ import android.os.Build import android.widget.Toast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError -import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.Coroutines.main import java.io.InputStream @@ -57,7 +56,7 @@ class ApkInstaller(private val service: PackageInstallerService) { PackageInstaller.STATUS_FAILURE )) { PackageInstaller.STATUS_PENDING_USER_ACTION -> { - val userAction = intent.getParcelableExtra(Intent.EXTRA_INTENT) + val userAction = intent.getSafeParcelableExtra(Intent.EXTRA_INTENT) userAction?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(userAction) } @@ -146,3 +145,5 @@ class ApkInstaller(private val service: PackageInstallerService) { } } +@Suppress("DEPRECATION") +inline fun Intent.getSafeParcelableExtra(key: String): T? = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) getParcelableExtra(key) else getParcelableExtra(key, T::class.java) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt index 27609730..0d3da8e7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt @@ -17,8 +17,8 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -const val packageName = BuildConfig.APPLICATION_ID -const val TAG = "PowerManagerAPI" +private const val PACKAGE_NAME = BuildConfig.APPLICATION_ID +private const val TAG = "PowerManagerAPI" object BatteryOptimizationChecker { @@ -72,7 +72,7 @@ object BatteryOptimizationChecker { val intent = Intent() try { intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - .setData(Uri.fromParts("package", packageName, null)) + .setData(Uri.fromParts("package", PACKAGE_NAME, null)) context.startActivity(intent, Bundle()) } catch (t: Throwable) { Log.e(TAG, "Unable to invoke any intent", t) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt index 71d3a1ef..351e77c8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SyncUtil.kt @@ -73,8 +73,8 @@ object SyncUtil { val response = app.get(url, cacheTime = 1, cacheUnit = TimeUnit.DAYS).text val mapped = parseJson(response) - val overrideMal = mapped?.malId ?: mapped?.Mal?.id ?: mapped?.Anilist?.malId - val overrideAnilist = mapped?.aniId ?: mapped?.Anilist?.id + val overrideMal = mapped?.malId ?: mapped?.mal?.id ?: mapped?.anilist?.malId + val overrideAnilist = mapped?.aniId ?: mapped?.anilist?.id if (overrideMal != null) { return overrideMal.toString() to overrideAnilist?.toString() @@ -135,8 +135,8 @@ object SyncUtil { @JsonProperty("createdAt") val createdAt: String?, @JsonProperty("updatedAt") val updatedAt: String?, @JsonProperty("deletedAt") val deletedAt: String?, - @JsonProperty("Mal") val Mal: Mal?, - @JsonProperty("Anilist") val Anilist: Anilist?, + @JsonProperty("Mal") val mal: Mal?, + @JsonProperty("Anilist") val anilist: Anilist?, @JsonProperty("malUrl") val malUrl: String? ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 8670de53..ad1b6502 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -553,7 +553,7 @@ object UIHelper { return result } - fun Context?.IsBottomLayout(): Boolean { + fun Context?.isBottomLayout(): Boolean { if (this == null) return true val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) return settingsManager.getBoolean(getString(R.string.bottom_title_key), true) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 197bacc6..a3f6d789 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -293,6 +293,7 @@ object VideoDownloadManager { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } else { + //fixme Specify a better flag PendingIntent.getActivity(context, 0, intent, 0) } builder.setContentIntent(pendingIntent) @@ -475,10 +476,10 @@ object VideoDownloadManager { } } - private const val reservedChars = "|\\?*<\":>+[]/\'" + private const val RESERVED_CHARS = "|\\?*<\":>+[]/\'" fun sanitizeFilename(name: String, removeSpaces: Boolean = false): String { var tempName = name - for (c in reservedChars) { + for (c in RESERVED_CHARS) { tempName = tempName.replace(c, ' ') } if (removeSpaces) tempName = tempName.replace(" ", "") @@ -1699,7 +1700,7 @@ object VideoDownloadManager { } */ fun getDownloadFileInfoAndUpdateSettings(context: Context, id: Int): DownloadedFileInfoResult? = - getDownloadFileInfo(context, id, removeKeys = true) + getDownloadFileInfo(context, id) private fun DownloadedFileInfo.toFile(context: Context): SafeFile? { return basePathToFile(context, this.basePath)?.gotoDirectory(relativePath) @@ -1709,7 +1710,6 @@ object VideoDownloadManager { private fun getDownloadFileInfo( context: Context, id: Int, - removeKeys: Boolean = false ): DownloadedFileInfoResult? { try { val info = diff --git a/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt index d4725d53..2aea0b8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/widget/FlowLayout.kt @@ -19,7 +19,7 @@ class FlowLayout : ViewGroup { @SuppressLint("CustomViewStyleable") internal constructor(c: Context, attrs: AttributeSet?) : super(c, attrs) { val t = c.obtainStyledAttributes(attrs, R.styleable.FlowLayout_Layout) - itemSpacing = t.getDimensionPixelSize(R.styleable.FlowLayout_Layout_itemSpacing, 0); + itemSpacing = t.getDimensionPixelSize(R.styleable.FlowLayout_Layout_itemSpacing, 0) t.recycle() } diff --git a/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt b/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt new file mode 100644 index 00000000..5dbf4d7c --- /dev/null +++ b/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt @@ -0,0 +1,16 @@ +package com.lagradost.cloudstream3 + +import com.lagradost.cloudstream3.ui.settings.extensions.PluginAdapter.Companion.findClosestBase2 +import org.junit.Assert +import org.junit.Test + +class PluginAdapterTest { + @Test + fun testFindClosestBase2() { + Assert.assertEquals(16, findClosestBase2(0)) + Assert.assertEquals(256, findClosestBase2(170)) + Assert.assertEquals(256, findClosestBase2(256)) + Assert.assertEquals(512, findClosestBase2(257)) + Assert.assertEquals(512, findClosestBase2(700)) + } +} \ No newline at end of file From 82f8ab489e88145e0f498dc3537d26d59157b7dc Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Mon, 29 Jul 2024 00:58:35 +0200 Subject: [PATCH 865/888] Fix prerelease test function --- .../ui/settings/extensions/PluginAdapter.kt | 17 ++++++++++++++--- .../lagradost/cloudstream3/PluginAdapterTest.kt | 16 ---------------- 2 files changed, 14 insertions(+), 19 deletions(-) delete mode 100644 app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt index 9fb3f282..d159539d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt @@ -33,7 +33,8 @@ import java.text.DecimalFormat import kotlin.math.floor import kotlin.math.log10 import kotlin.math.pow - +import org.junit.Test +import org.junit.Assert data class PluginViewData( val plugin: Plugin, @@ -96,13 +97,23 @@ class PluginAdapter( } companion object { - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - tailrec fun findClosestBase2(target: Int, current: Int = 16, max: Int = 512): Int { + private tailrec fun findClosestBase2(target: Int, current: Int = 16, max: Int = 512): Int { if (current >= max) return max if (current >= target) return current return findClosestBase2(target, current * 2, max) } + // DO NOT MOVE, as running this test will result in ExceptionInInitializerError on prerelease due to static variables using Resources.getSystem() + // this test function is only to show how the function works + @Test + fun testFindClosestBase2() { + Assert.assertEquals(16, findClosestBase2(0)) + Assert.assertEquals(256, findClosestBase2(170)) + Assert.assertEquals(256, findClosestBase2(256)) + Assert.assertEquals(512, findClosestBase2(257)) + Assert.assertEquals(512, findClosestBase2(700)) + } + private val iconSizeExact = 32.toPx private val iconSize by lazy { findClosestBase2(iconSizeExact, 16, 512) diff --git a/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt b/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt deleted file mode 100644 index 5dbf4d7c..00000000 --- a/app/src/test/java/com/lagradost/cloudstream3/PluginAdapterTest.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.lagradost.cloudstream3 - -import com.lagradost.cloudstream3.ui.settings.extensions.PluginAdapter.Companion.findClosestBase2 -import org.junit.Assert -import org.junit.Test - -class PluginAdapterTest { - @Test - fun testFindClosestBase2() { - Assert.assertEquals(16, findClosestBase2(0)) - Assert.assertEquals(256, findClosestBase2(170)) - Assert.assertEquals(256, findClosestBase2(256)) - Assert.assertEquals(512, findClosestBase2(257)) - Assert.assertEquals(512, findClosestBase2(700)) - } -} \ No newline at end of file From 150ad5fc9f4c90a8de8c42bd53b190a594606156 Mon Sep 17 00:00:00 2001 From: epireyn <48213068+epireyn@users.noreply.github.com> Date: Mon, 29 Jul 2024 01:00:44 +0200 Subject: [PATCH 866/888] Add sorting by release date (#1206) --- .../cloudstream3/syncproviders/SyncApi.kt | 6 +++++- .../syncproviders/providers/AniListApi.kt | 10 +++++++--- .../syncproviders/providers/LocalList.kt | 5 +++++ .../syncproviders/providers/MALApi.kt | 9 +++++++++ .../syncproviders/providers/SimklApi.kt | 7 ++++++- .../ui/library/LibraryViewModel.kt | 4 +++- .../cloudstream3/utils/DataStoreHelper.kt | 20 +++++++++++++++---- app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 53 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt index 878e0cb3..dcb8bbea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/SyncApi.kt @@ -5,6 +5,7 @@ import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.UiText import me.xdrop.fuzzywuzzy.FuzzySearch +import java.util.Date interface SyncAPI : OAuth2API { /** @@ -124,6 +125,8 @@ interface SyncAPI : OAuth2API { ListSorting.AlphabeticalZ -> items.sortedBy { it.name }.reversed() ListSorting.UpdatedNew -> items.sortedBy { it.lastUpdatedUnixTime?.times(-1) } ListSorting.UpdatedOld -> items.sortedBy { it.lastUpdatedUnixTime } + ListSorting.ReleaseDateNew -> items.sortedByDescending { it.releaseDate } + ListSorting.ReleaseDateOld -> items.sortedBy { it.releaseDate } else -> items } } @@ -158,9 +161,10 @@ interface SyncAPI : OAuth2API { override var posterUrl: String?, override var posterHeaders: Map?, override var quality: SearchQuality?, + val releaseDate: Date?, override var id: Int? = null, val plot : String? = null, val rating: Int? = null, - val tags: List? = null, + val tags: List? = null ) : SearchResponse } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt index e51d3d65..6112c7db 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/AniListApi.kt @@ -16,15 +16,16 @@ import com.lagradost.cloudstream3.syncproviders.SyncIdName import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt -import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppContextUtils.splitQuery +import com.lagradost.cloudstream3.utils.AppUtils.parseJson import com.lagradost.cloudstream3.utils.AppUtils.toJson import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.DataStore.toKotlinObject +import com.lagradost.cloudstream3.utils.DataStoreHelper.toYear import java.net.URL import java.net.URLEncoder -import java.util.* +import java.util.Locale class AniListApi(index: Int) : AccountManager(index), SyncAPI { override var name = "AniList" @@ -631,8 +632,9 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ?: this.media.coverImage.medium, null, null, + this.media.seasonYear.toYear(), null, - plot = this.media.description + plot = this.media.description, ) } } @@ -689,6 +691,8 @@ class AniListApi(index: Int) : AccountManager(index), SyncAPI { ListSorting.AlphabeticalZ, ListSorting.UpdatedNew, ListSorting.UpdatedOld, + ListSorting.ReleaseDateNew, + ListSorting.ReleaseDateOld, ListSorting.RatingHigh, ListSorting.RatingLow, ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt index f819cd3b..0d9a4d13 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/LocalList.kt @@ -119,6 +119,11 @@ class LocalList : SyncAPI { ListSorting.AlphabeticalZ, ListSorting.UpdatedNew, ListSorting.UpdatedOld, + ListSorting.ReleaseDateNew, + ListSorting.ReleaseDateOld, +// ListSorting.RatingHigh, +// ListSorting.RatingLow, + ) ) } 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 6046a0f2..08c18653 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 @@ -27,6 +27,7 @@ import java.security.SecureRandom import java.text.ParseException import java.text.SimpleDateFormat import java.time.Instant +import java.time.format.DateTimeFormatter import java.util.Calendar import java.util.Date import java.util.Locale @@ -448,6 +449,12 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { null, null, plot = this.node.synopsis, + releaseDate = if (this.node.startDate == null) null else try {Date.from( + Instant.from( + DateTimeFormatter.ofPattern(if (this.node.startDate.length == 4) "yyyy" else if (this.node.startDate.length == 7) "yyyy-MM" else "yyyy-MM-dd") + .parse(this.node.startDate) + ) + )} catch (_: RuntimeException) {null} ) } } @@ -512,6 +519,8 @@ class MALApi(index: Int) : AccountManager(index), SyncAPI { ListSorting.AlphabeticalZ, ListSorting.UpdatedNew, ListSorting.UpdatedOld, + ListSorting.ReleaseDateNew, + ListSorting.ReleaseDateOld, ListSorting.RatingHigh, ListSorting.RatingLow, ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt index e5db626b..50517f9d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/providers/SimklApi.kt @@ -31,6 +31,7 @@ import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.txt import com.lagradost.cloudstream3.utils.AppUtils.toJson +import com.lagradost.cloudstream3.utils.DataStoreHelper.toYear import okhttp3.Interceptor import okhttp3.Response import java.math.BigInteger @@ -670,7 +671,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { this.movie.poster?.let { getPosterUrl(it) }, null, null, - movie.ids.simkl, + this.movie.year?.toYear(), + movie.ids.simkl ) } } @@ -702,6 +704,7 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { this.show.poster?.let { getPosterUrl(it) }, null, null, + this.show.year?.toYear(), show.ids.simkl ) } @@ -1027,6 +1030,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI { ListSorting.AlphabeticalZ, ListSorting.UpdatedNew, ListSorting.UpdatedOld, + ListSorting.ReleaseDateNew, + ListSorting.ReleaseDateOld, ListSorting.RatingHigh, ListSorting.RatingLow, ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt index 1bd01c86..6c602e6c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/LibraryViewModel.kt @@ -23,6 +23,8 @@ enum class ListSorting(@StringRes val stringRes: Int) { UpdatedOld(R.string.sort_updated_old), AlphabeticalA(R.string.sort_alphabetical_a), AlphabeticalZ(R.string.sort_alphabetical_z), + ReleaseDateNew(R.string.sort_release_date_new), + ReleaseDateOld(R.string.sort_release_date_old), } const val LAST_SYNC_API_KEY = "last_sync_api" @@ -132,4 +134,4 @@ class LibraryViewModel : ViewModel() { MainActivity.reloadLibraryEvent -= ::reloadPages super.onCleared() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt index 43124a53..2fa5f6a3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/DataStoreHelper.kt @@ -2,8 +2,8 @@ package com.lagradost.cloudstream3.utils import android.content.Context import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.unixTimeMS +import com.lagradost.cloudstream3.AcraApplication import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.AcraApplication.Companion.getKeys @@ -11,6 +11,13 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.showToast +import com.lagradost.cloudstream3.DubStatus +import com.lagradost.cloudstream3.EpisodeResponse +import com.lagradost.cloudstream3.MainActivity +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.SearchQuality +import com.lagradost.cloudstream3.SearchResponse +import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.syncproviders.AccountManager import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.WatchType @@ -18,6 +25,9 @@ import com.lagradost.cloudstream3.ui.library.ListSorting import com.lagradost.cloudstream3.ui.result.UiImage import com.lagradost.cloudstream3.ui.result.VideoWatchState import com.lagradost.cloudstream3.utils.AppContextUtils.filterProviderByPreferredMedia +import java.util.Calendar +import java.util.Date +import java.util.GregorianCalendar import kotlin.reflect.KClass import kotlin.reflect.KProperty @@ -195,6 +205,8 @@ object DataStoreHelper { return this } + fun Int.toYear() : Date = GregorianCalendar.getInstance().also { it.set(Calendar.YEAR, this) }.time + /** * Used to display notifications on new episodes and posters in library. **/ @@ -242,7 +254,7 @@ object DataStoreHelper { null, null, latestUpdatedTime, - apiName, type, posterUrl, posterHeaders, quality, this.id, plot = this.plot, rating = this.rating, tags = this.tags + apiName, type, posterUrl, posterHeaders, quality, year?.toYear(), this.id, plot = this.plot, rating = this.rating, tags = this.tags ) } } @@ -273,7 +285,7 @@ object DataStoreHelper { null, null, latestUpdatedTime, - apiName, type, posterUrl, posterHeaders, quality, this.id, plot = this.plot, rating = this.rating, tags = this.tags + apiName, type, posterUrl, posterHeaders, quality, year?.toYear(), this.id, plot = this.plot, rating = this.rating, tags = this.tags ) } } @@ -304,7 +316,7 @@ object DataStoreHelper { null, null, latestUpdatedTime, - apiName, type, posterUrl, posterHeaders, quality, this.id, plot = this.plot, rating = this.rating, tags = this.tags + apiName, type, posterUrl, posterHeaders, quality, year?.toYear(), this.id, plot = this.plot, rating = this.rating, tags = this.tags ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 21067fff..37a3f993 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -797,6 +797,8 @@ Can\'t get the device PIN code, try local authentication PIN code is now expired ! Code expires in %1$dm %2$ds + Release Date (New to Old) + Release Date (Old to New) hide_player_control_names_key Hide names of the player\'s controls \ No newline at end of file From b2f08847e1dc736aa54a26c84d8f71e8ea83c166 Mon Sep 17 00:00:00 2001 From: epireyn <48213068+epireyn@users.noreply.github.com> Date: Mon, 29 Jul 2024 01:01:45 +0200 Subject: [PATCH 867/888] Add system dark theme (#1208) --- app/src/main/AndroidManifest.xml | 2 +- .../lagradost/cloudstream3/CommonActivity.kt | 28 +++++++++++++++++-- .../lagradost/cloudstream3/MainActivity.kt | 2 ++ .../cloudstream3/ui/settings/SettingsUI.kt | 14 +++++++--- app/src/main/res/values-es/array.xml | 2 ++ app/src/main/res/values-pl/array.xml | 2 ++ app/src/main/res/values-tr/array.xml | 2 ++ app/src/main/res/values-vi/array.xml | 2 ++ app/src/main/res/values/array.xml | 2 ++ 9 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a23ef725..888be999 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -97,7 +97,7 @@ --> = Build.VERSION_CODES.Q) { + loadThemes(act) + } + } + + private fun mapSystemTheme(act: Activity): Int { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val currentNightMode = + act.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK + return when (currentNightMode) { + Configuration.UI_MODE_NIGHT_NO -> R.style.LightMode // Night mode is not active, we're using the light theme + else -> R.style.AppTheme // Night mode is active, we're using dark theme + } + } else { + return R.style.AppTheme + } + } + fun loadThemes(act: Activity?) { if (act == null) return val settingsManager = PreferenceManager.getDefaultSharedPreferences(act) val currentTheme = when (settingsManager.getString(act.getString(R.string.app_theme_key), "AmoledLight")) { + "System" -> mapSystemTheme(act) "Black" -> R.style.AppTheme "Light" -> R.style.LightMode "Amoled" -> R.style.AmoledMode @@ -352,8 +376,8 @@ object CommonActivity { currentLook = currentLook.parent as? View ?: break }*/ - private fun View.hasContent() : Boolean { - return isShown && when(this) { + private fun View.hasContent(): Boolean { + return isShown && when (this) { //is RecyclerView -> this.childCount > 0 is ViewGroup -> this.childCount > 0 else -> true diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index eed69a50..b59265ee 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -68,6 +68,7 @@ import com.lagradost.cloudstream3.CommonActivity.screenHeight import com.lagradost.cloudstream3.CommonActivity.setActivityInstance import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.updateLocale +import com.lagradost.cloudstream3.CommonActivity.updateTheme import com.lagradost.cloudstream3.databinding.ActivityMainBinding import com.lagradost.cloudstream3.databinding.ActivityMainTvBinding import com.lagradost.cloudstream3.databinding.BottomResultviewPreviewBinding @@ -484,6 +485,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) updateLocale() // android fucks me by chaining lang when rotating the phone + updateTheme(this) // Update if system theme val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment 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 cc14e761..8c3ad0ad 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 @@ -88,10 +88,9 @@ class SettingsUI : PreferenceFragmentCompat() { getPref(R.string.app_theme_key)?.setOnPreferenceClickListener { 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 removeIncompatible = { text: String -> val toRemove = prefValues - .mapIndexed { idx, s -> if (s.startsWith("Monet")) idx else null } + .mapIndexed { idx, s -> if (s.startsWith(text)) idx else null } .filterNotNull() var offset = 0 toRemove.forEach { idx -> @@ -100,6 +99,12 @@ class SettingsUI : PreferenceFragmentCompat() { offset += 1 } } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { // remove monet on android 11 and less + removeIncompatible("Monet") + } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // Remove system on android 9 and less + removeIncompatible("System") + } val currentLayout = settingsManager.getString(getString(R.string.app_theme_key), prefValues.first()) @@ -123,7 +128,8 @@ class SettingsUI : PreferenceFragmentCompat() { } getPref(R.string.primary_color_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.themes_overlay_names).toMutableList() - val prefValues = resources.getStringArray(R.array.themes_overlay_names_values).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 diff --git a/app/src/main/res/values-es/array.xml b/app/src/main/res/values-es/array.xml index 05d49f98..eb197f43 100644 --- a/app/src/main/res/values-es/array.xml +++ b/app/src/main/res/values-es/array.xml @@ -247,6 +247,7 @@ Gris Amoled Destello + Sistema Material You @@ -254,6 +255,7 @@ Black Amoled Light + System Monet diff --git a/app/src/main/res/values-pl/array.xml b/app/src/main/res/values-pl/array.xml index 9f76f423..a43d7bcf 100644 --- a/app/src/main/res/values-pl/array.xml +++ b/app/src/main/res/values-pl/array.xml @@ -256,6 +256,7 @@ Szary Amoled Flashbang + System Material You @@ -263,6 +264,7 @@ Black Amoled Light + System Monet diff --git a/app/src/main/res/values-tr/array.xml b/app/src/main/res/values-tr/array.xml index 5c723f72..22a94ebf 100644 --- a/app/src/main/res/values-tr/array.xml +++ b/app/src/main/res/values-tr/array.xml @@ -281,6 +281,7 @@ Gri Amoled Flaş Bombası + Sistem Material You @@ -288,6 +289,7 @@ Black Amoled Light + System Monet diff --git a/app/src/main/res/values-vi/array.xml b/app/src/main/res/values-vi/array.xml index aac94100..f363befd 100644 --- a/app/src/main/res/values-vi/array.xml +++ b/app/src/main/res/values-vi/array.xml @@ -248,6 +248,7 @@ Xám Amoled Sáng + Hệ thống Material You @@ -255,6 +256,7 @@ Black Amoled Light + System Monet diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 3be12510..03715faf 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -318,6 +318,7 @@ Gray Amoled Flashbang + System Material You @@ -325,6 +326,7 @@ Black Amoled Light + System Monet From 63e27c2ea5c7c57d41846038678c38654e28e495 Mon Sep 17 00:00:00 2001 From: KingLucius Date: Tue, 30 Jul 2024 21:16:11 +0300 Subject: [PATCH 868/888] Fix Trailers on API<33 (#1226) Recent NewPipeExtractor updates pushed minimum sdk to 33 which needs desugar_jdk_libs_nio --- app/build.gradle.kts | 8 ++++---- library/build.gradle.kts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2040cf39..ee6cda6c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -140,7 +140,7 @@ android { abortOnError = false checkReleaseBuilds = false } - + buildFeatures { buildConfig = true } @@ -200,7 +200,7 @@ dependencies { // PlayBack implementation("com.jaredrummler:colorpicker:1.1.0") // Subtitle Color Picker implementation("com.github.recloudstream:media-ffmpeg:1.1.0") // Custom FF-MPEG Lib for Audio Codecs - implementation("com.github.teamnewpipe:NewPipeExtractor:2d36945") /* For Trailers + implementation("com.github.teamnewpipe:NewPipeExtractor:176da72") /* For Trailers ^ Update to Latest Commits if Trailers Misbehave, github.com/TeamNewPipe/NewPipeExtractor/commits/dev */ implementation("com.github.albfernandez:juniversalchardet:2.5.0") // Subtitle Decoding @@ -213,7 +213,7 @@ dependencies { implementation("androidx.palette:palette-ktx:1.0.0") // Palette For Images -> Colors implementation("androidx.tvprovider:tvprovider:1.0.0") implementation("com.github.discord:OverlappingPanels:0.1.5") // Gestures - implementation ("androidx.biometric:biometric:1.2.0-alpha05") // Fingerprint Authentication + implementation("androidx.biometric:biometric:1.2.0-alpha05") // Fingerprint Authentication implementation("com.github.rubensousa:previewseekbar-media3:1.1.1.0") // SeekBar Preview implementation("io.github.g0dkar:qrcode-kotlin:4.2.0") // QR code for PIN Auth on TV @@ -223,7 +223,7 @@ dependencies { implementation("com.github.LagradOst:SafeFile:0.0.6") // To Prevent the URI File Fu*kery implementation("org.conscrypt:conscrypt-android:2.5.2") // To Fix SSL Fu*kery on Android 9 implementation("com.uwetrottmann.tmdb2:tmdb-java:2.11.0") // TMDB API v3 Wrapper Made with RetroFit - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs_nio:2.0.4") //nio flavor needed for NewPipeExtractor implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1") /* JSON Parser ^ Don't Bump Jackson above 2.13.1 , Crashes on Android TV's and FireSticks that have Min API Level 25 or Less. */ diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 516e1ee9..00bc3c14 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -27,7 +27,7 @@ kotlin { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0") implementation("me.xdrop:fuzzywuzzy:1.4.0") // Match extractors implementation("org.mozilla:rhino:1.7.15") // run JavaScript - implementation("com.github.teamnewpipe:NewPipeExtractor:fafd471") + implementation("com.github.teamnewpipe:NewPipeExtractor:176da72") } } } From 30adb1cd9d8aa7d538d027fb4e9506cd31224869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Sancak?= Date: Tue, 30 Jul 2024 21:38:51 +0300 Subject: [PATCH 869/888] fixed: Test Search & VidMoxy, RapidVid extractors (#1219) --- .../cloudstream3/utils/TestingUtils.kt | 5 ++- .../extractors/ContentXExtractor.kt | 41 +++++++++---------- .../extractors/HDMomPlayerExtractor.kt | 21 +++++----- .../extractors/HDPlayerSystemExtractor.kt | 23 +++++------ .../extractors/MailRuExtractor.kt | 21 ++++------ .../extractors/OdnoklassnikiExtractor.kt | 18 ++++---- .../extractors/PeaceMakerstExtractor.kt | 37 ++++++++--------- .../extractors/RapidVidExtractor.kt | 37 ++++++++++------- .../extractors/SibNetExtractor.kt | 11 +++-- .../cloudstream3/extractors/TRsTXExtractor.kt | 30 +++++++------- .../extractors/TauVideoExtractor.kt | 11 +++-- .../extractors/VidMoxyExtractor.kt | 37 ++++++++++------- .../extractors/VideoSeyredExtractor.kt | 13 +++--- 13 files changed, 155 insertions(+), 150 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt index 5e2b2bc1..049f92fb 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/TestingUtils.kt @@ -4,6 +4,7 @@ import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.mvvm.logError import kotlinx.coroutines.* import org.junit.Assert +import kotlin.random.Random object TestingUtils { open class TestResult(val success: Boolean) { @@ -280,8 +281,8 @@ object TestingUtils { // Test Search Results val searchQueries = - // Use the first 3 home page results as queries since they are guaranteed to exist - (homePageList.take(3).map { it.name } + + // Use the random 3 home page results as queries since they are guaranteed to exist + (homePageList.shuffled(Random).take(3).map { it.name.split(" ").first() } + // If home page is sparse then use generic search queries listOf("over", "iron", "guy")).take(3) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt index 27a5c52a..13a717b6 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/ContentXExtractor.kt @@ -12,53 +12,52 @@ open class ContentX : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - Log.d("Kekik_${this.name}", "url » ${url}") + val extRef = referer ?: "" - val i_source = app.get(url, referer=ext_ref).text - val i_extract = Regex("""window\.openPlayer\('([^']+)'""").find(i_source)!!.groups[1]?.value ?: throw ErrorLoadingException("i_extract is null") + val iSource = app.get(url, referer=extRef).text + val iExtract = Regex("""window\.openPlayer\('([^']+)'""").find(iSource)!!.groups[1]?.value ?: throw ErrorLoadingException("iExtract is null") - val sub_urls = mutableSetOf() - Regex("""\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(i_source).forEach { - val (sub_url, sub_lang) = it.destructured + val subUrls = mutableSetOf() + Regex("""\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(iSource).forEach { + val (subUrl, subLang) = it.destructured - if (sub_url in sub_urls) { return@forEach } - sub_urls.add(sub_url) + if (subUrl in subUrls) { return@forEach } + subUrls.add(subUrl) subtitleCallback.invoke( SubtitleFile( - lang = sub_lang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), - url = fixUrl(sub_url.replace("\\", "")) + lang = subLang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), + url = fixUrl(subUrl.replace("\\", "")) ) ) } - val vid_source = app.get("${mainUrl}/source2.php?v=${i_extract}", referer=ext_ref).text - val vid_extract = Regex("""file\":\"([^\"]+)""").find(vid_source)!!.groups[1]?.value ?: throw ErrorLoadingException("vid_extract is null") - val m3u_link = vid_extract.replace("\\", "") + val vidSource = app.get("${mainUrl}/source2.php?v=${iExtract}", referer=extRef).text + val vidExtract = Regex("""file\":\"([^\"]+)""").find(vidSource)!!.groups[1]?.value ?: throw ErrorLoadingException("vidExtract is null") + val m3uLink = vidExtract.replace("\\", "") callback.invoke( ExtractorLink( source = this.name, name = this.name, - url = m3u_link, + url = m3uLink, referer = url, quality = Qualities.Unknown.value, isM3u8 = true ) ) - val i_dublaj = Regex(""",\"([^']+)\",\"Türkçe""").find(i_source)!!.groups[1]?.value - if (i_dublaj != null) { - val dublaj_source = app.get("${mainUrl}/source2.php?v=${i_dublaj}", referer=ext_ref).text - val dublaj_extract = Regex("""file\":\"([^\"]+)""").find(dublaj_source)!!.groups[1]?.value ?: throw ErrorLoadingException("dublaj_extract is null") - val dublaj_link = dublaj_extract.replace("\\", "") + val iDublaj = Regex(""",\"([^']+)\",\"Türkçe""").find(iSource)!!.groups[1]?.value + if (iDublaj != null) { + val dublajSource = app.get("${mainUrl}/source2.php?v=${iDublaj}", referer=extRef).text + val dublajExtract = Regex("""file\":\"([^\"]+)""").find(dublajSource)!!.groups[1]?.value ?: throw ErrorLoadingException("dublajExtract is null") + val dublajLink = dublajExtract.replace("\\", "") callback.invoke( ExtractorLink( source = "${this.name} Türkçe Dublaj", name = "${this.name} Türkçe Dublaj", - url = dublaj_link, + url = dublajLink, referer = url, quality = Qualities.Unknown.value, isM3u8 = true diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt index 1f70ce61..1152cb4b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDMomPlayerExtractor.kt @@ -16,24 +16,23 @@ open class HDMomPlayer : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val m3u_link:String? - val ext_ref = referer ?: "" - val i_source = app.get(url, referer=ext_ref).text + val m3uLink:String? + val extRef = referer ?: "" + val iSource = app.get(url, referer=extRef).text - val bePlayer = Regex("""bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);""").find(i_source)?.groupValues + val bePlayer = Regex("""bePlayer\('([^']+)',\s*'(\{[^\}]+\})'\);""").find(iSource)?.groupValues if (bePlayer != null) { val bePlayerPass = bePlayer.get(1) val bePlayerData = bePlayer.get(2) val encrypted = AesHelper.cryptoAESHandler(bePlayerData, bePlayerPass.toByteArray(), false)?.replace("\\", "") ?: throw ErrorLoadingException("failed to decrypt") - Log.d("Kekik_${this.name}", "encrypted » ${encrypted}") - m3u_link = Regex("""video_location\":\"([^\"]+)""").find(encrypted)?.groupValues?.get(1) + m3uLink = Regex("""video_location\":\"([^\"]+)""").find(encrypted)?.groupValues?.get(1) } else { - m3u_link = Regex("""file:\"([^\"]+)""").find(i_source)?.groupValues?.get(1) + m3uLink = Regex("""file:\"([^\"]+)""").find(iSource)?.groupValues?.get(1) - val track_str = Regex("""tracks:\[([^\]]+)""").find(i_source)?.groupValues?.get(1) - if (track_str != null) { - val tracks:List = jacksonObjectMapper().readValue("[${track_str}]") + val trackStr = Regex("""tracks:\[([^\]]+)""").find(iSource)?.groupValues?.get(1) + if (trackStr != null) { + val tracks:List = jacksonObjectMapper().readValue("[${trackStr}]") for (track in tracks) { if (track.file == null || track.label == null) continue @@ -53,7 +52,7 @@ open class HDMomPlayer : ExtractorApi() { ExtractorLink( source = this.name, name = this.name, - url = m3u_link ?: throw ErrorLoadingException("m3u link not found"), + url = m3uLink ?: throw ErrorLoadingException("m3u link not found"), referer = url, quality = Qualities.Unknown.value, isM3u8 = true diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt index 8318c3fb..e3cf3aee 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/HDPlayerSystemExtractor.kt @@ -13,37 +13,36 @@ open class HDPlayerSystem : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val vid_id = if (url.contains("video/")) { + val extRef = referer ?: "" + val vidId = if (url.contains("video/")) { url.substringAfter("video/") } else { url.substringAfter("?data=") } - val post_url = "${mainUrl}/player/index.php?data=${vid_id}&do=getVideo" - Log.d("Kekik_${this.name}", "post_url » ${post_url}") + val postUrl = "${mainUrl}/player/index.php?data=${vidId}&do=getVideo" val response = app.post( - post_url, + postUrl, data = mapOf( - "hash" to vid_id, - "r" to ext_ref + "hash" to vidId, + "r" to extRef ), - referer = ext_ref, + referer = extRef, headers = mapOf( "Content-Type" to "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With" to "XMLHttpRequest" ) ) - val video_response = response.parsedSafe() ?: throw ErrorLoadingException("failed to parse response") - val m3u_link = video_response.securedLink + val videoResponse = response.parsedSafe() ?: throw ErrorLoadingException("failed to parse response") + val m3uLink = videoResponse.securedLink callback.invoke( ExtractorLink( source = this.name, name = this.name, - url = m3u_link, - referer = ext_ref, + url = m3uLink, + referer = extRef, quality = Qualities.Unknown.value, type = INFER_TYPE ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt index ce742e97..07346c70 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/MailRuExtractor.kt @@ -13,28 +13,25 @@ open class MailRu : ExtractorApi() { override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - Log.d("Kekik_${this.name}", "url » ${url}") + val extRef = referer ?: "" - val vid_id = url.substringAfter("video/embed/").trim() - val video_req = app.get("${mainUrl}/+/video/meta/${vid_id}", referer=url) - val video_key = video_req.cookies["video_key"].toString() - Log.d("Kekik_${this.name}", "video_key » ${video_key}") + val vidId = url.substringAfter("video/embed/").trim() + val videoReq = app.get("${mainUrl}/+/video/meta/${vidId}", referer=url) + val videoKey = videoReq.cookies["video_key"].toString() - val video_data = AppUtils.tryParseJson(video_req.text) ?: throw ErrorLoadingException("Video not found") + val videoData = AppUtils.tryParseJson(videoReq.text) ?: throw ErrorLoadingException("Video not found") - for (video in video_data.videos) { - Log.d("Kekik_${this.name}", "video » ${video}") + for (video in videoData.videos) { - val video_url = if (video.url.startsWith("//")) "https:${video.url}" else video.url + val videoUrl = if (video.url.startsWith("//")) "https:${video.url}" else video.url callback.invoke( ExtractorLink( source = this.name, name = this.name, - url = video_url, + url = videoUrl, referer = url, - headers = mapOf("Cookie" to "video_key=${video_key}"), + headers = mapOf("Cookie" to "video_key=${videoKey}"), quality = getQualityFromName(video.key), isM3u8 = false ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt index 6db0830c..31b3d50b 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/OdnoklassnikiExtractor.kt @@ -13,22 +13,20 @@ open class Odnoklassniki : ExtractorApi() { override val requiresReferer = false override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - Log.d("Kekik_${this.name}", "url » ${url}") + val extRef = referer ?: "" - val user_agent = mapOf("User-Agent" to "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36") + val userAgent = mapOf("User-Agent" to "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36") - val video_req = app.get(url, headers=user_agent).text.replace("\\"", "\"").replace("\\\\", "\\") + val videoReq = app.get(url, headers=userAgent).text.replace("\\"", "\"").replace("\\\\", "\\") .replace(Regex("\\\\u([0-9A-Fa-f]{4})")) { matchResult -> Integer.parseInt(matchResult.groupValues[1], 16).toChar().toString() } - val videos_str = Regex("""\"videos\":(\[[^\]]*\])""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("Video not found") - val videos = AppUtils.tryParseJson>(videos_str) ?: throw ErrorLoadingException("Video not found") + val videosStr = Regex("""\"videos\":(\[[^\]]*\])""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("Video not found") + val videos = AppUtils.tryParseJson>(videosStr) ?: throw ErrorLoadingException("Video not found") for (video in videos) { - Log.d("Kekik_${this.name}", "video » ${video}") - val video_url = if (video.url.startsWith("//")) "https:${video.url}" else video.url + val videoUrl = if (video.url.startsWith("//")) "https:${video.url}" else video.url val quality = video.name.uppercase() .replace("MOBILE", "144p") @@ -44,10 +42,10 @@ open class Odnoklassniki : ExtractorApi() { ExtractorLink( source = this.name, name = this.name, - url = video_url, + url = videoUrl, referer = url, quality = getQualityFromName(quality), - headers = user_agent, + headers = userAgent, isM3u8 = false ) ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt index 0a005036..3a5cf727 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/PeaceMakerstExtractor.kt @@ -13,39 +13,38 @@ open class PeaceMakerst : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val m3u_link:String? - val ext_ref = referer ?: "" - val post_url = "${url}?do=getVideo" - Log.d("Kekik_${this.name}", "post_url » ${post_url}") + val m3uLink:String? + val extRef = referer ?: "" + val postUrl = "${url}?do=getVideo" val response = app.post( - post_url, + postUrl, data = mapOf( "hash" to url.substringAfter("video/"), - "r" to ext_ref, + "r" to extRef, "s" to "" ), - referer = ext_ref, + referer = extRef, headers = mapOf( "Content-Type" to "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With" to "XMLHttpRequest" ) ) if (response.text.contains("teve2.com.tr\\/embed\\/")) { - val teve2_id = response.text.substringAfter("teve2.com.tr\\/embed\\/").substringBefore("\"") - val teve2_response = app.get( - "https://www.teve2.com.tr/action/media/${teve2_id}", - referer = "https://www.teve2.com.tr/embed/${teve2_id}" + val teve2Id = response.text.substringAfter("teve2.com.tr\\/embed\\/").substringBefore("\"") + val teve2Response = app.get( + "https://www.teve2.com.tr/action/media/${teve2Id}", + referer = "https://www.teve2.com.tr/embed/${teve2Id}" ).parsedSafe() ?: throw ErrorLoadingException("teve2 response is null") - m3u_link = teve2_response.media.link.serviceUrl + "//" + teve2_response.media.link.securePath + m3uLink = teve2Response.media.link.serviceUrl + "//" + teve2Response.media.link.securePath } else { - val video_response = response.parsedSafe() ?: throw ErrorLoadingException("peace response is null") - val video_sources = video_response.videoSources - if (video_sources.isNotEmpty()) { - m3u_link = video_sources.lastOrNull()?.file + val videoResponse = response.parsedSafe() ?: throw ErrorLoadingException("peace response is null") + val videoSources = videoResponse.videoSources + if (videoSources.isNotEmpty()) { + m3uLink = videoSources.lastOrNull()?.file } else { - m3u_link = null + m3uLink = null } } @@ -53,8 +52,8 @@ open class PeaceMakerst : ExtractorApi() { ExtractorLink( source = this.name, name = this.name, - url = m3u_link ?: throw ErrorLoadingException("m3u link not found"), - referer = ext_ref, + url = m3uLink ?: throw ErrorLoadingException("m3u link not found"), + referer = extRef, quality = Qualities.Unknown.value, type = INFER_TYPE ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt index 607d2d78..1088f2e9 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/RapidVidExtractor.kt @@ -12,36 +12,45 @@ open class RapidVid : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val video_req = app.get(url, referer=ext_ref).text + val extRef = referer ?: "" + val videoReq = app.get(url, referer=extRef).text - val sub_urls = mutableSetOf() - Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(video_req).forEach { - val (sub_url, sub_lang) = it.destructured + val subUrls = mutableSetOf() + Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach { + val (subUrl, subLang) = it.destructured - if (sub_url in sub_urls) { return@forEach } - sub_urls.add(sub_url) + if (subUrl in subUrls) { return@forEach } + subUrls.add(subUrl) subtitleCallback.invoke( SubtitleFile( - lang = sub_lang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), - url = fixUrl(sub_url.replace("\\", "")) + lang = subLang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), + url = fixUrl(subUrl.replace("\\", "")) ) ) } - val extracted_value = Regex("""file": "(.*)",""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + var extractedValue = Regex("""file": "(.*)",""").find(videoReq)?.groupValues?.get(1) + var decoded: String? = null - val bytes = extracted_value.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray() - val decoded = String(bytes, Charsets.UTF_8) - Log.d("Kekik_${this.name}", "decoded » ${decoded}") + if (extractedValue != null) { + val bytes = extractedValue.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray() + decoded = String(bytes, Charsets.UTF_8) ?: throw ErrorLoadingException("File not found") + } else { + val evalJWSsetup = Regex("""\};\s*(eval\(function[\s\S]*?)var played = \d+;""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + val JWSsetup = getAndUnpack(getAndUnpack(evalJWSsetup)).replace("\\\\", "\\") + extractedValue = Regex("""file":"(.*)","label""").find(JWSsetup)?.groupValues?.get(1)?.replace("\\\\x", "") + + val bytes = extractedValue?.chunked(2)?.map { it.toInt(16).toByte() }?.toByteArray() + decoded = bytes?.toString(Charsets.UTF_8) ?: throw ErrorLoadingException("File not found") + } callback.invoke( ExtractorLink( source = this.name, name = this.name, url = decoded, - referer = ext_ref, + referer = extRef, quality = Qualities.Unknown.value, isM3u8 = true ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt index ebd57f9c..89f731f7 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/SibNetExtractor.kt @@ -12,18 +12,17 @@ open class SibNet : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val i_source = app.get(url, referer=ext_ref).text - var m3u_link = Regex("""player.src\(\[\{src: \"([^\"]+)""").find(i_source)?.groupValues?.get(1) ?: throw ErrorLoadingException("m3u link not found") + val extRef = referer ?: "" + val iSource = app.get(url, referer=extRef).text + var m3uLink = Regex("""player.src\(\[\{src: \"([^\"]+)""").find(iSource)?.groupValues?.get(1) ?: throw ErrorLoadingException("m3u link not found") - m3u_link = "${mainUrl}${m3u_link}" - Log.d("Kekik_${this.name}", "m3u_link » ${m3u_link}") + m3uLink = "${mainUrl}${m3uLink}" callback.invoke( ExtractorLink( source = this.name, name = this.name, - url = m3u_link, + url = m3uLink, referer = url, quality = Qualities.Unknown.value, type = INFER_TYPE diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt index de5ca9a2..f2a75b94 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TRsTXExtractor.kt @@ -13,13 +13,13 @@ open class TRsTX : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" + val extRef = referer ?: "" - val video_req = app.get(url, referer=ext_ref).text + val videoReq = app.get(url, referer=extRef).text - val file = Regex("""file\":\"([^\"]+)""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + val file = Regex("""file\":\"([^\"]+)""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") val postLink = "${mainUrl}/" + file.replace("\\", "") - val rawList = app.post(postLink, referer=ext_ref).parsedSafe>() ?: throw ErrorLoadingException("Post link not found") + val rawList = app.post(postLink, referer=extRef).parsedSafe>() ?: throw ErrorLoadingException("Post link not found") val postJson: List = rawList.drop(1).map { item -> val mapItem = item as Map<*, *> @@ -28,37 +28,35 @@ open class TRsTX : ExtractorApi() { file = mapItem["file"] as? String ) } - Log.d("Kekik_${this.name}", "postJson » ${postJson}") - val vid_links = mutableSetOf() - val vid_map = mutableListOf>() + val vidLinks = mutableSetOf() + val vidMap = mutableListOf>() for (item in postJson) { if (item.file == null || item.title == null) continue val fileUrl = "${mainUrl}/playlist/" + item.file.substring(1) + ".txt" - val videoData = app.post(fileUrl, referer=ext_ref).text + val videoData = app.post(fileUrl, referer=extRef).text - if (videoData in vid_links) { continue } - vid_links.add(videoData) + if (videoData in vidLinks) { continue } + vidLinks.add(videoData) - vid_map.add(mapOf( + vidMap.add(mapOf( "title" to item.title, "videoData" to videoData )) } - for (mapEntry in vid_map) { - Log.d("Kekik_${this.name}", "mapEntry » ${mapEntry}") + for (mapEntry in vidMap) { val title = mapEntry["title"] ?: continue - val m3u_link = mapEntry["videoData"] ?: continue + val m3uLink = mapEntry["videoData"] ?: continue callback.invoke( ExtractorLink( source = this.name, name = "${this.name} - ${title}", - url = m3u_link, - referer = ext_ref, + url = m3uLink, + referer = extRef, quality = Qualities.Unknown.value, type = INFER_TYPE ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt index 157374a3..0893b4de 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/TauVideoExtractor.kt @@ -13,12 +13,11 @@ open class TauVideo : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val video_key = url.split("/").last() - val video_url = "${mainUrl}/api/video/${video_key}" - Log.d("Kekik_${this.name}", "video_url » ${video_url}") + val extRef = referer ?: "" + val videoKey = url.split("/").last() + val videoUrl = "${mainUrl}/api/video/${videoKey}" - val api = app.get(video_url).parsedSafe() ?: throw ErrorLoadingException("TauVideo") + val api = app.get(videoUrl).parsedSafe() ?: throw ErrorLoadingException("TauVideo") for (video in api.urls) { callback.invoke( @@ -26,7 +25,7 @@ open class TauVideo : ExtractorApi() { source = this.name, name = this.name, url = video.url, - referer = ext_ref, + referer = extRef, quality = getQualityFromName(video.label), type = INFER_TYPE ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt index e57772ce..f7c3dd5e 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VidMoxyExtractor.kt @@ -12,36 +12,45 @@ open class VidMoxy : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val video_req = app.get(url, referer=ext_ref).text + val extRef = referer ?: "" + val videoReq = app.get(url, referer=extRef).text - val sub_urls = mutableSetOf() - Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(video_req).forEach { - val (sub_url, sub_lang) = it.destructured + val subUrls = mutableSetOf() + Regex("""captions\",\"file\":\"([^\"]+)\",\"label\":\"([^\"]+)\"""").findAll(videoReq).forEach { + val (subUrl, subLang) = it.destructured - if (sub_url in sub_urls) { return@forEach } - sub_urls.add(sub_url) + if (subUrl in subUrls) { return@forEach } + subUrls.add(subUrl) subtitleCallback.invoke( SubtitleFile( - lang = sub_lang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), - url = fixUrl(sub_url.replace("\\", "")) + lang = subLang.replace("\\u0131", "ı").replace("\\u0130", "İ").replace("\\u00fc", "ü").replace("\\u00e7", "ç"), + url = fixUrl(subUrl.replace("\\", "")) ) ) } - val extracted_value = Regex("""file": "(.*)",""").find(video_req)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + var extractedValue = Regex("""file": "(.*)",""").find(videoReq)?.groupValues?.get(1) + var decoded: String? = null - val bytes = extracted_value.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray() - val decoded = String(bytes, Charsets.UTF_8) - Log.d("Kekik_${this.name}", "decoded » ${decoded}") + if (extractedValue != null) { + val bytes = extractedValue.split("\\x").filter { it.isNotEmpty() }.map { it.toInt(16).toByte() }.toByteArray() + decoded = String(bytes, Charsets.UTF_8) ?: throw ErrorLoadingException("File not found") + } else { + val evaljwSetup = Regex("""\};\s*(eval\(function[\s\S]*?)var played = \d+;""").find(videoReq)?.groupValues?.get(1) ?: throw ErrorLoadingException("File not found") + val jwSetup = getAndUnpack(getAndUnpack(evaljwSetup)).replace("\\\\", "\\") + extractedValue = Regex("""file":"(.*)","label""").find(jwSetup)?.groupValues?.get(1)?.replace("\\\\x", "") + + val bytes = extractedValue?.chunked(2)?.map { it.toInt(16).toByte() }?.toByteArray() + decoded = bytes?.toString(Charsets.UTF_8) ?: throw ErrorLoadingException("File not found") + } callback.invoke( ExtractorLink( source = this.name, name = this.name, url = decoded, - referer = ext_ref, + referer = extRef, quality = Qualities.Unknown.value, isM3u8 = true ) diff --git a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt index 1161ff66..c85e6416 100644 --- a/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt +++ b/library/src/commonMain/kotlin/com/lagradost/cloudstream3/extractors/VideoSeyredExtractor.kt @@ -15,14 +15,13 @@ open class VideoSeyred : ExtractorApi() { override val requiresReferer = true override suspend fun getUrl(url: String, referer: String?, subtitleCallback: (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit) { - val ext_ref = referer ?: "" - val video_id = url.substringAfter("embed/").substringBefore("?") - val video_url = "${mainUrl}/playlist/${video_id}.json" - Log.d("Kekik_${this.name}", "video_url » ${video_url}") + val extRef = referer ?: "" + val videoId = url.substringAfter("embed/").substringBefore("?") + val videoUrl = "${mainUrl}/playlist/${videoId}.json" - val response_raw = app.get(video_url) - val response_list:List = jacksonObjectMapper().readValue(response_raw.text) ?: throw ErrorLoadingException("VideoSeyred") - val response = response_list[0] ?: throw ErrorLoadingException("VideoSeyred") + val responseRaw = app.get(videoUrl) + val responseList:List = jacksonObjectMapper().readValue(responseRaw.text) ?: throw ErrorLoadingException("VideoSeyred") + val response = responseList[0] ?: throw ErrorLoadingException("VideoSeyred") for (track in response.tracks) { if (track.label != null && track.kind == "captions") { From 8fcb3e3121de93017f7b3cbf959b4429040a2184 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:45:25 -0600 Subject: [PATCH 870/888] Fix cast recycler scrolling (#1221) --- .../ui/result/ResultFragmentPhone.kt | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index f1399e8d..97bc49ea 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -23,6 +23,7 @@ import androidx.core.widget.NestedScrollView import androidx.core.widget.doOnTextChanged import androidx.lifecycle.ViewModelProvider import com.discord.panels.OverlappingPanelsLayout +import com.discord.panels.PanelState import com.discord.panels.PanelsChildGestureRegionObserver import com.google.android.gms.cast.framework.CastButtonFactory import com.google.android.gms.cast.framework.CastContext @@ -118,6 +119,14 @@ open class ResultFragmentPhone : FullScreenPlayer() { return root } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + PanelsChildGestureRegionObserver.Provider.get().apply { + resultBinding?.resultCastItems?.let { register(it) } + } + } + var currentTrailers: List = emptyList() var currentTrailerIndex = 0 @@ -210,9 +219,6 @@ open class ResultFragmentPhone : FullScreenPlayer() { } override fun onDestroyView() { - - //somehow this still leaks and I dont know why???? - // todo look at https://github.com/discord/OverlappingPanels/blob/70b4a7cf43c6771873b1e091029d332896d41a1a/sample_app/src/main/java/com/discord/sampleapp/MainActivity.kt PanelsChildGestureRegionObserver.Provider.get().let { obs -> resultBinding?.resultCastItems?.let { obs.unregister(it) @@ -329,13 +335,18 @@ open class ResultFragmentPhone : FullScreenPlayer() { syncModel.addFromUrl(storedData.url) val api = APIHolder.getApiFromNameNull(storedData.apiName) - PanelsChildGestureRegionObserver.Provider.get().apply { - resultBinding?.resultCastItems?.let { - register(it) + // This may not be 100% reliable, and may delay for small period + // before resultCastItems will be scrollable again, but this does work + // most of the time. + binding?.resultOverlappingPanels?.registerEndPanelStateListeners( + object : OverlappingPanelsLayout.PanelStateListener { + override fun onPanelStateChange(panelState: PanelState) { + PanelsChildGestureRegionObserver.Provider.get().apply { + resultBinding?.resultCastItems?.let { register(it) } + } + } } - addGestureRegionsUpdateListener(gestureRegionsListener) - } - + ) // ===== ===== ===== @@ -674,6 +685,9 @@ open class ResultFragmentPhone : FullScreenPlayer() { observe(viewModel.page) { data -> if (data == null) return@observe resultBinding?.apply { + PanelsChildGestureRegionObserver.Provider.get().apply { + register(resultCastItems) + } (data as? Resource.Success)?.value?.let { d -> resultVpn.setText(d.vpnText) resultInfo.setText(d.metaText) @@ -1167,4 +1181,4 @@ open class ResultFragmentPhone : FullScreenPlayer() { } } } -} +} \ No newline at end of file From ab379ab31c30069aac3afdeec76410e69ea6bc95 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:54:54 -0600 Subject: [PATCH 871/888] Support for multi deleting downloads and other major improvements/fixes (#1177) --- .../lagradost/cloudstream3/MainActivity.kt | 51 +- .../ui/download/DownloadAdapter.kt | 386 +++++++++----- .../ui/download/DownloadButtonSetup.kt | 31 +- .../ui/download/DownloadChildFragment.kt | 174 +++++-- .../ui/download/DownloadFragment.kt | 182 +++++-- .../ui/download/DownloadViewModel.kt | 483 +++++++++++++++--- .../ui/download/button/BaseFetchButton.kt | 7 +- .../ui/download/button/PieFetchButton.kt | 6 +- .../ui/player/DownloadFileGenerator.kt | 32 +- .../ui/player/DownloadedPlayerActivity.kt | 11 +- .../ui/result/ResultTrailerPlayer.kt | 30 +- .../cloudstream3/utils/AppContextUtils.kt | 14 +- .../utils/BackPressedCallbackHelper.kt | 30 ++ .../cloudstream3/utils/SnackbarHelper.kt | 84 +++ .../cloudstream3/utils/SubtitleUtils.kt | 56 ++ .../utils/VideoDownloadManager.kt | 45 +- .../res/layout/download_child_episode.xml | 17 +- .../res/layout/download_header_episode.xml | 11 + .../res/layout/fragment_child_downloads.xml | 59 ++- .../main/res/layout/fragment_downloads.xml | 109 ++-- app/src/main/res/values/strings.xml | 12 +- 21 files changed, 1384 insertions(+), 446 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/BackPressedCallbackHelper.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/SnackbarHelper.kt create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/SubtitleUtils.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index b59265ee..5408d2a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -133,6 +133,8 @@ import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult import com.lagradost.cloudstream3.utils.AppContextUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.AppContextUtils.updateHasTrailers +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.attachBackPressedCallback +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.detachBackPressedCallback import com.lagradost.cloudstream3.utils.BackupUtils.backup import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup import com.lagradost.cloudstream3.utils.BiometricAuthenticator.BiometricCallback @@ -151,6 +153,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.migrateResumeWatching import com.lagradost.cloudstream3.utils.Event import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog +import com.lagradost.cloudstream3.utils.SnackbarHelper.showSnackbar import com.lagradost.cloudstream3.utils.UIHelper.changeStatusBarState import com.lagradost.cloudstream3.utils.UIHelper.checkWrite import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute @@ -1254,17 +1257,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa 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() - } + showSnackbar( + this@MainActivity, + R.string.jsdelivr_enabled, + Snackbar.LENGTH_LONG, + R.string.revert + ) { setKey(getString(R.string.jsdelivr_proxy_key), false) } } } } @@ -1603,7 +1601,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa if (isLayout(TV or EMULATOR)) { if (navDestination.matchDestination(R.id.navigation_home)) { - attachBackPressedCallback() + attachBackPressedCallback { + showConfirmExitDialog() + window?.navigationBarColor = + colorFromAttribute(R.attr.primaryGrayBackground) + updateLocale() + } } else detachBackPressedCallback() } } @@ -1848,28 +1851,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa finish() } - private var backPressedCallback: OnBackPressedCallback? = null - - private fun attachBackPressedCallback() { - if (backPressedCallback == null) { - backPressedCallback = object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - showConfirmExitDialog() - window?.navigationBarColor = - colorFromAttribute(R.attr.primaryGrayBackground) - updateLocale() - } - } - } - - backPressedCallback?.isEnabled = true - onBackPressedDispatcher.addCallback(this, backPressedCallback ?: return) - } - - private fun detachBackPressedCallback() { - backPressedCallback?.isEnabled = false - } - suspend fun checkGithubConnectivity(): Boolean { return try { app.get( @@ -1880,4 +1861,4 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa false } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt index 9a026334..20458429 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadAdapter.kt @@ -1,9 +1,9 @@ package com.lagradost.cloudstream3.ui.download -import android.annotation.SuppressLint import android.text.format.Formatter.formatShortFileSize import android.view.LayoutInflater import android.view.ViewGroup +import android.widget.CheckBox import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil @@ -31,47 +31,30 @@ const val DOWNLOAD_ACTION_LONG_CLICK = 5 const val DOWNLOAD_ACTION_GO_TO_CHILD = 0 const val DOWNLOAD_ACTION_LOAD_RESULT = 1 -abstract class VisualDownloadCached( - open val currentBytes: Long, - open val totalBytes: Long, - open val data: VideoDownloadHelper.DownloadCached -) { +sealed class VisualDownloadCached { + abstract val currentBytes: Long + abstract val totalBytes: Long + abstract val data: VideoDownloadHelper.DownloadCached + abstract var isSelected: Boolean - // Just to be extra-safe with areContentsTheSame - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is VisualDownloadCached) return false + data class Child( + override val currentBytes: Long, + override val totalBytes: Long, + override val data: VideoDownloadHelper.DownloadEpisodeCached, + override var isSelected: Boolean, + ) : VisualDownloadCached() - if (currentBytes != other.currentBytes) return false - if (totalBytes != other.totalBytes) return false - if (data != other.data) return false - - return true - } - - override fun hashCode(): Int { - var result = currentBytes.hashCode() - result = 31 * result + totalBytes.hashCode() - result = 31 * result + data.hashCode() - return result - } + data class Header( + override val currentBytes: Long, + override val totalBytes: Long, + override val data: VideoDownloadHelper.DownloadHeaderCached, + override var isSelected: Boolean, + val child: VideoDownloadHelper.DownloadEpisodeCached?, + val currentOngoingDownloads: Int, + val totalDownloads: Int, + ) : VisualDownloadCached() } -data class VisualDownloadChildCached( - override val currentBytes: Long, - override val totalBytes: Long, - override val data: VideoDownloadHelper.DownloadEpisodeCached, -): VisualDownloadCached(currentBytes, totalBytes, data) - -data class VisualDownloadHeaderCached( - override val currentBytes: Long, - override val totalBytes: Long, - override val data: VideoDownloadHelper.DownloadHeaderCached, - val child: VideoDownloadHelper.DownloadEpisodeCached?, - val currentOngoingDownloads: Int, - val totalDownloads: Int, -): VisualDownloadCached(currentBytes, totalBytes, data) - data class DownloadClickEvent( val action: Int, val data: VideoDownloadHelper.DownloadEpisodeCached @@ -83,108 +66,180 @@ data class DownloadHeaderClickEvent( ) class DownloadAdapter( - private val clickCallback: (DownloadHeaderClickEvent) -> Unit, - private val mediaClickCallback: (DownloadClickEvent) -> Unit, + private val onHeaderClickEvent: (DownloadHeaderClickEvent) -> Unit, + private val onItemClickEvent: (DownloadClickEvent) -> Unit, + private val onItemSelectionChanged: (Int, Boolean) -> Unit, ) : ListAdapter(DiffCallback()) { + private var isMultiDeleteState: Boolean = false + companion object { private const val VIEW_TYPE_HEADER = 0 private const val VIEW_TYPE_CHILD = 1 } inner class DownloadViewHolder( - private val binding: ViewBinding, - private val clickCallback: (DownloadHeaderClickEvent) -> Unit, - private val mediaClickCallback: (DownloadClickEvent) -> Unit, + private val binding: ViewBinding ) : RecyclerView.ViewHolder(binding.root) { fun bind(card: VisualDownloadCached?) { when (binding) { - is DownloadHeaderEpisodeBinding -> bindHeader(card as? VisualDownloadHeaderCached) - is DownloadChildEpisodeBinding -> bindChild(card as? VisualDownloadChildCached) + is DownloadHeaderEpisodeBinding -> bindHeader(card as? VisualDownloadCached.Header) + is DownloadChildEpisodeBinding -> bindChild(card as? VisualDownloadCached.Child) } } - @SuppressLint("SetTextI18n") - private fun bindHeader(card: VisualDownloadHeaderCached?) { - if (binding !is DownloadHeaderEpisodeBinding) return - card ?: return - val d = card.data + private fun bindHeader(card: VisualDownloadCached.Header?) { + if (binding !is DownloadHeaderEpisodeBinding || card == null) return + val data = card.data binding.apply { - downloadHeaderPoster.apply { - setImage(d.poster) - setOnClickListener { - clickCallback.invoke(DownloadHeaderClickEvent(DOWNLOAD_ACTION_LOAD_RESULT, d)) + episodeHolder.apply { + if (isMultiDeleteState) { + setOnClickListener { + toggleIsChecked(deleteCheckbox, data.id) + } + } + + setOnLongClickListener { + toggleIsChecked(deleteCheckbox, data.id) + true } } - downloadHeaderTitle.text = d.name - val formattedSizeString = formatShortFileSize(itemView.context, card.totalBytes) + downloadHeaderPoster.apply { + setImage(data.poster) + if (isMultiDeleteState) { + setOnClickListener { + toggleIsChecked(deleteCheckbox, data.id) + } + } else { + setOnClickListener { + onHeaderClickEvent.invoke( + DownloadHeaderClickEvent( + DOWNLOAD_ACTION_LOAD_RESULT, + data + ) + ) + } + } + + setOnLongClickListener { + toggleIsChecked(deleteCheckbox, data.id) + true + } + } + downloadHeaderTitle.text = data.name + val formattedSize = formatShortFileSize(itemView.context, card.totalBytes) if (card.child != null) { - downloadHeaderGotoChild.isVisible = false + handleChildDownload(card, formattedSize) + } else handleParentDownload(card, formattedSize) - val status = downloadButton.getStatus(card.child.id, card.currentBytes, card.totalBytes) - if (status == DownloadStatusTell.IsDone) { - // We do this here instead if we are finished downloading - // so that we can use the value from the view model - // rather than extra unneeded disk operations and to prevent a - // delay in updating download icon state. - downloadButton.setProgress(card.currentBytes, card.totalBytes) - downloadButton.applyMetaData(card.child.id, card.currentBytes, card.totalBytes) - // We will let the view model handle this - downloadButton.doSetProgress = false - downloadButton.progressBar.progressDrawable = - downloadButton.getDrawableFromStatus(status) - ?.let { ContextCompat.getDrawable(downloadButton.context, it) } - downloadHeaderInfo.text = formattedSizeString - } else { - downloadButton.doSetProgress = true - downloadButton.progressBar.progressDrawable = - ContextCompat.getDrawable(downloadButton.context, downloadButton.progressDrawable) + if (isMultiDeleteState) { + deleteCheckbox.setOnCheckedChangeListener { _, isChecked -> + onItemSelectionChanged.invoke(data.id, isChecked) } + } else deleteCheckbox.setOnCheckedChangeListener(null) - downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, mediaClickCallback) - downloadButton.isVisible = true - - episodeHolder.setOnClickListener { - mediaClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, card.child)) - } - } else { - downloadButton.isVisible = false - downloadHeaderGotoChild.isVisible = true - - try { - downloadHeaderInfo.text = downloadHeaderInfo.context.getString(R.string.extra_info_format) - .format( - card.totalDownloads, - downloadHeaderInfo.context.resources.getQuantityString( - R.plurals.episodes, - card.totalDownloads - ), - formattedSizeString - ) - } catch (e: Exception) { - // You probably formatted incorrectly - downloadHeaderInfo.text = "Error" - logError(e) - } - - episodeHolder.setOnClickListener { - clickCallback.invoke(DownloadHeaderClickEvent(DOWNLOAD_ACTION_GO_TO_CHILD, d)) - } + deleteCheckbox.apply { + isVisible = isMultiDeleteState + isChecked = card.isSelected } } } - private fun bindChild(card: VisualDownloadChildCached?) { - if (binding !is DownloadChildEpisodeBinding) return - card ?: return - val d = card.data + private fun DownloadHeaderEpisodeBinding.handleChildDownload( + card: VisualDownloadCached.Header, + formattedSize: String + ) { + card.child ?: return + downloadHeaderGotoChild.isVisible = false + val status = downloadButton.getStatus(card.child.id, card.currentBytes, card.totalBytes) + if (status == DownloadStatusTell.IsDone) { + // We do this here instead if we are finished downloading + // so that we can use the value from the view model + // rather than extra unneeded disk operations and to prevent a + // delay in updating download icon state. + downloadButton.setProgress(card.currentBytes, card.totalBytes) + downloadButton.applyMetaData(card.child.id, card.currentBytes, card.totalBytes) + // We will let the view model handle this + downloadButton.doSetProgress = false + downloadButton.progressBar.progressDrawable = + downloadButton.getDrawableFromStatus(status) + ?.let { ContextCompat.getDrawable(downloadButton.context, it) } + downloadHeaderInfo.text = formattedSize + } else { + // We need to make sure we restore the correct progress + // when we refresh data in the adapter. + downloadButton.resetView() + val drawable = downloadButton.getDrawableFromStatus(status)?.let { + ContextCompat.getDrawable(downloadButton.context, it) + } + downloadButton.statusView.setImageDrawable(drawable) + downloadButton.progressBar.progressDrawable = + ContextCompat.getDrawable( + downloadButton.context, + downloadButton.progressDrawable + ) + } + + downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, onItemClickEvent) + downloadButton.isVisible = !isMultiDeleteState + + if (!isMultiDeleteState) { + episodeHolder.setOnClickListener { + onItemClickEvent.invoke( + DownloadClickEvent( + DOWNLOAD_ACTION_PLAY_FILE, + card.child + ) + ) + } + } + } + + private fun DownloadHeaderEpisodeBinding.handleParentDownload( + card: VisualDownloadCached.Header, + formattedSize: String + ) { + downloadButton.isVisible = false + downloadHeaderGotoChild.isVisible = !isMultiDeleteState + + try { + downloadHeaderInfo.text = + downloadHeaderInfo.context.getString(R.string.extra_info_format).format( + card.totalDownloads, + downloadHeaderInfo.context.resources.getQuantityString( + R.plurals.episodes, + card.totalDownloads + ), + formattedSize + ) + } catch (e: Exception) { + downloadHeaderInfo.text = "" + logError(e) + } + + if (!isMultiDeleteState) { + episodeHolder.setOnClickListener { + onHeaderClickEvent.invoke( + DownloadHeaderClickEvent( + DOWNLOAD_ACTION_GO_TO_CHILD, + card.data + ) + ) + } + } + } + + private fun bindChild(card: VisualDownloadCached.Child?) { + if (binding !is DownloadChildEpisodeBinding || card == null) return + + val data = card.data binding.apply { - val posDur = getViewPos(d.id) + val posDur = getViewPos(data.id) downloadChildEpisodeProgress.apply { isVisible = posDur != null posDur?.let { @@ -194,36 +249,87 @@ class DownloadAdapter( } } - val status = downloadButton.getStatus(d.id, card.currentBytes, card.totalBytes) + val status = downloadButton.getStatus(data.id, card.currentBytes, card.totalBytes) if (status == DownloadStatusTell.IsDone) { // We do this here instead if we are finished downloading // so that we can use the value from the view model // rather than extra unneeded disk operations and to prevent a // delay in updating download icon state. downloadButton.setProgress(card.currentBytes, card.totalBytes) - downloadButton.applyMetaData(d.id, card.currentBytes, card.totalBytes) + downloadButton.applyMetaData(data.id, card.currentBytes, card.totalBytes) // We will let the view model handle this downloadButton.doSetProgress = false downloadButton.progressBar.progressDrawable = downloadButton.getDrawableFromStatus(status) ?.let { ContextCompat.getDrawable(downloadButton.context, it) } - downloadChildEpisodeTextExtra.text = formatShortFileSize(downloadChildEpisodeTextExtra.context, card.totalBytes) + downloadChildEpisodeTextExtra.text = + formatShortFileSize(downloadChildEpisodeTextExtra.context, card.totalBytes) } else { - downloadButton.doSetProgress = true + // We need to make sure we restore the correct progress + // when we refresh data in the adapter. + downloadButton.resetView() + val drawable = downloadButton.getDrawableFromStatus(status)?.let { + ContextCompat.getDrawable(downloadButton.context, it) + } + downloadButton.statusView.setImageDrawable(drawable) downloadButton.progressBar.progressDrawable = - ContextCompat.getDrawable(downloadButton.context, downloadButton.progressDrawable) + ContextCompat.getDrawable( + downloadButton.context, + downloadButton.progressDrawable + ) } - downloadButton.setDefaultClickListener(d, downloadChildEpisodeTextExtra, mediaClickCallback) - downloadButton.isVisible = true + downloadButton.setDefaultClickListener( + data, + downloadChildEpisodeTextExtra, + onItemClickEvent + ) + downloadButton.isVisible = !isMultiDeleteState downloadChildEpisodeText.apply { - text = context.getNameFull(d.name, d.episode, d.season) + text = context.getNameFull(data.name, data.episode, data.season) isSelected = true // Needed for text repeating } downloadChildEpisodeHolder.setOnClickListener { - mediaClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d)) + onItemClickEvent.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, data)) + } + + downloadChildEpisodeHolder.apply { + when { + isMultiDeleteState -> { + setOnClickListener { + toggleIsChecked(deleteCheckbox, data.id) + } + } + + else -> { + setOnClickListener { + onItemClickEvent.invoke( + DownloadClickEvent( + DOWNLOAD_ACTION_PLAY_FILE, + data + ) + ) + } + } + } + + setOnLongClickListener { + toggleIsChecked(deleteCheckbox, data.id) + true + } + } + + if (isMultiDeleteState) { + deleteCheckbox.setOnCheckedChangeListener { _, isChecked -> + onItemSelectionChanged.invoke(data.id, isChecked) + } + } else deleteCheckbox.setOnCheckedChangeListener(null) + + deleteCheckbox.apply { + isVisible = isMultiDeleteState + isChecked = card.isSelected } } } @@ -236,7 +342,7 @@ class DownloadAdapter( VIEW_TYPE_CHILD -> DownloadChildEpisodeBinding.inflate(inflater, parent, false) else -> throw IllegalArgumentException("Invalid view type") } - return DownloadViewHolder(binding, clickCallback, mediaClickCallback) + return DownloadViewHolder(binding) } override fun onBindViewHolder(holder: DownloadViewHolder, position: Int) { @@ -245,18 +351,52 @@ class DownloadAdapter( override fun getItemViewType(position: Int): Int { return when (getItem(position)) { - is VisualDownloadChildCached -> VIEW_TYPE_CHILD - is VisualDownloadHeaderCached -> VIEW_TYPE_HEADER + is VisualDownloadCached.Child -> VIEW_TYPE_CHILD + is VisualDownloadCached.Header -> VIEW_TYPE_HEADER else -> throw IllegalArgumentException("Invalid data type at position $position") } } + fun setIsMultiDeleteState(value: Boolean) { + if (isMultiDeleteState == value) return + isMultiDeleteState = value + notifyItemRangeChanged(0, itemCount) + } + + fun notifyAllSelected() { + currentList.indices.forEach { index -> + if (!currentList[index].isSelected) { + notifyItemChanged(index) + } + } + } + + fun notifySelectionStates() { + currentList.indices.forEach { index -> + if (currentList[index].isSelected) { + notifyItemChanged(index) + } + } + } + + private fun toggleIsChecked(checkbox: CheckBox, itemId: Int) { + val isChecked = !checkbox.isChecked + checkbox.isChecked = isChecked + onItemSelectionChanged.invoke(itemId, isChecked) + } + class DiffCallback : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: VisualDownloadCached, newItem: VisualDownloadCached): Boolean { + override fun areItemsTheSame( + oldItem: VisualDownloadCached, + newItem: VisualDownloadCached + ): Boolean { return oldItem.data.id == newItem.data.id } - override fun areContentsTheSame(oldItem: VisualDownloadCached, newItem: VisualDownloadCached): Boolean { + override fun areContentsTheSame( + oldItem: VisualDownloadCached, + newItem: VisualDownloadCached + ): Boolean { return oldItem == newItem } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt index c8c40e29..bf2c1b49 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt @@ -1,11 +1,10 @@ package com.lagradost.cloudstream3.ui.download import android.content.DialogInterface -import android.widget.Toast import androidx.appcompat.app.AlertDialog +import com.google.android.material.snackbar.Snackbar import com.lagradost.cloudstream3.AcraApplication.Companion.getKey import com.lagradost.cloudstream3.CommonActivity.activity -import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.player.DownloadFileGenerator @@ -14,9 +13,11 @@ import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE +import com.lagradost.cloudstream3.utils.SnackbarHelper.showSnackbar import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager +import kotlinx.coroutines.MainScope object DownloadButtonSetup { fun handleDownloadClick(click: DownloadClickEvent) { @@ -29,9 +30,15 @@ object DownloadButtonSetup { DialogInterface.OnClickListener { _, which -> when (which) { DialogInterface.BUTTON_POSITIVE -> { - VideoDownloadManager.deleteFileAndUpdateSettings(ctx, id) + VideoDownloadManager.deleteFilesAndUpdateSettings( + ctx, + setOf(id), + MainScope() + ) } + DialogInterface.BUTTON_NEGATIVE -> { + // Do nothing on cancel } } } @@ -56,11 +63,13 @@ object DownloadButtonSetup { } } } + DOWNLOAD_ACTION_PAUSE_DOWNLOAD -> { VideoDownloadManager.downloadEvent.invoke( Pair(click.data.id, VideoDownloadManager.DownloadActionType.Pause) ) } + DOWNLOAD_ACTION_RESUME_DOWNLOAD -> { activity?.let { ctx -> if (VideoDownloadManager.downloadStatus.containsKey(id) && VideoDownloadManager.downloadStatus[id] == VideoDownloadManager.DownloadType.IsPaused) { @@ -79,6 +88,7 @@ object DownloadButtonSetup { } } } + DOWNLOAD_ACTION_LONG_CLICK -> { activity?.let { act -> val length = @@ -88,12 +98,15 @@ object DownloadButtonSetup { )?.fileLength ?: 0 if (length > 0) { - showToast(R.string.delete, Toast.LENGTH_LONG) - } else { - showToast(R.string.download, Toast.LENGTH_LONG) + showSnackbar( + act, + R.string.offline_file, + Snackbar.LENGTH_LONG + ) } } } + DOWNLOAD_ACTION_PLAY_FILE -> { activity?.let { act -> val info = @@ -119,7 +132,7 @@ object DownloadButtonSetup { id = click.data.id, parentId = click.data.parentId, - name = act.getString(R.string.downloaded_file), //click.data.name ?: keyInfo.displayName + name = act.getString(R.string.downloaded_file), // click.data.name ?: keyInfo.displayName season = click.data.season, episode = click.data.episode, headerName = parent.name, @@ -132,7 +145,7 @@ object DownloadButtonSetup { ) ) ) - //R.id.global_to_navigation_player, PlayerFragment.newInstance( + // R.id.global_to_navigation_player, PlayerFragment.newInstance( // UriData( // info.path.toString(), // keyInfo.basePath, @@ -145,7 +158,7 @@ object DownloadButtonSetup { // click.data.season // ), // getViewPos(click.data.id)?.position ?: 0 - //) + // ) ) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt index 03db948c..09c48a04 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildFragment.kt @@ -1,29 +1,33 @@ package com.lagradost.cloudstream3.ui.download import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.text.format.Formatter.formatShortFileSize import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentChildDownloadsBinding +import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.ui.result.FOCUS_SELF import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR import com.lagradost.cloudstream3.ui.settings.Globals.PHONE import com.lagradost.cloudstream3.ui.settings.Globals.isLayout -import com.lagradost.cloudstream3.utils.Coroutines.main -import com.lagradost.cloudstream3.utils.DataStore.getKey -import com.lagradost.cloudstream3.utils.DataStore.getKeys +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.attachBackPressedCallback +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.detachBackPressedCallback import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV -import com.lagradost.cloudstream3.utils.VideoDownloadHelper -import com.lagradost.cloudstream3.utils.VideoDownloadManager -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext class DownloadChildFragment : Fragment() { + private lateinit var downloadsViewModel: DownloadViewModel + private var binding: FragmentChildDownloadsBinding? = null + companion object { fun newInstance(headerName: String, folder: String): Bundle { return Bundle().apply { @@ -34,61 +38,54 @@ class DownloadChildFragment : Fragment() { } override fun onDestroyView() { - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent -= it } - downloadDeleteEventListener = null + detachBackPressedCallback() binding = null super.onDestroyView() } - private var binding: FragmentChildDownloadsBinding? = null - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { + downloadsViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] val localBinding = FragmentChildDownloadsBinding.inflate(inflater, container, false) binding = localBinding return localBinding.root } - private fun updateList(folder: String) = main { - context?.let { ctx -> - val data = withContext(Dispatchers.IO) { ctx.getKeys(folder) } - val eps = withContext(Dispatchers.IO) { - data.mapNotNull { key -> - context?.getKey(key) - }.mapNotNull { - val info = VideoDownloadManager.getDownloadFileInfoAndUpdateSettings(ctx, it.id) - ?: return@mapNotNull null - VisualDownloadChildCached( - currentBytes = info.fileLength, - totalBytes = info.totalBytes, - data = it, - ) - } - }.sortedBy { it.data.episode + (it.data.season ?: 0) * 100000 } - if (eps.isEmpty()) { - activity?.onBackPressedDispatcher?.onBackPressed() - return@main - } - - (binding?.downloadChildList?.adapter as? DownloadAdapter)?.submitList(eps) - } - } - - private var downloadDeleteEventListener: ((Int) -> Unit)? = null - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + /** + * We never want to retain multi-delete state + * when navigating to downloads. Setting this state + * immediately can sometimes result in the observer + * not being notified in time to update the UI. + * + * By posting to the main looper, we ensure that this + * operation is executed after the view has been fully created + * and all initializations are completed, allowing the + * observer to properly receive and handle the state change. + */ + Handler(Looper.getMainLooper()).post { + downloadsViewModel.setIsMultiDeleteState(false) + } + + /** + * We have to make sure selected items are + * cleared here as well so we don't run in an + * inconsistent state where selected items do + * not match the multi delete state we are in. + */ + downloadsViewModel.clearSelectedItems() + val folder = arguments?.getString("folder") val name = arguments?.getString("name") if (folder == null) { - activity?.onBackPressedDispatcher?.onBackPressed() // TODO FIX + activity?.onBackPressedDispatcher?.onBackPressed() return } - fixPaddingStatusbar(binding?.downloadChildRoot) binding?.downloadChildToolbar?.apply { title = name @@ -101,13 +98,55 @@ class DownloadChildFragment : Fragment() { setAppBarNoScrollFlagsOnTV() } + binding?.downloadDeleteAppbar?.setAppBarNoScrollFlagsOnTV() + + observe(downloadsViewModel.childCards) { + if (it.isEmpty()) { + activity?.onBackPressedDispatcher?.onBackPressed() + return@observe + } + + (binding?.downloadChildList?.adapter as? DownloadAdapter)?.submitList(it) + } + observe(downloadsViewModel.isMultiDeleteState) { isMultiDeleteState -> + val adapter = binding?.downloadChildList?.adapter as? DownloadAdapter + adapter?.setIsMultiDeleteState(isMultiDeleteState) + binding?.downloadDeleteAppbar?.isVisible = isMultiDeleteState + if (!isMultiDeleteState) { + detachBackPressedCallback() + downloadsViewModel.clearSelectedItems() + binding?.downloadChildToolbar?.isVisible = true + } + } + observe(downloadsViewModel.selectedBytes) { + updateDeleteButton(downloadsViewModel.selectedItemIds.value?.count() ?: 0, it) + } + observe(downloadsViewModel.selectedItemIds) { + handleSelectedChange(it) + updateDeleteButton(it.count(), downloadsViewModel.selectedBytes.value ?: 0L) + + binding?.btnDelete?.isVisible = it.isNotEmpty() + binding?.selectItemsText?.isVisible = it.isEmpty() + + val allSelected = downloadsViewModel.isAllSelected() + if (allSelected) { + binding?.btnToggleAll?.setText(R.string.deselect_all) + } else binding?.btnToggleAll?.setText(R.string.select_all) + } + val adapter = DownloadAdapter( {}, - { downloadClickEvent -> - handleDownloadClick(downloadClickEvent) - if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { - setUpDownloadDeleteListener(folder) - } + { click -> + if (click.action == DOWNLOAD_ACTION_DELETE_FILE) { + context?.let { ctx -> + downloadsViewModel.handleSingleDelete(ctx, click.data.id) + } + } else handleDownloadClick(click) + }, + { itemId, isChecked -> + if (isChecked) { + downloadsViewModel.addSelected(itemId) + } else downloadsViewModel.removeSelected(itemId) } ) @@ -122,18 +161,47 @@ class DownloadChildFragment : Fragment() { ) } - updateList(folder) + context?.let { downloadsViewModel.updateChildList(it, folder) } + fixPaddingStatusbar(binding?.downloadChildRoot) } - private fun setUpDownloadDeleteListener(folder: String) { - downloadDeleteEventListener = { id: Int -> - val list = (binding?.downloadChildList?.adapter as? DownloadAdapter)?.currentList - if (list != null) { - if (list.any { it.data.id == id }) { - updateList(folder) + private fun handleSelectedChange(selected: MutableSet) { + if (selected.isNotEmpty()) { + binding?.downloadDeleteAppbar?.isVisible = true + binding?.downloadChildToolbar?.isVisible = false + activity?.attachBackPressedCallback { + downloadsViewModel.setIsMultiDeleteState(false) + } + + binding?.btnDelete?.setOnClickListener { + context?.let { ctx -> + downloadsViewModel.handleMultiDelete(ctx) } } + + binding?.btnCancel?.setOnClickListener { + downloadsViewModel.setIsMultiDeleteState(false) + } + + binding?.btnToggleAll?.setOnClickListener { + val allSelected = downloadsViewModel.isAllSelected() + val adapter = binding?.downloadChildList?.adapter as? DownloadAdapter + if (allSelected) { + adapter?.notifySelectionStates() + downloadsViewModel.clearSelectedItems() + } else { + adapter?.notifyAllSelected() + downloadsViewModel.selectAllItems() + } + } + + downloadsViewModel.setIsMultiDeleteState(true) } - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } + } + + private fun updateDeleteButton(count: Int, selectedBytes: Long) { + val formattedSize = formatShortFileSize(context, selectedBytes) + binding?.btnDelete?.text = + getString(R.string.delete_format).format(count, formattedSize) } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 23d546e1..447b4f13 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -8,6 +8,8 @@ import android.content.Intent import android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION import android.os.Build import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.text.format.Formatter.formatShortFileSize import android.view.LayoutInflater import android.view.View @@ -17,7 +19,6 @@ import android.widget.TextView import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.StringRes -import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged @@ -27,7 +28,7 @@ import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.FragmentDownloadsBinding import com.lagradost.cloudstream3.databinding.StreamInputBinding -import com.lagradost.cloudstream3.isMovieType +import com.lagradost.cloudstream3.isEpisodeBased import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick @@ -40,20 +41,22 @@ import com.lagradost.cloudstream3.ui.result.setLinearListLayout import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.AppContextUtils.loadResult +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.attachBackPressedCallback +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.detachBackPressedCallback import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE -import com.lagradost.cloudstream3.utils.DataStore +import com.lagradost.cloudstream3.utils.DataStore.getFolderName import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV -import com.lagradost.cloudstream3.utils.VideoDownloadManager import java.net.URI const val DOWNLOAD_NAVIGATE_TO = "downloadpage" class DownloadFragment : Fragment() { private lateinit var downloadsViewModel: DownloadViewModel + private var binding: FragmentDownloadsBinding? = null private fun View.setLayoutWidth(weight: Long) { val param = LinearLayout.LayoutParams( @@ -65,14 +68,11 @@ class DownloadFragment : Fragment() { } override fun onDestroyView() { - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent -= it } - downloadDeleteEventListener = null + detachBackPressedCallback() binding = null super.onDestroyView() } - private var binding: FragmentDownloadsBinding? = null - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -84,12 +84,34 @@ class DownloadFragment : Fragment() { return localBinding.root } - private var downloadDeleteEventListener: ((Int) -> Unit)? = null - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) hideKeyboard() binding?.downloadStorageAppbar?.setAppBarNoScrollFlagsOnTV() + binding?.downloadDeleteAppbar?.setAppBarNoScrollFlagsOnTV() + + /** + * We never want to retain multi-delete state + * when navigating to downloads. Setting this state + * immediately can sometimes result in the observer + * not being notified in time to update the UI. + * + * By posting to the main looper, we ensure that this + * operation is executed after the view has been fully created + * and all initializations are completed, allowing the + * observer to properly receive and handle the state change. + */ + Handler(Looper.getMainLooper()).post { + downloadsViewModel.setIsMultiDeleteState(false) + } + + /** + * We have to make sure selected items are + * cleared here as well so we don't run in an + * inconsistent state where selected items do + * not match the multi delete state we are in. + */ + downloadsViewModel.clearSelectedItems() observe(downloadsViewModel.headerCards) { (binding?.downloadList?.adapter as? DownloadAdapter)?.submitList(it) @@ -97,25 +119,82 @@ class DownloadFragment : Fragment() { binding?.textNoDownloads?.isVisible = it.isEmpty() } observe(downloadsViewModel.availableBytes) { - updateStorageInfo(view.context, it, R.string.free_storage, binding?.downloadFreeTxt, binding?.downloadFree) + updateStorageInfo( + view.context, + it, + R.string.free_storage, + binding?.downloadFreeTxt, + binding?.downloadFree + ) } observe(downloadsViewModel.usedBytes) { - updateStorageInfo(view.context, it, R.string.used_storage, binding?.downloadUsedTxt, binding?.downloadUsed) - binding?.downloadStorageAppbar?.isVisible = it > 0 + updateStorageInfo( + view.context, + it, + R.string.used_storage, + binding?.downloadUsedTxt, + binding?.downloadUsed + ) + + // Prevent race condition and make sure + // we don't display it early + if ( + downloadsViewModel.isMultiDeleteState.value == null || + downloadsViewModel.isMultiDeleteState.value == false + ) binding?.downloadStorageAppbar?.isVisible = it > 0 } observe(downloadsViewModel.downloadBytes) { - updateStorageInfo(view.context, it, R.string.app_storage, binding?.downloadAppTxt, binding?.downloadApp) + updateStorageInfo( + view.context, + it, + R.string.app_storage, + binding?.downloadAppTxt, + binding?.downloadApp + ) + } + observe(downloadsViewModel.selectedBytes) { + updateDeleteButton(downloadsViewModel.selectedItemIds.value?.count() ?: 0, it) + } + observe(downloadsViewModel.isMultiDeleteState) { isMultiDeleteState -> + val adapter = binding?.downloadList?.adapter as? DownloadAdapter + adapter?.setIsMultiDeleteState(isMultiDeleteState) + binding?.downloadDeleteAppbar?.isVisible = isMultiDeleteState + if (!isMultiDeleteState) { + detachBackPressedCallback() + downloadsViewModel.clearSelectedItems() + // Prevent race condition and make sure + // we don't display it early + if (downloadsViewModel.usedBytes.value?.let { it > 0 } == true) { + binding?.downloadStorageAppbar?.isVisible = true + } + } + } + observe(downloadsViewModel.selectedItemIds) { + handleSelectedChange(it) + updateDeleteButton(it.count(), downloadsViewModel.selectedBytes.value ?: 0L) + + binding?.btnDelete?.isVisible = it.isNotEmpty() + binding?.selectItemsText?.isVisible = it.isEmpty() + + val allSelected = downloadsViewModel.isAllSelected() + if (allSelected) { + binding?.btnToggleAll?.setText(R.string.deselect_all) + } else binding?.btnToggleAll?.setText(R.string.select_all) } val adapter = DownloadAdapter( + { click -> handleItemClick(click) }, { click -> - handleItemClick(click) + if (click.action == DOWNLOAD_ACTION_DELETE_FILE) { + context?.let { ctx -> + downloadsViewModel.handleSingleDelete(ctx, click.data.id) + } + } else handleDownloadClick(click) }, - { downloadClickEvent -> - handleDownloadClick(downloadClickEvent) - if (downloadClickEvent.action == DOWNLOAD_ACTION_DELETE_FILE) { - setUpDownloadDeleteListener() - } + { itemId, isChecked -> + if (isChecked) { + downloadsViewModel.addSelected(itemId) + } else downloadsViewModel.removeSelected(itemId) } ) @@ -126,7 +205,6 @@ class DownloadFragment : Fragment() { setLinearListLayout( isHorizontal = false, nextRight = FOCUS_SELF, - nextUp = FOCUS_SELF, nextDown = FOCUS_SELF, ) } @@ -147,35 +225,68 @@ class DownloadFragment : Fragment() { handleScroll(scrollY - oldScrollY) } } - downloadsViewModel.updateList(requireContext()) + + context?.let { downloadsViewModel.updateHeaderList(it) } fixPaddingStatusbar(binding?.downloadRoot) } private fun handleItemClick(click: DownloadHeaderClickEvent) { when (click.action) { DOWNLOAD_ACTION_GO_TO_CHILD -> { - if (!click.data.type.isMovieType()) { - val folder = DataStore.getFolderName(DOWNLOAD_EPISODE_CACHE, click.data.id.toString()) + if (click.data.type.isEpisodeBased()) { + val folder = + getFolderName(DOWNLOAD_EPISODE_CACHE, click.data.id.toString()) activity?.navigate( R.id.action_navigation_downloads_to_navigation_download_child, DownloadChildFragment.newInstance(click.data.name, folder) ) } } + DOWNLOAD_ACTION_LOAD_RESULT -> { - (activity as AppCompatActivity?)?.loadResult(click.data.url, click.data.apiName) + activity?.loadResult(click.data.url, click.data.apiName) } } } - private fun setUpDownloadDeleteListener() { - downloadDeleteEventListener = { id -> - val list = (binding?.downloadList?.adapter as? DownloadAdapter)?.currentList - if (list?.any { it.data.id == id } == true) { - context?.let { downloadsViewModel.updateList(it) } + private fun handleSelectedChange(selected: MutableSet) { + if (selected.isNotEmpty()) { + binding?.downloadDeleteAppbar?.isVisible = true + binding?.downloadStorageAppbar?.isVisible = false + activity?.attachBackPressedCallback { + downloadsViewModel.setIsMultiDeleteState(false) } + + binding?.btnDelete?.setOnClickListener { + context?.let { ctx -> + downloadsViewModel.handleMultiDelete(ctx) + } + } + + binding?.btnCancel?.setOnClickListener { + downloadsViewModel.setIsMultiDeleteState(false) + } + + binding?.btnToggleAll?.setOnClickListener { + val allSelected = downloadsViewModel.isAllSelected() + val adapter = binding?.downloadList?.adapter as? DownloadAdapter + if (allSelected) { + adapter?.notifySelectionStates() + downloadsViewModel.clearSelectedItems() + } else { + adapter?.notifyAllSelected() + downloadsViewModel.selectAllItems() + } + } + + downloadsViewModel.setIsMultiDeleteState(true) } - downloadDeleteEventListener?.let { VideoDownloadManager.downloadDeleteEvent += it } + } + + private fun updateDeleteButton(count: Int, selectedBytes: Long) { + val formattedSize = formatShortFileSize(context, selectedBytes) + binding?.btnDelete?.text = + getString(R.string.delete_format).format(count, formattedSize) } private fun updateStorageInfo( @@ -185,7 +296,10 @@ class DownloadFragment : Fragment() { textView: TextView?, view: View? ) { - textView?.text = getString(R.string.storage_size_format).format(getString(stringRes), formatShortFileSize(context, bytes)) + textView?.text = getString(R.string.storage_size_format).format( + getString(stringRes), + formatShortFileSize(context, bytes) + ) view?.setLayoutWidth(bytes) } @@ -218,7 +332,9 @@ class DownloadFragment : Fragment() { if (!preventAutoSwitching) activateSwitchOnHls(text?.toString(), binding) } - (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager)?.primaryClip?.getItemAt(0)?.text?.toString()?.let { copy -> + (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager)?.primaryClip?.getItemAt( + 0 + )?.text?.toString()?.let { copy -> val fixedText = copy.trim() binding.streamUrl.setText(fixedText) activateSwitchOnHls(fixedText, binding) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt index 83d96592..137f1355 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadViewModel.kt @@ -1,122 +1,439 @@ package com.lagradost.cloudstream3.ui.download import android.content.Context +import android.content.DialogInterface import android.os.Environment import android.os.StatFs +import androidx.appcompat.app.AlertDialog import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.lagradost.cloudstream3.isMovieType +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.isEpisodeBased import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull +import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE import com.lagradost.cloudstream3.utils.DataStore.getFolderName import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKeys import com.lagradost.cloudstream3.utils.VideoDownloadHelper +import com.lagradost.cloudstream3.utils.VideoDownloadManager.deleteFilesAndUpdateSettings import com.lagradost.cloudstream3.utils.VideoDownloadManager.getDownloadFileInfoAndUpdateSettings import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext class DownloadViewModel : ViewModel() { - private val _headerCards = - MutableLiveData>().apply { listOf() } - val headerCards: LiveData> = _headerCards + + private val _headerCards = MutableLiveData>() + val headerCards: LiveData> = _headerCards + + private val _childCards = MutableLiveData>() + val childCards: LiveData> = _childCards private val _usedBytes = MutableLiveData() - private val _availableBytes = MutableLiveData() - private val _downloadBytes = MutableLiveData() - val usedBytes: LiveData = _usedBytes + + private val _availableBytes = MutableLiveData() val availableBytes: LiveData = _availableBytes + + private val _downloadBytes = MutableLiveData() val downloadBytes: LiveData = _downloadBytes - private var previousVisual: List? = null + private val _selectedBytes = MutableLiveData(0) + val selectedBytes: LiveData = _selectedBytes - fun updateList(context: Context) = viewModelScope.launchSafe { - val children = withContext(Dispatchers.IO) { - context.getKeys(DOWNLOAD_EPISODE_CACHE) + private val _isMultiDeleteState = MutableLiveData(false) + val isMultiDeleteState: LiveData = _isMultiDeleteState + + private val _selectedItemIds = MutableLiveData>(mutableSetOf()) + val selectedItemIds: LiveData> = _selectedItemIds + + private var previousVisual: List? = null + + fun setIsMultiDeleteState(value: Boolean) { + _isMultiDeleteState.postValue(value) + } + + fun addSelected(itemId: Int) { + updateSelectedItems { it.add(itemId) } + } + + fun removeSelected(itemId: Int) { + updateSelectedItems { it.remove(itemId) } + } + + fun selectAllItems() { + val items = headerCards.value.orEmpty() + childCards.value.orEmpty() + updateSelectedItems { it.addAll(items.map { item -> item.data.id }) } + } + + fun clearSelectedItems() { + // We need this to be done immediately + // so we can't use postValue + _selectedItemIds.value = mutableSetOf() + updateSelectedItems { it.clear() } + } + + fun isAllSelected(): Boolean { + val currentSelected = selectedItemIds.value ?: return false + val items = headerCards.value.orEmpty() + childCards.value.orEmpty() + return items.count() == currentSelected.count() && items.all { it.data.id in currentSelected } + } + + private fun updateSelectedItems(action: (MutableSet) -> Unit) { + val currentSelected = selectedItemIds.value ?: mutableSetOf() + action(currentSelected) + _selectedItemIds.postValue(currentSelected) + updateSelectedBytes() + updateSelectedCards() + } + + private fun updateSelectedBytes() = viewModelScope.launchSafe { + val selectedItemsList = getSelectedItemsData() ?: return@launchSafe + val totalSelectedBytes = selectedItemsList.sumOf { it.totalBytes } + _selectedBytes.postValue(totalSelectedBytes) + } + + private fun updateSelectedCards() = viewModelScope.launchSafe { + val currentSelected = selectedItemIds.value ?: return@launchSafe + + headerCards.value?.let { headers -> + headers.forEach { header -> + header.isSelected = header.data.id in currentSelected + } + _headerCards.postValue(headers) + } + + childCards.value?.let { children -> + children.forEach { child -> + child.isSelected = child.data.id in currentSelected + } + _childCards.postValue(children) + } + } + + fun updateHeaderList(context: Context) = viewModelScope.launchSafe { + val visual = withContext(Dispatchers.IO) { + val children = context.getKeys(DOWNLOAD_EPISODE_CACHE) .mapNotNull { context.getKey(it) } .distinctBy { it.id } // Remove duplicates + + val (totalBytesUsedByChild, currentBytesUsedByChild, totalDownloads) = + calculateDownloadStats(context, children) + + val cached = context.getKeys(DOWNLOAD_HEADER_CACHE) + .mapNotNull { context.getKey(it) } + + createVisualDownloadList( + context, cached, totalBytesUsedByChild, currentBytesUsedByChild, totalDownloads + ) } - // parentId : bytes - val totalBytesUsedByChild = HashMap() - // parentId : bytes - val currentBytesUsedByChild = HashMap() - // parentId : downloadsCount - val totalDownloads = HashMap() - - // Gets all children downloads - withContext(Dispatchers.IO) { - children.forEach { c -> - val childFile = getDownloadFileInfoAndUpdateSettings(context, c.id) ?: return@forEach - - if (childFile.fileLength <= 1) return@forEach - val len = childFile.totalBytes - val flen = childFile.fileLength - - totalBytesUsedByChild[c.parentId] = totalBytesUsedByChild[c.parentId]?.plus(len) ?: len - currentBytesUsedByChild[c.parentId] = currentBytesUsedByChild[c.parentId]?.plus(flen) ?: flen - totalDownloads[c.parentId] = totalDownloads[c.parentId]?.plus(1) ?: 1 - } - } - - val cached = withContext(Dispatchers.IO) { // Won't fetch useless keys - totalDownloads.entries.filter { it.value > 0 }.mapNotNull { - context.getKey( - DOWNLOAD_HEADER_CACHE, - it.key.toString() - ) - } - } - - val visual = withContext(Dispatchers.IO) { - cached.mapNotNull { - val downloads = totalDownloads[it.id] ?: 0 - val bytes = totalBytesUsedByChild[it.id] ?: 0 - val currentBytes = currentBytesUsedByChild[it.id] ?: 0 - if (bytes <= 0 || downloads <= 0) return@mapNotNull null - val movieEpisode = - if (!it.type.isMovieType()) null - else context.getKey( - DOWNLOAD_EPISODE_CACHE, - getFolderName(it.id.toString(), it.id.toString()) - ) - VisualDownloadHeaderCached( - currentBytes = currentBytes, - totalBytes = bytes, - data = it, - child = movieEpisode, - currentOngoingDownloads = 0, - totalDownloads = downloads, - ) - }.sortedBy { - (it.child?.episode ?: 0) + (it.child?.season?.times(10000) ?: 0) - } // Episode sorting by episode, lowest to highest - } - - // Only update list if different from the previous one to prevent duplicate initialization if (visual != previousVisual) { previousVisual = visual - - try { - val stat = StatFs(Environment.getExternalStorageDirectory().path) - val localBytesAvailable = stat.availableBytes - val localTotalBytes = stat.blockSizeLong * stat.blockCountLong - val localDownloadedBytes = visual.sumOf { it.totalBytes } - - _usedBytes.postValue(localTotalBytes - localBytesAvailable - localDownloadedBytes) - _availableBytes.postValue(localBytesAvailable) - _downloadBytes.postValue(localDownloadedBytes) - } catch (t: Throwable) { - _downloadBytes.postValue(0) - logError(t) - } - + updateStorageStats(visual) _headerCards.postValue(visual) } } + + private fun calculateDownloadStats( + context: Context, + children: List + ): Triple, Map, Map> { + // parentId : bytes + val totalBytesUsedByChild = mutableMapOf() + // parentId : bytes + val currentBytesUsedByChild = mutableMapOf() + // parentId : downloadsCount + val totalDownloads = mutableMapOf() + + children.forEach { child -> + val childFile = getDownloadFileInfoAndUpdateSettings(context, child.id) ?: return@forEach + if (childFile.fileLength <= 1) return@forEach + + val len = childFile.totalBytes + val flen = childFile.fileLength + + totalBytesUsedByChild.merge(child.parentId, len, Long::plus) + currentBytesUsedByChild.merge(child.parentId, flen, Long::plus) + totalDownloads.merge(child.parentId, 1, Int::plus) + } + return Triple(totalBytesUsedByChild, currentBytesUsedByChild, totalDownloads) + } + + private fun createVisualDownloadList( + context: Context, + cached: List, + totalBytesUsedByChild: Map, + currentBytesUsedByChild: Map, + totalDownloads: Map + ): List { + return cached.mapNotNull { + val downloads = totalDownloads[it.id] ?: 0 + val bytes = totalBytesUsedByChild[it.id] ?: 0 + val currentBytes = currentBytesUsedByChild[it.id] ?: 0 + if (bytes <= 0 || downloads <= 0) return@mapNotNull null + + val isSelected = selectedItemIds.value?.contains(it.id) ?: false + val movieEpisode = if (it.type.isEpisodeBased()) null else context.getKey( + DOWNLOAD_EPISODE_CACHE, + getFolderName(it.id.toString(), it.id.toString()) + ) + + VisualDownloadCached.Header( + currentBytes = currentBytes, + totalBytes = bytes, + data = it, + child = movieEpisode, + currentOngoingDownloads = 0, + totalDownloads = downloads, + isSelected = isSelected, + ) + // Prevent order being almost completely random, + // making things difficult to find. + }.sortedWith(compareBy { + // Sort by isEpisodeBased() ascending. We put those that + // are episode based at the bottom for UI purposes and to + // make it easier to find by grouping them together. + it.data.type.isEpisodeBased() + }.thenBy { + // Then we sort alphabetically by name (case-insensitive). + // Again, we do this to make things easier to find. + it.data.name.lowercase() + }) + } + + fun updateChildList(context: Context, folder: String) = viewModelScope.launchSafe { + val visual = withContext(Dispatchers.IO) { + context.getKeys(folder).mapNotNull { key -> + context.getKey(key) + }.mapNotNull { + val isSelected = selectedItemIds.value?.contains(it.id) ?: false + val info = getDownloadFileInfoAndUpdateSettings(context, it.id) ?: return@mapNotNull null + VisualDownloadCached.Child( + currentBytes = info.fileLength, + totalBytes = info.totalBytes, + isSelected = isSelected, + data = it, + ) + } + }.sortedWith(compareBy( + // Sort by season first, and then by episode number, + // to ensure sorting is consistent. + { it.data.season ?: 0 }, + { it.data.episode } + )) + + if (previousVisual != visual) { + previousVisual = visual + _childCards.postValue(visual) + } + } + + private fun removeItems(idsToRemove: Set) = viewModelScope.launchSafe { + val updatedHeaders = headerCards.value.orEmpty().filter { it.data.id !in idsToRemove } + val updatedChildren = childCards.value.orEmpty().filter { it.data.id !in idsToRemove } + _headerCards.postValue(updatedHeaders) + _childCards.postValue(updatedChildren) + } + + private fun updateStorageStats(visual: List) { + try { + val stat = StatFs(Environment.getExternalStorageDirectory().path) + val localBytesAvailable = stat.availableBytes + val localTotalBytes = stat.blockSizeLong * stat.blockCountLong + val localDownloadedBytes = visual.sumOf { it.totalBytes } + val localUsedBytes = localTotalBytes - localBytesAvailable + _usedBytes.postValue(localUsedBytes) + _availableBytes.postValue(localBytesAvailable) + _downloadBytes.postValue(localDownloadedBytes) + } catch (t: Throwable) { + _downloadBytes.postValue(0) + logError(t) + } + } + + fun handleMultiDelete(context: Context) = viewModelScope.launchSafe { + val selectedItemsList = getSelectedItemsData().orEmpty() + val deleteData = processSelectedItems(context, selectedItemsList) + val message = buildDeleteMessage(context, deleteData) + showDeleteConfirmationDialog(context, message, deleteData.ids, deleteData.parentIds) + } + + fun handleSingleDelete( + context: Context, + itemId: Int + ) = viewModelScope.launchSafe { + val itemData = getItemDataFromId(itemId) + val deleteData = processSelectedItems(context, itemData) + val message = buildDeleteMessage(context, deleteData) + showDeleteConfirmationDialog(context, message, deleteData.ids, deleteData.parentIds) + } + + private fun processSelectedItems( + context: Context, + selectedItemsList: List + ): DeleteData { + val names = mutableListOf() + val seriesNames = mutableListOf() + + val ids = mutableSetOf() + val parentIds = mutableSetOf() + + var parentName: String? = null + + selectedItemsList.forEach { item -> + when (item) { + is VisualDownloadCached.Header -> { + if (item.data.type.isEpisodeBased()) { + val episodes = context.getKeys(DOWNLOAD_EPISODE_CACHE) + .mapNotNull { + context.getKey( + it + ) + } + .filter { it.parentId == item.data.id } + .map { it.id } + ids.addAll(episodes) + parentIds.add(item.data.id) + + val episodeInfo = "${item.data.name} (${item.totalDownloads} ${ + context.resources.getQuantityString( + R.plurals.episodes, + item.totalDownloads + ).lowercase() + })" + seriesNames.add(episodeInfo) + } else { + ids.add(item.data.id) + names.add(item.data.name) + } + } + + is VisualDownloadCached.Child -> { + ids.add(item.data.id) + val parent = context.getKey( + DOWNLOAD_HEADER_CACHE, + item.data.parentId.toString() + ) + parentName = parent?.name + names.add( + context.getNameFull( + item.data.name, + item.data.episode, + item.data.season + ) + ) + } + } + } + + return DeleteData(ids, parentIds, seriesNames, names, parentName) + } + + private fun buildDeleteMessage( + context: Context, + data: DeleteData + ): String { + val formattedNames = data.names.sortedBy { it.lowercase() } + .joinToString(separator = "\n") { "• $it" } + val formattedSeriesNames = data.seriesNames.sortedBy { it.lowercase() } + .joinToString(separator = "\n") { "• $it" } + + return when { + data.ids.count() == 1 -> { + context.getString(R.string.delete_message).format( + data.names.firstOrNull() + ) + } + + data.seriesNames.isNotEmpty() && data.names.isEmpty() -> { + context.getString(R.string.delete_message_series_only).format(formattedSeriesNames) + } + + data.parentName != null && data.names.isNotEmpty() -> { + context.getString(R.string.delete_message_series_episodes) + .format(data.parentName, formattedNames) + } + + data.seriesNames.isNotEmpty() -> { + val seriesSection = context.getString(R.string.delete_message_series_section) + .format(formattedSeriesNames) + context.getString(R.string.delete_message_multiple) + .format(formattedNames) + "\n\n" + seriesSection + } + + else -> context.getString(R.string.delete_message_multiple).format(formattedNames) + } + } + + private fun showDeleteConfirmationDialog( + context: Context, + message: String, + ids: Set, + parentIds: Set + ) { + val builder = AlertDialog.Builder(context) + val dialogClickListener = + DialogInterface.OnClickListener { _, which -> + when (which) { + DialogInterface.BUTTON_POSITIVE -> { + viewModelScope.launchSafe { + setIsMultiDeleteState(false) + deleteFilesAndUpdateSettings(context, ids, this) { successfulIds -> + // We always remove parent because if we are deleting from here + // and we have it as non-empty, it was triggered on + // parent header card + removeItems(successfulIds + parentIds) + } + } + } + + DialogInterface.BUTTON_NEGATIVE -> { + // Do nothing on cancel + } + } + } + + try { + val title = if (ids.count() == 1) { + R.string.delete_file + } else R.string.delete_files + builder.setTitle(title) + .setMessage(message) + .setPositiveButton(R.string.delete, dialogClickListener) + .setNegativeButton(R.string.cancel, dialogClickListener) + .show().setDefaultFocus() + } catch (e: Exception) { + logError(e) + } + } + + private fun getSelectedItemsData(): List? { + val headers = headerCards.value.orEmpty() + val children = childCards.value.orEmpty() + + return selectedItemIds.value?.mapNotNull { id -> + headers.find { it.data.id == id } ?: children.find { it.data.id == id } + } + } + + private fun getItemDataFromId(itemId: Int): List { + val headers = headerCards.value.orEmpty() + val children = childCards.value.orEmpty() + + return (headers + children).filter { it.data.id == itemId } + } + + private data class DeleteData( + val ids: Set, + val parentIds: Set, + val seriesNames: List, + val names: List, + val parentName: String? + ) } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt index 45132131..908e3a80 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/BaseFetchButton.kt @@ -93,7 +93,7 @@ abstract class BaseFetchButton(context: Context, attributeSet: AttributeSet) : abstract fun setStatus(status: VideoDownloadManager.DownloadType?) - fun getStatus(id:Int, downloadedBytes: Long, totalBytes: Long): DownloadStatusTell { + fun getStatus(id: Int, downloadedBytes: Long, totalBytes: Long): DownloadStatusTell { // some extra padding for just in case return VideoDownloadManager.downloadStatus[id] ?: if (downloadedBytes > 1024L && downloadedBytes + 1024L >= totalBytes) { @@ -101,7 +101,7 @@ abstract class BaseFetchButton(context: Context, attributeSet: AttributeSet) : } else DownloadStatusTell.IsPaused } - fun applyMetaData(id:Int, downloadedBytes: Long, totalBytes: Long) { + fun applyMetaData(id: Int, downloadedBytes: Long, totalBytes: Long) { val status = getStatus(id, downloadedBytes, totalBytes) currentMetaData.apply { @@ -140,7 +140,8 @@ abstract class BaseFetchButton(context: Context, attributeSet: AttributeSet) : } else { if (doSetProgress) { progressText?.apply { - val currentFormattedSizeString = formatShortFileSize(context, downloadedBytes) + val currentFormattedSizeString = + formatShortFileSize(context, downloadedBytes) val totalFormattedSizeString = formatShortFileSize(context, totalBytes) text = // if (isTextPercentage) "%d%%".format(setCurrentBytes * 100L / setTotalBytes) else diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt index abc159d0..29c2daa2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/button/PieFetchButton.kt @@ -58,7 +58,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : } private var progressBarBackground: View - private var statusView: ImageView + var statusView: ImageView open fun onInflate() {} @@ -248,7 +248,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : } */ @MainThread - private fun setStatusInternal(status : DownloadStatusTell?) { + private fun setStatusInternal(status: DownloadStatusTell?) { val isPreActive = isZeroBytes && status == DownloadStatusTell.IsDownloading if (animateWaiting && (status == DownloadStatusTell.IsPending || isPreActive)) { val animation = AnimationUtils.loadAnimation(context, waitingAnimation) @@ -286,7 +286,7 @@ open class PieFetchButton(context: Context, attributeSet: AttributeSet) : if (Looper.myLooper() == Looper.getMainLooper()) { try { setStatusInternal(status) - } catch (t : Throwable) { + } catch (t: Throwable) { logError(t) // Just in case setStatusInternal throws because thread progressBarBackground.post { setStatusInternal(status) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt index a8a3106a..a0668abc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadFileGenerator.kt @@ -4,7 +4,9 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSubtitleMimeType import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.VideoDownloadManager +import com.lagradost.cloudstream3.utils.SubtitleUtils.cleanDisplayName +import com.lagradost.cloudstream3.utils.SubtitleUtils.isMatchingSubtitle +import com.lagradost.cloudstream3.utils.VideoDownloadManager.getFolder import kotlin.math.max import kotlin.math.min @@ -49,10 +51,6 @@ class DownloadFileGenerator( return null } - private fun cleanDisplayName(name: String): String { - return name.substringBeforeLast('.').trim() - } - override suspend fun generateLinks( clearCache: Boolean, type: LoadType, @@ -69,28 +67,9 @@ class DownloadFileGenerator( val cleanDisplay = cleanDisplayName(display) - VideoDownloadManager.getFolder(ctx, relative, meta.basePath) - ?.forEach { (name, uri) -> - // only these files are allowed, so no videos as subtitles - if (listOf( - ".vtt", - ".srt", - ".txt", - ".ass", - ".ttml", - ".sbv", - ".dfxp" - ).none { name.contains(it, true) } - ) return@forEach - - // cant have the exact same file as a subtitle - if (name.equals(display, true)) return@forEach - + getFolder(ctx, relative, meta.basePath)?.forEach { (name, uri) -> + if (isMatchingSubtitle(name, display, cleanDisplay)) { val cleanName = cleanDisplayName(name) - - // we only want files with the approx same name - if (!cleanName.startsWith(cleanDisplay, true)) return@forEach - val realName = cleanName.removePrefix(cleanDisplay) subtitleCallback( @@ -104,6 +83,7 @@ class DownloadFileGenerator( ) ) } + } return true } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index 4279b542..c38160c2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -4,13 +4,13 @@ import android.content.Intent import android.os.Bundle import android.util.Log import android.view.KeyEvent -import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import com.lagradost.cloudstream3.CommonActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playLink import com.lagradost.cloudstream3.ui.player.OfflinePlaybackHelper.playUri +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.attachBackPressedCallback class DownloadedPlayerActivity : AppCompatActivity() { private val dTAG = "DownloadedPlayerAct" @@ -70,14 +70,7 @@ class DownloadedPlayerActivity : AppCompatActivity() { return } - onBackPressedDispatcher.addCallback( - this, - object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - finish() - } - } - ) + attachBackPressedCallback { finish() } } override fun onResume() { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt index 135dc530..2ab60c2f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt @@ -7,7 +7,6 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import android.widget.FrameLayout -import androidx.activity.OnBackPressedCallback import androidx.core.view.isGone import androidx.core.view.isVisible import com.lagradost.cloudstream3.CommonActivity.screenHeight @@ -17,6 +16,8 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.ui.player.CSPlayerEvent import com.lagradost.cloudstream3.ui.player.PlayerEventSource import com.lagradost.cloudstream3.ui.player.SubtitleData +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.attachBackPressedCallback +import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.detachBackPressedCallback open class ResultTrailerPlayer : ResultFragmentPhone() { @@ -156,7 +157,9 @@ open class ResultTrailerPlayer : ResultFragmentPhone() { uiReset() if (isFullScreenPlayer) { - attachBackPressedCallback() + activity?.attachBackPressedCallback { + updateFullscreen(false) + } } else detachBackPressedCallback() } @@ -175,27 +178,4 @@ open class ResultTrailerPlayer : ResultFragmentPhone() { fixPlayerSize() } } - - private var backPressedCallback: OnBackPressedCallback? = null - - private fun attachBackPressedCallback() { - if (backPressedCallback == null) { - backPressedCallback = object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - updateFullscreen(false) - } - } - } - - backPressedCallback?.isEnabled = true - - activity?.onBackPressedDispatcher?.addCallback( - activity ?: return, - backPressedCallback ?: return - ) - } - - private fun detachBackPressedCallback() { - backPressedCallback?.isEnabled = false - } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt index b13de062..8d65acf7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppContextUtils.kt @@ -677,9 +677,15 @@ object AppContextUtils { } 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 + val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val network = connectivityManager.activeNetwork ?: return false + val networkCapabilities = connectivityManager.getNetworkCapabilities(network) ?: return false + networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } else { + @Suppress("DEPRECATION") + connectivityManager.activeNetworkInfo?.isConnected == true + } } fun splitQuery(url: URL): Map { @@ -1018,4 +1024,4 @@ object AppContextUtils { } return currentAudioFocusRequest } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/BackPressedCallbackHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/BackPressedCallbackHelper.kt new file mode 100644 index 00000000..1326ab27 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/BackPressedCallbackHelper.kt @@ -0,0 +1,30 @@ +package com.lagradost.cloudstream3.utils + +import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback + +object BackPressedCallbackHelper { + private var backPressedCallback: OnBackPressedCallback? = null + + fun ComponentActivity.attachBackPressedCallback(callback: () -> Unit) { + if (backPressedCallback == null) { + backPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + callback.invoke() + } + } + } + + backPressedCallback?.isEnabled = true + + onBackPressedDispatcher.addCallback( + this@attachBackPressedCallback, + backPressedCallback ?: return + ) + } + + fun detachBackPressedCallback() { + backPressedCallback?.isEnabled = false + backPressedCallback = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SnackbarHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SnackbarHelper.kt new file mode 100644 index 00000000..e6a77795 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SnackbarHelper.kt @@ -0,0 +1,84 @@ +package com.lagradost.cloudstream3.utils + +import android.app.Activity +import android.view.View +import androidx.annotation.MainThread +import androidx.annotation.StringRes +import com.google.android.material.snackbar.Snackbar +import com.lagradost.api.Log +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.mvvm.logError +import com.lagradost.cloudstream3.ui.result.UiText +import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute + +object SnackbarHelper { + + private const val TAG = "COMPACT" + private var currentSnackbar: Snackbar? = null + + @MainThread + fun showSnackbar( + act: Activity?, + message: UiText, + duration: Int = Snackbar.LENGTH_SHORT, + actionText: UiText? = null, + actionCallback: (() -> Unit)? = null + ) { + if (act == null) return + showSnackbar(act, message.asString(act), duration, + actionText?.asString(act), actionCallback) + } + + @MainThread + fun showSnackbar( + act: Activity?, + @StringRes message: Int, + duration: Int = Snackbar.LENGTH_SHORT, + @StringRes actionText: Int? = null, + actionCallback: (() -> Unit)? = null + ) { + if (act == null) return + showSnackbar(act, act.getString(message), duration, + actionText?.let { act.getString(it) }, actionCallback) + } + + @MainThread + fun showSnackbar( + act: Activity?, + message: String?, + duration: Int = Snackbar.LENGTH_SHORT, + actionText: String? = null, + actionCallback: (() -> Unit)? = null + ) { + if (act == null || message == null) { + Log.w(TAG, "Invalid showSnackbar: act = $act, message = $message") + return + } + Log.i(TAG, "showSnackbar: $message") + + try { + currentSnackbar?.dismiss() + } catch (e: Exception) { + logError(e) + } + + try { + val parentView = act.findViewById(android.R.id.content) + val snackbar = Snackbar.make(parentView, message, duration) + + actionCallback?.let { + snackbar.setAction(actionText) { actionCallback.invoke() } + } + + snackbar.show() + currentSnackbar = snackbar + + snackbar.setBackgroundTint(act.colorFromAttribute(R.attr.primaryBlackBackground)) + snackbar.setTextColor(act.colorFromAttribute(R.attr.textColor)) + snackbar.setActionTextColor(act.colorFromAttribute(R.attr.colorPrimary)) + + } catch (e: Exception) { + logError(e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/SubtitleUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/SubtitleUtils.kt new file mode 100644 index 00000000..93a53395 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/SubtitleUtils.kt @@ -0,0 +1,56 @@ +package com.lagradost.cloudstream3.utils + +import android.content.Context +import com.lagradost.api.Log +import com.lagradost.cloudstream3.utils.VideoDownloadManager.getFolder +import com.lagradost.safefile.SafeFile + +object SubtitleUtils { + + // Only these files are allowed, so no videos as subtitles + private val allowedExtensions = listOf( + ".vtt", ".srt", ".txt", ".ass", + ".ttml", ".sbv", ".dfxp" + ) + + fun deleteMatchingSubtitles(context: Context, info: VideoDownloadManager.DownloadedFileInfo) { + val relative = info.relativePath + val display = info.displayName + val cleanDisplay = cleanDisplayName(display) + + getFolder(context, relative, info.basePath)?.forEach { (name, uri) -> + if (isMatchingSubtitle(name, display, cleanDisplay)) { + val subtitleFile = SafeFile.fromUri(context, uri) + if (subtitleFile == null || !subtitleFile.delete()) { + Log.e("SubtitleDeletion", "Failed to delete subtitle file: ${subtitleFile?.name()}") + } + } + } + } + + /** + * @param name the file name of the subtitle + * @param display the file name of the video + * @param cleanDisplay the cleanDisplayName of the video file name + */ + fun isMatchingSubtitle( + name: String, + display: String, + cleanDisplay: String + ): Boolean { + // Check if the file has a valid subtitle extension + val hasValidExtension = allowedExtensions.any { name.contains(it, ignoreCase = true) } + + // We can't have the exact same file as a subtitle + val isNotDisplayName = !name.equals(display, ignoreCase = true) + + // Check if the file name starts with a cleaned version of the display name + val startsWithCleanDisplay = cleanDisplayName(name).startsWith(cleanDisplay, ignoreCase = true) + + return hasValidExtension && isNotDisplayName && startsWithCleanDisplay + } + + fun cleanDisplayName(name: String): String { + return name.substringBeforeLast('.').trim() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index a3f6d789..2190e03f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -20,6 +20,7 @@ import androidx.work.WorkManager import com.bumptech.glide.Glide import com.bumptech.glide.load.model.GlideUrl import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.api.Log import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.setKey @@ -29,12 +30,14 @@ import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.mvvm.launchSafe import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.services.VideoDownloadService 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.removeKey +import com.lagradost.cloudstream3.utils.SubtitleUtils.deleteMatchingSubtitles import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.safefile.MediaFileContentType import com.lagradost.safefile.SafeFile @@ -42,6 +45,8 @@ import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.isActive @@ -1733,7 +1738,37 @@ object VideoDownloadManager { } } - fun deleteFileAndUpdateSettings(context: Context, id: Int): Boolean { + fun deleteFilesAndUpdateSettings( + context: Context, + ids: Set, + scope: CoroutineScope, + onComplete: (Set) -> Unit = {} + ) { + scope.launchSafe(Dispatchers.IO) { + val deleteJobs = ids.map { id -> + async { + id to deleteFileAndUpdateSettings(context, id) + } + } + val results = deleteJobs.awaitAll() + + val (successfulResults, failedResults) = results.partition { it.second } + val successfulIds = successfulResults.map { it.first }.toSet() + + if (failedResults.isNotEmpty()) { + failedResults.forEach { (id, _) -> + // TODO show a toast if some failed? + Log.e("FileDeletion", "Failed to delete file with ID: $id") + } + } else { + Log.i("FileDeletion", "All files deleted successfully") + } + + onComplete.invoke(successfulIds) + } + } + + private fun deleteFileAndUpdateSettings(context: Context, id: Int): Boolean { val success = deleteFile(context, id) if (success) context.removeKey(KEY_DOWNLOAD_INFO, id.toString()) return success @@ -1759,11 +1794,17 @@ object VideoDownloadManager { private fun deleteFile(context: Context, id: Int): Boolean { val info = context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return false + val file = info.toFile(context) + downloadEvent.invoke(id to DownloadActionType.Stop) downloadProgressEvent.invoke(Triple(id, 0, 0)) downloadStatusEvent.invoke(id to DownloadType.IsStopped) downloadDeleteEvent.invoke(id) - return info.toFile(context)?.delete() ?: false + + val isFileDeleted = file?.delete() == true || file?.exists() == false + if (isFileDeleted) deleteMatchingSubtitles(context, info) + + return isFileDeleted } fun getDownloadResumePackage(context: Context, id: Int): DownloadResumePackage? { diff --git a/app/src/main/res/layout/download_child_episode.xml b/app/src/main/res/layout/download_child_episode.xml index 4974a027..e53e63d3 100644 --- a/app/src/main/res/layout/download_child_episode.xml +++ b/app/src/main/res/layout/download_child_episode.xml @@ -2,10 +2,8 @@ @@ -78,7 +73,6 @@ tools:text="128MB / 237MB" /> - + + \ No newline at end of file diff --git a/app/src/main/res/layout/download_header_episode.xml b/app/src/main/res/layout/download_header_episode.xml index a0b64ce3..957869d4 100644 --- a/app/src/main/res/layout/download_header_episode.xml +++ b/app/src/main/res/layout/download_header_episode.xml @@ -77,5 +77,16 @@ android:focusable="true" android:nextFocusLeft="@id/episode_holder" android:padding="10dp" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_child_downloads.xml b/app/src/main/res/layout/fragment_child_downloads.xml index 9afaea0b..64ed1d70 100644 --- a/app/src/main/res/layout/fragment_child_downloads.xml +++ b/app/src/main/res/layout/fragment_child_downloads.xml @@ -7,13 +7,69 @@ android:layout_height="match_parent" android:background="?attr/primaryGrayBackground" android:orientation="vertical" - tools:context=".ui.download.DownloadFragment"> + tools:context=".ui.download.DownloadChildFragment"> + + + + +

    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⪚gf)t9sd9jc>Z+kR{=B9h_0g_ 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 diff --git a/app/src/main/res/drawable/profile_bg_pink.jpg b/app/src/main/res/drawable/profile_bg_pink.jpg index 63473fe0cfd6e3b2f8f5e56d3401047f3f089b09..9d4940f0d9ff412ccaa11fd3c8e30736273cb1d9 100644 GIT binary patch literal 112946 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

    Eq2tl-2|T%gQ(ot06(7;`ow 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 B_jCXN literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/profile_bg_teal.jpg b/app/src/main/res/drawable/profile_bg_teal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75ef777bfebf000ff741ad7dab8e0aacc69a6937 GIT binary patch literal 128982 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/player_prioritize_item.xml b/app/src/main/res/layout/player_prioritize_item.xml new file mode 100644 index 00000000..b78863f8 --- /dev/null +++ b/app/src/main/res/layout/player_prioritize_item.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/player_quality_profile_dialog.xml b/app/src/main/res/layout/player_quality_profile_dialog.xml new file mode 100644 index 00000000..7bd7a680 --- /dev/null +++ b/app/src/main/res/layout/player_quality_profile_dialog.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/player_quality_profile_item.xml b/app/src/main/res/layout/player_quality_profile_item.xml new file mode 100644 index 00000000..3fad69ac --- /dev/null +++ b/app/src/main/res/layout/player_quality_profile_item.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/player_select_source_and_subs.xml b/app/src/main/res/layout/player_select_source_and_subs.xml index 067e4ad5..550b08d5 100644 --- a/app/src/main/res/layout/player_select_source_and_subs.xml +++ b/app/src/main/res/layout/player_select_source_and_subs.xml @@ -1,5 +1,6 @@ - + android:background="@drawable/outline_drawable_less" + android:foreground="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f67739d..fbaecd2e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -658,4 +658,23 @@ Subscribed to %s Unsubscribed from %s Episode %d released! - \ No newline at end of file + Profile %d + Wi-Fi + Mobile data + Set default + Use + Edit + Profiles + Help + + Here you can change how the sources are ordered. If a video has a higher priority it will appear higher in the source selection. + The sum of the source priority and the quality priority is the video priority. + \n\nSource A: 3 + \nQuality B: 7 + \nWill have a combined video priority of 10. + + \n\nNOTE: If the sum is 10 or more the player will automatically skip loading when that link is loaded! + + Qualities + Profile background + diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml index 2d2905ea..ad33e036 100644 --- a/app/src/main/res/xml/settings_player.xml +++ b/app/src/main/res/xml/settings_player.xml @@ -11,14 +11,14 @@ - - + + + + + + + + Date: Wed, 14 Jun 2023 22:42:42 +0000 Subject: [PATCH 404/888] Fixed skip loading (#484) * Added quality profiles * Better quality selection * Added profile bg and fixed some sources * Properly fixed skip loading * Extra safety --------- Co-authored-by: Lag <> --- .../cloudstream3/ui/player/GeneratorPlayer.kt | 14 +++++++++++--- .../ui/player/PlayerGeneratorViewModel.kt | 14 ++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index e20a07fa..fd29d998 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -238,6 +238,7 @@ class GeneratorPlayer : FullScreenPlayer() { } meta.name = newMeta.headerName } + is ExtractorUri -> { if (newMeta.tvType?.isMovieType() == false) { meta.episode = newMeta.episode @@ -980,6 +981,7 @@ class GeneratorPlayer : FullScreenPlayer() { is ResultEpisode -> { DataStoreHelper.removeLastWatched(newMeta.parentId) } + is ExtractorUri -> { DataStoreHelper.removeLastWatched(newMeta.parentId) } @@ -996,6 +998,7 @@ class GeneratorPlayer : FullScreenPlayer() { isFromDownload = false ) } + is ExtractorUri -> { DataStoreHelper.setLastWatched( resumeMeta.parentId, @@ -1127,6 +1130,7 @@ class GeneratorPlayer : FullScreenPlayer() { season = meta.season tvType = meta.tvType } + is ExtractorUri -> { headerName = meta.headerName subName = meta.name @@ -1343,6 +1347,7 @@ class GeneratorPlayer : FullScreenPlayer() { is Resource.Loading -> { startLoading() } + is Resource.Success -> { // provider returned false //if (it.value != true) { @@ -1350,6 +1355,7 @@ class GeneratorPlayer : FullScreenPlayer() { //} startPlayer() } + is Resource.Failure -> { showToast(activity, it.errorString, Toast.LENGTH_LONG) startPlayer() @@ -1364,10 +1370,12 @@ class GeneratorPlayer : FullScreenPlayer() { overlay_loading_skip_button?.isVisible = turnVisible normalSafeApiCall { - currentLinks.lastOrNull()?.let { last -> - if (getLinkPriority(currentQualityProfile, last) >= QualityDataHelper.AUTO_SKIP_PRIORITY) { - startPlayer() + if (currentLinks.any { link -> + getLinkPriority(currentQualityProfile, link) >= + QualityDataHelper.AUTO_SKIP_PRIORITY } + ) { + startPlayer() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt index 7faf0cf5..1b13b519 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerGeneratorViewModel.kt @@ -156,18 +156,24 @@ class PlayerGeneratorViewModel : ViewModel() { val currentSubs = mutableSetOf() // clear old data - _currentSubs.postValue(currentSubs) - _currentLinks.postValue(currentLinks) + _currentSubs.postValue(emptySet()) + _currentLinks.postValue(emptySet()) // load more data _loadingLinks.postValue(Resource.Loading()) val loadingState = safeApiCall { generator?.generateLinks(clearCache = clearCache, isCasting = isCasting, { currentLinks.add(it) - _currentLinks.postValue(currentLinks) + // Clone to prevent ConcurrentModificationException + normalSafeApiCall { + // Extra normalSafeApiCall since .toSet() iterates. + _currentLinks.postValue(currentLinks.toSet()) + } }, { currentSubs.add(it) - // _currentSubs.postValue(currentSubs) // this causes ConcurrentModificationException, so fuck it + normalSafeApiCall { + _currentSubs.postValue(currentSubs.toSet()) + } }) } From 40a963588f0048bb690d37e151d95ebc4f866e49 Mon Sep 17 00:00:00 2001 From: "imgbot[bot]" <31301654+imgbot[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 21:45:03 +0200 Subject: [PATCH 405/888] [ImgBot] Optimize images (#485) *Total -- 351.66kb -> 337.87kb (3.92%) Signed-off-by: ImgBotApp Co-authored-by: ImgBotApp --- .../res/drawable/profile_bg_dark_blue.jpg | Bin 42704 -> 42568 bytes .../main/res/drawable/profile_bg_orange.jpg | Bin 70427 -> 69262 bytes app/src/main/res/drawable/profile_bg_pink.jpg | Bin 117989 -> 112946 bytes app/src/main/res/drawable/profile_bg_teal.jpg | Bin 128982 -> 121206 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/drawable/profile_bg_dark_blue.jpg b/app/src/main/res/drawable/profile_bg_dark_blue.jpg index c6482bc78592f57686761aa1b87e787fe745f684..d59e4888c64d22fec4fbb4b6772f467315dcddd5 100644 GIT binary patch literal 42568 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⪚gf)t9sd9jc>Z+kR{=B9h_0g_ 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/profile_bg_pink.jpg b/app/src/main/res/drawable/profile_bg_pink.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63473fe0cfd6e3b2f8f5e56d3401047f3f089b09 GIT binary patch literal 117989 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/profile_bg_purple.jpg b/app/src/main/res/drawable/profile_bg_purple.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15723dba35e110e570ab502a63d583c4b13bf8c8 GIT binary patch literal 8564 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 T^BqDM|#SiWvo$%Y&-le_F7@xq-a;A^1(1Kg$ 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

    nq`?xRKb0^l71w-X{+ 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%0AKmwh(AoF6V^ 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 wavw+9Pu%xs0*Db3Q{yDC& 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

    6R?OyVHq`Nv6g|; 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 T_iJ8Mtj&4^JWxLkp~e3JSo6U! literal 107145 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