Skip to content

Commit e68b873

Browse files
committed
🐞 fix: 修复本地封面无法显示
Fixes #965
1 parent 3e46056 commit e68b873

2 files changed

Lines changed: 11 additions & 34 deletions

File tree

src/core/player/MediaSessionManager.ts

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { isElectron } from "@/utils/env";
33
import { getPlaySongData } from "@/utils/format";
44
import { msToS } from "@/utils/time";
55
import type { SystemMediaEvent } from "@emi";
6-
import axios from "axios";
76
import { throttle } from "lodash-es";
87
import { usePlayerController } from "./PlayerController";
98
import {
@@ -113,7 +112,6 @@ class MediaSessionManager {
113112
? "Track"
114113
: "None";
115114
sendMediaPlayMode(shuffle, repeat);
116-
117115
player.syncMediaPlayMode();
118116

119117
// 同步初始播放速率
@@ -147,47 +145,35 @@ class MediaSessionManager {
147145

148146
/**
149147
* 更新元数据
150-
* @param coverBuffer 封面数据(可选,避免重复下载)
151148
*/
152-
public async updateMetadata(coverBuffer?: Uint8Array) {
149+
public async updateMetadata() {
153150
if (!("mediaSession" in navigator) && !isElectron) return;
154-
155151
const musicStore = useMusicStore();
156152
const settingStore = useSettingStore();
157153
const song = getPlaySongData();
158-
159154
if (!song) return;
160-
161155
if (this.metadataAbortController) {
162156
this.metadataAbortController.abort();
163157
}
164-
165158
this.metadataAbortController = new AbortController();
166159
const { signal } = this.metadataAbortController;
167-
168160
const metadata = this.buildMetadata(song);
169-
170161
// 原生插件
171162
if (this.shouldUseNativeMedia() && settingStore.smtcOpen) {
172163
try {
164+
let coverBuffer: Uint8Array | undefined;
173165
// 获取封面数据
174166
if (
175167
!coverBuffer &&
176168
metadata.coverUrl &&
177-
(metadata.coverUrl.startsWith("http") || metadata.coverUrl.startsWith("blob:"))
169+
(metadata.coverUrl.startsWith("http") ||
170+
metadata.coverUrl.startsWith("blob:") ||
171+
metadata.coverUrl.startsWith("file://"))
178172
) {
179173
try {
180-
if (metadata.coverUrl.startsWith("blob:")) {
181-
const resp = await fetch(metadata.coverUrl, { signal });
182-
const buf = await resp.arrayBuffer();
183-
coverBuffer = new Uint8Array(buf);
184-
} else {
185-
const resp = await axios.get(metadata.coverUrl, {
186-
responseType: "arraybuffer",
187-
signal,
188-
});
189-
coverBuffer = new Uint8Array(resp.data);
190-
}
174+
const resp = await fetch(metadata.coverUrl, { signal });
175+
const buf = await resp.arrayBuffer();
176+
coverBuffer = new Uint8Array(buf);
191177
} catch {
192178
// 忽略下载失败
193179
}
@@ -203,7 +189,7 @@ class MediaSessionManager {
203189
ncmId: typeof song.id === "number" ? song.id : undefined,
204190
});
205191
} catch (e) {
206-
if (!axios.isCancel(e)) {
192+
if (!(e instanceof DOMException && e.name === "AbortError")) {
207193
console.error("[Media] 更新元数据失败", e);
208194
}
209195
} finally {

src/core/player/PlayerController.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -611,25 +611,16 @@ class PlayerController {
611611
const blobURLManager = useBlobURLManager();
612612
// Blob URL 清理
613613
const oldCover = musicStore.playSong.cover;
614-
let shouldFetchCover = !oldCover || oldCover === "/images/song.jpg?asset";
615-
616614
if (oldCover && oldCover.startsWith("blob:")) {
617615
blobURLManager.revokeBlobURL(musicStore.playSong.path || "");
618-
shouldFetchCover = true;
619616
}
620-
621-
let coverBuffer: Uint8Array | undefined;
622-
623617
// 获取封面数据
624-
if (shouldFetchCover) {
618+
if (!oldCover || oldCover === "/images/song.jpg?asset") {
625619
console.log("获取封面数据");
626620
const coverData = await window.electron.ipcRenderer.invoke("get-music-cover", path);
627621
if (coverData) {
628622
const blobURL = blobURLManager.createBlobURL(coverData.data, coverData.format, path);
629623
if (blobURL) musicStore.playSong.cover = blobURL;
630-
if (coverData.data) {
631-
coverBuffer = new Uint8Array(coverData.data);
632-
}
633624
} else {
634625
musicStore.playSong.cover = "/images/song.jpg?asset";
635626
}
@@ -640,7 +631,7 @@ class PlayerController {
640631
// 获取主色
641632
getCoverColor(musicStore.playSong.cover);
642633
// 更新媒体会话
643-
mediaSessionManager.updateMetadata(coverBuffer);
634+
mediaSessionManager.updateMetadata();
644635
// 更新任务栏歌词
645636
const { name, artist } = getPlayerInfoObj() || {};
646637
playerIpc.sendTaskbarMetadata({

0 commit comments

Comments
 (0)