forked from recloudstream/cloudstream
No plugin loading on bad status
This commit is contained in:
parent
a1dd6cc106
commit
2c399e6916
4 changed files with 54 additions and 33 deletions
|
@ -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 =
|
||||
|
|
|
@ -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 {
|
||||
if (it.isDisabled) {
|
||||
return@apmap
|
||||
} else if (it.isOutdated) {
|
||||
downloadAndLoadPlugin(
|
||||
activity,
|
||||
it.second.second.url,
|
||||
it.first.internalName,
|
||||
it.second.first
|
||||
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 ->
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue