From c3183f22de0a11f5b4fe84aa08a817dc102ff9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Tue, 10 Mar 2026 19:09:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=94=B6=E8=97=8F=E6=AD=8C=E6=9B=B2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/music_library.py | 48 ++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/xiaomusic/music_library.py b/xiaomusic/music_library.py index 3e219de..70a44c1 100644 --- a/xiaomusic/music_library.py +++ b/xiaomusic/music_library.py @@ -479,6 +479,32 @@ class MusicLibrary: # 保存更新后的配置 self.config.music_list_json = json.dumps(music_list, ensure_ascii=False) + def _resolve_play_list(self, name, create_if_missing=False): + """获取歌单列表引用,同时返回是否需要持久化自定义歌单 + + 系统/目录歌单直接返回 music_list 中的引用(无需持久化); + 自定义歌单返回 custom_play_list 中的引用(需要持久化)。 + + Args: + name: 歌单名称 + create_if_missing: 自定义歌单不存在时是否自动新建 + + Returns: + tuple: (play_list, need_save) 或 (None, False) 表示失败 + """ + custom_play_list = self.get_custom_play_list() + + # 系统/目录歌单(如"收藏"):直接操作 music_list,无需持久化 + if name in self.music_list and name not in custom_play_list: + return self.music_list[name], False + + # 自定义歌单不存在时按需新建 + if name not in custom_play_list: + if not create_if_missing or not self.play_list_add(name): + return None, False + + return custom_play_list[name], True + def play_list_add_music(self, name, music_list): """歌单新增歌曲 @@ -489,18 +515,16 @@ class MusicLibrary: Returns: bool: 是否成功 """ - custom_play_list = self.get_custom_play_list() - if name not in custom_play_list: - # 歌单不存在则新建 - if not self.play_list_add(name): - return False + play_list, need_save = self._resolve_play_list(name, create_if_missing=True) + if play_list is None: + return False - play_list = custom_play_list[name] for music_name in music_list: - if (music_name in self.all_music) and (music_name not in play_list): + if music_name in self.all_music and music_name not in play_list: play_list.append(music_name) - self.save_custom_play_list() + if need_save: + self.save_custom_play_list() return True def play_list_del_music(self, name, music_list): @@ -513,16 +537,16 @@ class MusicLibrary: Returns: bool: 是否成功 """ - custom_play_list = self.get_custom_play_list() - if name not in custom_play_list: + play_list, need_save = self._resolve_play_list(name) + if play_list is None: return False - play_list = custom_play_list[name] for music_name in music_list: if music_name in play_list: play_list.remove(music_name) - self.save_custom_play_list() + if need_save: + self.save_custom_play_list() return True # ==================== 音乐搜索 ====================