# -*- coding: utf-8 -*- """服务端:audio_list 附带扁平的 names/paths;新增 set_voice 保存默认音色。""" from __future__ import annotations import sys from pathlib import Path SERVER = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\lanremote\server.py") OLD_AUDIO = ''' if cmd == P.CMD_AUDIO_LIST: return {"ok": True, "files": self.actions.list_local_audio(), "roots": [str(p) for p in self.actions.audio_roots()]} ''' NEW_AUDIO = ''' if cmd == P.CMD_AUDIO_LIST: files = self.actions.list_local_audio() # 顺手给出扁平的 names/paths,手表端不用再解析嵌套结构 return {"ok": True, "files": files, "names": [f.get("name", "") for f in files], "paths": [f.get("path", "") for f in files], "roots": [str(p) for p in self.actions.audio_roots()]} if cmd == P.CMD_SET_VOICE: voice = str(msg.get("voice") or "").strip() self.store.set("tts_voice", voice) self._log(f"[音色] 已设为 {voice or '系统默认'}") return {"ok": True, "note": voice or "系统默认"} ''' PROTO_OLD = 'CMD_VOICE_LIST = "voice_list"\n' PROTO_NEW = 'CMD_VOICE_LIST = "voice_list"\nCMD_SET_VOICE = "set_voice"\n' def main() -> int: ok = True text = SERVER.read_text(encoding="utf-8") if OLD_AUDIO not in text: print(" [失败] audio_list 锚点未匹配") ok = False else: text = text.replace(OLD_AUDIO, NEW_AUDIO, 1) SERVER.write_text(text, encoding="utf-8") print(" server.py: OK") proto = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows" r"\lanremote\protocol.py") ptext = proto.read_text(encoding="utf-8") if PROTO_OLD not in ptext: print(" [失败] protocol.py 锚点未匹配") ok = False else: ptext = ptext.replace(PROTO_OLD, PROTO_NEW, 1) proto.write_text(ptext, encoding="utf-8") print(" protocol.py: OK") print("\n语法检查:") import ast for name, path in (("server.py", SERVER), ("protocol.py", proto)): try: ast.parse(path.read_text(encoding="utf-8")) print(f" {name}: OK") except SyntaxError as exc: print(f" {name}: 语法错误 {exc}") ok = False return 0 if ok else 1 if __name__ == "__main__": sys.exit(main())