private async Task NavigateAndCheck(CancellationToken stop)
        {
            _navigationStart = DateTime.UtcNow;
            var headers = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("User-Agent", "NHM/" + System.Windows.Forms.Application.ProductVersion),
                new KeyValuePair <string, string>("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"),
            };

            WebViewBrowser.NavigationCompleted += Browser_NavigationCompleted;
            WebViewBrowser.Navigate(new Uri(Links.LoginNHM), HttpMethod.Get, null, headers);
            Func <bool> isActive = () => !stop.IsCancellationRequested;

            while (isActive())
            {
                await TaskHelpers.TryDelay(TimeSpan.FromSeconds(1), stop);

                var ok = await CheckForBtc();

                if (!ok.HasValue)
                {
                    continue;
                }

                LoginSuccess = ok;
                Hide();
                return;
            }
        }
示例#2
0
 private void Navigation_Forward_Button_Click(object sender, RoutedEventArgs e)
 {
     if (WebViewBrowser.CanGoForward)
     {
         WebViewBrowser.GoForward();
     }
 }
示例#3
0
 private void Navigation_Back_Button_Click(object sender, RoutedEventArgs e)
 {
     if (WebViewBrowser.CanGoBack)
     {
         WebViewBrowser.GoBack();
     }
 }
 public void ForceCleanup()
 {
     WebViewBrowser.Dispose();
     try
     {
         Process.GetProcessById((int)WebViewBrowser.Process.ProcessId)?.Kill();
     }
     catch
     { }
 }
        private void NavigateTo(string url)
        {
            var headers = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("User-Agent", _userAgent),
                new KeyValuePair <string, string>("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"),
            };

            WebViewBrowser.Navigate(new Uri(url), HttpMethod.Get, null, headers);
        }
        private void LoginBrowser_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            var oldIsVisible = e.OldValue as bool?;

            var wasVisible   = oldIsVisible.HasValue && oldIsVisible.Value;
            var wasInvisible = oldIsVisible.HasValue && !oldIsVisible.Value;

            if (wasVisible)
            {
                CancelNavigateAndCheck();
                LoadingPanel.Visibility = Visibility.Visible;
                WebViewGrid.Visibility  = Visibility.Collapsed;
                WebViewBrowser.Navigate("about:blank");
            }
            else if (wasInvisible)
            {
                Logger.Info("LoginBrowser", $"LoginBrowser_IsVisibleChanged e.OldValue={e.OldValue}; e.NewValue={e.NewValue}");
                _ = StartNavigateAndCheck();
            }
            else
            {
                Logger.Error("LoginBrowser", "Unexpected case");
            }
        }
        private async Task <bool?> CheckForBtc()
        {
            var    showRetry     = (DateTime.UtcNow - _navigationStart).TotalSeconds > 5;
            string htmlEvalValue = null;

            try
            {
                htmlEvalValue = await WebViewBrowser.InvokeScriptAsync("eval", _jsEvalCode);

                Logger.InfoDelayed("Login", $"JS eval returned htmlEvalValue='{htmlEvalValue}'", TimeSpan.FromSeconds(15));
                var noNhmResponse = htmlEvalValue == null || htmlEvalValue == "NO_RESPONSE" || htmlEvalValue.Contains("INJ_ERROR");
                if (showRetry)
                {
                    LabelStatus.Content       = Translations.Tr("Something went wrong");
                    TryAgainButton.Visibility = Visibility.Visible;
                    ReturnButton.Visibility   = Visibility.Visible;
                }
                if (noNhmResponse)
                {
                    return(null);
                }


                if (LoadingPanel.Visibility != Visibility.Collapsed)
                {
                    LoadingPanel.Visibility = Visibility.Collapsed;
                    WebViewGrid.Visibility  = Visibility.Visible;
                }

                var webResponse = JsonConvert.DeserializeObject <Response>(htmlEvalValue);
                if (webResponse == null)
                {
                    return(null);
                }

                if (webResponse.btcAddress != null)
                {
                    var result = await ApplicationStateManager.SetBTCIfValidOrDifferent(webResponse.btcAddress);

                    if (result == ApplicationStateManager.SetResult.CHANGED)
                    {
                        Logger.Info("Login", $"Navigation and processing successfull.");
                        return(true);
                    }
                    else
                    {
                        Logger.Error("Login", $"Btc address: {webResponse.btcAddress} was not saved. Result: {result}.");
                    }
                }
                else if (webResponse.error != null)
                {
                    var error = webResponse.error;
                    Logger.Error("Login", "Received error: " + error);
                }
                else
                {
                    Logger.Info("Login", $"Navigation and processing successfull. BTC wasn't retreived.");
                }
                return(false);
            }
            catch (Exception e)
            {
                if (showRetry)
                {
                    LabelStatus.Content       = Translations.Tr("Something went wrong");
                    TryAgainButton.Visibility = Visibility.Visible;
                    ReturnButton.Visibility   = Visibility.Visible;
                }
                Logger.ErrorDelayed("Login", $"CheckForBtc error: {e}. htmlEvalValue='{htmlEvalValue}'", TimeSpan.FromSeconds(15));
                return(null);
            }
        }
示例#8
0
 private void Refresh_Page_Button_Click(object sender, RoutedEventArgs e)
 {
     WebViewBrowser.Refresh();
 }