async void _device_PlaybackStopped(object sender, PlaybackStoppedEventArgs e) { try { var streamInfo = await StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager, _mediaSourceManager) .ConfigureAwait(false); if (streamInfo.Item == null) { return; } var progress = GetProgressInfo(e.MediaInfo, streamInfo); var positionTicks = progress.PositionTicks; ReportPlaybackStopped(e.MediaInfo, streamInfo, positionTicks); var duration = streamInfo.MediaSource == null ? (_device.Duration == null ? (long?)null : _device.Duration.Value.Ticks) : streamInfo.MediaSource.RunTimeTicks; var playedToCompletion = (positionTicks.HasValue && positionTicks.Value == 0); if (!playedToCompletion && duration.HasValue && positionTicks.HasValue) { double percent = positionTicks.Value; percent /= duration.Value; playedToCompletion = Math.Abs(1 - percent) <= .1; } if (playedToCompletion) { await SetPlaylistIndex(_currentPlaylistIndex + 1).ConfigureAwait(false); } else { Playlist.Clear(); } } catch (Exception ex) { _logger.ErrorException("Error reporting playback stopped", ex); } }
async void _device_PlaybackStopped(object sender, PlaybackStoppedEventArgs e) { try { await _sessionManager.OnPlaybackStopped(new PlaybackStopInfo { ItemId = e.MediaInfo.Id, SessionId = _session.Id, PositionTicks = _device.Position.Ticks }).ConfigureAwait(false); } catch (Exception ex) { _logger.ErrorException("Error reporting progress", ex); } await SetNext().ConfigureAwait(false); }
async void _device_PlaybackStopped(object sender, PlaybackStoppedEventArgs e) { try { var streamInfo = StreamParams.ParseFromUrl(e.MediaInfo.Url, _libraryManager); var progress = GetProgressInfo(e.MediaInfo, streamInfo); var positionTicks = progress.PositionTicks; ReportPlaybackStopped(e.MediaInfo, streamInfo, positionTicks); var duration = streamInfo.MediaSource == null ? (_device.Duration == null ? (long?)null : _device.Duration.Value.Ticks) : streamInfo.MediaSource.RunTimeTicks; var playedToCompletion = (positionTicks.HasValue && positionTicks.Value == 0); if (!playedToCompletion && duration.HasValue && positionTicks.HasValue) { double percent = positionTicks.Value; percent /= duration.Value; playedToCompletion = Math.Abs(1 - percent) <= .1; } if (playedToCompletion) { await SetPlaylistIndex(_currentPlaylistIndex + 1).ConfigureAwait(false); } else { Playlist.Clear(); } } catch (Exception ex) { _logger.ErrorException("Error reporting playback stopped", ex); } }