Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 25 additions & 9 deletions app/src/main/java/remix/myplayer/glide/UriFetcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package remix.myplayer.glide

import android.content.ContentUris
import android.content.Context
import android.media.MediaMetadataRetriever
import android.net.Uri
import android.provider.MediaStore.Audio
import androidx.core.net.toUri
Expand Down Expand Up @@ -122,23 +123,21 @@ class UriFetcher @Inject constructor(
}
}
if (song.isLocal()) { // 仅本地歌曲
if (song.albumId <= 0 || song.id <= 0) {
return Uri.EMPTY
// 1. 始终优先尝试嵌入式封面(直接从音频文件读取,无需 albumId)
if (song.data.isNotEmpty() && hasAnyLocalCover(song.data)) {
return (PREFIX_EMBEDDED + song.data).toUri()
}
// 自定义封面
// val customArtFile = getCustomThumbIfExist(song.albumId, Constants.ALBUM)
// if (customArtFile != null) {
// return Uri.fromFile(customArtFile)
// }

// 内置
if (ignoreMediaStore()) {
val songs = songRepo.getSongs(Audio.Media._ID + "=" + song.id, null)
if (songs.isNotEmpty()) {
return (PREFIX_EMBEDDED + songs[0].data).toUri()
// 2. MediaStore 封面(仅当未禁用 MediaStore 且 albumId 有效时)
if (!ignoreMediaStore() && song.albumId > 0 && song.id > 0) {
if (isAlbumThumbExistInMediaCache(song.artUri)) {
return song.artUri
}
} else if (isAlbumThumbExistInMediaCache(song.artUri)) {
return song.artUri
}
}

Expand Down Expand Up @@ -382,6 +381,23 @@ class UriFetcher @Inject constructor(
return null
}

/**
* 快速检查音频文件是否存在嵌入式封面图
*/
private fun hasAnyLocalCover(filePath: String): Boolean {
try {
val retriever = MediaMetadataRetriever()
try {
retriever.setDataSource(filePath)
return retriever.embeddedPicture != null
} finally {
retriever.release()
}
} catch (_: Exception) {
}
return false
}

private fun getSearchKey(model: Any): String? {
return SearchKeyUtil.getSearchKeys(model).firstOrNull()?.value
}
Expand Down