# -*- coding: utf-8 -*- """修:切中转时可能没有配对码。 问题: 第一次连是用户手输配对码 -> lastCode 有值。 之后手表用**保存的令牌**直连(quickConnect,code 传 null), lastCode 就是空的。 这时候局域网断了要切中转 —— 而中转的 /v1/client/attach **必须要配对码**才能找到是哪台电脑。没有码就切不过去, 用户会莫名断开。 修法: 把用户输过的配对码存进 SharedPreferences, 要用的时候捞出来。有码就存,没码就读上次的。 """ from __future__ import annotations import sys from pathlib import Path MAIN = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\android\src" r"\com\lanremote\watch\MainActivity.java") # ---------- 1. 记录配对码到设置里 ---------- REC_OLD = ''' lastHost = host; lastPort = port; if (code != null) { lastCode = code; } if (token != null) { lastToken = token; }''' REC_NEW = ''' lastHost = host; lastPort = port; if (code != null && !code.isEmpty()) { lastCode = code; // 存起来:以后用令牌直连时(code 是 null), // 局域网断线要切中转,还得靠这个码才能接上。 rememberPairingCode(code); } else if (lastCode == null || lastCode.isEmpty()) { lastCode = savedPairingCode(); } if (token != null) { lastToken = token; }''' # ---------- 2. 存取配对码的方法 ---------- HELPER_OLD = ''' private void switchToRelay() {''' HELPER_NEW = ''' /** 记住用户输过的配对码(切中转时要用)。 */ private void rememberPairingCode(String code) { try { getSharedPreferences("lanremote", MODE_PRIVATE).edit() .putString("paired_code", code == null ? "" : code.trim()) .apply(); } catch (Exception ignored) { // 存不下也不致命,只是断线后可能切不了中转 } } /** 读回上次用的配对码。 */ private String savedPairingCode() { try { String saved = getSharedPreferences("lanremote", MODE_PRIVATE) .getString("paired_code", ""); return saved == null ? "" : saved.trim(); } catch (Exception ignored) { return ""; } } private void switchToRelay() {''' # ---------- 3. 修掉那处难看的连接格式 ---------- FMT_OLD = ''' autoRetry = 0; ui.post(new Runnable() {''' FMT_NEW = ''' autoRetry = 0; ui.post(new Runnable() {''' def patch(pairs, label: str) -> bool: text = MAIN.read_text(encoding="utf-8") ok = True for old, new, tag in pairs: if old not in text: print(f" [{label}] [跳过] {tag} —— 锚点没找到") ok = False continue text = text.replace(old, new, 1) print(f" [{label}] {tag}") MAIN.write_text(text, encoding="utf-8", newline="\n") return ok def main() -> int: return 0 if patch([ (REC_OLD, REC_NEW, "记录/读取配对码"), (HELPER_OLD, HELPER_NEW, "加存取方法"), (FMT_OLD, FMT_NEW, "修格式"), ], "MainActivity") else 1 if __name__ == "__main__": sys.exit(main())