private IObservable <CheckCodeResult> CheckCode( string code, string firstName, string lastName) { return(_authenticator .CheckCode(code, firstName, lastName) .Select(_ => new CheckCodeResult())); }
public AuthenticationModel( IFactory <ProxyPopupModel> proxyPopupModelFactory, IAuthenticator authenticator, IPopupController popupController ) { _modelDisposable = new CompositeDisposable(); SetProxyCommand = ReactiveCommand.Create(() => { var popupModel = proxyPopupModelFactory.Create(); popupController.Show(popupModel); }); var canSendCode = this .WhenAnyValue(x => x.PhoneNumber) .Select(phone => !string.IsNullOrWhiteSpace(phone)); SendCodeCommand = ReactiveCommand.CreateFromObservable( () => authenticator.SetPhoneNumber(PhoneNumber), canSendCode, RxApp.MainThreadScheduler); var canCheckCode = this .WhenAnyValue(x => x.ConfirmCode) .Select(code => !string.IsNullOrWhiteSpace(code)); CheckCodeCommand = ReactiveCommand.CreateFromObservable( () => authenticator.CheckCode(ConfirmCode, FirstName, LastName), canCheckCode, RxApp.MainThreadScheduler); var canCheckPassword = this .WhenAnyValue(x => x.Password) .Select(password => !string.IsNullOrWhiteSpace(password)); CheckPasswordCommand = ReactiveCommand.CreateFromObservable( () => authenticator.CheckPassword(Password), canCheckPassword, RxApp.MainThreadScheduler); var stateObservable = authenticator .ObserveState() .ObserveOn(RxApp.MainThreadScheduler); stateObservable .OfType <TdApi.AuthorizationState.AuthorizationStateWaitPhoneNumber>() .Subscribe(state => OnWaitingPhoneNumber()) .DisposeWith(_modelDisposable); stateObservable .OfType <TdApi.AuthorizationState.AuthorizationStateWaitCode>() .Subscribe(state => OnWaitingConfirmCode(!state.IsRegistered)) .DisposeWith(_modelDisposable); stateObservable .OfType <TdApi.AuthorizationState.AuthorizationStateWaitPassword>() .Subscribe(state => OnWaitingPassword()) .DisposeWith(_modelDisposable); }
private IDisposable BindAuthenticator(IAuthenticator authenticator) { var canSendCode = Model .WhenAnyValue(x => x.PhoneNumber) .Select(phone => !string.IsNullOrWhiteSpace(phone)); var canCheckCode = Model .WhenAnyValue(x => x.ConfirmCode) .Select(code => !string.IsNullOrWhiteSpace(code)); var canCheckPassword = Model .WhenAnyValue(x => x.Password) .Select(password => !string.IsNullOrWhiteSpace(password)); Model.SendCodeCommand = ReactiveCommand.CreateFromObservable( () => authenticator.SetPhoneNumber(Model.PhoneNumber), canSendCode, RxApp.MainThreadScheduler); Model.CheckCodeCommand = ReactiveCommand.CreateFromObservable( () => authenticator.CheckCode(Model.ConfirmCode, Model.FirstName, Model.LastName), canCheckCode, RxApp.MainThreadScheduler); Model.CheckPasswordCommand = ReactiveCommand.CreateFromObservable( () => authenticator.CheckPassword(Model.Password), canCheckPassword, RxApp.MainThreadScheduler); var stateObservable = authenticator .ObserveState() .SubscribeOn(TaskPoolScheduler.Default) .ObserveOn(RxApp.MainThreadScheduler); return(stateObservable .Subscribe(state => { switch (state) { case TdApi.AuthorizationState.AuthorizationStateWaitPhoneNumber _: OnWaitingPhoneNumber(); break; case TdApi.AuthorizationState.AuthorizationStateWaitCode wait: OnWaitingConfirmCode(!wait.IsRegistered); break; case TdApi.AuthorizationState.AuthorizationStateWaitPassword _: OnWaitingPassword(); break; } })); }