using DualScreenDemo; using System; using System.IO; using System.Windows.Markup; namespace DBObj { public class SongData { private Song basic; private Artist A ; private Artist B ; public bool isPublicSong { get; set; } public PlayState state; public SongData(string songNumber, string song, string filename, int humanVoice, bool isPublic) { basic=new(songNumber,song,"",filename,humanVoice); isPublicSong = isPublic; } public SongData(string songNumber, string song, string artistA, string artistB, string filename, string artistASimplified, string artistBSimplified, string songSimplified, int humanVoice) { basic=new(songNumber,song,songSimplified,filename,humanVoice); A= new Artist(artistA, artistASimplified); if(artistB!=null){ B= new Artist(artistB, artistBSimplified); } isPublicSong = false; } public string getNumber() {return basic.getNumber();} public string getName(bool IsSimplified=false) { return basic.getName(IsSimplified); } public string getName() { return basic.getName();} public string getArtist_A(bool IsSimplified) { return A.getName(IsSimplified); } public string getArtist_A() { return A.getName();} public string getArtist_B(bool IsSimplified) { return B.getName(IsSimplified); } public string getArtist_B() { return B.getName();} public int getNameLength() { return basic.getName().Length; } public string getFileName() {return basic.getFileName();} public string next_artist_text() { return B!=null ? String.Format("下一首:{0} {1} {2}", A.getName(false), B.getName(false), basic.getName(false)) : String.Format("下一首:{0} {1}", A.getName(false), basic.getName(false)); } public string artist_text() { return B!=null ? $"{A.getName(false)} - {B.getName(false)}" : A.getName(false); } public string name_text() { return B!=null ? String.Format("{0} - {1} - {2}", A.getName(false), B.getName(false), basic.getName(false)) : String.Format("{0} - {1}", A.getName(false), basic.getName(false)); } public string getFile() { return FindExistingPath(basic.getFileName()); } private string FindExistingPath(string filename) { foreach (var server in Utils.Env.GetSongServers()) { Console.WriteLine($"伺服器路徑: '{server}'"); string fullPath = Path.Combine(server, filename); if (File.Exists(fullPath)) return fullPath; } return null; // 找不到就回原本的 filename,不加路徑 } public Color GetStateColor(){ Color c = Color.White; if (state == PlayState.Played){ c = Color.Gray;//Color.FromArgb(200, 75, 125); // 播畢顏色:紫紅色 }else if (state == PlayState.Playing){ c = Color.LimeGreen; }else if (state == PlayState.InsertPlayback){ c = Color.Gold; } return c; } public string GetStateTxt(bool IsSimplified){ string txt = string.Empty; if (state == PlayState.Played) { txt = IsSimplified ? "(播毕)" : "(播畢)"; } else if (state == PlayState.Playing) { txt = IsSimplified ? "(播放中)" : "(播放中)"; } else if (state == PlayState.InsertPlayback) { txt = IsSimplified ? "(插播)" : "(插播)"; } return txt; } public void SetState(PlayState s) => state = s; public PlayState GetState() { return state; } public int getHumanVoice() { return basic.getHumanVoice(); } public override string ToString() { return B!=null ? String.Format("{0} - {1} - {2} - {3}", state, A.getName(), B.getName(), basic.getName()) : String.Format("{0} - {1} - {2}", state, A.getName(), basic.getName()); } } }