修正部分SQL,修正遙控器已點歌曲

This commit is contained in:
jasonchenwork 2025-05-27 11:27:43 +08:00
parent 2502ac41c5
commit 4466c457fd
3 changed files with 52 additions and 17 deletions

View File

@ -3,6 +3,7 @@ using System.Text.RegularExpressions;
using System.Diagnostics;
using DBObj;
using OverlayFormObj;
using NAudio.Wave;
namespace DualScreenDemo
{
public class CommandHandler
@ -83,6 +84,7 @@ namespace DualScreenDemo
ToggleMute();
break;
case "A274A4":
OverlayForm.MainForm.currentPage = 1;
HandleArtistAnnouncements();
break;
case "A2B3A4":
@ -589,12 +591,25 @@ namespace DualScreenDemo
// 準備要傳給 UpdateHistoryLabel 的兩個清單:歌曲資料與播放狀態
List<SongData> historySongs = new List<SongData>();
List<PlayState> playStates = new List<PlayState>();
// 錨點 遙控器
// 從播放紀錄中取出當前頁面應顯示的歌曲與狀態
int completedCount = PrimaryForm.currentSongIndexInHistory;
for (int i = startIndex; i < endIndex; i++)
{
historySongs.Add(PrimaryForm.playedSongsHistory[i]); // 加入歌曲
playStates.Add(PrimaryForm.playStates[i]); // 加入狀態 (已播、播放中、未播)
if (i < completedCount)
{
playStates.Add(PlayState.Played);
}
else if (i == completedCount)
{
playStates.Add(PlayState.Playing);
}
else
{
playStates.Add(PlayState.NotPlayed);
}
}

View File

@ -55,14 +55,14 @@ namespace DBObj
return PrimaryForm.Instance.SearchSongs_Mysql(query);
}
public List<SongData> SearchHotSongs(){
string query= $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY add_date DESC LIMIT {PrimaryForm.ReadHotSongLimit()}";
string query= $"SELECT * FROM song_library_cache WHERE language_name = '國語' ORDER BY song_conts DESC LIMIT {PrimaryForm.ReadHotSongLimit()}";
return PrimaryForm.Instance.SearchSongs_Mysql(query);
}
public List<SongData> SearchSongsBySinger(string keyword)
{
Console.WriteLine("keyword : " + keyword);
var keywordLower = keyword.ToLower();
string query = $"SELECT * FROM song_library_cache WHERE artistA LIKE '%{keywordLower}%' OR artistB LIKE'%{keywordLower}%'";
string query = $"SELECT * FROM song_library_cache WHERE artistA LIKE '%{keywordLower}%' OR artistB LIKE'%{keywordLower}% ORDER BY song_counts DESC;'";
return PrimaryForm.Instance.SearchSongs_Mysql(query);
}
public List<SongData> SearchSongsByName(string keyword)

View File

