public void ProcessError(DirectAuthErrors error, string otherError = null)
        {
            switch (error)
            {
            case DirectAuthErrors.None:
            case DirectAuthErrors.need_captcha:
            case DirectAuthErrors.need_validation:
                break;

            case DirectAuthErrors.invalid_client:
                _dialogsService.Show(_locService["Message_Login_InvalidAccount_Text"],
                                     _locService["Message_Login_AuthorizationFailed_Title"]);
                break;

            case DirectAuthErrors.connection_error:
                _dialogsService.Show(_locService["Message_Login_ConnectionError_Text"],
                                     _locService["Message_Login_AuthorizationFailed_Title"]);
                break;

            case DirectAuthErrors.access_denied:
                _dialogsService.Show(_locService["Message_Login_AccessDenied_Text"],
                                     _locService["Message_Login_AccessDenied_Title"]);
                break;

            default:
                _dialogsService.Show(String.Format(_locService["Message_Login_UnknownError_Text"],
                                                   otherError == null ? error.ToString() : otherError),
                                     _locService["Message_Login_AuthorizationFailed_Title"]);
                break;
            }
        }
        public async Task <bool> Login(string captchaSid = null, string captchaKey = null)
        {
            _appLoaderService.Show(_locService["AppLoader_PleaseWait"]);

            var result = await _vkLoginService.Login(LoginText, PasswordText, captchaSid, captchaKey);

            DirectAuthErrors error = result != null ? result.Error : DirectAuthErrors.unknown_error;

            switch (error)
            {
            case DirectAuthErrors.None:
                _vkLoginService.Login(new APISession(result.AccessToken, result.UserID, result.Secret));
                break;

            case DirectAuthErrors.need_captcha:
                try
                {
                    string key = await _vkCaptchaHandler.GetCaptchaUserInput(result.CaptchaImg);

                    if (key != null)
                    {
                        return(await Login(result.CaptchaSid, key));
                    }
                }
                catch (Exception)
                {
                }
                break;

            case DirectAuthErrors.need_validation:
                ValidationView?.StartValidation(result.RedirectUri);
                break;

            default:
                ProcessError(error);
                break;
            }

            _appLoaderService.Hide();
            return(false);
        }
        private async void browser_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
        {
            _isWorking   = true;
            _isCompleted = false;
            LoginCommand.RaiseCanExecuteChanged();
            VisualStateManager.GoToState(this, "Loading", true);

            if (args.Uri.AbsoluteUri.Contains("token="))
            {
                _isCompleted = true;
                var    parts  = args.Uri.Fragment.Substring(1).Split('&').ToArray();
                string token  = parts[1].Split('=')[1]; // В отличие от LoginView, здесь первым имеется либо success=1 либо fail=1.
                int    userID = int.Parse(parts[2].Split('=')[1]);

                ViewModel.LoginToken(userID, token);
            }
            else if (args.Uri.AbsoluteUri.Contains("error="))
            {
                var    parts = args.Uri.Fragment.Substring(1).Split('&').ToArray();
                string error = parts[0].Split('=')[1];

                DirectAuthErrors errorName = DirectAuthErrors.unknown_error;
                Enum.TryParse(error, out errorName);

                ViewModel.ProcessError(errorName);
                _isCompleted = true;
                VisualStateManager.GoToState(this, "Normal", true);
                _isEnterDataState = false;
            }
            else if (args.Uri.AbsoluteUri.EndsWith("blank.html?success=1"))
            {
                _isCompleted = true;
                await ViewModel.Login();
            }
            else if (args.Uri.AbsoluteUri.EndsWith("blank.html#fail=1"))
            {
                _isCompleted = true;
            }
        }