Skip to content

Commit e8cc83c

Browse files
committed
Fix BornToBeRoot#408 app crash, display message and download link
1 parent 15d9a9b commit e8cc83c

8 files changed

Lines changed: 107 additions & 8 deletions

File tree

Source/NETworkManager.Localization/Resources/Strings.Designer.cs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Source/NETworkManager.Localization/Resources/Strings.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2913,4 +2913,10 @@ $$hostname$$ --&gt; Hostname</value>
29132913
<data name="SplashScreen" xml:space="preserve">
29142914
<value>SplashScreen</value>
29152915
</data>
2916+
<data name="DownloadMicrosoftEdgeWebView2Runtime" xml:space="preserve">
2917+
<value>Download Microsoft Edge WebView2 Runtime</value>
2918+
</data>
2919+
<data name="MicrosoftEdgeWebView2RuntimeIsNotAvailable" xml:space="preserve">
2920+
<value>Microsoft Edge WebView2 Runtime is not available!</value>
2921+
</data>
29162922
</root>

Source/NETworkManager/Controls/WebConsoleControl.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public WebConsoleControl(WebConsoleSessionInfo info)
7777
DataContext = this;
7878

7979
_sessionInfo = info;
80-
80+
8181
Browser2.NavigationStarting += Browser2_NavigationStarting;
8282
Browser2.NavigationCompleted += Browser2_NavigationCompleted;
8383
Browser2.WebMessageReceived += Browser2_WebMessageReceived;
@@ -90,7 +90,7 @@ private async void UserControl_Loaded(object sender, RoutedEventArgs e)
9090
// Connect after the control is drawn and only on the first init
9191
if (_initialized)
9292
return;
93-
93+
9494
// Set user data folder - Fix #382
9595
var webView2Environment = await CoreWebView2Environment.CreateAsync(null, GlobalStaticConfiguration.WebConsole_Cache);
9696
await Browser2.EnsureCoreWebView2Async(webView2Environment);

Source/NETworkManager/Properties/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Source/NETworkManager/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120+
<data name="MicrosoftEdgeWebView2Runtime_DownloadUrl" xml:space="preserve">
121+
<value>https://developer.microsoft.com/en-us/microsoft-edge/webview2/</value>
122+
</data>
120123
<data name="NETworkManager_Contributors" xml:space="preserve">
121124
<value>https://github.com/BornToBeRoot/NETworkManager/blob/master/Contributors.md</value>
122125
</data>

Source/NETworkManager/ViewModels/WebConsoleHostViewModel.cs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Windows.Threading;
1717
using NETworkManager.Models;
1818
using NETworkManager.Models.EventSystem;
19+
using Microsoft.Web.WebView2.Core;
1920

