internal async void Resume()
        {
            if (CurrentPlayer == null)
            {
                return;
            }
            if (CurrentPlayer.Source == null)
            {
                return;
            }
            if (CurrentPlayer.PlaybackSession?.PlaybackState != MediaPlaybackState.Paused)
            {
                return;
            }

            if (!CurrentStreamer.PollConnection())
            {
                //connection is stale. reconnect

                //NepApp.UI.Overlay.ShowSnackBarMessageAsync("This station has been paused for a while. It will jump ahead.");

                var stream = CurrentStream;
                ShutdownPreviousPlaybackSession();

                var controller = await NepApp.UI.Overlay.ShowProgressDialogAsync("Reconnecting...", "Please wait...");

                controller.SetIndeterminate();

                try
                {
                    await TryStreamStationAsync(stream);

                    await controller.CloseAsync();
                }
                catch (Neptunium.Core.NeptuniumException ex)
                {
                    await controller.CloseAsync();

                    await NepApp.UI.ShowInfoDialogAsync("Uh-oh! Couldn't reconnect for some reason!", ex.Message);

                    ShutdownPreviousPlaybackSession();
                }
            }
            else
            {
                //resume playback
                CurrentPlayer.Play();
            }
        }
        private void ShutdownPreviousPlaybackSession()
        {
            if (CurrentStreamer == null && CurrentPlayer == null)
            {
                return;
            }

            if (CurrentStreamer != null)
            {
                CurrentStreamer.MetadataChanged -= Streamer_MetadataChanged;

                if (IsPlaying)
                {
                    CurrentStreamer.Pause();
                }
                CurrentStreamer.Dispose();
                CurrentStreamer = null;
            }

            if (CurrentPlayer != null)
            {
                CurrentPlayer.MediaFailed -= CurrentPlayer_MediaFailed;
                CurrentPlayerSession.PlaybackStateChanged -= PlaybackSession_PlaybackStateChanged;
                CurrentPlayer.Dispose();
                CurrentPlayer = null;
            }

            CurrentStream = null;
            NepApp.SongManager.ResetMetadata();
            SetMediaEngagement(false);
            IsPlaying = false;

            if (MediaTransportControls != null)
            {
                MediaTransportControls.PlaybackStatus = MediaPlaybackStatus.Closed;
            }

            IsPlayingChanged?.Invoke(this, new NepAppMediaPlayerManagerIsPlayingEventArgs(IsPlaying));
        }
 public async Task FadeVolumeUpToAsync(double value)
 {
     await CurrentStreamer?.FadeVolumeUpToAsync(value);
 }