From d1b869ae432a5c9231120ffb445923f7d47f37db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Tue, 3 Sep 2024 15:55:19 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=AD=8C=E6=9B=B2?= =?UTF-8?q?=E6=94=B6=E8=97=8F=E5=8A=9F=E8=83=BD=20#87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/config.py | 6 +++++ xiaomusic/static/app.js | 3 +++ xiaomusic/xiaomusic.py | 53 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/xiaomusic/config.py b/xiaomusic/config.py index 1c2850016..b38e126a1 100644 --- a/xiaomusic/config.py +++ b/xiaomusic/config.py @@ -22,6 +22,8 @@ def default_key_word_dict(): "分钟后关机": "stop_after_minute", "播放列表": "play_music_list", "刷新列表": "gen_music_list", + "加入收藏": "add_to_favorites", + "取消收藏": "del_from_favorites", } @@ -50,6 +52,8 @@ def default_key_match_order(): "关机", "刷新列表", "播放列表", + "加入收藏", + "取消收藏", ] @@ -96,6 +100,7 @@ class Config: httpauth_password: str = os.getenv("XIAOMUSIC_HTTPAUTH_PASSWORD", "") music_list_url: str = os.getenv("XIAOMUSIC_MUSIC_LIST_URL", "") music_list_json: str = os.getenv("XIAOMUSIC_MUSIC_LIST_JSON", "") + custom_play_list_json: str = os.getenv("XIAOMUSIC_CUSTOM_PLAY_LIST_JSON", "") disable_download: bool = ( os.getenv("XIAOMUSIC_DISABLE_DOWNLOAD", "false").lower() == "true" ) @@ -153,6 +158,7 @@ def append_user_keyword(self): def init_keyword(self): self.key_match_order = default_key_match_order() + self.key_word_dict = default_key_word_dict() self.append_keyword(self.keywords_playlocal, "playlocal") self.append_keyword(self.keywords_play, "play") self.append_keyword(self.keywords_stop, "stop") diff --git a/xiaomusic/static/app.js b/xiaomusic/static/app.js index babfb5632..68d44df67 100644 --- a/xiaomusic/static/app.js +++ b/xiaomusic/static/app.js @@ -12,6 +12,9 @@ $(function(){ append_op_button_name("下一首"); append_op_button_name("关机"); + append_op_button_name("加入收藏"); + append_op_button_name("取消收藏"); + $container.append($("
")); append_op_button_name("10分钟后关机"); diff --git a/xiaomusic/xiaomusic.py b/xiaomusic/xiaomusic.py index 5fd5aa849..6a35520a2 100644 --- a/xiaomusic/xiaomusic.py +++ b/xiaomusic/xiaomusic.py @@ -454,6 +454,8 @@ def _gen_all_music_list(self): self.music_list["全部"] = list(self.all_music.keys()) + self._append_custom_play_list() + # 歌单排序 for _, play_list in self.music_list.items(): play_list.sort(key=custom_sort_key) @@ -462,6 +464,16 @@ def _gen_all_music_list(self): for device in self.devices.values(): device.update_playlist() + def _append_custom_play_list(self): + if not self.config.custom_play_list_json: + return + + try: + custom_play_list = json.loads(self.config.custom_play_list_json) + self.music_list["收藏"] = list(custom_play_list["收藏"]) + except Exception as e: + self.log.exception(f"Execption {e}") + # 给歌单里补充网络歌单 def _append_music_list(self): if not self.config.music_list_json: @@ -715,6 +727,47 @@ async def stop_after_minute(self, did="", arg1=0, **kwargs): minute = int(arg1) return await self.devices[did].stop_after_minute(minute) + # 添加歌曲到收藏列表 + async def add_to_favorites(self, did="", arg1="", **kwargs): + name = arg1 if arg1 else self.playingmusic(did) + if not name: + return + + favorites = self.music_list.get("收藏", []) + if name in favorites: + return + + favorites.append(name) + self.save_favorites(favorites) + + # 从收藏列表中移除 + async def del_from_favorites(self, did="", arg1="", **kwargs): + name = arg1 if arg1 else self.playingmusic(did) + if not name: + return + + favorites = self.music_list.get("收藏", []) + if name not in favorites: + return + + favorites.remove(name) + self.save_favorites(favorites) + + def save_favorites(self, favorites): + self.music_list["收藏"] = favorites + custom_play_list = {} + if self.config.custom_play_list_json: + custom_play_list = json.loads(self.config.custom_play_list_json) + custom_play_list["收藏"] = favorites + self.config.custom_play_list_json = json.dumps( + custom_play_list, ensure_ascii=False + ) + self.save_cur_config() + + # 更新每个设备的歌单 + for device in self.devices.values(): + device.update_playlist() + # 获取音量 async def get_volume(self, did="", **kwargs): return await self.devices[did].get_volume()