import { VideoItem } from '../../viewmodel/VideoItem'; let navidromeVideoItems: VideoItem[] = []; let navidromeCurrentPlayIndex: number = 0; // 已播放歌曲路径集合(用于渐进式随机播放) let playedFilePaths: Set = new Set(); export function setNavidromePlaylist(items: VideoItem[], startIndex: number): void { navidromeVideoItems = items.slice(); navidromeCurrentPlayIndex = startIndex; } export function getNavidromeVideoItems(): VideoItem[] { return navidromeVideoItems; } export function getNavidromeCurrentPlayIndex(): number { return navidromeCurrentPlayIndex; } export function clearNavidromePlaylist(): void { navidromeVideoItems = []; navidromeCurrentPlayIndex = 0; playedFilePaths.clear(); } // ============ 渐进式随机播放支持 ============ /** * 追加歌曲到播放列表(不替换现有列表,用于扩展播放库) */ export function appendToNavidromePlaylist(items: VideoItem[]): void { const existingPaths = new Set(navidromeVideoItems.map(v => v.filePath)); const newItems = items.filter(item => !existingPaths.has(item.filePath)); if (newItems.length > 0) { navidromeVideoItems = [...navidromeVideoItems, ...newItems]; } } /** * 标记歌曲已播放 */ export function markAsPlayed(filePath: string): void { playedFilePaths.add(filePath); } /** * 检查歌曲是否已播放 */ export function isPlayed(filePath: string): boolean { return playedFilePaths.has(filePath); } /** * 获取未播放歌曲数量 */ export function getUnplayedCount(): number { return navidromeVideoItems.filter(v => !playedFilePaths.has(v.filePath)).length; } /** * 获取未播放的歌曲列表 */ export function getUnplayedSongs(): VideoItem[] { return navidromeVideoItems.filter(v => !playedFilePaths.has(v.filePath)); } /** * 清除已播放记录(重新开始随机) */ export function clearPlayedHistory(): void { playedFilePaths.clear(); } /** * 获取已播放数量 */ export function getPlayedCount(): number { return playedFilePaths.size; }