/// <summary> /// Handles the PlaybackCompleted event of the _mediaPlayer control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="PlaybackStopEventArgs"/> instance containing the event data.</param> async void _mediaPlayer_PlaybackCompleted(object sender, PlaybackStopEventArgs e) { _mediaPlayer.MediaChanged -= _mediaPlayer_MediaChanged; _mediaPlayer.PlaybackCompleted -= _mediaPlayer_PlaybackCompleted; if (_timer != null) { _timer.Dispose(); _timer = null; } if (e.EndingMedia != null) { var info = new PlaybackStopInfo { ItemId = e.EndingMedia.Id, UserId = _apiClient.CurrentUserId, PositionTicks = e.EndingPositionTicks }; try { await _apiClient.ReportPlaybackStoppedAsync(info); } catch (Exception ex) { _logger.ErrorException("Error sending playback stopped checking for {0}", ex, e.EndingMedia.Name); } } }
/// <summary> /// Handles the Exited event of the CurrentProcess control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> void CurrentProcess_Exited(object sender, EventArgs e) { _currentProcess = null; _userInput.GlobalKeyDown -= KeyboardListener_KeyDown; var process = (Process)sender; var playlist = _playlist.ToList(); var index = CurrentPlaylistIndex; var ticks = CurrentPositionTicks; process.Dispose(); if (_currentIsoMount != null) { _currentIsoMount.Dispose(); _currentIsoMount = null; } var media = index != -1 && playlist.Count > 0 ? playlist[index] : null; var args = new PlaybackStopEventArgs { Playlist = playlist, Player = this, EndingPlaylistIndex = index, EndingPositionTicks = ticks, EndingMedia = media }; EventHelper.QueueEventIfNotNull(PlaybackCompleted, this, args, Logger); _playbackManager.ReportPlaybackCompleted(args); OnPlayerExited(); }
internal async void OnPlaybackStopped(PlayableItem media, long? positionTicks, TrackCompletionReason reason, int? newTrackIndex) { DisposeMount(media); if (reason == TrackCompletionReason.Ended || reason == TrackCompletionReason.ChangeTrack) { var nextIndex = newTrackIndex ?? (CurrentPlaylistIndex + 1); if (nextIndex < CurrentPlayOptions.Items.Count) { await PlayTrack(nextIndex, null); return; } } DisposePlayer(); var args = new PlaybackStopEventArgs { Player = this, Playlist = _playlist, EndingMedia = media.OriginalItem, EndingPositionTicks = positionTicks }; EventHelper.FireEventIfNotNull(PlaybackCompleted, this, args, _logger); _playbackManager.ReportPlaybackCompleted(args); }
/// <summary> /// Reports the playback completed. /// </summary> /// <param name="eventArgsArgs">The <see cref="PlaybackStopEventArgs"/> instance containing the event data.</param> public void ReportPlaybackCompleted(PlaybackStopEventArgs eventArgsArgs) { _playbackStop.Publish(eventArgsArgs); }