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 89ebdaa0..1e4bb43a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt @@ -56,6 +56,14 @@ abstract class Plugin { @JsonProperty("requiresResources") var requiresResources: Boolean = false } + /** + * This will contain your resources if you specified requiresResources in gradle + */ var resources: Resources? = null var __filename: String? = null + + /** + * This will add a button in the settings allowing you to add custom settings + */ + var openSettings: (() -> Unit)? = null } \ No newline at end of file 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 8a942522..fd918ec8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt @@ -101,6 +101,10 @@ object PluginManager { private val plugins: MutableMap = LinkedHashMap() + // Maps urls to plugin + val urlPlugins: MutableMap = + LinkedHashMap() + private val classLoaders: MutableMap = HashMap() @@ -266,6 +270,9 @@ object PluginManager { } plugins[filePath] = pluginInstance classLoaders[loader] = pluginInstance + if (data.url != null) { // TODO: make this cleaner + urlPlugins[data.url] = pluginInstance + } pluginInstance.load(activity) Log.i(TAG, "Loaded plugin ${data.internalName} successfully") true @@ -280,9 +287,9 @@ object PluginManager { } } - private suspend fun unloadPlugin(absolutePath: String) { + private fun unloadPlugin(absolutePath: String) { Log.i(TAG, "Unloading plugin: $absolutePath") - var plugin = plugins.get(absolutePath) + val plugin = plugins[absolutePath] if (plugin == null) { Log.w(TAG, "Couldn't find plugin $absolutePath") return 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 7af9b8e0..b84fb249 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -63,8 +63,8 @@ data class SitePlugin( @JsonProperty("repositoryUrl") val repositoryUrl: String?, // These types are yet to be mapped and used, ignore for now // @JsonProperty("tvTypes") val tvTypes: List?, -// @JsonProperty("language") val language: String?, -// @JsonProperty("iconUrl") val iconUrl: String?, + @JsonProperty("language") val language: String?, + @JsonProperty("iconUrl") val iconUrl: String?, // Set to true to get an 18+ symbol next to the plugin @JsonProperty("adult") val adult: Boolean?, ) 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 196bc93d..72b997ab 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,5 +1,6 @@ package com.lagradost.cloudstream3.ui.settings.extensions +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -8,6 +9,8 @@ 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.PluginManager +import com.lagradost.cloudstream3.utils.UIHelper.setImage import kotlinx.android.synthetic.main.repository_item.view.* @@ -80,6 +83,29 @@ class PluginAdapter( iconClickCallback.invoke(data.plugin) } + if (data.isDownloaded) { + val plugin = PluginManager.urlPlugins[metadata.url] + if (plugin?.openSettings != null) { + itemView.action_settings?.isVisible = true + itemView.action_settings.setOnClickListener { + try { + plugin.openSettings!!.invoke() + } catch (e: Throwable) { + Log.e("PluginAdapter", "Failed to open ${metadata.name} settings: ${Log.getStackTraceString(e)}") + } + + } + } + } + + if (metadata.iconUrl == null || + itemView.entry_icon?.setImage(metadata.iconUrl, null) != true) { + itemView.entry_icon?.setImageResource(R.drawable.ic_baseline_extension_24) + } + + itemView.ext_version?.isVisible = true + itemView.ext_version?.text = "v${metadata.version}" + itemView.main_text?.text = metadata.name itemView.sub_text?.text = metadata.description } diff --git a/app/src/main/res/drawable/ic_baseline_extension_24.xml b/app/src/main/res/drawable/ic_baseline_extension_24.xml new file mode 100644 index 00000000..bca5d822 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_extension_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/repository_item.xml b/app/src/main/res/layout/repository_item.xml index bd177213..169c5f1d 100644 --- a/app/src/main/res/layout/repository_item.xml +++ b/app/src/main/res/layout/repository_item.xml @@ -1,5 +1,6 @@ + + - + + + + + + + + + \ No newline at end of file