2021
namespace NETworkManager.ViewModels
2122
{
@@ -30,6 +31,27 @@ public class WebConsoleHostViewModel : ViewModelBase, IProfileManager
3031

3132
private readonly bool _isLoading;
3233

34+
/// <summary>
35+
/// Private variable for <see cref="IsRuntimeAvailable"/>.
36+
/// </summary>
37+
private bool _isRuntimeAvailable;
38+
39+
/// <summary>
40+
/// Variable indicates if the Edge WebView2 runtime is available.
41+
/// </summary>
42+
public bool IsRuntimeAvailable
43+
{
44+
get => _isRuntimeAvailable;
45+
set
46+
{
47+
if (value == _isRuntimeAvailable)
48+
return;
49+
50+
_isRuntimeAvailable = value;
51+
OnPropertyChanged();
52+
}
53+
}
54+
3355
private int _selectedTabIndex;
3456
public int SelectedTabIndex
3557
{
@@ -45,7 +67,6 @@ public int SelectedTabIndex
4567
}
4668

4769
#region Profiles
48-
4970
public ICollectionView Profiles { get; }
5071

5172
private ProfileInfo _selectedProfile = new ProfileInfo();
@@ -147,6 +168,16 @@ public WebConsoleHostViewModel(IDialogCoordinator instance)
147168

148169
_dialogCoordinator = instance;
149170

171+
try
172+
{
173+
string version = CoreWebView2Environment.GetAvailableBrowserVersionString();
174+
IsRuntimeAvailable = true;
175+
}
176+
catch (WebView2RuntimeNotFoundException)
177+
{
178+
IsRuntimeAvailable = false;
179+
}
180+
150181
InterTabClient = new DragablzInterTabClient(ApplicationName.WebConsole);
151182

152183
TabItems = new ObservableCollection<DragablzTabItem>();
@@ -207,7 +238,7 @@ private void CloseItemAction(ItemActionCallbackArgs<TabablzControl> args)
207238
{
208239
((args.DragablzItem.Content as DragablzTabItem)?.View as WebConsoleControl)?.CloseTab();
209240
}
210-
241+
211242
public ICommand WebConsole_RefreshCommand => new RelayCommand(WebConsole_RefreshAction);
212243

213244
private void WebConsole_RefreshAction(object view)
@@ -286,6 +317,13 @@ private static void OpenSettingsAction()
286317
{
287318
EventSystem.RedirectToSettings();
288319
}
320+
321+
public ICommand OpenWebsiteCommand => new RelayCommand(OpenWebsiteAction);
322+
323+
private static void OpenWebsiteAction(object url)
324+
{
325+
ExternalProcessStarter.OpenUrl((string)url);
326+
}
289327
#endregion
290328

291329
#region Methods

Source/NETworkManager/Views/PuTTYHostView.xaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
77
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
8-
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
9-
8+
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
109
xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
1110
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
1211
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"

Source/NETworkManager/Views/WebConsoleHostView.xaml

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
77
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
8-
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
9-
8+
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
109
xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
1110
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
1211
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
1312
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
1413
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
1514
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
15+
xmlns:resources="clr-namespace:NETworkManager.Properties"
1616
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
1717
dialogs:DialogParticipation.Register="{Binding}"
1818
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:WebConsoleHostViewModel}">
@@ -26,6 +26,15 @@
2626
</UserControl.InputBindings>
2727
<Grid>
2828
<Grid>
29+
<Grid.Style>
30+
<Style TargetType="{x:Type Grid}">
31+
<Style.Triggers>
32+
<DataTrigger Binding="{Binding IsRuntimeAvailable}" Value="False">
33+
<Setter Property="Visibility" Value="Collapsed" />
34+
</DataTrigger>
35+
</Style.Triggers>
36+
</Style>
37+
</Grid.Style>
2938
<Grid.ColumnDefinitions>
3039
<ColumnDefinition Width="*" />
3140
<ColumnDefinition Width="Auto" />
@@ -412,6 +421,23 @@
412421
</Grid>
413422
</Expander>
414423
</Grid>
424+
<StackPanel VerticalAlignment="Center" Margin="10">
425+
<StackPanel.Style>
426+
<Style TargetType="{x:Type StackPanel}">
427+
<Style.Triggers>
428+
<DataTrigger Binding="{Binding IsRuntimeAvailable}" Value="True">
429+
<Setter Property="Visibility" Value="Collapsed" />
430+
</DataTrigger>
431+
</Style.Triggers>
432+
</Style>
433+
</StackPanel.Style>
434+
<TextBlock Text="{x:Static localization:Strings.MicrosoftEdgeWebView2RuntimeIsNotAvailable}" Style="{StaticResource MessageTextBlock}" Margin="0,0,0,10" />
435+
<TextBlock Text="{x:Static localization:Strings.DownloadMicrosoftEdgeWebView2Runtime}" Style="{StaticResource LinkTextBlock}" Margin="0,0,0,5" HorizontalAlignment="Center">
436+
<TextBlock.InputBindings>
437+
<MouseBinding Command="{Binding OpenWebsiteCommand}" CommandParameter="{x:Static resources:Resources.MicrosoftEdgeWebView2Runtime_DownloadUrl}" MouseAction="LeftClick" />
438+
</TextBlock.InputBindings>
439+
</TextBlock>
440+
</StackPanel>
415441
</Grid>
416442
</UserControl>
417443

0 commit comments

Comments
 (0)