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] 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