diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..7643783a
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 00000000..79ee123c
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ 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 204119de..89ebdaa0 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/Plugin.kt
@@ -8,6 +8,7 @@ import com.lagradost.cloudstream3.APIHolder
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.extractorApis
import android.util.Log
+import com.fasterxml.jackson.annotation.JsonProperty
const val PLUGIN_TAG = "PluginInstance"
@@ -33,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
APIHolder.allProviders.add(element)
APIHolder.addPluginMapping(element)
}
@@ -44,17 +45,17 @@ 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)
}
class Manifest {
- var name: String? = null
- var pluginClassName: String? = null
- var pluginVersion: Int? = null
+ @JsonProperty("name") var name: String? = null
+ @JsonProperty("pluginClassName") var pluginClassName: String? = null
+ @JsonProperty("version") var version: Int? = null
+ @JsonProperty("requiresResources") var requiresResources: Boolean = false
}
var resources: Resources? = null
- var needsResources = false
var __filename: String? = 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 f9aa7cdd..8a942522 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt
@@ -1,6 +1,5 @@
package com.lagradost.cloudstream3.plugins
-import android.content.Context
import dalvik.system.PathClassLoader
import com.google.gson.Gson
import android.content.res.AssetManager
@@ -24,6 +23,7 @@ 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
+import com.lagradost.cloudstream3.APIHolder.removePluginMapping
import com.lagradost.cloudstream3.MainAPI
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.extractorApis
@@ -139,7 +139,7 @@ object PluginManager {
* 4. Else load the plugin normally
**/
fun updateAllOnlinePluginsAndLoadThem(activity: Activity) {
- val urls = getKey>(REPOSITORIES_KEY) ?: emptyArray()
+ val urls = (getKey>(REPOSITORIES_KEY) ?: emptyArray()) + PREBUILT_REPOSITORIES
val onlinePlugins = urls.toList().apmap {
getRepoPlugins(it.url)?.toList() ?: emptyList()
@@ -236,7 +236,7 @@ object PluginManager {
}
val name: String = manifest.name ?: "NO NAME"
- val version: Int = manifest.pluginVersion ?: PLUGIN_VERSION_NOT_SET
+ val version: Int = manifest.version ?: PLUGIN_VERSION_NOT_SET
val pluginClass: Class<*> =
loader.loadClass(manifest.pluginClassName) as Class
val pluginInstance: Plugin =
@@ -251,7 +251,8 @@ object PluginManager {
}
pluginInstance.__filename = fileName
- if (pluginInstance.needsResources) {
+ 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 addAssetPath =
@@ -280,6 +281,7 @@ object PluginManager {
}
private suspend fun unloadPlugin(absolutePath: String) {
+ Log.i(TAG, "Unloading plugin: $absolutePath")
var plugin = plugins.get(absolutePath)
if (plugin == null) {
Log.w(TAG, "Couldn't find plugin $absolutePath")
@@ -293,8 +295,13 @@ object PluginManager {
}
// remove all registered apis
- APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.`__filename` }
- extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.`__filename` }
+ APIHolder.apis.filter { it -> it.sourcePlugin == plugin.__filename }.forEach {
+ removePluginMapping(it)
+ }
+ APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.__filename }
+ extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.__filename }
+
+ classLoaders.values.removeIf { v -> v == plugin}
plugins.remove(absolutePath)
}
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 359b8bf8..7af9b8e0 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt
@@ -62,11 +62,11 @@ data class SitePlugin(
// Might be used to go directly to the plugin repo in the future
@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("tvTypes") val tvTypes: List?,
+// @JsonProperty("language") val language: String?,
+// @JsonProperty("iconUrl") val iconUrl: String?,
// Set to true to get an 18+ symbol next to the plugin
- @JsonProperty("isAdult") val isAdult: Boolean?,
+ @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 6dce0682..196bc93d 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
@@ -73,7 +73,7 @@ class PluginAdapter(
R.drawable.ic_baseline_delete_outline_24
else R.drawable.netflix_download
- itemView.nsfw_marker?.isVisible = metadata.isAdult == true
+ itemView.nsfw_marker?.isVisible = metadata.adult == true
itemView.action_button?.setImageResource(drawableInt)
itemView.action_button?.setOnClickListener {