private bool CanFocusMove(FocusMoveDirection focusMoveDirection) => !IsBusy && VideoSourceToken != null;
private async Task FocusMoveAsync(FocusMoveDirection focusMoveDirection) { IsBusy = true; var relativeFocus = new RelativeFocus(); switch (focusMoveDirection) { case FocusMoveDirection.None: break; case FocusMoveDirection.FocusIn: relativeFocus.Distance = 0.5f; break; case FocusMoveDirection.FocusOut: relativeFocus.Distance = -0.5f; break; default: throw new ArgumentOutOfRangeException(nameof(focusMoveDirection), focusMoveDirection, null); } try { await _onvifServiceAggregator.OnvifImagingService.SetImagingSettingsAsync(new SetImagingSettings { VideoSourceToken = VideoSourceToken, ImagingSettings = new ImagingSettings20 { Focus = new FocusConfiguration20 { AutoFocusMode = AutoFocusMode.MANUAL } } }); await _onvifServiceAggregator.OnvifImagingService.MoveAsync(new Move { VideoSourceToken = VideoSourceToken, Focus = new FocusMove { Relative = relativeFocus } }); } 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; } }