From 02f6862b768b4f44665328f8a6d2bdf98e8a7d24 Mon Sep 17 00:00:00 2001 From: fragrans Date: Fri, 16 Jan 2026 16:31:08 +0800 Subject: [PATCH] =?UTF-8?q?group=5Fname=E5=8F=AF=E8=83=BD=E4=B8=BANone?= =?UTF-8?q?=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=8C=E6=97=B6=E6=94=B9=E7=94=A8?= =?UTF-8?q?setdefault=E5=87=8F=E5=B0=91=E5=88=A4=E6=96=AD=20(#694)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * group_name可能为None情况,同时改用setdefault减少判断 * 实例化AuthManager时创建device_id, 增加set_token记录 * device.py 中的接口验证统一放到APiRouter中 --- xiaomusic/api/routers/device.py | 16 ++++++++-------- xiaomusic/auth.py | 5 +++-- xiaomusic/device_manager.py | 6 ++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/xiaomusic/api/routers/device.py b/xiaomusic/api/routers/device.py index 18c43f9..e3a1712 100644 --- a/xiaomusic/api/routers/device.py +++ b/xiaomusic/api/routers/device.py @@ -19,11 +19,11 @@ from xiaomusic.api.models import ( DidVolume, ) -router = APIRouter() +router = APIRouter(dependencies=[Depends(verification)]) @router.get("/getvolume") -async def getvolume(did: str = "", Verifcation=Depends(verification)): +async def getvolume(did: str = ""): """获取音量""" if not xiaomusic.did_exist(did): return {"volume": 0} @@ -33,7 +33,7 @@ async def getvolume(did: str = "", Verifcation=Depends(verification)): @router.post("/setvolume") -async def setvolume(data: DidVolume, Verifcation=Depends(verification)): +async def setvolume(data: DidVolume): """设置音量""" did = data.did volume = data.volume @@ -46,7 +46,7 @@ async def setvolume(data: DidVolume, Verifcation=Depends(verification)): @router.post("/cmd") -async def do_cmd(data: DidCmd, Verifcation=Depends(verification)): +async def do_cmd(data: DidCmd): """执行命令""" did = data.did cmd = data.cmd @@ -66,7 +66,7 @@ async def do_cmd(data: DidCmd, Verifcation=Depends(verification)): @router.get("/cmdstatus") -async def cmd_status(Verifcation=Depends(verification)): +async def cmd_status(): """命令状态""" finish = await xiaomusic.is_task_finish() if finish: @@ -75,7 +75,7 @@ async def cmd_status(Verifcation=Depends(verification)): @router.get("/playurl") -async def playurl(did: str, url: str, Verifcation=Depends(verification)): +async def playurl(did: str, url: str): """播放 URL""" if not xiaomusic.did_exist(did): return {"ret": "Did not exist"} @@ -85,7 +85,7 @@ async def playurl(did: str, url: str, Verifcation=Depends(verification)): @router.get("/playtts") -async def playtts(did: str, text: str, Verifcation=Depends(verification)): +async def playtts(did: str, text: str): """播放 TTS""" if not xiaomusic.did_exist(did): return {"ret": "Did not exist"} @@ -96,7 +96,7 @@ async def playtts(did: str, text: str, Verifcation=Depends(verification)): @router.post("/device/stop") -async def stop(data: Did, Verifcation=Depends(verification)): +async def stop(data: Did): """关机""" did = data.did log.info(f"stop did:{did}") diff --git a/xiaomusic/auth.py b/xiaomusic/auth.py index b394578..d7e2f71 100644 --- a/xiaomusic/auth.py +++ b/xiaomusic/auth.py @@ -48,7 +48,7 @@ class AuthManager: # 当前设备DID(用于设备ID更新) self._cur_did = None - + self.device_id = get_random(16).upper() self.mi_session = ClientSession() self.device_manager = device_manager @@ -172,8 +172,9 @@ class AuthManager: account.token = { "passToken": cookies_dict["passToken"], "userId": cookies_dict["userId"], - "deviceId": get_random(16).upper(), + "deviceId": self.device_id, } + self.log.info(f"设置token到account:{accout.token}") def get_cookie(self): """获取Cookie diff --git a/xiaomusic/device_manager.py b/xiaomusic/device_manager.py index a9f5dbf..0e8c10a 100644 --- a/xiaomusic/device_manager.py +++ b/xiaomusic/device_manager.py @@ -50,11 +50,9 @@ class DeviceManager: # 构建 device_id 到 did 的映射 self.device_id_did[device.device_id] = did group_name = did2group.get(did) - if not group_name: + if not group_name or group_name is None: group_name = device.name - if group_name not in self.groups: - self.groups[group_name] = [] - self.groups[group_name].append(device.device_id) + self.groups.setdefault(group_name, []).append(device.device_id) self.devices[did] = XiaoMusicDevice(self.xiaomusic, device, group_name) self.log.info(f"设备列表已更新: device_id_did={self.device_id_did}")