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); }
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); }