修复当前播放的音乐记录置底
This commit is contained in:
@@ -15,7 +15,7 @@ function toHistoryRecord(input: any, previous?: MusicV2HistoryRecord): MusicV2Hi
|
||||
lastPlayedAt: Number(input.lastPlayedAt ?? input.last_played_at ?? now),
|
||||
playCount: Number(input.playCount ?? input.play_count ?? ((previous?.playCount || 0) + 1)),
|
||||
lastQuality: input.lastQuality || input.last_quality || previous?.lastQuality,
|
||||
createdAt: Number(input.createdAt ?? input.created_at ?? previous?.createdAt ?? now),
|
||||
createdAt: Number(previous?.createdAt ?? input.createdAt ?? input.created_at ?? now),
|
||||
updatedAt: now,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -407,6 +407,7 @@ export default function MusicPage() {
|
||||
playProgressSec: playTime,
|
||||
lastPlayedAt,
|
||||
lastQuality: quality,
|
||||
createdAt: record.timestamp,
|
||||
}),
|
||||
});
|
||||
};
|
||||
@@ -743,6 +744,7 @@ export default function MusicPage() {
|
||||
lastPlayedAt: baseTime + i,
|
||||
playCount: 1,
|
||||
lastQuality: quality,
|
||||
createdAt: baseTime + i,
|
||||
}));
|
||||
|
||||
await fetch('/api/music/v2/history', {
|
||||
@@ -930,6 +932,7 @@ export default function MusicPage() {
|
||||
lastPlayedAt: baseTime + i,
|
||||
playCount: 1,
|
||||
lastQuality: quality,
|
||||
createdAt: baseTime + i,
|
||||
}));
|
||||
|
||||
// 一次性批量添加所有歌曲
|
||||
@@ -1131,8 +1134,10 @@ export default function MusicPage() {
|
||||
setShowPlayer(true);
|
||||
setLyrics([]); // 清空旧歌词
|
||||
|
||||
// 添加到播放记录和播放列表
|
||||
const record: PlayRecord = {
|
||||
// 添加到播放记录和播放列表。timestamp 表示入队时间,不能在再次播放时刷新,
|
||||
// 否则会破坏按 createdAt/timestamp 维护的播放队列顺序。
|
||||
const existingRecord = playRecords.find(r => r.platform === platform && r.id === song.id);
|
||||
const record: PlayRecord = existingRecord || {
|
||||
platform: platform,
|
||||
id: song.id,
|
||||
playTime: 0, // 初始播放时间
|
||||
@@ -1146,11 +1151,11 @@ export default function MusicPage() {
|
||||
setPlayRecords(prev => {
|
||||
const existingIndex = prev.findIndex(r => r.platform === record.platform && r.id === record.id);
|
||||
if (existingIndex >= 0) {
|
||||
// 记录已存在,更新时间戳但不重置播放时间
|
||||
// 记录已存在:保持原位置和原 timestamp,只补齐可能变化的时长信息。
|
||||
const updated = [...prev];
|
||||
updated[existingIndex] = {
|
||||
...updated[existingIndex],
|
||||
timestamp: Date.now(),
|
||||
duration: updated[existingIndex].duration || song.duration || 0,
|
||||
};
|
||||
return updated;
|
||||
} else {
|
||||
|
||||
+1
-1
@@ -749,7 +749,7 @@ export class D1Storage implements IStorage {
|
||||
try {
|
||||
const results = await this.db
|
||||
// 按队列顺序返回;当前播放项由最大 last_played_at 决定
|
||||
.prepare('SELECT * FROM music_v2_history WHERE username = ? ORDER BY created_at ASC, last_played_at ASC')
|
||||
.prepare('SELECT * FROM music_v2_history WHERE username = ? ORDER BY created_at ASC, id ASC')
|
||||
.bind(userName)
|
||||
.all();
|
||||
|
||||
|
||||
@@ -1404,7 +1404,7 @@ export class PostgresStorage implements IStorage {
|
||||
try {
|
||||
const results = await this.db
|
||||
// 按队列顺序返回;当前播放项由最大 last_played_at 决定
|
||||
.prepare('SELECT * FROM music_v2_history WHERE username = $1 ORDER BY created_at ASC, last_played_at ASC')
|
||||
.prepare('SELECT * FROM music_v2_history WHERE username = $1 ORDER BY created_at ASC, id ASC')
|
||||
.bind(userName)
|
||||
.all();
|
||||
|
||||
|
||||
@@ -807,11 +807,12 @@ export abstract class BaseRedisStorage implements IStorage {
|
||||
return Object.values(rows || {})
|
||||
.filter(Boolean)
|
||||
.map(value => JSON.parse(value as string) as MusicV2HistoryRecord)
|
||||
// 按队列顺序返回;当前播放项由最大 lastPlayedAt 决定
|
||||
// 按队列顺序返回;当前播放项由最大 lastPlayedAt 决定。
|
||||
// createdAt 相同时使用歌曲标识做稳定兜底,避免最近播放时间把歌曲顶到队尾。
|
||||
.sort((a, b) => {
|
||||
const createdAtDiff = (a.createdAt || 0) - (b.createdAt || 0);
|
||||
if (createdAtDiff !== 0) return createdAtDiff;
|
||||
return (a.lastPlayedAt || 0) - (b.lastPlayedAt || 0);
|
||||
return `${a.source}:${a.songId}`.localeCompare(`${b.source}:${b.songId}`);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user