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