using DualScreenDemo; using System; using System.IO; using System.Windows.Navigation; namespace DBObj { public class SongList { private static bool isWelcome = true; public static SongData welcome; public static SongData close ; private static SongData publicPlaying=null; private static List publicSong = new(); private static SongData playing=null; private static List not_played = new List(); private static List played = new List(); public static List PublicSong() => publicSong; public static SongData Current() { Console.WriteLine(not_played.Count + " Current " + playing); return (playing ==null) ? publicPlaying : playing; } public static SongData Next() { if (playing != null) { playing.SetState(PlayState.Played); played.Add(playing); playing = null; } if (not_played.Count <= 0) return NextPublicSong(); else return NextUserSong(); } private static SongData NextUserSong() { playing = not_played[0]; not_played.RemoveAt(0); if (!playing.FileExistsInServers()) { playing.SetState(PlayState.NoFile); played.Add(playing); playing = null; if (not_played.Count <= 0) return NextPublicSong(); else return NextUserSong(); } playing.SetState(PlayState.Playing); UpdateNextSongLabel(); return playing; } private static SongData NextPublicSong() { if (Program.room.IsClose()) { publicPlaying = close; } else if(Program.room.IsOpen() && isWelcome){ isWelcome = false; publicPlaying = welcome; } else { publicPlaying = publicSong[0]; publicSong.RemoveAt(0); publicSong.Add(publicPlaying); } return publicPlaying; } public static List GetHistory() { List History = [.. played]; if (playing != null) History.Add(playing); History.AddRange(not_played); return History; } public static void Add(SongData song) { if (song.FileExistsInServers()) { not_played.Add(new SongData(song, PlayState.NotPlayed)); // PrimaryForm.Instance.AddSongCount(songData.Number); chkCut(); } else { played.Add(new SongData(song, PlayState.NoFile)); } } public static void Insert(SongData song) { if (song.FileExistsInServers()) { not_played.Insert(0, new SongData(song,PlayState.InsertPlayback)); chkCut(); } else { played.Add(new SongData(song, PlayState.NoFile)); } } private static void chkCut() { if (playing == null) { if (PrimaryForm.Instance.InvokeRequired) PrimaryForm.Instance.Invoke(new System.Action(() => PrimaryForm.Instance.videoPlayerForm.PlayNextSong())); else PrimaryForm.Instance.videoPlayerForm.PlayNextSong(); } else { UpdateNextSongLabel(); } } public static void UpdateNextSongLabel() { if (Program.room.IsClose()) { VideoPlayerForm.overlayForm.UpdateTopLeftLabel(" "); } else { VideoPlayerForm.overlayForm.UpdateTopLeftLabel( (not_played.Count > 0) ? not_played[0].next_song_text() : "目前沒有下一首,請踴躍點歌!!!" ); } } public static void clearSong() { isWelcome = true; not_played.Clear(); played.Clear(); } } }