public override bool MoveTo(Guid playbackId, DateTime dateTime, MoveCriteria moveCriteria)
        {
            lock (_playbackLockObj)
            {
                if (!_playbackCursors.ContainsKey(playbackId))
                {
                    throw new KeyNotFoundException(nameof(playbackId));
                }
            }
            DateTime cur = dateTime;

            // TODO: implement below to do proper update of cursor
            switch (moveCriteria)
            {
            case MoveCriteria.After:
                break;

            case MoveCriteria.AtOrAfter:
                break;

            case MoveCriteria.AtOrBefore:
                break;

            case MoveCriteria.Before:
                break;
            }
            lock (_playbackLockObj)
            {
                _playbackCursors[playbackId] = cur;
            }
            return(true);
        }
Exemple #2
0
        public override bool MoveTo(Guid playbackId, DateTime dateTime, MoveCriteria moveCriteria)
        {
            lock (_playbackLockObj)
            {
                if (!_playbackSessions.ContainsKey(playbackId))
                {
                    throw new KeyNotFoundException(nameof(playbackId));
                }
            }
            DateTime cur     = dateTime;
            bool     atVideo = IsAtVideo(cur);

            Toolbox.Log.Trace(nameof(MoveTo) + " - " + moveCriteria + ",  Asked time: " + dateTime.ToString("o") + ", At Video: " + atVideo);

            switch (moveCriteria)
            {
            case MoveCriteria.After:
                if (atVideo)
                {
                    do
                    {
                        cur = cur + _frameDistance;
                    } while (!IsAtVideo(cur));     //this avoids the edge case where the current time is at video, but +framedistance is not.
                }
                else
                {
                    cur = NextSequence(cur);
                }
                break;

            case MoveCriteria.AtOrAfter:
                if (!atVideo)
                {
                    cur = NextSequence(cur);
                }
                break;

            case MoveCriteria.AtOrBefore:
                if (!atVideo)
                {
                    cur = PreviousSequence(cur) + TimeSpan.FromSeconds(60) - _frameDistance;
                }
                break;

            case MoveCriteria.Before:
                if (atVideo)
                {
                    cur = cur - _frameDistance;
                }
                else
                {
                    cur = PreviousSequence(cur) + TimeSpan.FromSeconds(60) - _frameDistance;
                }
                break;
            }
            Toolbox.Log.Trace("{0} - now at:{1}", nameof(MoveTo), cur.ToString("o"));
            lock (_playbackLockObj)
            {
                _playbackSessions[playbackId].Cursor = cur;
            }
            return(true);
        }