新增功能:
- 切换节点后把当前节点域名记录到用户设置(settings.json 的 current_node),下次启动自动继续使用上次选中的节点(按域名匹配,节点表变化时安全回退第一条)
This commit is contained in:
@@ -88,6 +88,8 @@ def _load_nodes():
|
|||||||
if not isinstance(data, list):
|
if not isinstance(data, list):
|
||||||
raise ValueError("nodes.json 顶层应为节点数组")
|
raise ValueError("nodes.json 顶层应为节点数组")
|
||||||
_NODES = data
|
_NODES = data
|
||||||
|
if not _SELECTED_RESTORED:
|
||||||
|
_restore_selected_node(_NODES) # 恢复上次使用的节点
|
||||||
log(f"已加载节点配置: {len(_NODES)} 个 ({path})")
|
log(f"已加载节点配置: {len(_NODES)} 个 ({path})")
|
||||||
if data and not str(data[0].get("domain") or "").strip():
|
if data and not str(data[0].get("domain") or "").strip():
|
||||||
log_red("节点未填写域名:请配置 config.json 的 nodes_url 在线更新,"
|
log_red("节点未填写域名:请配置 config.json 的 nodes_url 在线更新,"
|
||||||
@@ -97,6 +99,7 @@ def _load_nodes():
|
|||||||
return _NODES
|
return _NODES
|
||||||
|
|
||||||
_SELECTED_NODE = 0 # 当前选中节点下标(默认第一条)
|
_SELECTED_NODE = 0 # 当前选中节点下标(默认第一条)
|
||||||
|
_SELECTED_RESTORED = False # 启动时是否已按设置恢复过上次选中的节点
|
||||||
|
|
||||||
def _current_node():
|
def _current_node():
|
||||||
"""当前使用的节点:默认取列表第一个;无节点时返回 None。"""
|
"""当前使用的节点:默认取列表第一个;无节点时返回 None。"""
|
||||||
@@ -121,8 +124,26 @@ def _switch_node(index):
|
|||||||
log("已在当前节点")
|
log("已在当前节点")
|
||||||
return False
|
return False
|
||||||
_SELECTED_NODE = index
|
_SELECTED_NODE = index
|
||||||
|
_save_current_node(nodes[index].get("domain") or "") # 记录到设置,下次启动恢复
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _restore_selected_node(nodes):
|
||||||
|
"""首次加载时按设置里记录的 current_node(域名)恢复上次选中的节点。"""
|
||||||
|
global _SELECTED_NODE, _SELECTED_RESTORED
|
||||||
|
_SELECTED_RESTORED = True
|
||||||
|
saved = str(_settings_load().get("current_node") or "")
|
||||||
|
for i, n in enumerate(nodes):
|
||||||
|
if saved and str(n.get("domain") or "") == saved:
|
||||||
|
_SELECTED_NODE = i
|
||||||
|
return
|
||||||
|
_SELECTED_NODE = 0
|
||||||
|
|
||||||
|
def _save_current_node(domain):
|
||||||
|
"""把当前选中节点域名写入设置文件(下次启动自动继续使用)。"""
|
||||||
|
data = _settings_load()
|
||||||
|
data["current_node"] = str(domain or "")
|
||||||
|
_settings_save(data)
|
||||||
|
|
||||||
def _reload_nodes():
|
def _reload_nodes():
|
||||||
"""强制重新读取 nodes.json(菜单打开时调用,外部改动即时生效)。"""
|
"""强制重新读取 nodes.json(菜单打开时调用,外部改动即时生效)。"""
|
||||||
global _NODES
|
global _NODES
|
||||||
|
|||||||
Reference in New Issue
Block a user