Move code out of updatePlugin code and to its own method. Added separate setting for it.

This commit is contained in:
Jace 2022-10-28 14:43:10 +08:00
parent 93712f39fb
commit 25d34b27f9
4 changed files with 83 additions and 30 deletions

View file

@ -561,13 +561,26 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
} }
ioSafe { ioSafe {
var isLoaded = false
if (settingsManager.getBoolean( if (settingsManager.getBoolean(
getString(R.string.auto_update_plugins_key), getString(R.string.auto_update_plugins_key),
true true
) )
) { ) {
PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity) PluginManager.updateAllOnlinePluginsAndLoadThem(this@MainActivity)
} else { isLoaded = true
}
//Automatically download not existing plugins
if (settingsManager.getBoolean(
getString(R.string.auto_download_plugins_key),
false
)
) {
PluginManager.downloadNotExistingPluginsAndLoad(this@MainActivity)
isLoaded = true
}
if (!isLoaded) {
PluginManager.loadAllOnlinePlugins(this@MainActivity) PluginManager.loadAllOnlinePlugins(this@MainActivity)
} }
} }

View file

@ -249,13 +249,69 @@ object PluginManager {
} }
}.flatten().distinctBy { it.onlineData.second.url } }.flatten().distinctBy { it.onlineData.second.url }
debugPrint {
"Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}"
}
val updatedPlugins = mutableListOf<String>()
outdatedPlugins.apmap { pluginData ->
if (pluginData.isDisabled) {
//updatedPlugins.add(activity.getString(R.string.single_plugin_disabled, pluginData.onlineData.second.name))
unloadPlugin(pluginData.savedData.filePath)
} else if (pluginData.isOutdated) {
downloadAndLoadPlugin(
activity,
pluginData.onlineData.second.url,
pluginData.savedData.internalName,
File(pluginData.savedData.filePath)
).let { success ->
if (success)
updatedPlugins.add(pluginData.onlineData.second.name)
}
}
}
main {
createNotification(activity, updatedPlugins, R.string.plugins_updated)
}
ioSafe {
afterPluginsLoadedEvent.invoke(true)
}
Log.i(TAG, "Plugin update done!")
}
/**
* Automatically download plugins not yet existing on local
* 1. Gets all online data from online plugins repo
* 2. Fetch all undownloaded plugins
* 3. Download them and reload plugins
**/
fun downloadNotExistingPluginsAndLoad(activity: Activity) {
// Load all plugins as fast as possible!
loadAllOnlinePlugins(activity)
ioSafe {
afterPluginsLoadedEvent.invoke(true)
}
val newDownloadPlugins = mutableListOf<String>()
val urls = (getKey<Array<RepositoryData>>(REPOSITORIES_KEY)
?: emptyArray()) + PREBUILT_REPOSITORIES
val onlinePlugins = urls.toList().apmap {
getRepoPlugins(it.url)?.toList() ?: emptyList()
}.flatten().distinctBy { it.second.url }
// Iterate online repos and returns not downloaded plugins // Iterate online repos and returns not downloaded plugins
val notDownloadedPlugins = onlinePlugins.mapNotNull outer@{ onlineData -> val notDownloadedPlugins = onlinePlugins.mapNotNull outer@{ onlineData ->
val sitePlugin = onlineData.second val sitePlugin = onlineData.second
//Don't include empty urls //Don't include empty urls
if (sitePlugin.url.isBlank()) { return@outer null } if (sitePlugin.url.isBlank()) { return@outer null }
if (sitePlugin.repositoryUrl.isNullOrBlank()) { return@outer null }
//Omit already existing plugins //Omit already existing plugins
if (getPluginPath(activity, sitePlugin.internalName, onlineData.first).exists()) { if (getPluginPath(activity, sitePlugin.internalName, sitePlugin.repositoryUrl).exists()) {
//Log.i("DevDebug", "Skip > ${sitePlugin.internalName}") //Log.i("DevDebug", "Skip > ${sitePlugin.internalName}")
return@outer null return@outer null
} }
@ -282,30 +338,6 @@ object PluginManager {
} }
//Log.i("DevDebug", "notDownloadedPlugins => ${notDownloadedPlugins.toJson()}") //Log.i("DevDebug", "notDownloadedPlugins => ${notDownloadedPlugins.toJson()}")
debugPrint {
"Outdated plugins: ${outdatedPlugins.filter { it.isOutdated }}"
}
val updatedPlugins = mutableListOf<String>()
val newDownloadPlugins = mutableListOf<String>()
outdatedPlugins.apmap { pluginData ->
if (pluginData.isDisabled) {
//updatedPlugins.add(activity.getString(R.string.single_plugin_disabled, pluginData.onlineData.second.name))
unloadPlugin(pluginData.savedData.filePath)
} else if (pluginData.isOutdated) {
downloadAndLoadPlugin(
activity,
pluginData.onlineData.second.url,
pluginData.savedData.internalName,
File(pluginData.savedData.filePath)
).let { success ->
if (success)
updatedPlugins.add(pluginData.onlineData.second.name)
}
}
}
notDownloadedPlugins.apmap { pluginData -> notDownloadedPlugins.apmap { pluginData ->
downloadAndLoadPlugin( downloadAndLoadPlugin(
activity, activity,
@ -319,14 +351,14 @@ object PluginManager {
} }
main { main {
createNotification(activity, updatedPlugins + newDownloadPlugins) createNotification(activity, newDownloadPlugins, R.string.plugins_downloaded)
} }
// ioSafe { // ioSafe {
afterPluginsLoadedEvent.invoke(true) afterPluginsLoadedEvent.invoke(true)
// } // }
Log.i(TAG, "Plugin update done!") Log.i(TAG, "Plugin download done!")
} }
/** /**
@ -581,7 +613,8 @@ object PluginManager {
private fun createNotification( private fun createNotification(
context: Context, context: Context,
extensionNames: List<String> extensionNames: List<String>,
title: Int
): Notification? { ): Notification? {
try { try {
if (extensionNames.isEmpty()) return null if (extensionNames.isEmpty()) return null
@ -595,7 +628,7 @@ object PluginManager {
.setSilent(true) .setSilent(true)
.setPriority(NotificationCompat.PRIORITY_LOW) .setPriority(NotificationCompat.PRIORITY_LOW)
.setColor(context.colorFromAttribute(R.attr.colorPrimary)) .setColor(context.colorFromAttribute(R.attr.colorPrimary))
.setContentTitle(context.getString(R.string.plugins_updated, extensionNames.size)) .setContentTitle(context.getString(title, extensionNames.size))
.setSmallIcon(R.drawable.ic_baseline_extension_24) .setSmallIcon(R.drawable.ic_baseline_extension_24)
.setStyle( .setStyle(
NotificationCompat.BigTextStyle() NotificationCompat.BigTextStyle()

View file

@ -6,6 +6,7 @@
<string name="search_types_list_key" translatable="false">search_type_list</string> <string name="search_types_list_key" translatable="false">search_type_list</string>
<string name="auto_update_key" translatable="false">auto_update</string> <string name="auto_update_key" translatable="false">auto_update</string>
<string name="auto_update_plugins_key" translatable="false">auto_update_plugins</string> <string name="auto_update_plugins_key" translatable="false">auto_update_plugins</string>
<string name="auto_download_plugins_key" translatable="false">auto_download_plugins_key</string>
<string name="skip_update_key" translatable="false">skip_update_key</string> <string name="skip_update_key" translatable="false">skip_update_key</string>
<string name="prerelease_update_key" translatable="false">prerelease_update</string> <string name="prerelease_update_key" translatable="false">prerelease_update</string>
<string name="manual_check_update_key" translatable="false">manual_check_update</string> <string name="manual_check_update_key" translatable="false">manual_check_update</string>
@ -269,6 +270,7 @@
<string name="pref_filter_search_quality">Hide selected video quality on Search results</string> <string name="pref_filter_search_quality">Hide selected video quality on Search results</string>
<string name="automatic_plugin_updates">Automatic plugin updates</string> <string name="automatic_plugin_updates">Automatic plugin updates</string>
<string name="automatic_plugin_download">Automatically download plugins</string>
<string name="updates_settings">Show app updates</string> <string name="updates_settings">Show app updates</string>
<string name="updates_settings_des">Automatically search for new updates on start</string> <string name="updates_settings_des">Automatically search for new updates on start</string>
<string name="uprereleases_settings">Update to prereleases</string> <string name="uprereleases_settings">Update to prereleases</string>

View file

@ -33,6 +33,11 @@
android:icon="@drawable/ic_baseline_extension_24" android:icon="@drawable/ic_baseline_extension_24"
android:key="@string/auto_update_plugins_key" android:key="@string/auto_update_plugins_key"
android:title="@string/automatic_plugin_updates" /> android:title="@string/automatic_plugin_updates" />
<SwitchPreference
android:defaultValue="false"
android:icon="@drawable/ic_baseline_extension_24"
android:key="@string/auto_download_plugins_key"
android:title="@string/automatic_plugin_download" />
<SwitchPreference <SwitchPreference
android:icon="@drawable/ic_baseline_notifications_active_24" android:icon="@drawable/ic_baseline_notifications_active_24"
android:summary="@string/updates_settings_des" android:summary="@string/updates_settings_des"