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; } }
private void Navigation_Forward_Button_Click(object sender, RoutedEventArgs e) { if (WebViewBrowser.CanGoForward) { WebViewBrowser.GoForward(); } }
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); } }
private void Refresh_Page_Button_Click(object sender, RoutedEventArgs e) { WebViewBrowser.Refresh(); }