From 4118c472a1d856bdac87f1c6abae603db305ef42 Mon Sep 17 00:00:00 2001 From: boluofan <40459801+boluofan@users.noreply.github.com> Date: Wed, 25 Mar 2026 17:16:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=AB=98=E7=BA=A7=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=EF=BC=9A=E5=8F=A3=E4=BB=A4=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E5=81=8F=E5=A5=BD=E8=AE=BE=E7=BD=AE=EF=BC=8C=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E8=AF=AD=E9=9F=B3=E6=8C=87=E4=BB=A4=E6=92=AD=E6=94=BE=E6=97=B6?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=B9=B3=E5=8F=B0=E3=80=82=20(#804)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/api/routers/plugin.py | 32 +++++++++ xiaomusic/js_plugin_manager.py | 80 ++++++++++++++++++---- xiaomusic/online_music.py | 11 ++- xiaomusic/plugins-config-example.json | 6 +- xiaomusic/static/onlineSearch/setting.html | 80 +++++++++++++++++++++- 5 files changed, 186 insertions(+), 23 deletions(-) diff --git a/xiaomusic/api/routers/plugin.py b/xiaomusic/api/routers/plugin.py index 7758f51..737204e 100644 --- a/xiaomusic/api/routers/plugin.py +++ b/xiaomusic/api/routers/plugin.py @@ -305,6 +305,38 @@ async def update_advanced_config(request: Request): return {"success": False, "error": str(e)} +@router.get("/api/box-play-platform/load") +def get_box_play_platform(): + """获取音响口令搜索平台偏好""" + try: + platform = xiaomusic.js_plugin_manager.get_box_play_platform_preference() + platforms = xiaomusic.js_plugin_manager.get_platforms() + return { + "success": True, + "data": { + "platform": platform, + "platforms": platforms, + }, + } + except Exception as e: + return {"success": False, "error": str(e)} + + +@router.post("/api/box-play-platform/update") +async def update_box_play_platform(request: Request): + """更新口令搜索平台偏好""" + try: + request_json = await request.json() + platform = request_json.get("platform") + + if platform is None: + return {"success": False, "error": "Missing parameters"} + + return xiaomusic.js_plugin_manager.update_box_play_platform( platform) + except Exception as e: + return {"success": False, "error": str(e)} + + # ----------------------------密码验证接口--------------------------------------- @router.get("/api/password/check") def check_password_required(): diff --git a/xiaomusic/js_plugin_manager.py b/xiaomusic/js_plugin_manager.py index 567d399..fc6dc9b 100644 --- a/xiaomusic/js_plugin_manager.py +++ b/xiaomusic/js_plugin_manager.py @@ -387,10 +387,17 @@ class JSPluginManager: result_data = await self.simple_async_get( url=lx_server_info.get("base_url") + "/music/config" ) - if result_data and "player.enableAuth" in result_data and "user.enablePublicRestriction" in result_data: + if ( + result_data + and "player.enableAuth" in result_data + and "user.enablePublicRestriction" in result_data + ): return {"success": True, "data": "LX Server接口正常!"} else: - return {"success": False, "error": "不是合法的LX Server接口,请确认后重新配置!"} + return { + "success": False, + "error": "不是合法的LX Server接口,请确认后重新配置!", + } else: return {"success": False, "error": "LX Server接口未配置!"} except Exception as e: @@ -486,6 +493,51 @@ class JSPluginManager: self.log.error(f"Failed to update LXServer platforms: {e}") return {"success": False, "error": str(e)} + def get_box_play_platform_preference(self) -> str: + """获取用户配置的口令搜索偏好""" + try: + config_data = self._get_config_data() + if self.is_lx_server(): + lx_server_info = config_data.get("lx_server_info", {}) + return lx_server_info.get("box_play_platform", "all") + else: + music_free_info = config_data.get("music_free_info", {}) + return music_free_info.get("box_play_platform", "all") + except Exception: + return "all" + + def update_box_play_platform(self, platform: str) -> dict[str, Any]: + """更新平台偏好设置 + Args: + platform: 偏好的平台标识,"all"表示聚合搜索 + Returns: + dict: 更新结果字典 + """ + try: + if os.path.exists(self.plugins_config_path): + with open(self.plugins_config_path, encoding="utf-8") as f: + config_data = json.load(f) + + if self.is_lx_server(): + lx_server_info = config_data.get("lx_server_info", {}) + lx_server_info["box_play_platform"] = platform + config_data["lx_server_info"] = lx_server_info + else: + music_free_info = config_data.get("music_free_info", {}) + music_free_info["box_play_platform"] = platform + config_data["music_free_info"] = music_free_info + + with open(self.plugins_config_path, "w", encoding="utf-8") as f: + json.dump(config_data, f, ensure_ascii=False, indent=2) + + self._invalidate_config_cache() + return {"success": True} + else: + return {"success": False, "error": "Config file not found"} + except Exception as e: + self.log.error(f"Failed to update box play platform: {e}") + return {"success": False, "error": str(e)} + def get_plugin_source(self) -> dict[str, Any]: """获取插件源配置信息 Returns: @@ -872,30 +924,28 @@ class JSPluginManager: self.log.error(f"Failed to read enabled plugins from config: {e}") return result - def is_lx_server(self) -> bool: - """判定是否使用lx_server接口""" + def _get_api_type(self) -> int: + """获取接口类型:1=mf_plugins,2=lx_server""" try: config_data = self._get_config_data() if config_data: back_conf_info = config_data.get("back_conf_info", {}) - # 1:mf_plugins,2:lx_server - api_type = back_conf_info.get("api_type", 1) - return api_type == 2 - else: - return False - except Exception as e: - self.log.error(f"Failed to read platforms from config: {e}") - return False + return back_conf_info.get("api_type", 1) + return 1 + except Exception: + return 1 + + def is_lx_server(self) -> bool: + """判定是否使用lx_server接口""" + return self._get_api_type() == 2 def get_platforms(self) -> dict[Any, Any]: """获取音乐平台列表""" try: self._invalidate_config_cache() + api_type = self._get_api_type() config_data = self._get_config_data() if config_data: - back_conf_info = config_data.get("back_conf_info", {}) - # 1:mf_plugins,2:lx_server - api_type = back_conf_info.get("api_type", 1) if api_type == 2: lx_server_info = config_data.get("lx_server_info", {}) platforms = lx_server_info.get("platforms", {}) diff --git a/xiaomusic/online_music.py b/xiaomusic/online_music.py index 4a1abc8..b456664 100644 --- a/xiaomusic/online_music.py +++ b/xiaomusic/online_music.py @@ -358,8 +358,10 @@ class OnlineMusicService: song_name = artist_song_list[0] await self.xiaomusic.do_play_music_list(did, list_name, song_name) else: + # 获取用户配置的平台偏好 + user_preference = self.js_plugin_manager.get_box_play_platform_preference() # 获取歌曲列表 - result = await self.get_music_list_online(keyword=name, limit=10) + result = await self.get_music_list_online(plugin=user_preference, keyword=name, limit=10) self.log.info(f"在线搜索歌手的歌曲列表: {result}") if result.get("success") and result.get("total") > 0: @@ -380,9 +382,11 @@ class OnlineMusicService: async def add_singer_song(self, list_name, name): try: + # 获取用户配置的平台偏好 + user_preference = self.js_plugin_manager.get_box_play_platform_preference() self.log.info(f"追加歌手歌曲,当前页码: {self._singer_add_page}") result = await self.get_music_list_online( - keyword=name, page=self._singer_add_page, limit=10 + plugin=user_preference, keyword=name, page=self._singer_add_page, limit=10 ) if result.get("success") and result.get("total") > 0: self._handle_music_list(result.get("data"), list_name, True) @@ -545,8 +549,9 @@ class OnlineMusicService: # 在线搜索搜索最符合的一首歌并播放 async def search_top_one_play(self, did, search_key, name): try: + user_preference = self.js_plugin_manager.get_box_play_platform_preference() # 获取歌曲列表 - result = await self.get_music_list_online(keyword=name, limit=10) + result = await self.get_music_list_online(plugin=user_preference, keyword=name, limit=10) if result.get("success") and result.get("total") > 0: # 打印输出 result.data diff --git a/xiaomusic/plugins-config-example.json b/xiaomusic/plugins-config-example.json index 05e8cfe..6b1b272 100644 --- a/xiaomusic/plugins-config-example.json +++ b/xiaomusic/plugins-config-example.json @@ -18,11 +18,13 @@ "kw": "小蜗音乐", "wy": "小芸音乐", "mg": "小蜜音乐" - } + }, + "box_play_platform": "all" }, "music_free_info": { "enabled_plugins": [], "plugin_source": {"source_url": ""}, - "plugins_info": [] + "plugins_info": [], + "box_play_platform": "all" } } diff --git a/xiaomusic/static/onlineSearch/setting.html b/xiaomusic/static/onlineSearch/setting.html index be28ed2..ff56f4c 100644 --- a/xiaomusic/static/onlineSearch/setting.html +++ b/xiaomusic/static/onlineSearch/setting.html @@ -222,7 +222,7 @@ .modal-body .config-card-title { font-weight: 600; - font-size: 15px; + font-size: 18px; color: #333; margin-bottom: 12px; padding-bottom: 10px; @@ -1031,12 +1031,27 @@
-
模型
+
模型名称
+ +
+
偏好设置
+
+
口令搜索偏好
+
+ + 口令搜索时的偏好平台,默认聚合搜索是搜索所有 + + +
+
+