From 2c399e691618c0be1cd1682a206d97e38fcdae20 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:52:03 +0200 Subject: [PATCH] No plugin loading on bad status --- .../lagradost/cloudstream3/MainActivity.kt | 3 +- .../cloudstream3/plugins/PluginManager.kt | 56 ++++++++++++++----- .../ui/settings/extensions/PluginAdapter.kt | 10 ++-- app/src/main/res/layout/repository_item.xml | 18 +++--- 4 files changed, 54 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index d1946d2f..b830d5f3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -424,9 +424,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { override fun onCreate(savedInstanceState: Bundle?) { app.initClient(this) - PluginManager.updateAllOnlinePlugins(this) + PluginManager.updateAllOnlinePluginsAndLoadThem(this) PluginManager.loadAllLocalPlugins(this) - PluginManager.loadAllOnlinePlugins(this) // ioSafe { // val plugins = 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 801910ea..c9560191 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -16,7 +16,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.plugins.RepositoryManager.ONLINE_PLUGINS_FOLDER import com.lagradost.cloudstream3.plugins.RepositoryManager.downloadPluginToFile import com.lagradost.cloudstream3.CommonActivity.showToast -import com.lagradost.cloudstream3.utils.Coroutines.ioSafe +import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.apmap import com.lagradost.cloudstream3.plugins.RepositoryManager.getRepoPlugins @@ -115,40 +115,66 @@ object PluginManager { } } + + // Helper class for updateAllOnlinePluginsAndLoadThem + private data class OnlinePluginData( + val savedData: PluginData, + val onlineData: Pair, + ) { + val isOutdated = + onlineData.second.apiVersion != savedData.version || onlineData.second.version == PLUGIN_VERSION_ALWAYS_UPDATE + val isDisabled = onlineData.second.status == PROVIDER_STATUS_DOWN + } + /** * Needs to be run before other plugin loading because plugin loading can not be overwritten + * 1. Gets all online data about the downloaded plugins + * 2. If disabled do nothing + * 3. If outdated download and load the plugin + * 4. Else load the plugin normally **/ - fun updateAllOnlinePlugins(activity: Activity) { + fun updateAllOnlinePluginsAndLoadThem(activity: Activity) { val urls = getKey>(REPOSITORIES_KEY) ?: emptyArray() val onlinePlugins = urls.toList().apmap { getRepoPlugins(it.url)?.toList() ?: emptyList() - }.flatten() + }.flatten().distinctBy { it.second.url } // 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 } - .mapNotNull { onlineData -> - val isOutdated = - onlineData.second.apiVersion != savedData.version || onlineData.second.version == PLUGIN_VERSION_ALWAYS_UPDATE - if (isOutdated) savedData to onlineData else null + .map { onlineData -> + OnlinePluginData(savedData, onlineData) } - }.flatten() + }.flatten().distinctBy { it.onlineData.second.url } - Log.i(TAG, "Outdated plugins: $outdatedPlugins") + Log.i(TAG, "Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}") outdatedPlugins.apmap { - downloadAndLoadPlugin( - activity, - it.second.second.url, - it.first.internalName, - it.second.first - ) + if (it.isDisabled) { + return@apmap + } else if (it.isOutdated) { + downloadAndLoadPlugin( + activity, + it.onlineData.second.url, + it.savedData.internalName, + it.onlineData.first + ) + } else { + loadPlugin( + activity, + File(it.savedData.filePath), + it.savedData + ) + } } Log.i(TAG, "Plugin update done!") } + /** + * Use updateAllOnlinePluginsAndLoadThem + * */ fun loadAllOnlinePlugins(activity: Activity) { File(activity.filesDir, ONLINE_PLUGINS_FOLDER).listFiles()?.sortedBy { it.name } ?.apmap { 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 5c8895d0..6dce0682 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 @@ -6,13 +6,8 @@ import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.plugins.PluginData -import com.lagradost.cloudstream3.plugins.PluginManager -import com.lagradost.cloudstream3.plugins.SitePlugin -import com.lagradost.cloudstream3.ui.result.ActorAdaptor -import com.lagradost.cloudstream3.ui.result.DiffCallback -import com.lagradost.cloudstream3.ui.result.UiText import kotlinx.android.synthetic.main.repository_item.view.* @@ -70,6 +65,9 @@ class PluginAdapter( data: PluginViewData, ) { val metadata = data.plugin.second + val alpha = if (metadata.status == PROVIDER_STATUS_DOWN) 0.6f else 1f + itemView.main_text?.alpha = alpha + itemView.sub_text?.alpha = alpha val drawableInt = if (data.isDownloaded) R.drawable.ic_baseline_delete_outline_24 diff --git a/app/src/main/res/layout/repository_item.xml b/app/src/main/res/layout/repository_item.xml index 3fb31591..bd177213 100644 --- a/app/src/main/res/layout/repository_item.xml +++ b/app/src/main/res/layout/repository_item.xml @@ -1,6 +1,7 @@ - + android:layout_gravity="center" + android:gravity="center" + android:text="@string/is_adult" + android:visibility="gone" + tools:visibility="visible" /> - - + android:layout_marginStart="10dp" + tools:src="@drawable/ic_baseline_add_24" /> \ No newline at end of file