private bool CanContinuousMove(ContinuousMoveDirection continuousMoveDirection) => !IsBusy && ProfileToken != null;
private async Task ContinuousMoveAsync(ContinuousMoveDirection continuousMoveDirection) { IsBusy = true; var velocity = new PTZSpeed(); switch (continuousMoveDirection) { case ContinuousMoveDirection.None: break; case ContinuousMoveDirection.Upward: velocity.PanTilt.y = 0.5f; break; case ContinuousMoveDirection.Forward: velocity.PanTilt.x = 0.5f; break; case ContinuousMoveDirection.Downward: velocity.PanTilt.y = -0.5f; break; case ContinuousMoveDirection.Backward: velocity.PanTilt.x = -0.5f; break; case ContinuousMoveDirection.ZoomIn: velocity.Zoom.x = 0.5f; break; case ContinuousMoveDirection.ZoomOut: velocity.Zoom.x = -0.5f; break; default: throw new ArgumentOutOfRangeException(nameof(continuousMoveDirection), continuousMoveDirection, null); } try { await _onvifServiceAggregator.OnvifPTZService.ContinuousMoveAsync(new ContinuousMove { ProfileToken = ProfileToken, Velocity = velocity }); } catch (OnvifServiceException e) { var toast = e.ToToastMessage(_parentViewModel); Messenger.Publish(toast); } catch (FaultException e) { var toast = e.ToToastMessage(_parentViewModel); Messenger.Publish(toast); } finally { IsBusy = false; } }