/// <summary> /// Save player restore state. /// </summary> public void SavePlayerRestoreState() { if (SelectedOnlineVideo == null) { return; } var isNotNeedUpdatePosition = m_PlayerRestoreEntity?.ReleaseId == SelectedRelease?.Id && m_PlayerRestoreEntity?.VideoPosition > 0 && Position == 0; m_PlayerRestoreEntity.ReleaseId = SelectedRelease.Id; m_PlayerRestoreEntity.VideoId = SelectedOnlineVideo.Order; if (!isNotNeedUpdatePosition) { m_PlayerRestoreEntity.VideoPosition = Position; } m_RestoreCollection.Update(m_PlayerRestoreEntity); if (m_ReleaseVideoStateEntity == null || m_ReleaseVideoStateEntity.ReleaseId != SelectedRelease.Id) { m_ReleaseVideoStateEntity = m_ReleaseStateCollection.FirstOrDefault(a => a.ReleaseId == SelectedRelease.Id); if (m_ReleaseVideoStateEntity == null) { m_ReleaseVideoStateEntity = new ReleaseVideoStateEntity { ReleaseId = SelectedRelease.Id, VideoStates = new List <VideoStateEntity> () }; m_ReleaseStateCollection.Add(m_ReleaseVideoStateEntity); } } if (m_ReleaseVideoStateEntity.VideoStates == null) { m_ReleaseVideoStateEntity.VideoStates = new List <VideoStateEntity> (); } var videoState = m_ReleaseVideoStateEntity.VideoStates.FirstOrDefault(a => a.Id == SelectedOnlineVideo.Order); if (videoState == null) { m_ReleaseVideoStateEntity.VideoStates.Add( new VideoStateEntity { Id = SelectedOnlineVideo.Order, LastPosition = Position } ); } else { videoState.LastPosition = Position == 0 && videoState.LastPosition > 0 ? videoState.LastPosition : Position; if (!videoState.IsSeen && PositionPercent >= 90 && PositionPercent <= 100) { videoState.IsSeen = true; } } m_ReleaseStateCollection.Update(m_ReleaseVideoStateEntity); }
private void FillReleaseVideoState() { if (m_ReleaseVideoStateEntity == null || m_ReleaseVideoStateEntity.ReleaseId != SelectedRelease.Id) { m_ReleaseVideoStateEntity = m_ReleaseStateCollection.FirstOrDefault(a => a.ReleaseId == SelectedRelease.Id); if (m_ReleaseVideoStateEntity == null) { m_ReleaseVideoStateEntity = new ReleaseVideoStateEntity { ReleaseId = SelectedRelease.Id, VideoStates = new List <VideoStateEntity> () }; m_ReleaseStateCollection.Add(m_ReleaseVideoStateEntity); } } if (m_ReleaseVideoStateEntity.VideoStates == null) { m_ReleaseVideoStateEntity.VideoStates = new List <VideoStateEntity> (); } }
/// <summary> /// Start navigate to page. /// </summary> /// <param name="parameter">Parameter.</param> public async void NavigateTo(object parameter) { try { if (m_DisplayRequest == null) { m_DisplayRequest = new DisplayRequest(); } m_DisplayRequest.RequestActive(); } catch { } UpdateVolumeState(m_Volume); if (parameter == null) { if (VideoSource != null) { ChangePlayback(PlaybackState.Play, false); } else { if (m_PlayerRestoreEntity != null && m_PlayerRestoreEntity.ReleaseId > 0) { var release = m_DataContext.GetCollection <ReleaseEntity> ().FirstOrDefault(a => a.Id == m_PlayerRestoreEntity.ReleaseId); if (release != null) { m_RestorePosition = m_PlayerRestoreEntity.VideoPosition; SelectedRelease = MapToReleaseModel(release); SelectedOnlineVideo = SelectedRelease.OnlineVideos?.FirstOrDefault(a => a.Order == m_PlayerRestoreEntity.VideoId); ChangePlayback(PlaybackState.Play, false); if (SelectedRelease != null) { await SaveReleaseWatchTimestamp(SelectedRelease.Id); } } } } } else { var releaseLink = parameter as ReleaseLinkModel; if (releaseLink != null) { var releaseLinkEntity = m_DataContext.GetCollection <ReleaseEntity> ().FirstOrDefault(a => a.Id == releaseLink.ReleaseId); if (releaseLinkEntity != null) { Releases = new List <ReleaseModel> { MapToReleaseModel(releaseLinkEntity) } } ; } else { Releases = parameter as IEnumerable <ReleaseModel>; } var release = Releases.First(); m_ReleaseVideoStateEntity = m_ReleaseStateCollection?.FirstOrDefault(a => a.ReleaseId == release.Id); m_Position = 0; m_RestorePosition = 0; RaisePropertyChanged(() => Position); int onlineVideoIndex = release.PrefferedOpenedVideo == null ? -1 : release.PrefferedOpenedVideo.Order; if (onlineVideoIndex == -1 && m_ReleaseVideoStateEntity != null && m_ReleaseVideoStateEntity.VideoStates != null && m_ReleaseVideoStateEntity.VideoStates.Any()) { onlineVideoIndex = m_ReleaseVideoStateEntity.VideoStates.Max(a => a.Id); var lastVideo = m_ReleaseVideoStateEntity.VideoStates.First(a => a.Id == onlineVideoIndex); m_RestorePosition = lastVideo.LastPosition; } if (release != null) { release.OnlineVideos = release.OnlineVideos?.OrderBy(a => a.Order).ToList() ?? Enumerable.Empty <OnlineVideoModel> (); } SelectedRelease = release; SelectedOnlineVideo = onlineVideoIndex == -1 ? SelectedRelease?.OnlineVideos?.FirstOrDefault() : SelectedRelease?.OnlineVideos?.FirstOrDefault(a => a.Order == onlineVideoIndex); if (SelectedOnlineVideo != null) { ChangePlayback(PlaybackState.Play, false); } if (release != null) { release.PrefferedOpenedVideo = null; await SaveReleaseWatchTimestamp(release.Id); } } ShowPlaylistButton = true; m_AnalyticsService.TrackEvent("OnlinePlayer", "Opened", parameter == null ? "Parameter is null" : "Parameter is populated"); if (SelectedOnlineVideo != null) { ScrollToSelectedPlaylist(); } if (SelectedRelease != null) { FillReleaseVideoState(); var states = m_ReleaseVideoStateEntity.VideoStates?.ToList(); foreach (var onlinevideo in SelectedRelease.OnlineVideos) { onlinevideo.IsSeen = states?.FirstOrDefault(a => a.Id == onlinevideo.Order)?.IsSeen ?? false; } } }