From 187de975036dccde549f020d4d94898ac9e77b82 Mon Sep 17 00:00:00 2001 From: watsonb8 Date: Wed, 4 Dec 2019 14:53:49 -0800 Subject: [PATCH] Using System.Diagnostics.Debug. First pass at player controls styling --- Aurora.gtk/Aurora.gtk.csproj | 11 ++++ Aurora.gtk/Resources/loop.png | Bin 0 -> 15234 bytes Aurora.gtk/Resources/menu.png | Bin 0 -> 11676 bytes Aurora.gtk/Resources/pause.png | Bin 0 -> 11725 bytes Aurora.gtk/Resources/shuffle.png | Bin 0 -> 18127 bytes .../Design/Components/MediaPlayer/Player.css | 22 ++++++-- .../Design/Components/MediaPlayer/Player.xaml | 30 +++++----- .../Components/MediaPlayer/Player.xaml.cs | 52 +++++++++++++----- Aurora/Design/Converters/PlayIconConverter.cs | 10 ++++ Aurora/Design/Views/BaseViewModel.cs | 2 + Aurora/Design/Views/MainView/MainView.css | 4 +- Aurora/Design/Views/MainView/MainView.xaml | 43 ++++++++------- Aurora/Design/Views/MainView/MainView.xaml.cs | 12 +++- Aurora/Design/Views/Party/PartyViewModel.cs | 8 +-- Aurora/Design/Views/Songs/SongsViewModel.cs | 22 +++----- Aurora/Models/Media/RemoteAudio.cs | 4 +- Aurora/RemoteImpl/RemoteEventImpl.cs | 6 +- Aurora/RemoteImpl/RemotePartyImpl.cs | 4 +- Aurora/RemoteImpl/RemotePlaybackImpl.cs | 6 +- Aurora/RemoteImpl/RemoteSyncImpl.cs | 2 +- .../Services/ClientService/ClientService.cs | 6 +- Aurora/Services/EventManager/EventManager.cs | 2 +- .../Services/PlayerService/PlayerService.cs | 18 +++--- Aurora/Services/ServerService.cs | 4 +- Aurora/Utils/FileSystemUtils.cs | 2 +- 25 files changed, 169 insertions(+), 101 deletions(-) create mode 100644 Aurora.gtk/Resources/loop.png create mode 100644 Aurora.gtk/Resources/menu.png create mode 100644 Aurora.gtk/Resources/pause.png create mode 100644 Aurora.gtk/Resources/shuffle.png create mode 100644 Aurora/Design/Converters/PlayIconConverter.cs diff --git a/Aurora.gtk/Aurora.gtk.csproj b/Aurora.gtk/Aurora.gtk.csproj index 8635ae6..f8b3f26 100644 --- a/Aurora.gtk/Aurora.gtk.csproj +++ b/Aurora.gtk/Aurora.gtk.csproj @@ -518,6 +518,17 @@ PreserveNewest + + PreserveNewest + + + + + PreserveNewest + + + PreserveNewest + diff --git a/Aurora.gtk/Resources/loop.png b/Aurora.gtk/Resources/loop.png new file mode 100644 index 0000000000000000000000000000000000000000..4adfaa9a67b4c69b27fe5635652858ad8d3e40b0 GIT binary patch literal 15234 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 VZL{|!>9Cyu$_g6t70=B={|}4xM@s+z literal 0 HcmV?d00001 diff --git a/Aurora.gtk/Resources/pause.png b/Aurora.gtk/Resources/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc2a01856014481102bc5bf37e6507355546716 GIT binary patch literal 11725 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 + Width="150"/> - @@ -38,8 +43,7 @@ x:Name="PreviousButton" Source="Resources/backward.png"/> + x:Name="PlayButton"/> diff --git a/Aurora/Design/Components/MediaPlayer/Player.xaml.cs b/Aurora/Design/Components/MediaPlayer/Player.xaml.cs index f00fbe1..8f3802b 100644 --- a/Aurora/Design/Components/MediaPlayer/Player.xaml.cs +++ b/Aurora/Design/Components/MediaPlayer/Player.xaml.cs @@ -9,6 +9,7 @@ namespace Aurora.Design.Components.MediaPlayer { InitializeComponent(); + PlayButton.Source = ImageSource.FromFile("Resources/play.png"); } #region SongTitle Bindable @@ -16,7 +17,11 @@ namespace Aurora.Design.Components.MediaPlayer BindableProperty.Create(propertyName: "SongTitle", returnType: typeof(string), declaringType: typeof(Player), - propertyChanged: OnSongTitlePropertyChanged); + propertyChanged: (BindableObject bindable, object oldValue, object newValue) => + { + Player component = bindable as Player; + component.SongTitleLabel.Text = (string)newValue; + }); public string SongTitle { @@ -30,12 +35,6 @@ namespace Aurora.Design.Components.MediaPlayer } } - private static void OnSongTitlePropertyChanged(BindableObject bindable, object oldValue, object newValue) - { - Player component = bindable as Player; - component.SongTitleLabel.Text = (string)newValue; - } - #endregion SongTitle Bindable #region ArtistName Bindable @@ -43,7 +42,11 @@ namespace Aurora.Design.Components.MediaPlayer BindableProperty.Create(propertyName: "ArtistName", returnType: typeof(string), declaringType: typeof(Player), - propertyChanged: OnArtistNamePropertyChanged); + propertyChanged: (BindableObject bindable, object oldValue, object newValue) => + { + Player component = bindable as Player; + component.ArtistNameLabel.Text = (string)newValue; + }); public string ArtistName { @@ -57,12 +60,6 @@ namespace Aurora.Design.Components.MediaPlayer } } - private static void OnArtistNamePropertyChanged(BindableObject bindable, object oldValue, object newValue) - { - Player component = bindable as Player; - component.ArtistNameLabel.Text = (string)newValue; - } - #endregion ArtistName Bindable #region PreviousButton @@ -275,5 +272,32 @@ namespace Aurora.Design.Components.MediaPlayer component.NextButton.IsEnabled = cmd.CanExecute(null); } #endregion PlayButton + + #region Playing Bindable + public static readonly BindableProperty IsPlayingProperty = + BindableProperty.Create( + propertyName: "IsPlaying", + returnType: typeof(bool), + declaringType: typeof(Player), + propertyChanged: (BindableObject bindable, object oldValue, object newValue) => + { + Player control = (Player)bindable; + if ((bool)newValue == true) + { + control.PlayButton.Source = ImageSource.FromFile("Resources/pause.png"); + } + else + { + control.PlayButton.Source = ImageSource.FromFile("Resources/play.png"); + } + }); + + public bool IsPlaying + { + get { return (bool)GetValue(IsPlayingProperty); } + set { SetValue(IsPlayingProperty, value); } + } + + #endregion Playing Binadable } } diff --git a/Aurora/Design/Converters/PlayIconConverter.cs b/Aurora/Design/Converters/PlayIconConverter.cs new file mode 100644 index 0000000..f1da0c6 --- /dev/null +++ b/Aurora/Design/Converters/PlayIconConverter.cs @@ -0,0 +1,10 @@ +using System; +namespace Aurora.Design.Converters +{ + public class PlayIconConverter + { + public PlayIconConverter() + { + } + } +} diff --git a/Aurora/Design/Views/BaseViewModel.cs b/Aurora/Design/Views/BaseViewModel.cs index 221b0a4..1a6c81c 100644 --- a/Aurora/Design/Views/BaseViewModel.cs +++ b/Aurora/Design/Views/BaseViewModel.cs @@ -72,6 +72,8 @@ namespace Aurora.Design.Views public SetPlayerVisibleDelegate SetPlayerVisible { get; set; } + public SetIsPlayingDelegate SetIsPlaying { get; set; } + #endregion Player #region Lifecycle diff --git a/Aurora/Design/Views/MainView/MainView.css b/Aurora/Design/Views/MainView/MainView.css index 77cbc0e..115671d 100644 --- a/Aurora/Design/Views/MainView/MainView.css +++ b/Aurora/Design/Views/MainView/MainView.css @@ -3,7 +3,7 @@ } #Header { - background-color: #232323; + background-color: transparent; } #Header > Entry { @@ -14,7 +14,7 @@ #TitleContainer { margin-top: 10; - background-color: #3a3a3a; + background-color: transparent; } #TitleContainer Label { diff --git a/Aurora/Design/Views/MainView/MainView.xaml b/Aurora/Design/Views/MainView/MainView.xaml index c0a1c47..9107a9e 100644 --- a/Aurora/Design/Views/MainView/MainView.xaml +++ b/Aurora/Design/Views/MainView/MainView.xaml @@ -17,10 +17,15 @@ + + + + @@ -28,35 +33,31 @@ - - - - - - + + - - - - - + + + x:Name="Player" + Grid.Row="3" + Grid.ColumnSpan="2" + HeightRequest="50"/> \ No newline at end of file diff --git a/Aurora/Design/Views/MainView/MainView.xaml.cs b/Aurora/Design/Views/MainView/MainView.xaml.cs index c09cb8a..735617f 100644 --- a/Aurora/Design/Views/MainView/MainView.xaml.cs +++ b/Aurora/Design/Views/MainView/MainView.xaml.cs @@ -17,7 +17,9 @@ namespace Aurora.Design.Views.Main /// public delegate void SetPlayerMetadataDelegate(BaseMedia media); - public delegate void SetPlayerVisibleDelegate(Boolean visible); + public delegate void SetPlayerVisibleDelegate(bool visible); + + public delegate void SetIsPlayingDelegate(bool playing); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class MainView : ContentPage//, IDisposable @@ -139,6 +141,7 @@ namespace Aurora.Design.Views.Main { vm.SetPlayerMetadata = null; vm.SetPlayerVisible = null; + vm.SetIsPlaying = null; } /// @@ -152,8 +155,10 @@ namespace Aurora.Design.Views.Main _player.PreviousButtonCommand = new Command(vm.OnPreviousButtonExecute, vm.CanPreviousButtonExecute); //Assign SetPlayer delegate + vm.SetPlayerMetadata = SetPlayer; vm.SetPlayerVisible = SetPlayerVisible; + vm.SetIsPlaying = SetIsPlaying; } /// @@ -178,6 +183,11 @@ namespace Aurora.Design.Views.Main { _player.IsVisible = visible; } + + private void SetIsPlaying(bool playing) + { + _player.IsPlaying = playing; + } } } diff --git a/Aurora/Design/Views/Party/PartyViewModel.cs b/Aurora/Design/Views/Party/PartyViewModel.cs index 2c06903..1c654de 100644 --- a/Aurora/Design/Views/Party/PartyViewModel.cs +++ b/Aurora/Design/Views/Party/PartyViewModel.cs @@ -257,7 +257,7 @@ namespace Aurora.Design.Views.Party } catch (Exception ex) { - Console.WriteLine("Exception occurred while receiviing events: ", ex.Message); + System.Diagnostics.Debug.WriteLine("Exception occurred while receiviing events: ", ex.Message); } } @@ -285,7 +285,7 @@ namespace Aurora.Design.Views.Party } catch (Exception ex) { - Console.WriteLine("Exception occurred while receiviing events: ", ex.Message); + System.Diagnostics.Debug.WriteLine("Exception occurred while receiviing events: ", ex.Message); } } @@ -419,7 +419,7 @@ namespace Aurora.Design.Views.Party } catch (Exception ex) { - Console.WriteLine("Error subscribing to events: " + ex.Message); + System.Diagnostics.Debug.WriteLine("Error subscribing to events: " + ex.Message); } } @@ -449,7 +449,7 @@ namespace Aurora.Design.Views.Party } - Console.WriteLine(string.Format("CLIENT {0} - SubscribeToEvents called from client with id", SettingsService.Instance.ClientId)); + System.Diagnostics.Debug.WriteLine(string.Format("CLIENT {0} - SubscribeToEvents called from client with id", SettingsService.Instance.ClientId)); await _client.RemoteEventClient.SubscribeToEventsAsync(req); } private async Task UnsubscribeFromEvents() diff --git a/Aurora/Design/Views/Songs/SongsViewModel.cs b/Aurora/Design/Views/Songs/SongsViewModel.cs index 95fad12..cc34b7a 100644 --- a/Aurora/Design/Views/Songs/SongsViewModel.cs +++ b/Aurora/Design/Views/Songs/SongsViewModel.cs @@ -22,8 +22,6 @@ namespace Aurora.Design.Views.Songs _songsList = new ObservableCollection(); PlayCommand = new Command(OnPlayButtonExecute, CanPlayButtonExecute); - _player.PlaybackStateChanged += OnPlaybackStateChanged; - Initialize(); } @@ -87,6 +85,10 @@ namespace Aurora.Design.Views.Songs public async override void OnPlayButtonExecute() { + if (_selectedSong == null) + { + return; + } base.Media = _selectedSong; if (!_player.IsMediaLoaded(base.Media)) { @@ -98,16 +100,19 @@ namespace Aurora.Design.Views.Songs case PlaybackState.Buffering: { _player.Play(); + SetIsPlaying(true); break; } case PlaybackState.Playing: { _player.Pause(); + SetIsPlaying(false); break; } case PlaybackState.Stopped: { _player.Play(); + SetIsPlaying(true); break; } } @@ -124,18 +129,5 @@ namespace Aurora.Design.Views.Songs } #endregion Commands - - #region Events - /// - /// PlayerService playback state changed event handler. - /// - /// The sending object. - /// Event arguments. - public void OnPlaybackStateChanged(object sender, PlaybackStateChangedEventArgs args) - { - OnPropertyChanged("PlayButtonText"); - } - - #endregion Events } } diff --git a/Aurora/Models/Media/RemoteAudio.cs b/Aurora/Models/Media/RemoteAudio.cs index 679b57e..31ef1d3 100644 --- a/Aurora/Models/Media/RemoteAudio.cs +++ b/Aurora/Models/Media/RemoteAudio.cs @@ -69,11 +69,11 @@ namespace Aurora.Models.Media await this.DataStream.WriteAsync(buffer, 0, buffer.Length); } - Console.WriteLine("Done receiving stream"); + System.Diagnostics.Debug.WriteLine("Done receiving stream"); } catch (Exception ex) { - Console.WriteLine("Exception caught while loading remote audio:" + ex.Message); + System.Diagnostics.Debug.WriteLine("Exception caught while loading remote audio:" + ex.Message); } } await base.Load(); diff --git a/Aurora/RemoteImpl/RemoteEventImpl.cs b/Aurora/RemoteImpl/RemoteEventImpl.cs index 5bbe42e..c2778c2 100644 --- a/Aurora/RemoteImpl/RemoteEventImpl.cs +++ b/Aurora/RemoteImpl/RemoteEventImpl.cs @@ -28,12 +28,12 @@ namespace Aurora.RemoteImpl Grpc.Core.ServerCallContext context) { string peerId = Combine(new string[] { context.Peer, request.ClientId }); - Console.WriteLine(string.Format("SERVER - Events request received from peer: {0}", peerId)); + System.Diagnostics.Debug.WriteLine(string.Format("SERVER - Events request received from peer: {0}", peerId)); AutoResetEvent are = new AutoResetEvent(false); Action callback = (BaseEvent bEvent) => { - Console.WriteLine(string.Format("SERVER - Event fired for peer: {0}", peerId)); + System.Diagnostics.Debug.WriteLine(string.Format("SERVER - Event fired for peer: {0}", peerId)); //TODO need to remove callback if stream no longer exists IE. Client crashed or stopped responseStream.WriteAsync(bEvent); @@ -52,7 +52,7 @@ namespace Aurora.RemoteImpl /// public override Task SubscribeToEvents(SubscribeRequest request, Grpc.Core.ServerCallContext context) { - Console.WriteLine(string.Format("SERVER - Subscription from client with id: {0}", request.ClientId)); + System.Diagnostics.Debug.WriteLine(string.Format("SERVER - Subscription from client with id: {0}", request.ClientId)); EventManager.Instance.AddSubscriptionList(Combine(new string[] { context.Peer, request.ClientId }), request.EventTypes.ToList()); return Task.FromResult(new SubscriptionResponse { Successful = true }); diff --git a/Aurora/RemoteImpl/RemotePartyImpl.cs b/Aurora/RemoteImpl/RemotePartyImpl.cs index ddbca26..86ba4a3 100644 --- a/Aurora/RemoteImpl/RemotePartyImpl.cs +++ b/Aurora/RemoteImpl/RemotePartyImpl.cs @@ -40,7 +40,7 @@ namespace Aurora.RemoteImpl IpAddress = context.Host, }; - Console.WriteLine("SERVER - Client joined party: " + partyMember.Id); + System.Diagnostics.Debug.WriteLine("SERVER - Client joined party: " + partyMember.Id); _partyMembers.Add(partyMember); @@ -128,7 +128,7 @@ namespace Aurora.RemoteImpl } catch (Exception ex) { - Console.WriteLine(string.Format("Error preparing queue: {0}", ex.Message)); + System.Diagnostics.Debug.WriteLine(string.Format("Error preparing queue: {0}", ex.Message)); } } diff --git a/Aurora/RemoteImpl/RemotePlaybackImpl.cs b/Aurora/RemoteImpl/RemotePlaybackImpl.cs index 17da449..71714d5 100644 --- a/Aurora/RemoteImpl/RemotePlaybackImpl.cs +++ b/Aurora/RemoteImpl/RemotePlaybackImpl.cs @@ -33,7 +33,7 @@ namespace Aurora.RemoteImpl } //Send stream - Console.WriteLine("Begin sending file"); + System.Diagnostics.Debug.WriteLine("Begin sending file"); byte[] buffer = new byte[2048]; // read in chunks of 2KB int bytesRead; while ((bytesRead = songCopy.DataStream.Read(buffer, 0, buffer.Length)) > 0) @@ -41,11 +41,11 @@ namespace Aurora.RemoteImpl Google.Protobuf.ByteString bufferByteString = Google.Protobuf.ByteString.CopyFrom(buffer); await responseStream.WriteAsync(new Chunk { Content = bufferByteString }); } - Console.WriteLine("Done sending file"); + System.Diagnostics.Debug.WriteLine("Done sending file"); } catch (Exception ex) { - Console.WriteLine("Exception caught while sending audio file: " + ex.Message); + System.Diagnostics.Debug.WriteLine("Exception caught while sending audio file: " + ex.Message); } } } diff --git a/Aurora/RemoteImpl/RemoteSyncImpl.cs b/Aurora/RemoteImpl/RemoteSyncImpl.cs index eddaac0..4493e43 100644 --- a/Aurora/RemoteImpl/RemoteSyncImpl.cs +++ b/Aurora/RemoteImpl/RemoteSyncImpl.cs @@ -41,7 +41,7 @@ namespace Aurora.RemoteImpl ServerTimeTicks = Utils.TimeUtils.GetNetworkTime().DateTime.Ticks }; await responseStream.WriteAsync(sync); - Console.WriteLine("Sent Sync"); + System.Diagnostics.Debug.WriteLine("Sent Sync"); await Task.Delay(5000); } } diff --git a/Aurora/Services/ClientService/ClientService.cs b/Aurora/Services/ClientService/ClientService.cs index a3c0c58..5a661cc 100644 --- a/Aurora/Services/ClientService/ClientService.cs +++ b/Aurora/Services/ClientService/ClientService.cs @@ -95,7 +95,7 @@ namespace Aurora.Services.ClientService { _eventCancellationTokenSource = new CancellationTokenSource(); string clientId = SettingsService.Instance.ClientId; - Console.WriteLine(string.Format("CLIENT {0} - GetEvents called from client with id", clientId)); + System.Diagnostics.Debug.WriteLine(string.Format("CLIENT {0} - GetEvents called from client with id", clientId)); using (AsyncServerStreamingCall eventStream = _remoteEventsClient .GetEvents(new EventsRequest { ClientId = SettingsService.Instance.ClientId })) { @@ -126,14 +126,14 @@ namespace Aurora.Services.ClientService } catch (Exception ex) { - Console.WriteLine("Exception while parsing event ---" + ex.Message); + System.Diagnostics.Debug.WriteLine("Exception while parsing event ---" + ex.Message); } } } catch (Exception ex) { - Console.WriteLine(string.Format("EXCEPTION while parsing events --- " + ex.Message)); + System.Diagnostics.Debug.WriteLine(string.Format("EXCEPTION while parsing events --- " + ex.Message)); } } } diff --git a/Aurora/Services/EventManager/EventManager.cs b/Aurora/Services/EventManager/EventManager.cs index 8b41e43..0ab2efa 100644 --- a/Aurora/Services/EventManager/EventManager.cs +++ b/Aurora/Services/EventManager/EventManager.cs @@ -187,7 +187,7 @@ namespace Aurora.Services.EventManager executionTask.ContinueWith((Task task) => { var exception = executionTask.Exception; - Console.WriteLine(string.Format("SERVER --- Exception occurred firing event")); + System.Diagnostics.Debug.WriteLine(string.Format("SERVER --- Exception occurred firing event")); this._actionList.Remove(pair.Key); }, TaskContinuationOptions.OnlyOnFaulted); diff --git a/Aurora/Services/PlayerService/PlayerService.cs b/Aurora/Services/PlayerService/PlayerService.cs index 139dc97..6fa31b1 100644 --- a/Aurora/Services/PlayerService/PlayerService.cs +++ b/Aurora/Services/PlayerService/PlayerService.cs @@ -147,21 +147,21 @@ namespace Aurora.Services.PlayerService newPosition - oldPosition < -0.001) { _mediaPlayer.Position = newPosition; - Console.WriteLine(string.Format("**Audio synced**")); - // Console.WriteLine(string.Format("Remote Server Time {0}", new DateTime(sync.ServerTimeTicks).ToLongTimeString())); - // Console.WriteLine(string.Format("Remote Track Time: {0}", sync.TrackPosition)); - // Console.WriteLine(string.Format("Local Server Time: {0}", time.DateTime.ToLongTimeString())); - // Console.WriteLine(string.Format("Local Track Time: {0}", _mediaPlayer.Position)); - // Console.WriteLine(string.Format("Offset: {0}", offset)); - // Console.WriteLine(string.Format("Old Position: {0}", oldPosition)); - // Console.WriteLine(string.Format("New Position: {0}", newPosition)); + System.Diagnostics.Debug.WriteLine(string.Format("**Audio synced**")); + // System.Diagnostics.Debug.WriteLine(string.Format("Remote Server Time {0}", new DateTime(sync.ServerTimeTicks).ToLongTimeString())); + // System.Diagnostics.Debug.WriteLine(string.Format("Remote Track Time: {0}", sync.TrackPosition)); + // System.Diagnostics.Debug.WriteLine(string.Format("Local Server Time: {0}", time.DateTime.ToLongTimeString())); + // System.Diagnostics.Debug.WriteLine(string.Format("Local Track Time: {0}", _mediaPlayer.Position)); + // System.Diagnostics.Debug.WriteLine(string.Format("Offset: {0}", offset)); + // System.Diagnostics.Debug.WriteLine(string.Format("Old Position: {0}", oldPosition)); + // System.Diagnostics.Debug.WriteLine(string.Format("New Position: {0}", newPosition)); } } } } catch (Exception ex) { - Console.WriteLine("Exception caught while attempting to sync: " + ex.Message); + System.Diagnostics.Debug.WriteLine("Exception caught while attempting to sync: " + ex.Message); } } }); diff --git a/Aurora/Services/ServerService.cs b/Aurora/Services/ServerService.cs index 3205ea1..087ef1d 100644 --- a/Aurora/Services/ServerService.cs +++ b/Aurora/Services/ServerService.cs @@ -73,7 +73,7 @@ namespace Aurora.Services try { - Console.WriteLine(string.Format("Starting gRPC server at hostname: {0}, port: {1}", _hostname, _port)); + System.Diagnostics.Debug.WriteLine(string.Format("Starting gRPC server at hostname: {0}, port: {1}", _hostname, _port)); if (!Initialized) { @@ -93,7 +93,7 @@ namespace Aurora.Services } catch (Exception ex) { - Console.WriteLine(string.Format("Error starting gRPC server: {0}", ex.Message)); + System.Diagnostics.Debug.WriteLine(string.Format("Error starting gRPC server: {0}", ex.Message)); } } diff --git a/Aurora/Utils/FileSystemUtils.cs b/Aurora/Utils/FileSystemUtils.cs index 3828f90..e39e242 100644 --- a/Aurora/Utils/FileSystemUtils.cs +++ b/Aurora/Utils/FileSystemUtils.cs @@ -73,7 +73,7 @@ namespace Aurora.Utils } catch (Exception ex) { - Console.WriteLine($"{ex.GetType()} {ex.Message}\n{ex.StackTrace}"); + System.Diagnostics.Debug.WriteLine($"{ex.GetType()} {ex.Message}\n{ex.StackTrace}"); ex = ex.InnerException; } }