@ -1098,7 +1098,7 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e)
selectedArtist = currentArtistList[artistIndex];
currentLanguage = selectedArtist.Name;
SetUIState(UIState.SelectingSong);
string query = $"SELECT * FROM song_library_cache WHERE artistA ='{selectedArtist.Name}' OR artistB='{selectedArtist.Name}' ";
string query = $"SELECT * FROM song_library_cache WHERE artistA ='{selectedArtist.Name}' OR artistB='{selectedArtist.Name}' ORDER BY song_counts DESC;";
LanguageSongList = PrimaryForm.Instance.SearchSongs_Mysql(query);
//LanguageSongList = SongListManager.Instance.GetSongsByArtist(selectedArtist.Name);
currentPage = 1;
@ -1274,7 +1274,9 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e)
}
// 計算目前這首歌的 Y 座標位置
int y = startY + i * (songBitmap.Height + verticalSpacing);
int fixedRowHeight = 80;
int y = startY + i * (fixedRowHeight + verticalSpacing);
//int y = startY + i * (songBitmap.Height + verticalSpacing);
// 加入歌名圖片到畫面左側
AddPicture(songBitmap, leftMargin, y);
@ -1289,47 +1291,65 @@ private static void SongDisplayTimer_Elapsed(object sender, EventArgs e)
}
public void UpdateDisplayLabels(string[] messages)//新歌歌星排行首頁
{
// 清除舊的圖片控件
// 移除畫面上現有的所有 PictureBox舊的文字圖片
this.Controls.OfType<PictureBox>().ToList().ForEach(p => this.Controls.Remove(p));
// 如果沒有訊息內容,直接跳出,不進行後續繪製
if (messages.Length == 0) return;
// 設定主標題字體大小
int mainTitleFontSize = 60;
// 設定選項字體大小
int optionFontSize = 50;
// 每行之間的垂直間距(像素)
int lineSpacing = 15;
//int columnSpacing = 400;
// 主標題
// 取得主標題文字(第一行)
string mainTitle = messages[0];
// 建立主標題用的字型:微軟正黑體、粗體
Font mainTitleFont = new Font("Microsoft JhengHei", mainTitleFontSize, FontStyle.Bold);
// 使用自定義方法產生主標題的文字圖像(白色字+透明底)
Bitmap mainTitleBitmap = GenerateTextImage(mainTitle, mainTitleFont, Color.White, Color.Transparent);
// 主標題起始的 Y 座標
int startY = 130;
// 將主標題圖片水平置中並加入畫面
AddCenteredPicture(mainTitleBitmap, startY);
// 更新 Y 座標位置,準備繪製下一區塊(選項),加上主標題高度與間距
startY += mainTitleBitmap.Height + lineSpacing;
// 選項
// 取得剩下的訊息文字(第二行起):當作選項
string[] options = messages.Skip(1).ToArray();
// 選項的起始 Y 座標
int optionsStartY = startY;
// 每欄最多可放幾個項目(以兩欄平均分配)
int maxItemsPerColumn = (int)Math.Ceiling(options.Length / 2.0);
// 設定左右欄的 X 座標(用於放置圖片)
int leftColumnX = 200;
int rightColumnX = this.Width / 2 + 150;
// 開始逐一處理每個選項
for (int i = 0; i < options.Length; i++)
{
// 設定每個選項的字型
Font optionFont = new Font("Microsoft JhengHei", optionFontSize, FontStyle.Bold);
// 建立文字對應的圖像(白色字+透明底)
Bitmap optionBitmap = GenerateTextImage(options[i], optionFont, Color.White, Color.Transparent);
// 根據目前索引,決定放在左欄還是右欄
int x = (i < maxItemsPerColumn) ? leftColumnX : rightColumnX;
// 決定目前這張圖的 Y 座標位置(依序向下排列)
int currentY = optionsStartY + ((i % maxItemsPerColumn) * (optionBitmap.Height + lineSpacing));
// 加入圖片到畫面上
AddPicture(optionBitmap, x, currentY);
}
}
private string strokeRange;
private int totalArtists = 0;
private const int artistsPerPage = 10;
private const int artistsPerPage = 8;
private List<Artist> currentArtistList = new List<Artist>();
private void ProcessStrokeCountSelection(int number)
@ -1387,7 +1407,7 @@ private void DisplayArtists(List<Artist> artists, int page)//歌星點進去後
this.Controls.OfType<PictureBox>().ToList().ForEach(p => this.Controls.Remove(p));
int artistsPerColumn = 5;
int artistsPerColumn = 4;
int startIndex = (page - 1) * artistsPerPage;
int endIndex = Math.Min(startIndex + artistsPerPage, artists.Count);
@ -1637,7 +1657,7 @@ private void DisplayArtists(List<Artist> artists, int page)//歌星點進去後
}
// 測試
public int currentPage = 1;
public int songsPerPage = 5;
public int totalSongs = 0;