NavidromePlaylistStore.ets 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { VideoItem } from '../../viewmodel/VideoItem';
  2. let navidromeVideoItems: VideoItem[] = [];
  3. let navidromeCurrentPlayIndex: number = 0;
  4. // 已播放歌曲路径集合(用于渐进式随机播放)
  5. let playedFilePaths: Set<string> = new Set();
  6. export function setNavidromePlaylist(items: VideoItem[], startIndex: number): void {
  7. navidromeVideoItems = items.slice();
  8. navidromeCurrentPlayIndex = startIndex;
  9. }
  10. export function getNavidromeVideoItems(): VideoItem[] {
  11. return navidromeVideoItems;
  12. }
  13. export function getNavidromeCurrentPlayIndex(): number {
  14. return navidromeCurrentPlayIndex;
  15. }
  16. export function clearNavidromePlaylist(): void {
  17. navidromeVideoItems = [];
  18. navidromeCurrentPlayIndex = 0;
  19. playedFilePaths.clear();
  20. }
  21. // ============ 渐进式随机播放支持 ============
  22. /**
  23. * 追加歌曲到播放列表(不替换现有列表,用于扩展播放库)
  24. */
  25. export function appendToNavidromePlaylist(items: VideoItem[]): void {
  26. const existingPaths = new Set(navidromeVideoItems.map(v => v.filePath));
  27. const newItems = items.filter(item => !existingPaths.has(item.filePath));
  28. if (newItems.length > 0) {
  29. navidromeVideoItems = [...navidromeVideoItems, ...newItems];
  30. }
  31. }
  32. /**
  33. * 标记歌曲已播放
  34. */
  35. export function markAsPlayed(filePath: string): void {
  36. playedFilePaths.add(filePath);
  37. }
  38. /**
  39. * 检查歌曲是否已播放
  40. */
  41. export function isPlayed(filePath: string): boolean {
  42. return playedFilePaths.has(filePath);
  43. }
  44. /**
  45. * 获取未播放歌曲数量
  46. */
  47. export function getUnplayedCount(): number {
  48. return navidromeVideoItems.filter(v => !playedFilePaths.has(v.filePath)).length;
  49. }
  50. /**
  51. * 获取未播放的歌曲列表
  52. */
  53. export function getUnplayedSongs(): VideoItem[] {
  54. return navidromeVideoItems.filter(v => !playedFilePaths.has(v.filePath));
  55. }
  56. /**
  57. * 清除已播放记录(重新开始随机)
  58. */
  59. export function clearPlayedHistory(): void {
  60. playedFilePaths.clear();
  61. }
  62. /**
  63. * 获取已播放数量
  64. */
  65. export function getPlayedCount(): number {
  66. return playedFilePaths.size;
  67. }