11using System . Diagnostics ;
22using Microsoft . UI . Xaml ;
33using 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