ncm search: 历史+单曲/歌单分类+分页+误触修复+不覆写歌单上下文 (§23)
- 搜索历史:进页自动弹键盘;meow_config 持久化 ≤12 去重最新在前;空态=历史列表(点搜/左滑删/清空) - 结果分类单曲/歌单页签:独立结果集+独立滚动;歌单行进详情(playlist_open_pl);单曲行播放 - 触底分页:offset 累加 limit=30/页 cloudsearch 同参数;每类各记 offset - 误触抑制:g_press_row + g_press_delta>10(对齐 home/playlist §13.3) - 结果改独立数组(不写 g_st.songs[]);播放搜索单曲建搜索队列(queue_src=SEARCH),不弄丢歌单窗口 - core cloudsearch 扩展 type/offset/limit/total + 歌单解析 - bench/search_sim.c 离线回归(历史/独立集/翻页 offset/队列上下文);host searchtap 误触自检 验证:mipsel -Wall -Wextra 0 warning;core host/mipsel PASS;search_sim PASS; 宿主离屏 search(单曲)/searchpl(歌单)/searchhist(空态历史)/searchtap(误触) 均正常;0 真实 NCM 请求。
This commit is contained in:
1 parent
d4928224a5
commit
1e97dbf54a
15 files changed
+1152
-121
No files matched your search
@@ -71,7 +71,7 @@ static int g_lyr_meta_y; /* 顶部元信息 y */
|
||||
static int cur_song(void)
|
||||
{
|
||||
int c = player_manager_playing_song();
|
||||
return (c >= 0 && c < g_st.track_ids_count) ? c : -1;
|
||||
return (c >= 0 && c < appstate_queue_count()) ? c : -1; /* §23:按队列来源界 */
|
||||
}
|
||||
|
||||
/* 当前播放曲元数据(§17):优先播放快照(窗口无关);快照未就绪时退窗口拷贝。 */
|
||||
@@ -529,6 +529,7 @@ void player_on_swipe(int dir, int dist)
|
||||
void player_play_song(int idx)
|
||||
{
|
||||
if (idx < 0 || idx >= g_st.track_ids_count) return;
|
||||
g_st.queue_src = NCM_QUEUE_PLAYLIST; /* §23:歌单窗口队列 */
|
||||
/* 黑胶封面用真实专辑图(song_detail 的 al.picUrl,经 ncm_cache 缓存/限幅);
|
||||
* 滑窗未物化(占位行直点)时回落歌单封面,元数据由播放线程物化后快照接管(§17)。
|
||||
* §18:g_st.cover_url 只作「歌单封面兜底」。 */
|
||||
@@ -542,6 +543,22 @@ void player_play_song(int idx)
|
||||
meow_view_page_push(ACT_PLAYER);
|
||||
}
|
||||
|
||||
/* 搜索单曲起播(§23):走搜索队列(search_songs[]),不覆写歌单窗口;
|
||||
* 上/下一首在搜索结果集内循环,回退原歌单时窗口上下文不丢。 */
|
||||
void player_play_search_song(int i)
|
||||
{
|
||||
if (i < 0 || i >= g_st.search_song_count) return;
|
||||
g_st.queue_src = NCM_QUEUE_SEARCH;
|
||||
ncm_song_t s;
|
||||
if (appstate_search_song(i, &s) != 0) return;
|
||||
const char *cover = s.al_pic[0] ? s.al_pic : g_st.cover_url;
|
||||
player_manager_play(i);
|
||||
appstate_set_playing_song(i, NULL);
|
||||
cover_request(cover);
|
||||
g_ppage = 0;
|
||||
meow_view_page_push(ACT_PLAYER);
|
||||
}
|
||||
|
||||
void player_pause_toggle(int on)
|
||||
{
|
||||
if (player_manager_state() == NCM_PC_PAUSED) player_manager_pause(0);
|
||||
|
||||
Reference in new issue
Block a user