| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { VideoItem } from '../../viewmodel/VideoItem';
- let navidromeVideoItems: VideoItem[] = [];
- let navidromeCurrentPlayIndex: number = 0;
- // 已播放歌曲路径集合(用于渐进式随机播放)
- let playedFilePaths: Set<string> = 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;
- }
|