From 18014eb2b961ad2b8e9c8a1aeef72bed6dd79491 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Thu, 3 Sep 2026 23:48:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(ncm):=20=E8=A1=A5play=5Fmode=E6=8C=81?= =?UTF-8?q?=E4=B9=85=E5=8C=96=E5=AE=9A=E4=B9=89(appstate=5Fapply=5Fplay=5F?= =?UTF-8?q?mode/ncm=5Fmode=5Fname,=E5=90=8Cagent-392=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F)=20=E2=80=94=20ncm=E9=93=BE=E9=80=9A?= =?UTF-8?q?=E5=BF=85=E9=9C=80,=E4=B8=8EM6.32=E4=B8=8A=E5=8D=A1=E4=BA=8C?= =?UTF-8?q?=E8=BF=9B=E5=88=B6=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patch_v2/ncm_app/app/logic/appstate.c | 16 ++++++++++++++++ patch_v2/ncm_app/app/ui/chrome.c | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/patch_v2/ncm_app/app/logic/appstate.c b/patch_v2/ncm_app/app/logic/appstate.c index 18ee0de..d263710 100644 --- a/patch_v2/ncm_app/app/logic/appstate.c +++ b/patch_v2/ncm_app/app/logic/appstate.c @@ -133,6 +133,11 @@ void appstate_load_settings(void) if (g_st.player_bg_mode != NCM_BG_DEFAULT && g_st.player_bg_mode != NCM_BG_POWER_SAVE) g_st.player_bg_mode = NCM_BG_DEFAULT; + /* §NEW 播放模式三态:默认列表循环;越界回落列表循环 */ + g_st.play_mode = meow_config_int("ncm.play_mode", NCM_MODE_LISTLOOP); + if (g_st.play_mode < NCM_MODE_SHUFFLE || g_st.play_mode >= NCM_MODE_COUNT) + g_st.play_mode = NCM_MODE_LISTLOOP; + ncm_cache_set_limit_gb(&g_st.ctx.cache, g_st.cache_limit_gb); g_st.ctx.default_level = g_st.level; } @@ -146,6 +151,8 @@ void appstate_save_settings(void) meow_config_set("ncm.level", b); snprintf(b, sizeof b, "%d", g_st.player_bg_mode); meow_config_set("ncm.player_bg_mode", b); + snprintf(b, sizeof b, "%d", g_st.play_mode); + meow_config_set("ncm.play_mode", b); ncm_cache_set_limit_gb(&g_st.ctx.cache, g_st.cache_limit_gb); g_st.ctx.default_level = g_st.level; /* 手动调低上限时立即按 LRU 淘汰(超上限删最旧);未超限则为无操作 */ @@ -764,6 +771,15 @@ void autoplay_maybe(void) void appstate_set_queue(int src) { g_st.queue_src = src; } int appstate_get_queue(void) { return g_st.queue_src; } +/* §NEW:设播放模式并落盘(「退出后记住模式」)。仅在 UI 线程(play 模式三态按钮点击)调用; + * play 线程读的是 g_play.play_mode(player_manager_set_play_mode 已同步运行时态)。 */ +void appstate_apply_play_mode(int m) +{ + if (m < NCM_MODE_SHUFFLE || m >= NCM_MODE_COUNT) return; + g_st.play_mode = m; + appstate_save_settings(); +} + int appstate_queue_count(void) { int c; diff --git a/patch_v2/ncm_app/app/ui/chrome.c b/patch_v2/ncm_app/app/ui/chrome.c index 41fade2..d0c8cac 100644 --- a/patch_v2/ncm_app/app/ui/chrome.c +++ b/patch_v2/ncm_app/app/ui/chrome.c @@ -122,6 +122,17 @@ const char *ncm_level_name(int lv) } } +/* §NEW 播放模式短名(三态):随机 / 列表 / 单曲(播放页模式钮文案,2 字居中)。 */ +const char *ncm_mode_name(int m) +{ + switch (m) { + case NCM_MODE_SHUFFLE: return "随机"; + case NCM_MODE_SINGLE: return "单曲"; + case NCM_MODE_LISTLOOP: /* fallthrough */ + default: return "列表"; + } +} + const char *ncm_level_spec(int lv) { switch (lv) {