932 lines
36 KiB
C#
932 lines
36 KiB
C#
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using System.Diagnostics;
|
|
using DBObj;
|
|
using OverlayFormObj;
|
|
namespace DualScreenDemo
|
|
{
|
|
public class CommandHandler
|
|
{
|
|
public static bool readyForSongListInput = false;
|
|
|
|
private readonly SongListManager songListManager;
|
|
|
|
public CommandHandler(SongListManager songListManager)
|
|
{
|
|
this.songListManager = songListManager;
|
|
}
|
|
|
|
public async Task ProcessData(string indata)
|
|
{ //關機錨點
|
|
string filePath = Path.Combine(Application.StartupPath, "dataLog.txt");
|
|
// 使用 Path.Combine 方法安全地將應用程式的啟動路徑與 "dataLog.txt" 檔案名結合,
|
|
// 建立完整的檔案路徑。Application.StartupPath 通常指向應用程式的可執行檔所在的目錄。
|
|
|
|
if (CheckLogForShutdown(filePath))
|
|
// 呼叫 CheckLogForShutdown 方法,並將建立的檔案路徑 (filePath) 作為參數傳遞。
|
|
// 這個方法預期會檢查指定的日誌檔案內容,以判斷是否符合關機的條件。
|
|
// 如果該方法回傳 true (表示符合關機條件),則執行 if 區塊內的程式碼。
|
|
{
|
|
Console.WriteLine("Shutdown condition met. Application will now close.");
|
|
// 在控制台輸出訊息,告知使用者已滿足關機條件,應用程式即將關閉。
|
|
ShutdownComputer();
|
|
// 呼叫 ShutdownComputer 方法,這個方法預期會執行關閉電腦的操作。
|
|
}
|
|
switch (indata)
|
|
{
|
|
case "A261A4":
|
|
HandleInputA();
|
|
break;
|
|
case "A262A4":
|
|
HandleInputB();
|
|
break;
|
|
case "A263A4":
|
|
ClearDisplay();
|
|
break;
|
|
case "A268A4":
|
|
OverlayForm.MainForm.currentPage = 1;
|
|
DisplaySongHistory();
|
|
break;
|
|
case "A26AA4":
|
|
PreviousPage();
|
|
break;
|
|
case "A26BA4":
|
|
NextPage();
|
|
break;
|
|
case "A271A4":
|
|
HandleNewSongAnnouncements();
|
|
break;
|
|
case "A273A4":
|
|
HandleHotSongAnnouncements();
|
|
break;
|
|
case "A267A4":
|
|
SkipToNextSong();
|
|
ClearDisplay();
|
|
break;
|
|
case "A269A4":
|
|
ReplayCurrentSong();
|
|
break;
|
|
// 原唱
|
|
case "A26CA4":
|
|
Console.WriteLine("ToggleVocalRemoval Invoked");
|
|
InvokeAction(() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowOriginalSongLabel());
|
|
break;
|
|
// 導唱
|
|
case "A26EA4":
|
|
InvokeAction(() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
|
break;
|
|
case "A26DA4":
|
|
PauseOrResumeSong();
|
|
break;
|
|
case "A276A4":
|
|
ToggleMute();
|
|
break;
|
|
case "A274A4":
|
|
HandleArtistAnnouncements();
|
|
break;
|
|
case "A2B3A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowVolumeUpLabel());
|
|
break;
|
|
case "A2B4A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowVolumeDownLabel());
|
|
break;
|
|
case "A2B5A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowMicUpLabel());
|
|
break;
|
|
case "A2B6A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowMicDownLabel());
|
|
break;
|
|
case "A2C2A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowStandardLabel());
|
|
break;
|
|
case "A2C3A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowProfessionalLabel());
|
|
break;
|
|
case "A2C4A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowSquareLabel());
|
|
break;
|
|
case "A2C1A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowSingDownLabel());
|
|
break;
|
|
case "A2D5A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowBrightLabel());
|
|
break;
|
|
case "A2D7A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowRomanticLabel());
|
|
break;
|
|
/* case "A27CA4":
|
|
InvokeAction(() => OverlayForm.MainForm.ShowMaleKeyLabel());
|
|
break;
|
|
case "A282A4":
|
|
InvokeAction(() => OverlayForm.MainForm.ShowFemaleKeyLabel());
|
|
break;*/
|
|
case "A2D6A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowSoftLabel());
|
|
break;
|
|
case "A2D8A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowDynamicLabel());
|
|
break;
|
|
case "A275A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowTintLabel());
|
|
break;
|
|
case "A283A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升4調"));
|
|
break;
|
|
case "A282A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升3調"));
|
|
break;
|
|
case "A281A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升2調"));
|
|
break;
|
|
case "A280A4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升1調"));
|
|
break;
|
|
case "A27FA4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowStandardKeyLabel());
|
|
break;
|
|
case "A27EA4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降1調"));
|
|
break;
|
|
case "A27DA4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降2調"));
|
|
break;
|
|
case "A27CA4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降3調"));
|
|
break;
|
|
case "A27BA4":
|
|
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
|
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降4調"));
|
|
break;
|
|
default:
|
|
if (Regex.IsMatch(indata, @"^A23\d+A4$"))
|
|
{
|
|
HandleNumberInput(indata);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void InvokeAction(Action action)
|
|
{
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(action);
|
|
}
|
|
else
|
|
{
|
|
action();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static void SkipToNextSong()
|
|
{
|
|
if (PrimaryForm.Instance.InvokeRequired)
|
|
{
|
|
PrimaryForm.Instance.Invoke(new System.Action(() => PrimaryForm.Instance.videoPlayerForm.SkipToNextSong()));
|
|
}
|
|
else
|
|
{
|
|
PrimaryForm.Instance.videoPlayerForm.SkipToNextSong();
|
|
}
|
|
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.MainForm.ShowStandardLabel();
|
|
}));
|
|
}
|
|
|
|
|
|
private static void ReplayCurrentSong()
|
|
{
|
|
if (PrimaryForm.Instance.InvokeRequired)
|
|
{
|
|
PrimaryForm.Instance.Invoke(new System.Action(() => PrimaryForm.Instance.videoPlayerForm.ReplayCurrentSong()));
|
|
}
|
|
else
|
|
{
|
|
PrimaryForm.Instance.videoPlayerForm.ReplayCurrentSong();
|
|
}
|
|
}
|
|
|
|
private static void PauseOrResumeSong()
|
|
{
|
|
if (PrimaryForm.Instance.InvokeRequired)
|
|
{
|
|
PrimaryForm.Instance.Invoke(new System.Action(() => PrimaryForm.Instance.videoPlayerForm.PauseOrResumeSong()));
|
|
}
|
|
else
|
|
{
|
|
PrimaryForm.Instance.videoPlayerForm.PauseOrResumeSong();
|
|
}
|
|
}
|
|
|
|
public static void ToggleMute()
|
|
{
|
|
if (VideoPlayerForm.Instance.InvokeRequired)
|
|
{
|
|
VideoPlayerForm.Instance.Invoke(new System.Action(ToggleMute));
|
|
}
|
|
else
|
|
{
|
|
if (VideoPlayerForm.Instance.isMuted)
|
|
{
|
|
|
|
VideoPlayerForm.Instance.SetVolume(VideoPlayerForm.Instance.previousVolume);
|
|
|
|
VideoPlayerForm.Instance.isMuted = false;
|
|
OverlayForm.MainForm.Invoke(new System.Action(() => OverlayForm.MainForm.HideMuteLabel()));
|
|
}
|
|
else
|
|
{
|
|
|
|
VideoPlayerForm.Instance.previousVolume = VideoPlayerForm.Instance.GetVolume();
|
|
VideoPlayerForm.Instance.SetVolume(-10000);
|
|
|
|
VideoPlayerForm.Instance.isMuted = true;
|
|
OverlayForm.MainForm.Invoke(new System.Action(() => OverlayForm.MainForm.ShowMuteLabel()));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private void HandleInputA()
|
|
{
|
|
|
|
|
|
OverlayForm.displayTimer.Stop();
|
|
string input = "a";
|
|
|
|
|
|
string songNumber = OverlayForm.ReadSongNumber();
|
|
var song = songListManager.SearchSongByNumber(songNumber);
|
|
|
|
|
|
|
|
if (readyForSongListInput)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(input);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(input);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
if (song != null)
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = String.Format("已點歌曲:{0}", song);
|
|
OverlayForm.MainForm.AddSongToPlaylist(song);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
else
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = "輸入錯誤!!!";
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (song != null)
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = String.Format("{0}", song);
|
|
OverlayForm.MainForm.AddSongToPlaylist(song);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
else
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = "輸入錯誤!!!";
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private void HandleInputB()
|
|
{
|
|
|
|
OverlayForm.displayTimer.Stop();
|
|
string input = "b";
|
|
|
|
|
|
string songNumber = OverlayForm.ReadSongNumber();
|
|
var song = songListManager.SearchSongByNumber(songNumber);
|
|
|
|
|
|
|
|
if (readyForSongListInput)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(input);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(input);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
if (song != null)
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = String.Format("插播歌曲{0}", song);
|
|
OverlayForm.MainForm.InsertSongToPlaylist(song);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
else
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = "輸入錯誤!!!";
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (song != null)
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = String.Format("已點歌曲:{0}", song);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
ClearDisplay();
|
|
OverlayForm.MainForm.displayLabel.Text = "輸入錯誤!!!";
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
OverlayForm.displayTimer.Start();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void ClearDisplay()
|
|
{
|
|
|
|
OverlayForm.displayTimer.Stop();
|
|
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
foreach (var control in OverlayForm.MainForm.Controls.OfType<Control>().ToArray())
|
|
{
|
|
if (control != OverlayForm.MainForm.displayLabel &&
|
|
control != OverlayForm.MainForm.pauseLabel &&
|
|
control != OverlayForm.MainForm.muteLabel &&
|
|
control != OverlayForm.MainForm.volumeUpLabel &&
|
|
control != OverlayForm.MainForm.volumeDownLabel &&
|
|
control != OverlayForm.MainForm.micUpLabel &&
|
|
control != OverlayForm.MainForm.micDownLabel &&
|
|
control != OverlayForm.MainForm.standardKeyLabel &&
|
|
control != OverlayForm.MainForm.keyUpLabel &&
|
|
control != OverlayForm.MainForm.keyDownLabel &&
|
|
control != OverlayForm.MainForm.maleKeyLabel &&
|
|
control != OverlayForm.MainForm.femaleKeyLabel &&
|
|
control != OverlayForm.MainForm.squareLabel &&
|
|
control != OverlayForm.MainForm.professionalLabel &&
|
|
control != OverlayForm.MainForm.standardLabel &&
|
|
control != OverlayForm.MainForm.singDownLabel &&
|
|
control != OverlayForm.MainForm.brightLabel &&
|
|
control != OverlayForm.MainForm.softLabel &&
|
|
control != OverlayForm.MainForm.autoLabel &&
|
|
control != OverlayForm.MainForm.romanticLabel &&
|
|
control != OverlayForm.MainForm.dynamicLabel &&
|
|
control != OverlayForm.MainForm.tintLabel &&
|
|
control != OverlayForm.MainForm.blackBackgroundPanel &&
|
|
control != OverlayForm.MainForm.nextSongLabel)
|
|
{
|
|
OverlayForm.MainForm.Controls.Remove(control);
|
|
control.Dispose();
|
|
}
|
|
}
|
|
|
|
OverlayForm.MainForm.displayLabel.Text = "";
|
|
readyForSongListInput = false;
|
|
OverlayForm.SetUIState(OverlayForm.UIState.Initial);
|
|
Console.WriteLine(OverlayForm.MainForm.displayLabel.Text);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
foreach (var control in OverlayForm.MainForm.Controls.OfType<Control>().ToArray())
|
|
{
|
|
if (control != OverlayForm.MainForm.displayLabel &&
|
|
control != OverlayForm.MainForm.pauseLabel &&
|
|
control != OverlayForm.MainForm.muteLabel &&
|
|
control != OverlayForm.MainForm.volumeUpLabel &&
|
|
control != OverlayForm.MainForm.volumeDownLabel &&
|
|
control != OverlayForm.MainForm.micUpLabel &&
|
|
control != OverlayForm.MainForm.micDownLabel &&
|
|
control != OverlayForm.MainForm.standardKeyLabel &&
|
|
control != OverlayForm.MainForm.keyUpLabel &&
|
|
control != OverlayForm.MainForm.keyDownLabel &&
|
|
control != OverlayForm.MainForm.maleKeyLabel &&
|
|
control != OverlayForm.MainForm.femaleKeyLabel &&
|
|
control != OverlayForm.MainForm.squareLabel &&
|
|
control != OverlayForm.MainForm.professionalLabel &&
|
|
control != OverlayForm.MainForm.standardLabel &&
|
|
control != OverlayForm.MainForm.singDownLabel &&
|
|
control != OverlayForm.MainForm.brightLabel &&
|
|
control != OverlayForm.MainForm.softLabel &&
|
|
control != OverlayForm.MainForm.autoLabel &&
|
|
control != OverlayForm.MainForm.romanticLabel &&
|
|
control != OverlayForm.MainForm.dynamicLabel &&
|
|
control != OverlayForm.MainForm.tintLabel &&
|
|
control != OverlayForm.MainForm.blackBackgroundPanel &&
|
|
control != OverlayForm.MainForm.nextSongLabel)
|
|
{
|
|
OverlayForm.MainForm.Controls.Remove(control);
|
|
control.Dispose();
|
|
}
|
|
}
|
|
|
|
OverlayForm.MainForm.displayLabel.Text = "";
|
|
Console.WriteLine("ClearDisplay called.");
|
|
readyForSongListInput = false;
|
|
OverlayForm.SetUIState(OverlayForm.UIState.Initial);
|
|
Console.WriteLine(OverlayForm.MainForm.displayLabel.Text);
|
|
}
|
|
}
|
|
private static void DisplaySongHistory()
|
|
{
|
|
ClearDisplay();
|
|
|
|
// 設定總歌曲數量
|
|
OverlayForm.MainForm.totalSongs = PrimaryForm.playedSongsHistory.Count;
|
|
|
|
// 如果播放歷史為空
|
|
if (OverlayForm.MainForm.totalSongs == 0)
|
|
{
|
|
Console.WriteLine("No song history available.");
|
|
return;
|
|
}
|
|
|
|
// 計算總頁數
|
|
int totalPages = (int)Math.Ceiling(OverlayForm.MainForm.totalSongs / (double)OverlayForm.MainForm.songsPerPage);
|
|
int startIndex = (OverlayForm.MainForm.currentPage - 1) * OverlayForm.MainForm.songsPerPage;
|
|
int endIndex = Math.Min(startIndex + OverlayForm.MainForm.songsPerPage, OverlayForm.MainForm.totalSongs);
|
|
|
|
// 準備傳遞給 UpdateHistoryLabel 的數據
|
|
List<SongData> historySongs = new List<SongData>();
|
|
List<PlayState> playStates = new List<PlayState>();
|
|
|
|
for (int i = startIndex; i < endIndex; i++)
|
|
{
|
|
historySongs.Add(PrimaryForm.playedSongsHistory[i]);
|
|
playStates.Add(PrimaryForm.playStates[i]);
|
|
}
|
|
|
|
// 調用 UpdateHistoryLabel 顯示數據
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.MainForm.UpdateHistoryLabel(historySongs, playStates, OverlayForm.MainForm.currentPage, totalPages);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
OverlayForm.MainForm.UpdateHistoryLabel(historySongs, playStates, OverlayForm.MainForm.currentPage, totalPages);
|
|
OverlayForm.MainForm.nextSongLabel.Visible = false;
|
|
}
|
|
|
|
// 設定 UI 狀態
|
|
OverlayForm.SetUIState(OverlayForm.UIState.PlayHistory);
|
|
}
|
|
|
|
|
|
|
|
private static void PreviousPage()
|
|
{
|
|
if (OverlayForm.CurrentUIState == OverlayForm.UIState.SelectingSong)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
OverlayForm.MainForm.PreviousPage();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
OverlayForm.MainForm.PreviousPage();
|
|
}
|
|
}
|
|
else if (OverlayForm.CurrentUIState == OverlayForm.UIState.SelectingArtist)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
OverlayForm.MainForm.PreviousPage();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
OverlayForm.MainForm.PreviousPage();
|
|
}
|
|
}
|
|
else if (OverlayForm.CurrentUIState == OverlayForm.UIState.PlayHistory)
|
|
{
|
|
if (OverlayForm.MainForm.currentPage > 1)
|
|
{
|
|
OverlayForm.MainForm.currentPage--;
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
DisplaySongHistory();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
DisplaySongHistory();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("Page turning is not allowed in the current state.");
|
|
}
|
|
}
|
|
|
|
private static void NextPage()
|
|
{
|
|
if (OverlayForm.CurrentUIState == OverlayForm.UIState.SelectingSong)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
OverlayForm.MainForm.NextPage();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
OverlayForm.MainForm.NextPage();
|
|
}
|
|
}
|
|
else if (OverlayForm.CurrentUIState == OverlayForm.UIState.SelectingArtist)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
OverlayForm.MainForm.NextPage();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
OverlayForm.MainForm.NextPage();
|
|
}
|
|
}
|
|
else if (OverlayForm.CurrentUIState == OverlayForm.UIState.PlayHistory)
|
|
{
|
|
if (OverlayForm.MainForm.currentPage * OverlayForm.MainForm.songsPerPage < OverlayForm.MainForm.totalSongs)
|
|
{
|
|
OverlayForm.MainForm.currentPage++;
|
|
if (OverlayForm.CurrentUIState == OverlayForm.UIState.PlayHistory)
|
|
{
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
DisplaySongHistory();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
DisplaySongHistory();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("Page turning is not allowed in the current state.");
|
|
}
|
|
}
|
|
|
|
private static void HandleNewSongAnnouncements()
|
|
{
|
|
ClearDisplay();
|
|
|
|
|
|
OverlayForm.CurrentCategory = OverlayForm.Category.NewSongs;
|
|
|
|
|
|
string[] messages = new string[]
|
|
{
|
|
"新歌快訊",
|
|
"1. 國語",
|
|
"2. 台語",
|
|
"3. 粵語",
|
|
"4. 英語",
|
|
"5. 日語",
|
|
"6. 韓語",
|
|
};
|
|
|
|
|
|
readyForSongListInput = true;
|
|
|
|
|
|
OverlayForm.SetUIState(OverlayForm.UIState.SelectingLanguage);
|
|
|
|
|
|
UpdateDisplayLabels(messages);
|
|
}
|
|
|
|
private static void HandleHotSongAnnouncements()
|
|
{
|
|
ClearDisplay();
|
|
|
|
|
|
OverlayForm.CurrentCategory = OverlayForm.Category.HotSongs;
|
|
|
|
|
|
string[] messages = new string[]
|
|
{
|
|
"熱門排行",
|
|
"1. 國語",
|
|
"2. 台語",
|
|
"3. 粵語",
|
|
"4. 英語",
|
|
"5. 日語",
|
|
"6. 韓語",
|
|
};
|
|
|
|
|
|
readyForSongListInput = true;
|
|
|
|
|
|
OverlayForm.SetUIState(OverlayForm.UIState.SelectingLanguage);
|
|
|
|
|
|
UpdateDisplayLabels(messages);
|
|
}
|
|
|
|
private static void HandleArtistAnnouncements()
|
|
{
|
|
ClearDisplay();
|
|
|
|
|
|
OverlayForm.CurrentCategory = OverlayForm.Category.Artists;
|
|
|
|
|
|
string[] messages = new string[]
|
|
{
|
|
"歌星選歌",
|
|
"1.男歌星",
|
|
"2.女歌星",
|
|
"3.團體",
|
|
"4.外語",
|
|
"5.全部",
|
|
};
|
|
|
|
|
|
readyForSongListInput = true;
|
|
|
|
|
|
OverlayForm.SetUIState(OverlayForm.UIState.SelectingArtistCategory);
|
|
|
|
|
|
UpdateDisplayLabels(messages);
|
|
}
|
|
|
|
private static void UpdateDisplayLabels(string[] messages)
|
|
{
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
|
|
foreach (var control in OverlayForm.MainForm.Controls.OfType<Control>().ToArray())
|
|
{
|
|
if (control != OverlayForm.MainForm.displayLabel &&
|
|
control != OverlayForm.MainForm.pauseLabel &&
|
|
control != OverlayForm.MainForm.muteLabel &&
|
|
control != OverlayForm.MainForm.volumeUpLabel &&
|
|
control != OverlayForm.MainForm.volumeDownLabel &&
|
|
control != OverlayForm.MainForm.micUpLabel &&
|
|
control != OverlayForm.MainForm.micDownLabel &&
|
|
control != OverlayForm.MainForm.standardKeyLabel &&
|
|
control != OverlayForm.MainForm.keyUpLabel &&
|
|
control != OverlayForm.MainForm.keyDownLabel &&
|
|
control != OverlayForm.MainForm.maleKeyLabel &&
|
|
control != OverlayForm.MainForm.femaleKeyLabel &&
|
|
control != OverlayForm.MainForm.squareLabel &&
|
|
control != OverlayForm.MainForm.professionalLabel &&
|
|
control != OverlayForm.MainForm.standardLabel &&
|
|
control != OverlayForm.MainForm.singDownLabel &&
|
|
control != OverlayForm.MainForm.brightLabel &&
|
|
control != OverlayForm.MainForm.softLabel &&
|
|
control != OverlayForm.MainForm.autoLabel &&
|
|
control != OverlayForm.MainForm.romanticLabel &&
|
|
control != OverlayForm.MainForm.dynamicLabel &&
|
|
control != OverlayForm.MainForm.tintLabel &&
|
|
control != OverlayForm.MainForm.blackBackgroundPanel &&
|
|
control != OverlayForm.MainForm.nextSongLabel)
|
|
{
|
|
OverlayForm.MainForm.Controls.Remove(control);
|
|
control.Dispose();
|
|
}
|
|
}
|
|
OverlayForm.MainForm.UpdateDisplayLabels(messages);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
foreach (var control in OverlayForm.MainForm.Controls.OfType<Control>().ToArray())
|
|
{
|
|
if (control != OverlayForm.MainForm.displayLabel &&
|
|
control != OverlayForm.MainForm.pauseLabel &&
|
|
control != OverlayForm.MainForm.muteLabel &&
|
|
control != OverlayForm.MainForm.volumeUpLabel &&
|
|
control != OverlayForm.MainForm.volumeDownLabel &&
|
|
control != OverlayForm.MainForm.micUpLabel &&
|
|
control != OverlayForm.MainForm.micDownLabel &&
|
|
control != OverlayForm.MainForm.standardKeyLabel &&
|
|
control != OverlayForm.MainForm.keyUpLabel &&
|
|
control != OverlayForm.MainForm.keyDownLabel &&
|
|
control != OverlayForm.MainForm.maleKeyLabel &&
|
|
control != OverlayForm.MainForm.femaleKeyLabel &&
|
|
control != OverlayForm.MainForm.squareLabel &&
|
|
control != OverlayForm.MainForm.professionalLabel &&
|
|
control != OverlayForm.MainForm.standardLabel &&
|
|
control != OverlayForm.MainForm.singDownLabel &&
|
|
control != OverlayForm.MainForm.brightLabel &&
|
|
control != OverlayForm.MainForm.softLabel &&
|
|
control != OverlayForm.MainForm.autoLabel &&
|
|
control != OverlayForm.MainForm.romanticLabel &&
|
|
control != OverlayForm.MainForm.dynamicLabel &&
|
|
control != OverlayForm.MainForm.tintLabel &&
|
|
control != OverlayForm.MainForm.blackBackgroundPanel &&
|
|
control != OverlayForm.MainForm.nextSongLabel)
|
|
{
|
|
OverlayForm.MainForm.Controls.Remove(control);
|
|
control.Dispose();
|
|
}
|
|
}
|
|
OverlayForm.MainForm.UpdateDisplayLabels(messages);
|
|
}
|
|
}
|
|
|
|
private static void HandleNumberInput(string trimmedData)
|
|
{
|
|
string number = trimmedData;
|
|
|
|
|
|
var match = Regex.Match(trimmedData, @"^A23(\d)A4$");
|
|
if (match.Success)
|
|
{
|
|
number = match.Groups[1].Value;
|
|
|
|
Console.WriteLine($"Handling number: {number}");
|
|
|
|
}
|
|
|
|
|
|
if (readyForSongListInput)
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(number);
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
OverlayForm.MainForm.OnUserInput(number);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
if (OverlayForm.MainForm.InvokeRequired)
|
|
{
|
|
OverlayForm.MainForm.Invoke(new System.Action(() =>
|
|
{
|
|
OverlayForm.DisplayNumberAtTopLeft(number);
|
|
OverlayForm.MainForm.HideAllLabels();
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
OverlayForm.DisplayNumberAtTopLeft(number);
|
|
OverlayForm.MainForm.HideAllLabels();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static bool CheckLogForShutdown(string filePath)
|
|
{
|
|
if (File.Exists(filePath))
|
|
{
|
|
|
|
string content = File.ReadAllText(filePath).Replace(Environment.NewLine, "");
|
|
if (content.Length >= 6 && content.Substring(content.Length - 6) == "bbbaaa")
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static void ShutdownComputer()
|
|
{
|
|
try
|
|
{
|
|
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/c shutdown /s /f /t 0")
|
|
{
|
|
CreateNoWindow = true,
|
|
UseShellExecute = false,
|
|
RedirectStandardOutput = true
|
|
};
|
|
Process process = Process.Start(processStartInfo);
|
|
process.WaitForExit();
|
|
Console.WriteLine("Computer is shutting down...");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Error shutting down computer: " + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
} |