diff --git a/WinPlaza/MainWindow.xaml.cs b/WinPlaza/MainWindow.xaml.cs index 86ca9ed..1ea3ad4 100644 --- a/WinPlaza/MainWindow.xaml.cs +++ b/WinPlaza/MainWindow.xaml.cs @@ -29,6 +29,7 @@ namespace WinPlaza { private delegate void dgtNoParam(); private delegate void dgtBool(bool b); private delegate void dgtStr(string s); + private delegate void dgtCtrl(System.Windows.Controls.Control c); #endregion #region CrossThreadCalls private void Leveller() { @@ -37,6 +38,8 @@ namespace WinPlaza { chLeft.Width = Bass.ChannelGetLevelLeft(BuffCh) / GfxWidthStep; chRight.Width = Bass.ChannelGetLevelRight(BuffCh) / GfxWidthStep; } + private void DgtToggleEnabled(System.Windows.Controls.Control c) => + c.IsEnabled = !c.IsEnabled; private void SetStatus(string msg) => Dispatcher.BeginInvoke(new dgtStr(_Status), msg); private void SetTitle(string msg) => @@ -161,10 +164,12 @@ namespace WinPlaza { private void BtPlayPause_Click(object sender, RoutedEventArgs e) { if(!AudioInit) return; + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btPlayPause); if(btPlayPause.IsChecked == true) _ = Dispatcher.BeginInvoke(new dgtNoParam(PlazaLoad)); else _ = Dispatcher.BeginInvoke(new dgtNoParam(PlazaStop)); + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btPlayPause); } private void SbMute_Click(object sender, RoutedEventArgs e) { if(MuteVol<0) { @@ -189,39 +194,62 @@ namespace WinPlaza { Bass.GlobalStreamVolume = (int)sbVol.Value * 100; } private async void BtLogin_Click(object sender, RoutedEventArgs e) { + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLogin); CredentialResult _c=CredentialManager.PromptForCredentials(messageText:"Please log into your Nightwave Plaza account", captionText:"Log into plaza.one"); if(_c is null) return; - CredentialManager.WriteCredential("Nightwave.NET", _c.UserName, _c.Password, CredentialPersistence.Enterprise); - Credential c=CredentialManager.ReadCredential("Nightwave.NET"); - if(c is null) - throw new Exception("what the fuck"); - Console.WriteLine($"did login work? {await plaza.Login(c.UserName, c.Password)}"); - Console.WriteLine($"can validate? {await plaza.CheckSession()}"); -#if DEBUG - Console.WriteLine($"token is {plaza.GetAuthorizationToken()}"); -#endif +//#if DEBUG +// Console.WriteLine($"did login work? {await plaza.Login(c.UserName, c.Password)}"); +// Console.WriteLine($"can validate? {await plaza.CheckSession()}"); +// Console.WriteLine($"token is {plaza.GetAuthorizationToken()}"); +//#else + if(!await plaza.Login(_c.UserName, _c.Password)) { + SetStatus("Login failed! Please try again."); + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLogin); + return; + } + //user may have stored credentials and not want to keep them any more, delete with reckless abandon. + CredentialManager.DeleteCredential("Nightwave.NET"); + if(_c.CredentialSaved == CredentialSaveOption.Selected) { + CredentialManager.WriteCredential("Nightwave.NET", _c.UserName, _c.Password, CredentialPersistence.Enterprise); + Credential c=CredentialManager.ReadCredential("Nightwave.NET"); + if(c is null) { + SetStatus("Problem saving to Windows Credential store. Sorry."); + throw new Exception("what the fuck"); + } + } + if(!await plaza.CheckSession()) { + SetStatus("Something went wrong during login! Sorry."); + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLogin); + return; + } + //#endif btLogin.IsEnabled = false; btLogin.Visibility = Visibility.Hidden; imLogin.IsEnabled = false; imLogin.Visibility = Visibility.Hidden; + SetStatus($"Logged in as {await plaza.GetUser()}"); } private async void BtLike_Click(object sender, RoutedEventArgs e) { + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLike); Nightwave.Vote v = Nightwave.Vote.Like; if(LikedCTrack) v = Nightwave.Vote.Favourite; if(await plaza.CastVote(v)) { SetStatus($"Submitted {v}!"); - LikedCTrack = !LikedCTrack; //This should allow "un-favouriting" + LikedCTrack = !LikedCTrack; } else SetStatus($"Something went weird while casting {v}"); + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLike); _ = Dispatcher.BeginInvoke(new dgtBool(DgtRefresh), true); } private async void BtDislike_Click(object sender, RoutedEventArgs e) { + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btDislike); if(await plaza.CastVote(Nightwave.Vote.Dislike)) SetStatus("Song disliked!"); else SetStatus("Something went weird while disliking"); + _ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btDislike); LikedCTrack = false; _ = Dispatcher.BeginInvoke(new dgtBool(DgtRefresh), true); }