KaraokePC/KaraokePlayer/MainForm.cs
2016-08-19 18:46:57 -07:00

85 lines
2.8 KiB
C#

using System;
using MaterialSkin;
using MaterialSkin.Controls;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.IO.Compression;
using System.Windows.Forms;
using KaraokePlayer.Classes;
using System.Threading.Tasks;
using System.Configuration;
using Herse.Models;
namespace KaraokePlayer
{
public partial class MainForm : Form
{
private SongInfoForm songInfoForm = new SongInfoForm();
private delegate void Action();
private FirebaseController controller;
private PlayerWrapper player;
public MainForm()
{
InitializeComponent();
player = new PlayerWrapper(karaokeCDGPlayer, karaokeMP4Player);
player.OnSongEnded += SongEnded;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.ShowInTaskbar = true;
string controllerId = ConfigurationManager.AppSettings["KaraokePlayer.ControllerId"];
//labelParty.Text = string.Format("https://herse.firebaseapp.com/ party: {0}", controllerId);
controller = new FirebaseController(
clientId: controllerId,
stateChanged: (args) =>
{
switch (args.State)
{
case PlayerState.Playing:
this.Invoke(new Action(() => {
songInfoForm.Hide();
player.play();
}));
break;
case PlayerState.Paused:
this.Invoke(new Action(() => { player.pause(); }));
break;
case PlayerState.Stopped:
this.Invoke(new Action(() => { player.stop(); }));
break;
}
},
songChanged: (args) =>
{
this.Invoke(new Action(() => { player.stop(); }));
player.Song = args.Song;
this.Invoke(new Action(() => { previewSong(); }));
}
);
controller.SetState(PlayerState.Stopped);
}
public void SongEnded()
{
controller.EndSong();
}
private async void previewSong()
{
songInfoForm.Update(player.Song);
songInfoForm.Show();
if(controller.Settings == null || controller.Settings.AutoAdvance)
{
await Task.Delay(TimeSpan.FromSeconds(10));
player.play();
controller.SetState(PlayerState.Playing);
songInfoForm.Hide();
}
}
}
}