diff --git a/lite/proxy_lite.py b/lite/proxy_lite.py index effcb6d..2026abf 100644 --- a/lite/proxy_lite.py +++ b/lite/proxy_lite.py @@ -88,6 +88,8 @@ def _load_nodes(): if not isinstance(data, list): raise ValueError("nodes.json 顶层应为节点数组") _NODES = data + if not _SELECTED_RESTORED: + _restore_selected_node(_NODES) # 恢复上次使用的节点 log(f"已加载节点配置: {len(_NODES)} 个 ({path})") if data and not str(data[0].get("domain") or "").strip(): log_red("节点未填写域名:请配置 config.json 的 nodes_url 在线更新," @@ -97,6 +99,7 @@ def _load_nodes(): return _NODES _SELECTED_NODE = 0 # 当前选中节点下标(默认第一条) +_SELECTED_RESTORED = False # 启动时是否已按设置恢复过上次选中的节点 def _current_node(): """当前使用的节点:默认取列表第一个;无节点时返回 None。""" @@ -121,8 +124,26 @@ def _switch_node(index): log("已在当前节点") return False _SELECTED_NODE = index + _save_current_node(nodes[index].get("domain") or "") # 记录到设置,下次启动恢复 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(): """强制重新读取 nodes.json(菜单打开时调用,外部改动即时生效)。""" global _NODES