KaraokePC/TestSelector/Form1.cs

166 lines
5.3 KiB
C#

using KaraokePlayer.Classes;
using KaraokePlayer.Enums;
using KaraokePlayer.Interfaces;
using FirebaseKaraoke.Extensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using TagLib;
namespace TestSelector
{
public partial class Form1 : Form
{
FirebaseController controller;
public Form1()
{
InitializeComponent();
controller = new FirebaseController(
clientId: FirebaseController.TestGuid,
stateChanged: (args) =>
{
if (args.State == KaraokePlayer.Enums.PlayerState.Play)
{
this.Invoke(new Action(() => { buttonUpdateForPause(); }));
}
else if (args.State == KaraokePlayer.Enums.PlayerState.Pause)
{
this.Invoke(new Action(() => { buttonUpdateForPlay(); }));
}
else if (args.State == KaraokePlayer.Enums.PlayerState.Stop)
{
this.Invoke(new Action(() => { buttonUpdateForPlay(); }));
}
},
songChanged: (args) =>
{
this.Invoke(new Action(() => { buttonUpdateForPlay(); }));
},
playQueueChanged:() => {
this.Invoke(new Action(() => { updatePlayQueue(); }));
}
);
}
private List<FileInfo> _fileList;
private List<ISong> _playQueue;
private void updatePlayQueue()
{
_playQueue = controller.PlayQueue;
listBox2.DataSource = null;
listBox2.DataSource = _playQueue;
listBox2.DisplayMember = "Description";
}
private void buttonUpdateForPlay()
{
button3.Text = "Play";
}
private void buttonUpdateForPause()
{
button3.Text = "Pause";
}
private void button1_Click(object sender, EventArgs e)
{
if (browseDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var files = GetFiles(browseDialog.SelectedPath, "*.cdg|*.mp4", searchOption: System.IO.SearchOption.AllDirectories);
var filtered = files.Where(f => f.Length < 248).ToList();
_fileList = filtered.Select(file => new FileInfo(file)).ToList();
listBox1.DataSource = _fileList;
listBox1.DisplayMember = "Name";
}
}
private static string[] GetFiles(string path, string searchPattern, SearchOption searchOption)
{
string[] searchPatterns = searchPattern.Split('|');
List<string> files = new List<string>();
foreach (string sp in searchPatterns)
files.AddRange(System.IO.Directory.GetFiles(path, sp, searchOption));
files.Sort();
return files.ToArray();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
listBox1.DataSource = _fileList.Where(file => Regex.IsMatch(file.Name, textBox1.Text, RegexOptions.IgnoreCase)).ToList();
}
private void button2_Click(object sender, EventArgs e)
{
FileInfo file = (FileInfo)listBox1.SelectedItem;
TagLib.File tag = null;
FirebaseSong song = new FirebaseSong();
if (file.Extension.ToLower() == ".cdg")
{
tag = TagLib.File.Create(Path.ChangeExtension(file.FullName, ".mp3"));
song.FileType = FileType.CDG;
}
else if (file.Extension.ToLower() == ".mp4")
{
tag = TagLib.File.Create(file.FullName);
song.FileType = FileType.MP4;
}
song.Order = controller.PlayQueue.Count() + 1;
song.Title = tag.Tag.Title;
song.Artist = tag.Tag.Performers[0];
song.Path = file.FullName.Replace(@"D:\KaraokeData\Karaoke\", @"Z:\");
song.Id = song.Path.ToGUID();
controller.AddSong(song);
}
private void button3_Click(object sender, EventArgs e)
{
if (button3.Text == "Play")
{
controller.Play();
} else
{
controller.Pause();
}
}
private void button4_Click(object sender, EventArgs e)
{
controller.Stop();
}
private void button5_Click(object sender, EventArgs e)
{
controller.RemoveSong(controller.CurrentSong);
controller.NextSong();
}
private void button6_Click(object sender, EventArgs e)
{
ISong song = (ISong)listBox2.SelectedItem;
controller.PlaySong(song);
}
private void button7_Click(object sender, EventArgs e)
{
ISong song = (ISong)listBox2.SelectedItem;
controller.RemoveSong(song);
}
private void button8_Click(object sender, EventArgs e)
{
controller.SkipSong();
}
}
}