No plugin loading on bad status

This commit is contained in:
Blatzar 2022-08-08 20:52:03 +02:00
parent a1dd6cc106
commit 2c399e6916
4 changed files with 54 additions and 33 deletions

View File

@ -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 =

View File

@ -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<String, SitePlugin>,
) {
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<Array<RepositoryData>>(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 ->

View File

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

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/repository_item_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@ -28,24 +29,21 @@
tools:text="https://github.com/..." />
</LinearLayout>
<TextView
android:visibility="gone"
android:layout_gravity="center"
android:gravity="center"
android:id="@+id/nsfw_marker"
style="@style/SearchBox"
android:background="@drawable/sub_bg_color"
android:text="@string/is_adult" />
android:layout_gravity="center"
android:gravity="center"
android:text="@string/is_adult"
android:visibility="gone"
tools:visibility="visible" />
<ImageView
android:layout_marginStart="10dp"
android:id="@+id/action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
tools:src="@drawable/ic_baseline_add_24">
</ImageView>
android:layout_marginStart="10dp"
tools:src="@drawable/ic_baseline_add_24" />
</LinearLayout>