fix: 统一路径分隔符为正斜杠,修复 macOS/Linux 兼容性

all_keys.json 中的 key 统一使用 `/` 作为路径分隔符,
消除 Windows 反斜杠硬编码,确保跨平台兼容。

涉及文件: find_all_keys.py, decrypt_db.py, monitor.py,
monitor_web.py, mcp_server.py, decode_image.py, latency_test.py

Fixes #17

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
ylytdeng
2026-03-07 00:53:48 +08:00
parent 1294953681
commit 2b03a81a8f
7 changed files with 24 additions and 24 deletions

View File

@@ -62,7 +62,7 @@ def _build_emoji_lookup(keys_dict):
"""从 emoticon.db 构建 emoji md5 → URL 映射(直接解密,不走 cache"""
global _emoji_lookup, _emoji_keys_dict, _emoji_last_refresh
_emoji_keys_dict = keys_dict
key_info = keys_dict.get("emoticon\\emoticon.db")
key_info = keys_dict.get("emoticon/emoticon.db")
if not key_info:
print("[emoji] 无 emoticon.db key跳过", flush=True)
return
@@ -260,7 +260,7 @@ class MonitorDBCache:
lock = self._get_lock(rel_key)
with lock:
enc_key = bytes.fromhex(self.keys[rel_key]["enc_key"])
rel_path = rel_key.replace('\\', os.sep)
rel_path = rel_key.replace('/', os.sep)
db_path = os.path.join(DB_DIR, rel_path)
wal_path = db_path + "-wal"
@@ -273,7 +273,7 @@ class MonitorDBCache:
except OSError:
return None
out_name = rel_key.replace('\\', '_')
out_name = rel_key.replace('/', '_')
out_path = os.path.join(self.tmp_dir, out_name)
prev = self._state.get(rel_key)
@@ -313,7 +313,7 @@ def build_username_db_map():
# 先获取每个 DB 的 mtime 用于排序
db_mtimes = {}
for i in range(5):
rel_key = f"message\\message_{i}.db"
rel_key = f"message/message_{i}.db"
db_path = os.path.join(DB_DIR, "message", f"message_{i}.db")
try:
db_mtimes[rel_key] = os.path.getmtime(db_path)
@@ -326,7 +326,7 @@ def build_username_db_map():
db_path = os.path.join(decrypted_msg_dir, f"message_{i}.db")
if not os.path.exists(db_path):
continue
rel_key = f"message\\message_{i}.db"
rel_key = f"message/message_{i}.db"
try:
conn = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True)
for row in conn.execute("SELECT user_name FROM Name2Id").fetchall():
@@ -595,7 +595,7 @@ class SessionMonitor:
# local_id 不全局唯一,需要同时匹配 create_time
file_md5 = None
for _try in range(2):
res_path = self.db_cache.get("message\\message_resource.db")
res_path = self.db_cache.get("message/message_resource.db")
if not res_path:
return None
try:
@@ -620,7 +620,7 @@ class SessionMonitor:
except Exception as e:
if 'malformed' in str(e) and _try == 0:
print(f" [img] resource DB malformed, 强制刷新...", flush=True)
self.db_cache.invalidate("message\\message_resource.db")
self.db_cache.invalidate("message/message_resource.db")
continue
print(f" [img] 查询 message_resource 失败: {e}", flush=True)
return None
@@ -756,7 +756,7 @@ class SessionMonitor:
if db_key not in self.db_cache.keys:
return []
enc_key = bytes.fromhex(self.db_cache.keys[db_key]["enc_key"])
rel_path = db_key.replace('\\', os.sep)
rel_path = db_key.replace('/', os.sep)
db_path = os.path.join(DB_DIR, rel_path)
wal_path = db_path + "-wal"
if not os.path.exists(db_path):
@@ -1877,7 +1877,7 @@ def main():
with open(KEYS_FILE) as f:
keys = json.load(f)
enc_key = bytes.fromhex(keys["session\\session.db"]["enc_key"])
enc_key = bytes.fromhex(keys["session/session.db"]["enc_key"])
session_db = os.path.join(DB_DIR, "session", "session.db")
print("加载联系人...", flush=True)
@@ -1910,9 +1910,9 @@ def main():
def _warmup():
try:
t0 = time.perf_counter()
warmup_keys = ["message\\message_resource.db"]
warmup_keys = ["message/message_resource.db"]
for i in range(5):
k = f"message\\message_{i}.db"
k = f"message/message_{i}.db"
if k in keys:
warmup_keys.append(k)
for k in warmup_keys: