From ba65ea5b6c7a8d569ed6b709990e367a17857e0f Mon Sep 17 00:00:00 2001 From: jokinas <89495587+jokinas@users.noreply.github.com> Date: Wed, 20 May 2026 21:28:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E2=80=9C=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=BC=80=E5=90=AF=E5=A4=9A=E7=BB=93=E6=9E=9C=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E2=80=9D=E5=8A=9F=E8=83=BD=20(#881)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * style: ruff lint and format fix * fix: 恢复脚本文件的可执行权限属性 * feat: 新增多结果选择开关配置,前端页面支持开启关闭功能 --- xiaomusic/config.py | 6 ++++++ xiaomusic/device_player.py | 15 +++++++++++++++ xiaomusic/static/default/setting.html | 14 ++++++++++++++ xiaomusic/static/default/setting.js | 12 ++++++++++++ xiaomusic/static/tailwind/setting.html | 20 ++++++++++++++++++++ xiaomusic/static/tailwind/setting.js | 12 ++++++++++++ 6 files changed, 79 insertions(+) diff --git a/xiaomusic/config.py b/xiaomusic/config.py index d89c7d2..6c2f293 100644 --- a/xiaomusic/config.py +++ b/xiaomusic/config.py @@ -147,6 +147,12 @@ class Config: fuzzy_match_max_results: int = int( os.getenv("XIAOMUSIC_FUZZY_MATCH_MAX_RESULTS", "100") ) + # 是否开启多结果选择功能(关闭后按 multi_result_action 配置处理) + enable_multi_result_selection: bool = ( + os.getenv("XIAOMUSIC_ENABLE_MULTI_RESULT_SELECTION", "true").lower() == "true" + ) + # 多结果处理方式: random=随机播放, first=从第一个开始播放 + multi_result_action: str = os.getenv("XIAOMUSIC_MULTI_RESULT_ACTION", "random") stop_tts_msg: str = os.getenv("XIAOMUSIC_STOP_TTS_MSG", "收到,再见") enable_config_example: bool = False diff --git a/xiaomusic/device_player.py b/xiaomusic/device_player.py index b613490..5eb1d56 100644 --- a/xiaomusic/device_player.py +++ b/xiaomusic/device_player.py @@ -361,6 +361,21 @@ class XiaoMusicDevice: await self.handle_selection(auto_index) return + if not self.config.enable_multi_result_selection: + action = self.config.multi_result_action + if action == "first": + selected_index = 1 + else: + selected_index = random.randint(1, len(names)) + selected_name = names[selected_index - 1] + self.log.info( + f"多结果选择已关闭,按'{action}'处理,选择第{selected_index}个: {selected_name}" + ) + self._pending_selection = names + self._pending_selection_count = len(names) + await self._playmusic(selected_name) + return + self._pending_selection = names self._pending_selection_count = len(names) selection_text = ( diff --git a/xiaomusic/static/default/setting.html b/xiaomusic/static/default/setting.html index 48e1d04..851d980 100644 --- a/xiaomusic/static/default/setting.html +++ b/xiaomusic/static/default/setting.html @@ -268,6 +268,20 @@ + + + + + diff --git a/xiaomusic/static/default/setting.js b/xiaomusic/static/default/setting.js index 0972df0..ac9333a 100644 --- a/xiaomusic/static/default/setting.js +++ b/xiaomusic/static/default/setting.js @@ -201,6 +201,9 @@ $(function () { } autoSelectOne(); + if (typeof toggleMultiResultAction === "function") { + toggleMultiResultAction(); + } }); $("#update-devices").on("click", function () { @@ -641,4 +644,13 @@ $(function () { e.preventDefault(); } }); + + window.toggleMultiResultAction = function () { + var val = $("#enable_multi_result_selection").val(); + if (val === "false") { + $("#multi_result_action_row").show(); + } else { + $("#multi_result_action_row").hide(); + } + }; }); diff --git a/xiaomusic/static/tailwind/setting.html b/xiaomusic/static/tailwind/setting.html index 6b34330..4a04470 100644 --- a/xiaomusic/static/tailwind/setting.html +++ b/xiaomusic/static/tailwind/setting.html @@ -437,6 +437,26 @@ +
+ + +
+ diff --git a/xiaomusic/static/tailwind/setting.js b/xiaomusic/static/tailwind/setting.js index 9077f88..57fb4e2 100644 --- a/xiaomusic/static/tailwind/setting.js +++ b/xiaomusic/static/tailwind/setting.js @@ -88,6 +88,9 @@ $(function () { } autoSelectOne(); + if (typeof toggleMultiResultAction === "function") { + toggleMultiResultAction(); + } }); $(".save-button").on("click", () => { @@ -119,6 +122,15 @@ $(function () { }); }); + window.toggleMultiResultAction = function () { + var val = $("#enable_multi_result_selection").val(); + if (val === "false") { + $("#multi_result_action_row").show(); + } else { + $("#multi_result_action_row").hide(); + } + }; + $("#get_music_list").on("click", () => { var music_list_url = $("#music_list_url").val(); console.log("music_list_url", music_list_url);