public override void WireMessages() { Messenger.Default.Register <VideoMessage>(this, m => { PlaylistItems = null; switch (m.PlayerSourceType) { case PlayerSourceType.Video: if (m.VideoItem != null) { SelectedItem = m.VideoItem; PlaylistItems = null; } break; case PlayerSourceType.Recording: if (m.VideoItem != null) { RecordingItem = m.VideoItem; PlaylistItems = null; } break; case PlayerSourceType.Programme: if (m.VideoItem != null) { ProgrammeItem = m.VideoItem; PlaylistItems = null; } break; case PlayerSourceType.Playlist: PlaylistItems = m.VideoPlaylists; SelectedItem = m.VideoItem; break; } PlayerSourceType = m.PlayerSourceType; _isResume = m.IsResume; _startPositionTicks = m.ResumeTicks ?? 0; }); Messenger.Default.Register <NotificationMessage>(this, async m => { if (m.Notification.Equals(Constants.Messages.SetResumeMsg)) { _isResume = true; } if (m.Notification.Equals(Constants.Messages.SendVideoTimeToServerMsg)) { try { var totalTicks = _startPositionTicks + PlayedVideoDuration.Ticks; Log.Info("Sending current runtime [{0}] to the server", totalTicks); var info = new PlaybackStopInfo { ItemId = _itemId, PositionTicks = totalTicks }; await _playbackManager.ReportPlaybackStopped(info, _streamInfo, App.ServerInfo.Id, AuthenticationService.Current.LoggedInUserId, false, ApiClient); SetPlaybackTicks(totalTicks); if (_timer != null && _timer.IsEnabled) { _timer.Stop(); } Messenger.Default.Send(new NotificationMessage(_itemId, totalTicks, Constants.Messages.RefreshResumeMsg)); } catch (HttpException ex) { Utils.HandleHttpException("SendVideoTimeToServer", ex, NavigationService, Log); } if (!PlaylistItems.IsNullOrEmpty()) { var index = PlaylistItems.IndexOf(SelectedItem); if (index >= 0 && index < PlaylistItems.Count - 1) { SelectedItem = PlaylistItems[index + 1]; await InitiatePlayback(false); } } } if (m.Notification.Equals(Constants.Messages.VideoStateChangedMsg)) { try { var totalTicks = _startPositionTicks + PlayedVideoDuration.Ticks; var isPaused = m.Sender != null && (bool)m.Sender; if (_timer != null) { if (isPaused) { if (_timer.IsEnabled) { _timer.Stop(); } } else { if (!_timer.IsEnabled) { _timer.Start(); } } } Log.Info("Sending current runtime [{0}] to the server", totalTicks); var info = new PlaybackProgressInfo { IsMuted = false, ItemId = _itemId, PositionTicks = totalTicks, IsPaused = isPaused }; await ApiClient.ReportPlaybackProgressAsync(info); SetPlaybackTicks(totalTicks); } catch (HttpException ex) { Utils.HandleHttpException("VideoStateChanged", ex, NavigationService, Log); } } }); }