From cc3c17d0e8710c3c132e433f931f941e33ad28f1 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Fri, 29 Dec 2023 17:59:53 +0330 Subject: [PATCH] Fix multi instance on windows --- lib/features/window/notifier/window_notifier.dart | 7 +++++++ pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + windows/flutter/generated_plugin_registrant.cc | 3 +++ windows/flutter/generated_plugins.cmake | 1 + 5 files changed, 20 insertions(+) diff --git a/lib/features/window/notifier/window_notifier.dart b/lib/features/window/notifier/window_notifier.dart index 8dea5958..f16810a6 100644 --- a/lib/features/window/notifier/window_notifier.dart +++ b/lib/features/window/notifier/window_notifier.dart @@ -1,3 +1,4 @@ +import 'dart:io'; import 'dart:ui'; import 'package:hiddify/core/app_info/app_info_provider.dart'; @@ -7,6 +8,7 @@ import 'package:hiddify/utils/utils.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:tray_manager/tray_manager.dart'; import 'package:window_manager/window_manager.dart'; +import 'package:windows_single_instance/windows_single_instance.dart'; part 'window_notifier.g.dart'; @@ -19,6 +21,11 @@ class WindowNotifier extends _$WindowNotifier with AppLogger { Future build() async { if (!PlatformUtils.isDesktop) return; + if (Platform.isWindows) { + loggy.debug("ensuring single instance"); + await WindowsSingleInstance.ensureSingleInstance([], "app.hiddify.com"); + } + await windowManager.ensureInitialized(); await windowManager.setMinimumSize(minimumWindowSize); await windowManager.setSize(defaultWindowSize); diff --git a/pubspec.lock b/pubspec.lock index 8d87e386..f088be12 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1682,6 +1682,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.7" + windows_single_instance: + dependency: "direct main" + description: + name: windows_single_instance + sha256: "50d5dcd6bec90b4a5ed588b1822b1aad21b39fc96da843e61c734b3caccfd2fc" + url: "https://pub.dev" + source: hosted + version: "1.0.1" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b6d585b0..b7eaea91 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -71,6 +71,7 @@ dependencies: qr_flutter: ^4.1.0 native_dio_adapter: ^1.2.0 flutter_displaymode: ^0.6.0 + windows_single_instance: ^1.0.1 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 01d8a783..b417ac3c 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -15,6 +15,7 @@ #include #include #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { ProtocolHandlerPluginRegisterWithRegistrar( @@ -35,4 +36,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("VclibsPlugin")); WindowManagerPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("WindowManagerPlugin")); + WindowsSingleInstancePluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("WindowsSingleInstancePlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 162a92be..099562ae 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -12,6 +12,7 @@ list(APPEND FLUTTER_PLUGIN_LIST url_launcher_windows vclibs window_manager + windows_single_instance ) list(APPEND FLUTTER_FFI_PLUGIN_LIST