fix: bugs in tray icon

This commit is contained in:
hiddify-com
2024-08-04 22:51:36 +02:00
parent b85894ef0a
commit f54fe79d30
2 changed files with 35 additions and 15 deletions

View File

@@ -15,6 +15,7 @@ import 'package:hiddify/singbox/model/singbox_config_enum.dart';
import 'package:hiddify/utils/utils.dart'; import 'package:hiddify/utils/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:tray_manager/tray_manager.dart'; import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
part 'system_tray_notifier.g.dart'; part 'system_tray_notifier.g.dart';
@@ -23,8 +24,10 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger {
@override @override
Future<void> build() async { Future<void> build() async {
if (!PlatformUtils.isDesktop) return; if (!PlatformUtils.isDesktop) return;
ref.watch(activeProxyNotifierProvider).whenData((activeProxy) => setDelay(activeProxy.urlTestDelay));
final activeProxy = await ref.watch(activeProxyNotifierProvider);
final delay = activeProxy.value?.urlTestDelay ?? 0;
final newConnectionStatus = delay > 0 && delay < 65000;
ConnectionStatus connection; ConnectionStatus connection;
try { try {
connection = await ref.watch(connectionNotifierProvider.future); connection = await ref.watch(connectionNotifierProvider.future);
@@ -32,14 +35,32 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger {
loggy.warning("error getting connection status", e); loggy.warning("error getting connection status", e);
connection = const ConnectionStatus.disconnected(); connection = const ConnectionStatus.disconnected();
} }
final t = ref.watch(translationsProvider);
var tooltip = Constants.appName;
final serviceMode = ref.watch(ConfigOptions.serviceMode); final serviceMode = ref.watch(ConfigOptions.serviceMode);
if (connection == Disconnected()) { if (connection == Disconnected()) {
setIcon(connection); setIcon(connection);
} else if (newConnectionStatus) {
setIcon(const Connected());
tooltip = "$tooltip - ${connection.present(t)}";
if (newConnectionStatus) {
tooltip = "$tooltip : ${delay}ms";
} else {
tooltip = "$tooltip : -";
}
// else if (delay>1000)
// SystemTrayNotifier.setIcon(timeout ? Disconnecting() : Connecting());
} else {
setIcon(const Disconnecting());
tooltip = "${tooltip} - ${connection.present(t)}";
} }
if (Platform.isMacOS) {
windowManager.setBadgeLabel("${delay}ms");
}
if (!Platform.isLinux) await trayManager.setToolTip(tooltip);
if (!Platform.isLinux) await trayManager.setToolTip(Constants.appName);
final t = ref.watch(translationsProvider);
final destinations = <(String label, String location)>[ final destinations = <(String label, String location)>[
(t.home.pageTitle, const HomeRoute().location), (t.home.pageTitle, const HomeRoute().location),
(t.proxies.pageTitle, const ProxiesRoute().location), (t.proxies.pageTitle, const ProxiesRoute().location),
@@ -48,7 +69,7 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger {
(t.about.pageTitle, const AboutRoute().location), (t.about.pageTitle, const AboutRoute().location),
]; ];
loggy.debug('updating system tray'); // loggy.debug('updating system tray');
final menu = Menu( final menu = Menu(
items: [ items: [
@@ -122,16 +143,6 @@ class SystemTrayNotifier extends _$SystemTrayNotifier with AppLogger {
await trayManager.setContextMenu(menu); await trayManager.setContextMenu(menu);
} }
static void setDelay(int delay) {
if (delay > 65000 || delay == 0) {
setIcon(const Disconnecting());
// else if (delay>1000)
// SystemTrayNotifier.setIcon(timeout ? Disconnecting() : Connecting());
} else {
setIcon(const Connected());
}
}
static void setIcon(ConnectionStatus status) { static void setIcon(ConnectionStatus status) {
if (!PlatformUtils.isDesktop) return; if (!PlatformUtils.isDesktop) return;
trayManager trayManager

View File

@@ -7,6 +7,15 @@ class AppDelegate: FlutterAppDelegate {
// https://github.com/leanflutter/window_manager/issues/214 // https://github.com/leanflutter/window_manager/issues/214
return false return false
} }
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Request notification authorization
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge]) { granted, error in
if let error = error {
print("Error requesting notification authorization: \(error)")
}
}
}
// // window manager restore from dock: https://leanflutter.dev/blog/click-dock-icon-to-restore-after-closing-the-window // // window manager restore from dock: https://leanflutter.dev/blog/click-dock-icon-to-restore-after-closing-the-window
// override func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { // override func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {