From 827cbbb0b569df9dfd176db0c8f2c23e7e680bdc Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Tue, 1 Aug 2023 21:54:15 +0800 Subject: [PATCH] Feature: Refactor autodownload plugin to have multiple modes. (#518) --- .../com/lagradost/cloudstream3/MainAPI.kt | 12 ++++++ .../lagradost/cloudstream3/MainActivity.kt | 11 ++--- .../cloudstream3/plugins/PluginManager.kt | 41 +++++++++++-------- .../ui/settings/SettingsUpdates.kt | 24 +++++++++++ app/src/main/res/values/array.xml | 9 +++- app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/settings_updates.xml | 5 +-- 7 files changed, 78 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 51d218bf..76abda97 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -813,6 +813,18 @@ enum class TvType(value: Int?) { Others(12) } +public enum class AutoDownloadMode(val value: Int) { + Disable(0), + FilterByLang(1), + All(2), + NsfwOnly(3) + ; + + companion object { + infix fun getEnum(value: Int): AutoDownloadMode? = AutoDownloadMode.values().firstOrNull { it.value == value } + } +} + // IN CASE OF FUTURE ANIME MOVIE OR SMTH fun TvType.isMovieType(): Boolean { return this == TvType.Movie || this == TvType.AnimeMovie || this == TvType.Torrent || this == TvType.Live diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index f25bef7e..b1f60ad7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1092,13 +1092,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { loadAllOnlinePlugins(this@MainActivity) } - //Automatically download not existing plugins - if (settingsManager.getBoolean( - getString(R.string.auto_download_plugins_key), - false - ) - ) { - PluginManager.downloadNotExistingPluginsAndLoad(this@MainActivity) + //Automatically download not existing plugins, using mode specified. + val auto_download_plugin = AutoDownloadMode.getEnum(settingsManager.getInt(getString(R.string.auto_download_plugins_key), 0)) ?: AutoDownloadMode.Disable + if (auto_download_plugin != AutoDownloadMode.Disable) { + PluginManager.downloadNotExistingPluginsAndLoad(this@MainActivity, auto_download_plugin) } } 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 49b5a752..4c32088a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -290,7 +290,7 @@ object PluginManager { * 2. Fetch all not downloaded plugins * 3. Download them and reload plugins **/ - fun downloadNotExistingPluginsAndLoad(activity: Activity) { + fun downloadNotExistingPluginsAndLoad(activity: Activity, mode: AutoDownloadMode) { val newDownloadPlugins = mutableListOf() val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES @@ -304,6 +304,8 @@ object PluginManager { // Iterate online repos and returns not downloaded plugins val notDownloadedPlugins = onlinePlugins.mapNotNull { onlineData -> val sitePlugin = onlineData.second + val tvtypes = sitePlugin.tvTypes ?: listOf() + //Don't include empty urls if (sitePlugin.url.isBlank()) { return@mapNotNull null @@ -318,22 +320,29 @@ object PluginManager { 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 - } + //Omit non-NSFW if mode is set to NSFW only + if (mode == AutoDownloadMode.NsfwOnly) { + if (tvtypes.contains(TvType.NSFW.name) == false) { + return@mapNotNull null } } + //Omit NSFW, if disabled + if (!settingsForProvider.enableAdult) { + if (tvtypes.contains(TvType.NSFW.name)) { + return@mapNotNull null + } + } + + //Omit lang not selected on language setting + if (mode == AutoDownloadMode.FilterByLang) { + 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") + } + val savedData = PluginData( url = sitePlugin.url, internalName = sitePlugin.internalName, @@ -697,4 +706,4 @@ object PluginManager { return null } } -} \ 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 915ef15f..9227409d 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 @@ -11,10 +11,14 @@ import androidx.appcompat.app.AlertDialog import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.lagradost.cloudstream3.AcraApplication +import com.lagradost.cloudstream3.AutoDownloadMode import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R +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.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar @@ -166,5 +170,25 @@ class SettingsUpdates : PreferenceFragmentCompat() { } return@setOnPreferenceClickListener true } + + getPref(R.string.auto_download_plugins_key)?.setOnPreferenceClickListener { + 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 current = settingsManager.getInt(getString(R.string.auto_download_plugins_pref), 0) + + activity?.showBottomDialog( + prefNames.toList(), + prefValues.indexOf(current), + getString(R.string.automatic_plugin_download_mode_title), + true, + {}) { + settingsManager.edit().putInt(getString(R.string.auto_download_plugins_pref), prefValues[it]).apply() + (context ?: AcraApplication.context)?.let { ctx -> app.initClient(ctx) } + } + return@setOnPreferenceClickListener true + } } } diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 6aff7a59..1df7b9d6 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -41,7 +41,14 @@ 0 1 - + + + + @string/disable + @string/subtitles_filter_lang + @string/all + @string/nsfw + @string/player_settings_play_in_app diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c101b0b1..6a1e9eac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ auto_update auto_update_plugins auto_download_plugins_key + auto_download_plugins_pref skip_update_key prerelease_update manual_check_update @@ -249,6 +250,7 @@ Hide selected video quality in search results Automatic plugin updates Automatically download plugins + Select mode to filter plugins download Automatically install all not yet installed plugins from added repositories. Show app updates Automatically search for new updates after starting the app. @@ -482,6 +484,7 @@ %s authenticated Could not log in at %s + Disable None Normal All diff --git a/app/src/main/res/xml/settings_updates.xml b/app/src/main/res/xml/settings_updates.xml index f2ec6747..9989e47b 100644 --- a/app/src/main/res/xml/settings_updates.xml +++ b/app/src/main/res/xml/settings_updates.xml @@ -58,8 +58,7 @@ android:key="@string/auto_update_plugins_key" android:title="@string/automatic_plugin_updates" /> - - \ No newline at end of file +