Skip to content

Commit 976f183

Browse files
committed
Make HelpPage WebViews load on demand, and be destroyed when hidden
1 parent c0a48be commit 976f183

2 files changed

Lines changed: 53 additions & 21 deletions

File tree

src/UniGetUI/Pages/HelpPage.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,10 @@
9595
<Border
9696
Grid.Row="1"
9797
Grid.Column="0"
98+
x:Name="WebViewBorder"
9899
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
99100
CornerRadius="6">
100-
<controls:WebView2 Name="WebView" Source="https://www.google.com/" />
101+
<!--controls:WebView2 Name="WebView" Source="https://www.google.com/" /-->
101102
</Border>
102103
<ProgressBar
103104
Name="ProgressBar"
Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Diagnostics;
22
using Microsoft.UI.Xaml;
33
using Microsoft.UI.Xaml.Controls;
4+
using UniGetUI.Interface.Pages;
45

56
// To learn more about WinUI, the WinUI project structure,
67
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -10,80 +11,110 @@ namespace UniGetUI.Interface.Dialogs
1011
/// <summary>
1112
/// An empty page that can be used on its own or navigated to within a Frame.
1213
/// </summary>
13-
public sealed partial class HelpPage : Page
14+
public sealed partial class HelpPage : Page, IDisposable, IEnterLeaveListener
1415
{
1516
private bool Initialized;
17+
private WebView2? webView;
18+
private Uri? lastUri;
19+
1620
public HelpPage()
1721
{
1822
InitializeComponent();
1923
_ = InitializeWebView();
24+
}
2025

21-
WebView.NavigationStarting += (_, e) =>
26+
private async Task InitializeWebView()
27+
{
28+
webView = new();
29+
WebViewBorder.Child = webView;
30+
webView.NavigationStarting += (_, e) =>
2231
{
2332
ProgressBar.Visibility = Visibility.Visible;
33+
lastUri = new Uri(e.Uri);
2434
if (e.Uri.ToString().Contains("marticliment.com") && !e.Uri.ToString().Contains("isWingetUIIframe"))
2535
{
2636
e.Cancel = true;
2737
if (e.Uri.ToString().Contains('?'))
2838
{
29-
WebView.Source = new Uri(e.Uri.ToString() + "&isWingetUIIframe");
39+
webView.Source = new Uri(e.Uri.ToString() + "&isWingetUIIframe");
3040
}
3141
else
3242
{
33-
WebView.Source = new Uri(e.Uri.ToString() + "?isWingetUIIframe");
43+
webView.Source = new Uri(e.Uri.ToString() + "?isWingetUIIframe");
3444
}
3545
}
3646
};
37-
WebView.NavigationCompleted += (_, _) => { ProgressBar.Visibility = Visibility.Collapsed; };
38-
}
47+
webView.NavigationCompleted += (_, _) =>
48+
{
49+
ProgressBar.Visibility = Visibility.Collapsed;
50+
};
3951

40-
private async Task InitializeWebView()
41-
{
42-
await WebView.EnsureCoreWebView2Async();
52+
await webView.EnsureCoreWebView2Async();
4353
Initialized = true;
44-
WebView.Source = new Uri("https://marticliment.com/unigetui/help");
54+
webView.Source = lastUri ?? new Uri("https://marticliment.com/unigetui/help");
4555
}
4656

4757
private void BackButton_Click(object sender, RoutedEventArgs e)
4858
{
49-
if (Initialized && WebView.CanGoBack)
59+
if (Initialized && webView is not null && webView.CanGoBack)
5060
{
51-
WebView.GoBack();
61+
webView.GoBack();
5262
}
5363
}
5464

5565
private void RightButton_Click(object sender, RoutedEventArgs e)
5666
{
5767

58-
if (Initialized && WebView.CanGoForward)
68+
if (Initialized && webView is not null && webView.CanGoForward)
5969
{
60-
WebView.GoForward();
70+
webView.GoForward();
6171
}
6272
}
6373

6474
private void HomeButton_Click(object sender, RoutedEventArgs e)
6575
{
6676

67-
if (Initialized)
77+
if (Initialized && webView is not null)
6878
{
69-
WebView.Source = new Uri("https://marticliment.com/unigetui/help");
79+
webView.Source = new Uri("https://marticliment.com/unigetui/help");
7080
}
7181
}
7282

7383
private void ReloadButton_Click(object sender, RoutedEventArgs e)
7484
{
75-
if (Initialized)
85+
if (Initialized && webView is not null)
7686
{
77-
WebView.Reload();
87+
webView.Reload();
7888
}
7989
}
8090

8191
private void BrowserButton_Click(object sender, RoutedEventArgs e)
8292
{
83-
if (Initialized)
93+
if (Initialized && webView is not null)
8494
{
85-
Process.Start(new ProcessStartInfo { FileName = WebView.Source.ToString().Replace("?isWingetUIIframe", "").Replace("&isWingetUIIframe", ""), UseShellExecute = true });
95+
Process.Start(new ProcessStartInfo { FileName = webView.Source.ToString().Replace("?isWingetUIIframe", "").Replace("&isWingetUIIframe", ""), UseShellExecute = true });
8696
}
8797
}
98+
99+
public void Dispose()
100+
{
101+
webView?.Close();
102+
WebViewBorder.Child = new UserControl();
103+
webView = null;
104+
Initialized = false;
105+
}
106+
107+
public void OnEnter()
108+
{
109+
if (webView is null) _ = InitializeWebView();
110+
}
111+
112+
public void OnLeave()
113+
{
114+
webView?.Close();
115+
WebViewBorder.Child = new UserControl();
116+
webView = null;
117+
Initialized = false;
118+
}
88119
}
89120
}

0 commit comments

Comments
 (0)