From b207fbef3658781bfb376f0e131f5bbb7fb6447e Mon Sep 17 00:00:00 2001 From: jasonchenwork Date: Tue, 8 Jul 2025 18:13:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AA=BF=E6=95=B4=20=E5=AD=97=E4=B8=B2?= =?UTF-8?q?=E9=A1=AF=E7=A4=BA=E9=87=8D=E5=BE=A9=2020250708?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DBObj/SongData.cs | 84 ++++++++++++++----- HttpServer.cs | 22 ++--- OverlayFormObj/OverlayForm.Labels.cs | 6 +- OverlayFormObj/OverlayForm.cs | 56 +++++-------- .../PrimaryForm.MultiPagePanel.cs | 12 +-- PrimaryFormParts/PrimaryForm.VodScreen.cs | 4 +- PrimaryFormParts/PrimaryForm.cs | 13 +-- VideoPlayerForm.cs | 16 ++-- 8 files changed, 114 insertions(+), 99 deletions(-) diff --git a/DBObj/SongData.cs b/DBObj/SongData.cs index d6e2141..606fbdb 100644 --- a/DBObj/SongData.cs +++ b/DBObj/SongData.cs @@ -5,14 +5,14 @@ namespace DBObj { public class SongData { - public string SongNumber { get; set; } - public string Song { get; set; } - public string ArtistA { get; set; } - public string ArtistB { get; set; } + public string Number { get; set; } + public string Name { get; set; } + public string Artist_A { get; set; } + private string Artist_B { get; set; } public string FileName { get; set; } - public string ArtistASimplified { get; set; } - public string ArtistBSimplified { get; set; } - public string SongSimplified { get; set; } + public string Artist_A_Simplified { get; set; } + public string Artist_B_Simplified { get; set; } + public string Name_Simplified { get; set; } public int HumanVoice { get; set; } public bool isPublicSong { get; set; } @@ -48,33 +48,72 @@ namespace DBObj */ public SongData(string songNumber, string song, string filename, int humanVoice, bool isPublic) { - SongNumber = songNumber; - Song = song; + Number = songNumber; + Name = song; FileName = filename; HumanVoice = humanVoice; isPublicSong = isPublic; } public SongData(string songNumber, string song, string artistA, string artistB, string filename, string artistASimplified, string artistBSimplified, string songSimplified, int humanVoice) { - SongNumber = songNumber; - Song = song; - ArtistA = artistA; - ArtistB = artistB; - FileName = FindExistingPath(filename); - ArtistASimplified = artistASimplified; - ArtistBSimplified = artistBSimplified; - SongSimplified = songSimplified; + Number = songNumber; + Name = song; + Artist_A = artistA; + Artist_B = artistB; + FileName = filename; + Artist_A_Simplified = artistASimplified; + Artist_B_Simplified = artistBSimplified; + Name_Simplified = songSimplified; HumanVoice = humanVoice; isPublicSong = false; } + public string getName(bool IsSimplified=false) + { + return IsSimplified ? Name_Simplified : Name; + } + public int getNameLength() + { + return Name.Length; + } + public string next_artist_text() + { + return !string.IsNullOrWhiteSpace(Artist_B) + ? String.Format("下一首:{0} {1} {2}", Artist_A, Artist_B, Name) + : String.Format("下一首:{0} {1}", Artist_A, Name); + } + public string artist_text() + { + return !string.IsNullOrWhiteSpace(Artist_B) + ? $"{Artist_A} - {Artist_B}" + : Artist_A; + } + public string name_text() + { + return !string.IsNullOrWhiteSpace(Artist_B) + ? String.Format("{0} - {1} - {2}", Artist_A, Artist_B, Name) + : String.Format("{0} - {1}", Artist_A, Name); + } + public string getArtist_A(bool IsSimplified) + { + return IsSimplified ? Artist_A_Simplified : Artist_A; + } + public string getArtist_B(bool IsSimplified) + { + return IsSimplified ? Artist_B_Simplified : Artist_B; + } + public string getFile() + { + return FindExistingPath(FileName); + } private string FindExistingPath(string filename) { var servers = new[] { @"\\svr01\", @"\\svr02\", @"\\svr01\e", @"\\svr02\e" }; - foreach (var server in servers){ + foreach (var server in servers) + { string fullPath = Path.Combine(server, filename); if (File.Exists(fullPath)) return fullPath; } - return filename; // 找不到就回原本的 filename,不加路徑 + return null; // 找不到就回原本的 filename,不加路徑 } public void SetState(PlayState s) => state = s; @@ -83,12 +122,13 @@ namespace DBObj return state; } + public override string ToString() { - return !string.IsNullOrWhiteSpace(ArtistB) - ? String.Format("{0} - {1} - {2}", ArtistA, ArtistB, Song) - : String.Format("{0} - {1}", ArtistA, Song); + return !string.IsNullOrWhiteSpace(Artist_B) + ? String.Format("{0} - {1} - {2}", Artist_A, Artist_B, Name) + : String.Format("{0} - {1}", Artist_A, Name); } } } \ No newline at end of file diff --git a/HttpServer.cs b/HttpServer.cs index f7f7b61..40e95b5 100644 --- a/HttpServer.cs +++ b/HttpServer.cs @@ -708,7 +708,7 @@ namespace DualScreenDemo Console.WriteLine("Played Songs History Count: " + PrimaryForm.playedSongsHistory.Count); foreach (var song in PrimaryForm.playedSongsHistory) { - Console.WriteLine($"Song: {song.Song}, ArtistA: {song.ArtistA}"); + Console.WriteLine($"Song: {song.Name}, ArtistA: {song.Artist_A}"); } // 根据播放历史确定每首歌的播放状态 @@ -784,8 +784,8 @@ namespace DualScreenDemo { return new { - song.Song, - song.ArtistA, + song.Name, + song.Artist_A, song.FileName, PlayState = playState.HasValue ? (playState.Value == PlayState.Playing ? "播放中" : "播放完畢") : null // 如果状态为 null,不返回状态信息 }; @@ -810,7 +810,7 @@ namespace DualScreenDemo if (song != null) { - Console.WriteLine($"Ordering Song: {song.Song} by {song.ArtistA}"); + Console.WriteLine($"Ordering Song: {song.Name} by {song.Artist_A}"); // 这里可以添加处理逻辑,例如将歌曲加入到播放列表或数据库中 OverlayForm.MainForm.AddSongToPlaylist(song); @@ -849,7 +849,7 @@ namespace DualScreenDemo if (song != null) { - Console.WriteLine($"Inserting Song: {song.Song} by {song.ArtistA}"); + Console.WriteLine($"Inserting Song: {song.Name} by {song.Artist_A}"); // 这里可以添加插播歌曲的处理逻辑 OverlayForm.MainForm.InsertSongToPlaylist(song); @@ -1114,12 +1114,12 @@ namespace DualScreenDemo favoriteSongList = searchResults .Select(song => new { - song.Song, - song.ArtistA, - song.SongNumber, - song.ArtistASimplified, - song.ArtistBSimplified, - song.SongSimplified, + song.Name, + song.Artist_A, + song.Number, + song.Artist_A_Simplified, + song.Artist_B_Simplified, + song.Name_Simplified, song.HumanVoice, song.FileName }) diff --git a/OverlayFormObj/OverlayForm.Labels.cs b/OverlayFormObj/OverlayForm.Labels.cs index 41a7203..fbc1bdb 100644 --- a/OverlayFormObj/OverlayForm.Labels.cs +++ b/OverlayFormObj/OverlayForm.Labels.cs @@ -624,11 +624,9 @@ public void UpdateNextSongLabelFromPlaylist(bool isUserPlaylistPlaying, SongData else { SongData nextSong = currentPlaylist[currentSongIndex + 1]; - if (!string.IsNullOrEmpty(nextSong.ArtistA) && !string.IsNullOrEmpty(nextSong.Song)) + if (!string.IsNullOrEmpty(nextSong.Artist_A)) { - nextSongLabel.Text = !string.IsNullOrWhiteSpace(nextSong.ArtistB) - ? String.Format("下一首:{0} {1} {2}", nextSong.ArtistA, nextSong.ArtistB, nextSong.Song) - : String.Format("下一首:{0} {1}", nextSong.ArtistA, nextSong.Song); + nextSongLabel.Text = nextSong.next_artist_text(); } else { diff --git a/OverlayFormObj/OverlayForm.cs b/OverlayFormObj/OverlayForm.cs index b534d6b..15ff234 100644 --- a/OverlayFormObj/OverlayForm.cs +++ b/OverlayFormObj/OverlayForm.cs @@ -1004,7 +1004,7 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e) if (songIndex >= 0 && songIndex < totalSongs) { selectedSong = LanguageSongList[songIndex]; - Console.WriteLine("Adding song to playlist: " + LanguageSongList[songIndex].Song + " " + selectedSong.FileName); + Console.WriteLine("Adding song to playlist: " + LanguageSongList[songIndex].Name + " " + selectedSong.FileName); // DisplayActionWithSong(currentPage, songIndex, "點播"); @@ -1036,7 +1036,7 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e) if (songIndex < totalSongs) { selectedSong = LanguageSongList[songIndex]; - Console.WriteLine("Adding song to playlist: " + LanguageSongList[songIndex].Song + " " + selectedSong.FileName ); + Console.WriteLine("Adding song to playlist: " + LanguageSongList[songIndex].Name + " " + selectedSong.FileName ); // DisplayActionWithSong(currentPage, songIndex, "插播"); @@ -1120,7 +1120,7 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e) if (songIndex < totalSongs) { selectedSong = LanguageSongList[songIndex]; - Console.WriteLine("Adding song to playlist C: " + LanguageSongList[songIndex].Song + " " + selectedSong.FileName); + Console.WriteLine("Adding song to playlist C: " + LanguageSongList[songIndex].Name + " " + selectedSong.FileName); DisplaySongsWithArrows(currentPage, songIndex); @@ -1257,7 +1257,7 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e) } // 建立顯示的歌曲文字,例如 "1. 我的歌" - string songText = $"{i + 1}. {song.Song}"; + string songText = $"{i + 1}. {song.Name}"; Font songFont = new Font("Microsoft JhengHei", 50, FontStyle.Bold); // 將歌名轉成圖片 @@ -1531,11 +1531,9 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 { try { - //var filePath1 = songData.SongFilePathHost1; - //var filePath2 = songData.SongFilePathHost2; // 之後還要設計成本地的資料夾位置 - string pathToPlay = songData.FileName; - if (File.Exists(pathToPlay)) + string pathToPlay = songData.getFile(); + if (!string.IsNullOrEmpty(pathToPlay)) { bool wasEmpty = PrimaryForm.userRequestedSongs.Count == 0; @@ -1555,7 +1553,7 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 PrimaryForm.PrintPlayingSongList(); // 點播次數+1 - PrimaryForm.Instance.AddSongCount(songData.SongNumber); + PrimaryForm.Instance.AddSongCount(songData.Number); } } catch (Exception ex) @@ -1571,10 +1569,10 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 try { // 從 songData 中取得兩個可能的檔案路徑(主機1與主機2) - var pathToPlay = songData.FileName; + var pathToPlay = songData.getFile(); // 檢查兩個主機上的檔案是否皆不存在 - if (File.Exists(pathToPlay)) + if (!string.IsNullOrEmpty(pathToPlay)) { // 若其中一個存在,就用第一個存在的那個檔案 @@ -1683,10 +1681,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 for (int i = startIndex; i < endIndex; i++) { - string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); maxSongLength = Math.Max(maxSongLength, songText.Length); maxArtistLength = Math.Max(maxArtistLength, artistText.Length); @@ -1705,10 +1701,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 // 計算行高 for (int i = startIndex; i < endIndex; i++) { - string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); Font songFont = new Font("Microsoft JhengHei", songFontSize, FontStyle.Bold); Font artistFont = new Font("Microsoft JhengHei", artistFontSize, FontStyle.Bold); @@ -1724,10 +1718,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 { int songNumber = i - startIndex + 1; - string songText = $"{songNumber}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{songNumber}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); Font songFont = new Font("Microsoft JhengHei", songFontSize, FontStyle.Bold); Font artistFont = new Font("Microsoft JhengHei", artistFontSize, FontStyle.Bold); @@ -1799,10 +1791,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 int maxArtistLength = 0; for (int i = startIndex; i < endIndex; i++) { - string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); maxSongLength = Math.Max(maxSongLength, songText.Length); maxArtistLength = Math.Max(maxArtistLength, artistText.Length); @@ -1817,10 +1807,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 int rowHeight = 0; for (int i = startIndex; i < endIndex; i++) { - string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{i - startIndex + 1}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); Font tempSongFont = new Font("Microsoft JhengHei", songFontSize, FontStyle.Bold); Font tempArtistFont = new Font("Microsoft JhengHei", artistFontSize, FontStyle.Bold); @@ -1836,10 +1824,8 @@ private void DisplayArtists(List artists, int page)//歌星點進去後 { int songNumber = i - startIndex + 1; - string songText = $"{songNumber}. {LanguageSongList[i].Song}"; - string artistText = !string.IsNullOrWhiteSpace(LanguageSongList[i].ArtistB) - ? $"{LanguageSongList[i].ArtistA} - {LanguageSongList[i].ArtistB}" - : LanguageSongList[i].ArtistA; + string songText = $"{songNumber}. {LanguageSongList[i].Name}"; + string artistText = LanguageSongList[i].artist_text(); // 設定顏色,選中的索引顯示為亮綠色 Color songColor = (i == highlightIndex) ? Color.LimeGreen : Color.White; diff --git a/PrimaryFormParts/PrimaryForm.MultiPagePanel.cs b/PrimaryFormParts/PrimaryForm.MultiPagePanel.cs index 0f8774a..bece5e3 100644 --- a/PrimaryFormParts/PrimaryForm.MultiPagePanel.cs +++ b/PrimaryFormParts/PrimaryForm.MultiPagePanel.cs @@ -445,16 +445,12 @@ namespace DualScreenDemo songLabel.ForeColor = Color.White; statusText = string.Empty; } - + // 根據簡繁體設置選擇要顯示的文字 - string songText = IsSimplified ? - (!string.IsNullOrEmpty(song.SongSimplified) ? song.SongSimplified : song.Song) : - song.Song; - + string songText = song.getName(IsSimplified); + // 歌手名稱設置點 - string artistText = IsSimplified ? - (!string.IsNullOrEmpty(song.ArtistASimplified) ? song.ArtistASimplified : song.ArtistA) : - song.ArtistA; + string artistText = song.getArtist_A(IsSimplified); string fullText = songText + statusText; int textLength = fullText.Length; diff --git a/PrimaryFormParts/PrimaryForm.VodScreen.cs b/PrimaryFormParts/PrimaryForm.VodScreen.cs index 44b80b5..f90b528 100644 --- a/PrimaryFormParts/PrimaryForm.VodScreen.cs +++ b/PrimaryFormParts/PrimaryForm.VodScreen.cs @@ -133,7 +133,7 @@ namespace DualScreenDemo private void AlbumButton_Click(object sender, EventArgs e) { - string name = currentSelectedSong.ArtistA; + string name = currentSelectedSong.Artist_A; string query = $"SELECT * FROM song_library_cache WHERE artistA = '{name}' ORDER BY add_date DESC;"; var selectedSongs = SearchSongs_Mysql(query); /*var selectedSongs = allSongs.Where(song => song.ArtistA == currentSelectedSong.ArtistA) @@ -148,7 +148,7 @@ namespace DualScreenDemo { Console.WriteLine("Favorite Button Clicked"); - InsertNewFavoriteSong(currentSelectedSong.SongNumber); + InsertNewFavoriteSong(currentSelectedSong.Number); var searchResults = SearchSongs_Mysql(SearchFavoriteSongs_Mysql()); // 重置分頁 currentPage = 0; diff --git a/PrimaryFormParts/PrimaryForm.cs b/PrimaryFormParts/PrimaryForm.cs index 5d94704..b496c65 100644 --- a/PrimaryFormParts/PrimaryForm.cs +++ b/PrimaryFormParts/PrimaryForm.cs @@ -1501,12 +1501,7 @@ namespace DualScreenDemo Console.WriteLine("當前播放列表:"); foreach (var song in userRequestedSongs) { - - string outputText = !string.IsNullOrWhiteSpace(song.ArtistB) - ? String.Format("{0} - {1} - {2}", song.ArtistA, song.ArtistB, song.Song) - : String.Format("{0} - {1}", song.ArtistA, song.Song); - - Console.WriteLine(outputText); + Console.WriteLine(song.name_text()); } } @@ -1729,11 +1724,11 @@ namespace DualScreenDemo Font font = new Font("微軟正黑體", points, FontStyle.Bold); // 根據文字長度設置字體大小 - if (songData.Song.Length > 18) + if (songData.getNameLength() > 18) { font = new Font("微軟正黑體", 17, FontStyle.Bold); } - else if (songData.Song.Length > 13) + else if (songData.getNameLength() > 13) { font = new Font("微軟正黑體", 21, FontStyle.Bold); } @@ -1746,7 +1741,7 @@ namespace DualScreenDemo Brush textBrush = Brushes.Black; - string songInfo = songData.Song ?? "未提供歌曲信息"; + string songInfo = songData.Name ?? "未提供歌曲信息"; g.DrawString(songInfo, font, textBrush, new PointF(201, 29)); diff --git a/VideoPlayerForm.cs b/VideoPlayerForm.cs index e3bf6b1..704e459 100644 --- a/VideoPlayerForm.cs +++ b/VideoPlayerForm.cs @@ -671,7 +671,7 @@ namespace DualScreenDemo public static async Task UpdateMarqueeTextForNextSong(SongData song) { - string nextSongText = String.Format("下一首3:{0}", song.Song); + string nextSongText = String.Format("下一首3:{0}", song.Name); if (overlayForm.InvokeRequired) { @@ -763,12 +763,12 @@ namespace DualScreenDemo var songToPlay = currentPlaylist[currentSongIndex]; // pathToPlay 需要調整 - var pathToPlay = songToPlay.FileName; + var pathToPlay = songToPlay.getFile(); // 若兩個 host 上都找不到檔案就直接結束 - if (!File.Exists(pathToPlay)) + if (string.IsNullOrEmpty(pathToPlay)) { - Console.WriteLine($"文件不存在:{pathToPlay}"); + Console.WriteLine($"文件不存在:{songToPlay.Name}"); return; } @@ -989,8 +989,8 @@ namespace DualScreenDemo List currentPlaylist = isUserPlaylistPlaying ? playingSongList : publicPlaylist; if (!currentPlaylist.Any()) return; var songToPlay = currentPlaylist[currentSongIndex]; - var pathToPlay = songToPlay.FileName; - if (!File.Exists(pathToPlay)) + var pathToPlay = songToPlay.getFile(); + if (string.IsNullOrEmpty(pathToPlay)) { MessageBox.Show("File does not exist on both hosts."); return; @@ -1656,7 +1656,7 @@ namespace DualScreenDemo var sameNameIndices = new List(); for (int i = 0; i < PrimaryForm.playedSongsHistory.Count; i++) { - if (PrimaryForm.playedSongsHistory[i].Song == songData.Song) + if (PrimaryForm.playedSongsHistory[i].Name == songData.Name) { sameNameIndices.Add(i); } @@ -1727,7 +1727,7 @@ namespace DualScreenDemo var sameNameIndices = new List(); for (int i = 0; i < PrimaryForm.playedSongsHistory.Count; i++) { - if (PrimaryForm.playedSongsHistory[i].Song == songData.Song) + if (PrimaryForm.playedSongsHistory[i].Name == songData.Name) { sameNameIndices.Add(i); }