mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
61 lines
1.4 KiB
Dart
61 lines
1.4 KiB
Dart
import 'package:flutter/services.dart';
|
|
import 'package:venera/foundation/app.dart';
|
|
import 'package:venera/foundation/appdata.dart';
|
|
import 'package:venera/utils/ext.dart';
|
|
|
|
String? _cachedProxy;
|
|
|
|
DateTime? _cachedProxyTime;
|
|
|
|
Future<String?> getProxy() async {
|
|
if (_cachedProxyTime != null &&
|
|
DateTime.now().difference(_cachedProxyTime!).inSeconds < 1) {
|
|
return _cachedProxy;
|
|
}
|
|
String? proxy = await _getProxy();
|
|
_cachedProxy = proxy;
|
|
_cachedProxyTime = DateTime.now();
|
|
return proxy;
|
|
}
|
|
|
|
Future<String?> _getProxy() async {
|
|
if ((appdata.settings['proxy'] as String).removeAllBlank == "direct") {
|
|
return null;
|
|
}
|
|
if (appdata.settings['proxy'] != "system") return appdata.settings['proxy'];
|
|
|
|
String res;
|
|
if (!App.isLinux) {
|
|
const channel = MethodChannel("venera/method_channel");
|
|
try {
|
|
res = await channel.invokeMethod("getProxy");
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
} else {
|
|
res = "No Proxy";
|
|
}
|
|
if (res == "No Proxy") return null;
|
|
|
|
if (res.contains(";")) {
|
|
var proxies = res.split(";");
|
|
for (String proxy in proxies) {
|
|
proxy = proxy.removeAllBlank;
|
|
if (proxy.startsWith('https=')) {
|
|
return proxy.substring(6);
|
|
}
|
|
}
|
|
}
|
|
|
|
final RegExp regex = RegExp(
|
|
r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+$',
|
|
caseSensitive: false,
|
|
multiLine: false,
|
|
);
|
|
if (!regex.hasMatch(res)) {
|
|
return null;
|
|
}
|
|
|
|
return res;
|
|
}
|