From 22c5581d00c76c6e0b428825baea5dae4d40ab78 Mon Sep 17 00:00:00 2001 From: Stefan <84-stefan@users.noreply.gitlab.futo.org> Date: Fri, 20 Mar 2026 11:53:19 +0000 Subject: [PATCH] Handle plugin init failures per source --- .../platformplayer/states/StatePlatform.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt index 99213aea..eb6ddc2c 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StatePlatform.kt @@ -199,16 +199,24 @@ class StatePlatform { StatePlugins.instance.installMissingEmbeddedPlugins(context); for (plugin in StatePlugins.instance.getPlugins()) { - _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); + try { + val client = JSClient(context, plugin); + client.onCaptchaException.subscribe { c, ex -> + StateApp.instance.handleCaptchaException(c, ex); + } - val client = JSClient(context, plugin); - client.onCaptchaException.subscribe { 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); + } + 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}"); + } } - _availableClients.add(client); } if(_availableClients.distinctBy { it.id }.count() < _availableClients.size) {