Merge branch 'plugin-init-failures' into 'master'

Handle plugin init failures per source

See merge request videostreaming/grayjay!168
This commit is contained in:
Koen
2026-03-20 11:53:19 +00:00
@@ -199,17 +199,25 @@ class StatePlatform {
StatePlugins.instance.installMissingEmbeddedPlugins(context); StatePlugins.instance.installMissingEmbeddedPlugins(context);
for (plugin in StatePlugins.instance.getPlugins()) { for (plugin in StatePlugins.instance.getPlugins()) {
_icons[plugin.config.id] = StatePlugins.instance.getPluginIconOrNull(plugin.config.id) ?: try {
ImageVariable(plugin.config.absoluteIconUrl, null);
_iconsByName[plugin.config.name.lowercase()] = StatePlugins.instance.getPluginIconOrNull(plugin.config.id) ?:
ImageVariable(plugin.config.absoluteIconUrl, null);
val client = JSClient(context, plugin); val client = JSClient(context, plugin);
client.onCaptchaException.subscribe { c, ex -> client.onCaptchaException.subscribe { c, ex ->
StateApp.instance.handleCaptchaException(c, ex); StateApp.instance.handleCaptchaException(c, ex);
} }
_icons[plugin.config.id] = StatePlugins.instance.getPluginIconOrNull(plugin.config.id) ?:
ImageVariable(plugin.config.absoluteIconUrl, null);
_iconsByName[plugin.config.name.lowercase()] = StatePlugins.instance.getPluginIconOrNull(plugin.config.id) ?:
ImageVariable(plugin.config.absoluteIconUrl, null);
_availableClients.add(client); _availableClients.add(client);
} }
catch(ex: Throwable) {
Logger.e(TAG, "Failed to initialize plugin [${plugin.config.name}]", ex);
StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) {
UIDialogs.toast("Plugin ${plugin.config.name} failed to load\n${ex.message}");
}
}
}
if(_availableClients.distinctBy { it.id }.count() < _availableClients.size) { if(_availableClients.distinctBy { it.id }.count() < _availableClients.size) {
val dups = _availableClients.filter { x-> _availableClients.count { it.id == x.id } > 1 }; val dups = _availableClients.filter { x-> _availableClients.count { it.id == x.id } > 1 };