Skip to content

fix读取嵌入封面异常. 解决方案:始终优先使用嵌入式封面,再回退到 MediaStore 和网络#392

Open
xgkk wants to merge 1 commit into
rRemix:composefrom
xgkk:fix/embedded-cover-priority
Open

fix读取嵌入封面异常. 解决方案:始终优先使用嵌入式封面,再回退到 MediaStore 和网络#392
xgkk wants to merge 1 commit into
rRemix:composefrom
xgkk:fix/embedded-cover-priority

Conversation

@xgkk

@xgkk xgkk commented Jun 1, 2026

Copy link
Copy Markdown
  • 新增 hasAnyLocalCover() 快速检查音频文件嵌入式封面
  • fetch(song) 始终优先尝试嵌入式封面(不受 ignoreMediaStore 控制)
  • MediaStore 仅当 ignoreMediaStore=false 且 albumId>0 时使用
  • 确保所有歌曲都能走到网络下载路径

- 新增 hasAnyLocalCover() 快速检查音频文件嵌入式封面
- fetch(song) 始终优先尝试嵌入式封面(不受 ignoreMediaStore 控制)
- MediaStore 仅当 ignoreMediaStore=false 且 albumId>0 时使用
- 确保所有歌曲都能走到网络下载路径
@xgkk xgkk changed the title 始终优先使用嵌入式封面,再回退到 MediaStore 和网络 fix读取嵌入封面异常. 解决方案:始终优先使用嵌入式封面,再回退到 MediaStore 和网络 Jun 1, 2026
@xgkk

xgkk commented Jun 1, 2026

Copy link
Copy Markdown
Author

before
微信图片_1

now:
微信图片_2

@rRemix

rRemix commented Jun 2, 2026

Copy link
Copy Markdown
Owner

直接用 hasAnyLocalCover() 预判,会有两个问题:

1.EmbeddedFetcher 原本不只读 embeddedPicture,还会 fallback 到 jaudiotagger、同目录 cover.jpg/folder.jpg 等。现在如果 hasAnyLocalCover() 返回 false,这些 fallback 路径就不会被尝试了,虽然实际这个实际的用处可能存疑吧。
2.有内嵌封面时会读两次:hasAnyLocalCover() 加载一次,真正加载 EmbeddedFetcher 时再读一次。

更理想的做法可能是让封面来源按 embedded://song.data -> MediaStore -> 网络 依次尝试:UriFetcher 不再只返回单个 Uri,而是返回候选来源;APlayerFetcher 按顺序加载,前一个失败再试下一个。这样 ignoreMediaStore 也只需要控制 MediaStore 是否参与 fallback。

另外 ignoreMediaStore 这个名字现在语义也有点不准确。

@rRemix

rRemix commented Jun 2, 2026

Copy link
Copy Markdown
Owner

看你好不好改,改动还是比较大,可以借助下AI或者不行可以我来改 @xgkk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants