/// <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);
        }
Exemple #2
0
        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> ();
            }
        }
Exemple #3
0
        /// <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;
                }
            }
        }