diff --git a/desktop/app/src/Client.tsx b/desktop/app/src/Client.tsx index bd5120fa7..df1f3ccd6 100644 --- a/desktop/app/src/Client.tsx +++ b/desktop/app/src/Client.tsx @@ -32,6 +32,7 @@ import { getFlipperLib, timeout, ClientQuery, + _SandyPluginDefinition, } from 'flipper-plugin'; import {freeze} from 'immer'; import GK from './fb-stubs/GK'; @@ -210,17 +211,7 @@ export default class Client extends EventEmitter { this.plugins.forEach((pluginId) => { const plugin = this.getPlugin(pluginId); if (plugin) { - // TODO: needs to be wrapped in error tracking T68955280 - this.sandyPluginStates.set( - plugin.id, - new _SandyPluginInstance( - getFlipperLib(), - plugin, - this, - getPluginKey(this.id, {serial: this.query.device_id}, plugin.id), - initialStates[pluginId], - ), - ); + this.loadPlugin(plugin, initialStates[pluginId]); } }); return this; @@ -237,6 +228,26 @@ export default class Client extends EventEmitter { return plugins; } + loadPlugin( + plugin: _SandyPluginDefinition, + initialState?: Record, + ) { + try { + this.sandyPluginStates.set( + plugin.id, + new _SandyPluginInstance( + getFlipperLib(), + plugin, + this, + getPluginKey(this.id, {serial: this.query.device_id}, plugin.id), + initialState, + ), + ); + } catch (e) { + console.error(`Failed to start plugin '${plugin.id}': `, e); + } + } + startPluginIfNeeded( plugin: PluginDefinition | undefined, isEnabled = plugin ? this.isEnabledPlugin(plugin.id) : false, @@ -247,16 +258,7 @@ export default class Client extends EventEmitter { (isEnabled || defaultEnabledBackgroundPlugins.includes(plugin.id)) && !this.sandyPluginStates.has(plugin.id) ) { - // TODO: needs to be wrapped in error tracking T68955280 - this.sandyPluginStates.set( - plugin.id, - new _SandyPluginInstance( - getFlipperLib(), - plugin, - this, - getPluginKey(this.id, {serial: this.query.device_id}, plugin.id), - ), - ); + this.loadPlugin(plugin); } } diff --git a/desktop/app/src/devices/BaseDevice.tsx b/desktop/app/src/devices/BaseDevice.tsx index 0079b0f27..f266ab4a1 100644 --- a/desktop/app/src/devices/BaseDevice.tsx +++ b/desktop/app/src/devices/BaseDevice.tsx @@ -306,17 +306,21 @@ export default class BaseDevice implements Device { } this.hasDevicePlugins = true; if (plugin instanceof _SandyPluginDefinition) { - this.sandyPluginStates.set( - plugin.id, - new _SandyDevicePluginInstance( - getFlipperLib(), - plugin, - this, - // break circular dep, one of those days again... - getPluginKey(undefined, {serial: this.serial}, plugin.id), - initialState, - ), - ); + try { + this.sandyPluginStates.set( + plugin.id, + new _SandyDevicePluginInstance( + getFlipperLib(), + plugin, + this, + // break circular dep, one of those days again... + getPluginKey(undefined, {serial: this.serial}, plugin.id), + initialState, + ), + ); + } catch (e) { + console.error(`Failed to start device plugin '${plugin.id}': `, e); + } } }