public override bool Navigate(Guid playbackId, NavigateCriteria navigateCriteria)
        {
            DateTime cur;

            lock (_playbackLockObj)
            {
                if (!_playbackCursors.TryGetValue(playbackId, out cur))
                {
                    throw new KeyNotFoundException(nameof(playbackId));
                }
            }

            // TODO: implement below to do proper update of cursor
            switch (navigateCriteria)
            {
            case NavigateCriteria.First:
                break;

            case NavigateCriteria.Last:
                break;

            case NavigateCriteria.Previous:
                break;

            case NavigateCriteria.Next:
                break;

            case NavigateCriteria.PreviousSequence:
                break;

            case NavigateCriteria.NextSequence:
                break;
            }
            lock (_playbackLockObj)
            {
                _playbackCursors[playbackId] = cur;
            }
            return(true);
        }
Esempio n. 2
0
        public override bool Navigate(Guid playbackId, NavigateCriteria navigateCriteria)
        {
            PlaybackSession session;
            DateTime        cur;

            lock (_playbackLockObj)
            {
                if (!_playbackSessions.TryGetValue(playbackId, out session))
                {
                    throw new KeyNotFoundException(nameof(playbackId));
                }
            }
            cur = session.Cursor;
            int  sequenceNumber = session.SequenceNumber;
            bool atVideo        = IsAtVideo(cur);

            Toolbox.Log.Trace("Navigate - " + navigateCriteria + ",  From:" + cur.ToString("o"));


            switch (navigateCriteria)
            {
            case NavigateCriteria.First:
                cur = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day);
                break;

            case NavigateCriteria.Last:
                cur = DateTime.UtcNow;
                break;

            case NavigateCriteria.Previous:
                cur = cur - _frameDistance;
                if (!IsAtVideo(cur))
                {
                    cur             = PreviousSequence(cur);
                    sequenceNumber -= 1;
                }
                break;

            case NavigateCriteria.Next:
                if (atVideo)
                {
                    cur = cur + _frameDistance;
                    if (!IsAtVideo(cur))
                    {
                        cur             = NextSequence(cur);
                        sequenceNumber += 1;
                    }
                }
                else
                {
                    cur             = NextSequence(cur);
                    sequenceNumber += 1;
                }
                break;

            case NavigateCriteria.PreviousSequence:
                cur             = PreviousSequence(cur);
                sequenceNumber -= 1;
                break;

            case NavigateCriteria.NextSequence:
                cur             = NextSequence(cur);
                sequenceNumber += 1;
                break;
            }
            Toolbox.Log.Trace("   --- now at:{0}", cur.ToString("o"));
            lock (_playbackLockObj)
            {
                session.Cursor         = cur;
                session.SequenceNumber = sequenceNumber;
            }
            return(true);
        }