Repository navigation
v3.0.2
修复:网易云「加入下一首播放」导致歌词停止显示(#11)
根因在底层依赖库,已随 netease-cloudmusic-detector 2.0.7 修复,本版同步升级。
发生了什么
网易云在「加入下一首播放」、把歌曲插入播放队列时,会写一条 checkPlayPrivilege(播放权限预检)日志。旧版检测库把它当成真实切歌,于是:
- 歌词软件提前拉取下一首的歌词,当前歌词被停掉;
- 真正切到该曲时,因为曲目 ID 已相同而被去重,不再推送切歌事件,歌词从此不再出现,只能手动点「开始播放」恢复。
修复方式(库 2.0.7)
改为「候选 + 出声确认」:权限预检只登记候选,不改状态、不发回调;只有 NATIVE_SONG_LOAD(同 songId)或 native播放state 的 playId 前缀确认后才正式切歌,歌词同时锚定在真实出声点。
启动回溯(_preload)也同步修正:过滤掉从未出声的预检锚点;webdb 查不到当前歌时继续向更早日志取同一首的预检记录补齐歌名歌手(此前会直接回溯失败,启动后没有歌曲信息)。
本仓库的两处适配加固
core/app_controller.py:歌词获取的互斥守卫从「布尔丢弃」改为asyncio.Lock排队。原来若上一首的获取没结束,切歌触发的重新获取会被直接丢弃并返回失败,界面随即停止歌词——新歌歌词再也不显示。现在排队执行时,后一个请求会重新读取当前播放信息,拿到的总是最新歌曲的歌词。ui/control_panel.py:_fetch_and_restart在获取前后比对歌曲,若获取期间又切了歌则放弃本次表演,避免旧歌词短暂抢着播出来。
关于「已是最新版本仍然提示有更新」
v3.0.1 的 Release 里混入了一个用旧版本号(3.0.0)构建的包,导致 3.0.1 用户被提示有新版本。那个错误资产已删除,本版重新构建,版本号也已正确写入。
依赖:netease-cloudmusic-detector >= 2.0.7