Пример #1
0
        /// <summary>
        /// Constructs an event handler for <see cref="IAudioPlayer.TimeChanged"/>.
        /// </summary>
        /// <param name="action">The action.</param>
        private static void AddTimeChangedHandler(this IPlayAudioAction action)
        {
            async void handler(object obj, PlaybackTimeEventArgs e)
            {
                string title = null;

                if (e.Current != TimeSpan.Zero)
                {
                    var remaining = e.Total.Subtract(e.Current);
                    title = remaining.TotalSeconds > 0.1f ? remaining.ToString("mm':'ss") : null;
                }

                try
                {
                    await action.SetTitleAsync(title, TargetType.Both);
                }
                catch (ObjectDisposedException)
                {
                    // Safely handle the audio player changing.
                    var audioPlayer = action?.PlaylistController?.AudioPlayer;
                    if (audioPlayer != null)
                    {
                        audioPlayer.TimeChanged -= handler;
                    }
                }
            }

            action.PlaylistController.AudioPlayer.Disposed    += (_, __) => action.PlaylistController.AudioPlayer.TimeChanged -= handler;
            action.PlaylistController.AudioPlayer.TimeChanged += handler;
        }
Пример #2
0
        /// <summary>
        /// Sets the <see cref="IPlaylistController"/> for this instance.
        /// </summary>
        /// <param name="action">This instance.</param>
        /// <param name="settings">The settings.</param>
        public static void SetPlaylistController(this IPlayAudioAction action, IPlayAudioSettings settings)
        {
            // Ensure we have a playlist controller, and that the device is correct.
            if (action.PlaylistController == null ||
                action.PlaylistController.Action != settings.Action)
            {
                // Ensure we keep the playlist before disposing.
                var playlist = action?.PlaylistController?.Playlist ?? new AudioFileCollection();
                action.PlaylistController?.Dispose();

                // Create the new controller, and assign its playlist
                action.PlaylistController          = action.AudioService.GetPlaylistController(settings.PlaybackAudioDeviceId, settings.Action);
                action.PlaylistController.Playlist = playlist;

                action.AddTimeChangedHandler();
            }
            else
            {
                action.PlaylistController.AudioPlayer.Device = AudioDevices.Current.GetDeviceByKey(settings.PlaybackAudioDeviceId);
            }

            action.PlaylistController.Order = settings.Order;
        }