feat: 提交国家选择
This commit is contained in:
@@ -1482,67 +1482,6 @@ class KRSingBoxImp {
|
||||
return;
|
||||
}
|
||||
|
||||
/*final selectGroup = kr_activeGroups.firstWhere(
|
||||
(group) => group.tag == 'select',
|
||||
orElse: () => throw Exception('未找到 "select" 组'),
|
||||
);
|
||||
|
||||
final countryNodes = selectGroup.items.where((item) {
|
||||
final nodeCountry = item.options?['country'] ?? '';
|
||||
return nodeCountry.toString().toLowerCase() == country.toLowerCase();
|
||||
}).toList();
|
||||
|
||||
if (countryNodes.isEmpty) {
|
||||
KRLogUtil.kr_w('⚠️ 未找到该国家的节点: $country', tag: 'SingBox');
|
||||
for (var item in selectGroup.items) {
|
||||
KRLogUtil.kr_d(
|
||||
' 可用节点: ${item.tag} (${item.options?['country'] ?? '未知'})',
|
||||
tag: 'SingBox',
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
KRLogUtil.kr_i('🇨🇭 找到 ${countryNodes.length} 个属于 "$country" 的节点', tag: 'SingBox');
|
||||
|
||||
// 按延迟排序(无延迟则 9999)
|
||||
countryNodes.sort((a, b) =>
|
||||
(a.urlTestDelay ?? 9999).compareTo(b.urlTestDelay ?? 9999));
|
||||
|
||||
final fastestNode = countryNodes.first;
|
||||
final selectedTag = fastestNode.tag;
|
||||
final delay = fastestNode.urlTestDelay ?? -1;
|
||||
|
||||
KRLogUtil.kr_i('✅ 选中该国家最快节点: $selectedTag (${delay}ms)', tag: 'SingBox');
|
||||
|
||||
try {
|
||||
await KRSecureStorage().kr_saveData(key: 'selected_country', value: country);
|
||||
await KRSecureStorage().kr_saveData(key: _keySelectedNode, value: selectedTag);
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('⚠️ 保存国家/节点信息失败: $e', tag: 'SingBox');
|
||||
}
|
||||
|
||||
try {
|
||||
await _kr_ensureCommandClientInitialized();
|
||||
await _kr_selectOutboundWithRetry('select', selectedTag,
|
||||
maxAttempts: 3, initialDelay: 100);
|
||||
KRLogUtil.kr_i('✅ 国家内节点切换成功: $selectedTag', tag: 'SingBox');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('❌ 国家内节点选择失败: $e', tag: 'SingBox');
|
||||
rethrow;
|
||||
}
|
||||
|
||||
_nodeSelectionTimer?.cancel();
|
||||
KRLogUtil.kr_i('🔁 启动定时器防止节点被 auto 覆盖', tag: 'SingBox');
|
||||
_nodeSelectionTimer =
|
||||
Timer.periodic(const Duration(seconds: 20), (timer) async {
|
||||
try {
|
||||
await kr_singBox.selectOutbound('select', selectedTag).run();
|
||||
KRLogUtil.kr_d('🔁 定时确认国家内节点: $selectedTag', tag: 'SingBox');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('🔁 定时确认失败: $e', tag: 'SingBox');
|
||||
}
|
||||
});*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user