diff --git a/lib/features/deep_link/notifier/deep_link_notifier.dart b/lib/features/deep_link/notifier/deep_link_notifier.dart index 2321f472..f90f53e8 100644 --- a/lib/features/deep_link/notifier/deep_link_notifier.dart +++ b/lib/features/deep_link/notifier/deep_link_notifier.dart @@ -13,20 +13,24 @@ class DeepLinkNotifier extends _$DeepLinkNotifier with ProtocolListener, InfraLogger { @override Future build() async { - if (Platform.isLinux) return null; - for (final protocol in LinkParser.protocols) { - await protocolHandler.register(protocol); - } - protocolHandler.addListener(this); - ref.onDispose(() { - protocolHandler.removeListener(this); - }); + // if (Platform.isLinux) return null; + try { + for (final protocol in LinkParser.protocols) { + await protocolHandler.register(protocol); + } + protocolHandler.addListener(this); + ref.onDispose(() { + protocolHandler.removeListener(this); + }); - final initialPayload = await protocolHandler.getInitialUrl(); - if (initialPayload != null) { - loggy.debug('initial payload: [$initialPayload]'); - final link = LinkParser.deep(initialPayload); - return link; + final initialPayload = await protocolHandler.getInitialUrl(); + if (initialPayload != null) { + loggy.debug('initial payload: [$initialPayload]'); + final link = LinkParser.deep(initialPayload); + return link; + } + } catch (e) { + loggy.error("failed to init deeplink", e); } return null; } diff --git a/lib/features/system_tray/notifier/system_tray_notifier.dart b/lib/features/system_tray/notifier/system_tray_notifier.dart index f49e3e42..8ca84a11 100644 --- a/lib/features/system_tray/notifier/system_tray_notifier.dart +++ b/lib/features/system_tray/notifier/system_tray_notifier.dart @@ -20,106 +20,109 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger { @override Future build() async { if (!PlatformUtils.isDesktop) return; - - await trayManager.setIcon( - _trayIconPath, - isTemplate: Platform.isMacOS, - ); - if (!Platform.isLinux) await trayManager.setToolTip(Constants.appName); - - ConnectionStatus connection; try { - connection = await ref.watch(connectionNotifierProvider.future); + await trayManager.setIcon( + _trayIconPath, + isTemplate: Platform.isMacOS, + ); + if (!Platform.isLinux) await trayManager.setToolTip(Constants.appName); + + ConnectionStatus connection; + try { + connection = await ref.watch(connectionNotifierProvider.future); + } catch (e) { + loggy.warning("error getting connection status", e); + connection = const ConnectionStatus.disconnected(); + } + + final serviceMode = ref.watch(ConfigOptions.serviceMode); + + final t = ref.watch(translationsProvider); + final destinations = <(String label, String location)>[ + (t.home.pageTitle, const HomeRoute().location), + (t.proxies.pageTitle, const ProxiesRoute().location), + (t.logs.pageTitle, const LogsOverviewRoute().location), + (t.settings.pageTitle, const SettingsRoute().location), + (t.about.pageTitle, const AboutRoute().location), + ]; + + loggy.debug('updating system tray'); + + final menu = Menu( + items: [ + MenuItem( + label: t.tray.dashboard, + onClick: (_) async { + await ref.read(windowNotifierProvider.notifier).open(); + }, + ), + MenuItem.separator(), + MenuItem.checkbox( + label: switch (connection) { + Disconnected() => t.tray.status.connect, + Connecting() => t.tray.status.connecting, + Connected() => t.tray.status.disconnect, + Disconnecting() => t.tray.status.disconnecting, + }, + checked: connection.isConnected, + disabled: connection.isSwitching, + onClick: (_) async { + await ref + .read(connectionNotifierProvider.notifier) + .toggleConnection(); + }, + ), + MenuItem.submenu( + label: t.config.serviceMode, + submenu: Menu( + items: [ + ...ServiceMode.values.map( + (e) => MenuItem.checkbox( + checked: e == serviceMode, + key: e.name, + label: e.present(t), + onClick: (menuItem) async { + final newMode = ServiceMode.values.byName(menuItem.key!); + loggy.debug("switching service mode: [$newMode]"); + await ref + .read(ConfigOptions.serviceMode.notifier) + .update(newMode); + }, + ), + ), + ], + ), + ), + MenuItem.submenu( + label: t.tray.open, + submenu: Menu( + items: [ + ...destinations.map( + (e) => MenuItem( + label: e.$1, + onClick: (_) async { + await ref.read(windowNotifierProvider.notifier).open(); + ref.read(routerProvider).go(e.$2); + }, + ), + ), + ], + ), + ), + MenuItem.separator(), + MenuItem( + label: t.tray.quit, + onClick: (_) async { + return ref.read(windowNotifierProvider.notifier).quit(); + }, + ), + ], + ); + + await trayManager.setContextMenu(menu); } catch (e) { - loggy.warning("error getting connection status", e); - connection = const ConnectionStatus.disconnected(); + loggy.error("error updating system tray", e); } - - final serviceMode = ref.watch(ConfigOptions.serviceMode); - - final t = ref.watch(translationsProvider); - final destinations = <(String label, String location)>[ - (t.home.pageTitle, const HomeRoute().location), - (t.proxies.pageTitle, const ProxiesRoute().location), - (t.logs.pageTitle, const LogsOverviewRoute().location), - (t.settings.pageTitle, const SettingsRoute().location), - (t.about.pageTitle, const AboutRoute().location), - ]; - - loggy.debug('updating system tray'); - - final menu = Menu( - items: [ - MenuItem( - label: t.tray.dashboard, - onClick: (_) async { - await ref.read(windowNotifierProvider.notifier).open(); - }, - ), - MenuItem.separator(), - MenuItem.checkbox( - label: switch (connection) { - Disconnected() => t.tray.status.connect, - Connecting() => t.tray.status.connecting, - Connected() => t.tray.status.disconnect, - Disconnecting() => t.tray.status.disconnecting, - }, - checked: connection.isConnected, - disabled: connection.isSwitching, - onClick: (_) async { - await ref - .read(connectionNotifierProvider.notifier) - .toggleConnection(); - }, - ), - MenuItem.submenu( - label: t.config.serviceMode, - submenu: Menu( - items: [ - ...ServiceMode.values.map( - (e) => MenuItem.checkbox( - checked: e == serviceMode, - key: e.name, - label: e.present(t), - onClick: (menuItem) async { - final newMode = ServiceMode.values.byName(menuItem.key!); - loggy.debug("switching service mode: [$newMode]"); - await ref - .read(ConfigOptions.serviceMode.notifier) - .update(newMode); - }, - ), - ), - ], - ), - ), - MenuItem.submenu( - label: t.tray.open, - submenu: Menu( - items: [ - ...destinations.map( - (e) => MenuItem( - label: e.$1, - onClick: (_) async { - await ref.read(windowNotifierProvider.notifier).open(); - ref.read(routerProvider).go(e.$2); - }, - ), - ), - ], - ), - ), - MenuItem.separator(), - MenuItem( - label: t.tray.quit, - onClick: (_) async { - return ref.read(windowNotifierProvider.notifier).quit(); - }, - ), - ], - ); - - await trayManager.setContextMenu(menu); } static String get _trayIconPath {