fix(ncm): 歌单切换两bug — ①暂停态跨歌单点歌旧信息(play同曲护栏改按曲目id判同曲而非裸队列下标,切歌单后同下标换歌被吞play→修play_is_same_song) ②切歌单封面残留(playlist_tick补cover_changed/ack+invalidate重画头块);附带占位行cover_request野id修复;宿主P15/covswitch PASS,热更ncm
This commit is contained in:
1 parent
62ec405dca
commit
6eccb17f9b
5 files changed
+150
-17
No files matched your search
@@ -743,13 +743,15 @@ void player_play_song(int idx)
|
||||
g_st.queue_src = NCM_QUEUE_PLAYLIST; /* §23:歌单窗口队列 */
|
||||
/* 黑胶封面用真实专辑图(song_detail 的 al.picUrl,经 ncm_cache 缓存/限幅);
|
||||
* 滑窗未物化(占位行直点)时回落歌单封面,元数据由播放线程物化后快照接管(§17)。
|
||||
* §18:g_st.cover_url 只作「歌单封面兜底」。 */
|
||||
* §18:g_st.cover_url 只作「歌单封面兜底」。占位行直点(appstate_song_copy 失败)时
|
||||
* s 未初始化,**不能**把 s.id 传给 cover_request(会带出一段野曲 id 参与兜底判冷却)——
|
||||
* 仅物化成功才带曲目 id,否则 NULL(歌单封面,不带兜底)。 */
|
||||
ncm_song_t s;
|
||||
const char *cover = (appstate_song_copy(idx, &s) == 0 && s.al_pic[0])
|
||||
? s.al_pic : g_st.cover_url;
|
||||
int have_s = (appstate_song_copy(idx, &s) == 0);
|
||||
const char *cover = (have_s && s.al_pic[0]) ? s.al_pic : g_st.cover_url;
|
||||
player_manager_play(idx);
|
||||
appstate_set_playing_song(idx, NULL);
|
||||
cover_request(cover, s.id); /* 曲目专辑封面:带 id,死链时 song/detail 兜底(REPORT §NEW 任务1) */
|
||||
cover_request(cover, have_s ? s.id : NULL);
|
||||
g_ppage = 0; /* 新曲 → 回封面页 */
|
||||
meow_view_page_push(ACT_PLAYER);
|
||||
}
|
||||
|
||||
@@ -386,6 +386,14 @@ void playlist_refresh(void)
|
||||
void playlist_tick(uint64_t now)
|
||||
{
|
||||
(void)now;
|
||||
/* 歌单头块封面跨页同步:全局单封面(与播放页/mini 栏共享)由 cover worker 异步换入,
|
||||
* 本页须判 cover_changed 并重画头块封面带——否则切歌单后(或从播放页回退时)头块永远
|
||||
* 停留上一张(歌单封面不随切换刷新,实机 Bug1:切到 B 顶图仍是 A 的)。仅在播放页 tick
|
||||
* 消费 cover_ack 是不够的(该页 inactive 不跑);此处 play 页活跃时消费并失效封面带。 */
|
||||
if (cover_changed()) {
|
||||
cover_ack();
|
||||
meow_ui_invalidate(r_cov.x, r_cov.y, r_cov.w, r_cov.h);
|
||||
}
|
||||
if (!g_plthr_on) return;
|
||||
if (g_plgen == g_placked) return;
|
||||
g_placked = g_plgen;
|
||||
|
||||
Reference in new issue
Block a user