alroyso 1 year ago
parent
commit
b8dd18dcf5
3 changed files with 62 additions and 5 deletions
  1. 1 1
      README.md
  2. 60 3
      lib/app/controller/GlobalController.dart
  3. 1 1
      scripts/init.dart

+ 1 - 1
README.md

@@ -23,6 +23,6 @@ dart run build_runner build --delete-conflicting-outputs
 flutter build macos --dart-define OS_ARCH=amd64
 flutter build macos --dart-define OS_ARCH=arm64
 
-
+flutter build windows --dart-define OS_ARCH=amd64
 appdmg ./config.json ./MAC加速器-amd64.dmg
 appdmg ./config.json ./MAC加速器-arm64.dmg

+ 60 - 3
lib/app/controller/GlobalController.dart

@@ -10,12 +10,14 @@ import 'package:naiyouwl/app/network/api_service.dart';
 import 'package:naiyouwl/app/network/dio_client.dart';
 import 'package:naiyouwl/app/utils/system_proxy.dart';
 import 'package:naiyouwl/app/utils/utils.dart';
+import 'package:proxy_manager/proxy_manager.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:tray_manager/tray_manager.dart';
 import 'package:window_manager/window_manager.dart';
 
 class GlobalController extends GetxController {
-
+  final proxyManager = ProxyManager();
+  bool systemProxy = false;
   late BuildContext context;
   final List<String> modes = ['rule', 'global'];
   final List<String> routeModes = ['sys', 'tun'];
@@ -210,8 +212,14 @@ class GlobalController extends GetxController {
 
   Future<void> systemProxySwitch(bool open) async {
     systemProxySwitchIng.value = true;
-    await SystemProxy.instance.set(open ? controllers.core.proxyConfig : SystemProxyConfig());
-    await controllers.config.setSystemProxy(open);
+    //await SystemProxy.instance.set(open ? controllers.core.proxyConfig : SystemProxyConfig());
+    //wait controllers.config.setSystemProxy(open);
+    if(open)
+    {
+      openProxy();
+    } else {
+      closeProxy();
+    }
     systemProxySwitchIng.value = false;
   }
 
@@ -351,6 +359,55 @@ class GlobalController extends GetxController {
       initRegularlyUpdate();
     });
   }
+  /// 打开代理
+
+  Future<void> openProxy() async {
+    int? port = controllers.config.mixedPort.value;
+    if (port == 0) {
+      port = null;
+    }
+    int? socksPort = controllers.config.mixedPort.value;
+    if (socksPort == 0) {
+      socksPort = null;
+    }
+    int? mixedPort = controllers.config.mixedPort.value;
+    if (mixedPort == 0) {
+      mixedPort = null;
+    }
+
+    port = port ?? mixedPort ?? 0;
+    if (port != 0) {
+      await proxyManager.setAsSystemProxy(
+        ProxyTypes.http,
+        "127.0.0.1",
+        port,
+      );
+      await proxyManager.setAsSystemProxy(
+        ProxyTypes.https,
+        "127.0.0.1",
+        port,
+      );
+      systemProxy = true;
+    }
+    socksPort = socksPort ?? mixedPort ?? 0;
+    if (socksPort != 0) {
+      if (!Platform.isWindows) {
+        await proxyManager.setAsSystemProxy(
+          ProxyTypes.socks,
+          "127.0.0.1",
+          socksPort,
+        );
+      }
+      systemProxy = true;
+    }
+  }
+
+  /// 关闭代理
+
+  Future<void> closeProxy() async {
+    proxyManager.cleanSystemProxy();
+    systemProxy = false;
+  }
 
   Future<void> handleExit() async {
     await systemProxySwitch(false);

+ 1 - 1
scripts/init.dart

@@ -154,7 +154,7 @@ void main() async {
   if (!(await binDir.exists())) await binDir.create();
   if (!(await depDir.exists())) await depDir.create();
 
-  //await downloadLatestClashCore();
+  await downloadLatestClashCore();
   await downloadAndUnarchiveService();
 
   await downloadCountryMmdb();