diff --git a/DBObj/SQLManager.cs b/DBObj/SQLManager.cs index a25f0b0..e49218a 100644 --- a/DBObj/SQLManager.cs +++ b/DBObj/SQLManager.cs @@ -4,7 +4,7 @@ namespace DBObj { public class SQLManager { - private MyDB db = new MyDB(); + //private MyDB db = new MyDB(); public List FavoriteSongs { get; private set; } //public bool IsUserLoggedIn { get; set; } //public string UserPhoneNumber { get; set; } @@ -57,8 +57,9 @@ namespace DBObj string query = $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY add_date DESC LIMIT {Utils.Env.GetInt("NewSongLimit", 100)};"; return select_Mysql(query); } - public List SearchHotSongs(){ - string query= $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY song_counts DESC LIMIT {Utils.Env.GetInt("HotSongLimit", 100)};"; + public List SearchHotSongs() + { + string query = $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY song_counts DESC LIMIT {Utils.Env.GetInt("HotSongLimit", 100)};"; return select_Mysql(query); } public List SearchSongsBySinger(string keyword) @@ -72,40 +73,55 @@ namespace DBObj { string query = $"SELECT * FROM song_library_cache WHERE LOWER(song_name) LIKE CONCAT('%', LOWER('{keyword}'), '%');"; return select_Mysql(query); - } + } public SongData SearchSongByNumber(string songNumber) { + List searchResults = new List(); string query = $"SELECT * FROM song_library_cache WHERE song_id = '{songNumber}';"; - var searchResults =select_Mysql(query); - return searchResults.FirstOrDefault(); + using (var db = new MyDB()) + { + if (db.open(query, null)) + { + if (db.recordCount() != 0) + { + searchResults.Add(newSongData( db )); + } + } + } + return searchResults.FirstOrDefault(); } - private List select_Mysql(string query) + private List select_Mysql(string query) { List searchResults = new List(); Console.WriteLine(query); using (var db = new MyDB()) { - if (db.open(query, null)) { - while (db.Read()){ - searchResults.Add(new SongData( - db.Field("song_id"), - db.Field("song_name"), - db.Field("artistA"), - db.Field("artistB"), - db.Field("song_filename"), - db.Field("artistA_simplified"), - db.Field("artistB_simplified"), - db.Field("song_simplified"), - db.Field("vocal") - )); + if (db.open(query, null)) + { + while (db.Read()) + { + searchResults.Add(newSongData( db )); } } - + Console.WriteLine($"查詢到 {searchResults.Count} 筆資料。"); } return searchResults; } + private SongData newSongData(MyDB db) { + return new SongData( + db.Field("song_id") ?? "", + db.Field("song_name") ?? "", + db.Field("artistA") ?? "", + db.Field("artistB") ?? "", + db.Field("song_filename") ?? "", + db.Field("artistA_simplified") ?? "", + db.Field("artistB_simplified") ?? "", + db.Field("song_simplified")?? "", + db.Field("vocal") + ); + } } } \ No newline at end of file diff --git a/DBObj/SongData.cs b/DBObj/SongData.cs index 5bab3cc..db72a72 100644 --- a/DBObj/SongData.cs +++ b/DBObj/SongData.cs @@ -65,6 +65,34 @@ namespace DBObj ? 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 bool FileExistsInServers() + { + foreach (var server in Utils.Env.GetSongServers()) + { + try + { + Console.WriteLine($"伺服器路徑: '{server}'"); + string fullPath = Path.Combine(server, basic.getFileName()); + + if (File.Exists(fullPath)) + { + Console.WriteLine($"找到檔案: {fullPath}"); + return true; + } + else + { + Console.WriteLine($"找不到檔案: {fullPath}"); + } + } + catch (Exception ex) + { + Console.WriteLine($"檢查檔案時發生錯誤: {ex.Message}"); + } + } + + Console.WriteLine($"全部 server 都找不到檔案: {basic.getFileName()}"); + return false; + } public string getFile() { @@ -82,11 +110,20 @@ namespace DBObj } public Color GetStateColor(){ Color c = Color.White; - if (state == PlayState.Played){ + if (state == PlayState.Played) + { c = Color.Gray;//Color.FromArgb(200, 75, 125); // 播畢顏色:紫紅色 - }else if (state == PlayState.Playing){ + } + else if (state == PlayState.NoFile) + { + c = Color.Gray; + } + else if (state == PlayState.Playing) + { c = Color.LimeGreen; - }else if (state == PlayState.InsertPlayback){ + } + else if (state == PlayState.InsertPlayback) + { c = Color.Gold; } return c; diff --git a/DBObj/SongList.cs b/DBObj/SongList.cs index a218e57..9931b2a 100644 --- a/DBObj/SongList.cs +++ b/DBObj/SongList.cs @@ -38,7 +38,20 @@ namespace DBObj { 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; } @@ -68,14 +81,29 @@ namespace DBObj public static void Add(SongData song) { - not_played.Add(new SongData(song,PlayState.NotPlayed)); - // PrimaryForm.Instance.AddSongCount(songData.Number); - chkCut(); + 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) { - not_played.Insert(0, new SongData(song,PlayState.InsertPlayback)); - chkCut(); + 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() { diff --git a/OverlayFormObj/OverlayForm.Helpers.cs b/OverlayFormObj/OverlayForm.Helpers.cs index 86a29c8..884a6d0 100644 --- a/OverlayFormObj/OverlayForm.Helpers.cs +++ b/OverlayFormObj/OverlayForm.Helpers.cs @@ -54,7 +54,7 @@ namespace OverlayFormObj } } - this.Invalidate(); + //this.Invalidate(); blackBackgroundPanel.Invalidate(); // StartMarquee(); } @@ -85,7 +85,7 @@ namespace OverlayFormObj Console.WriteLine("Marquee 跑完了!"); } - this.Invalidate(); + //this.Invalidate(); blackBackgroundPanel.Invalidate(); }; @@ -142,7 +142,7 @@ namespace OverlayFormObj } secondLineTimer.Stop(); secondLineTimer.Dispose(); - this.Invalidate(); + //this.Invalidate(); blackBackgroundPanel.Invalidate(); } }; @@ -150,7 +150,7 @@ namespace OverlayFormObj secondLineTimer.Start(); blackBackgroundPanel.Invalidate(); } - +/* public void UpdateMarqueeTextThirdLine(string newText) { @@ -170,6 +170,7 @@ namespace OverlayFormObj Invalidate(); } +*/ private void MarqueeTimer_Tick(object sender, EventArgs e) { @@ -187,7 +188,7 @@ namespace OverlayFormObj } } - this.Invalidate(); + //this.Invalidate(); blackBackgroundPanel.Invalidate(); } diff --git a/Program.cs b/Program.cs index b264ea4..0cfd615 100644 --- a/Program.cs +++ b/Program.cs @@ -17,7 +17,7 @@ namespace DualScreenDemo [STAThread] static void Main() { - Console.WriteLine("Server V.1.2.5 202507291800"); + Console.WriteLine("Server V.1.2.6 202508011600"); if (Utils.Env.GetBool("IsCursor", true)) Cursor.Hide(); AppDomain.CurrentDomain.ProcessExit += (s, e) => Cursor.Show(); //Console.WriteLine("正在與中控取得聯繫...");