|
@@ -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);
|