]> git.proxmox.com Git - pve-installer.git/commitdiff
UI: add and use display_html helper
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 19 Jun 2023 16:31:36 +0000 (18:31 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 19 Jun 2023 19:49:00 +0000 (21:49 +0200)
This is used often, among other things also for some abort code, so
move the essence to the UI.

Allows to drop one global variable for proxinstall, which is a nice
side effect.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Proxmox/UI.pm
Proxmox/UI/Base.pm
Proxmox/UI/Gtk3.pm
Proxmox/UI/StdIO.pm
proxinstall

index 9c6990b0e45f24e5662c677a22a9216ebe0fa969..c876eb66e90813c1c756757be715e9dd30e54ed8 100644 (file)
@@ -8,6 +8,8 @@ use warnings;
 
 use Carp;
 
+use Proxmox::Sys::File qw(file_read_all);
+
 use Proxmox::UI::Gtk3;
 use Proxmox::UI::StdIO;
 
@@ -59,6 +61,26 @@ sub prompt {
     return get_ui()->prompt($query);
 }
 
+sub display_html {
+    my ($filename, $transform) = @_;
+
+    my $env = get_env();
+    my $html_dir = "$env->{locations}->{lib}/html";
+
+    my $path;
+    if (-f "$html_dir/$env->{product}/$filename") {
+       $path = "$html_dir/$env->{product}/$filename";
+    } else {
+       $path = "$html_dir/$filename";
+    }
+
+    my $raw_html = file_read_all($path);
+
+    $raw_html = $transform->($raw_html, $env) if $transform;
+
+    $raw_html =~ s/__FULL_PRODUCT_NAME__/$env->{cfg}->{fullname}/g;
+
+    return get_ui()->display_html($raw_html, $html_dir);
 }
 
 1;
index 0487dc3f715c6764d1215ae2303405f95c4b622d..444a9f96b25118145555ff3021b1c27b847ca5ce 100644 (file)
@@ -38,4 +38,10 @@ sub prompt {
     croak "implement me in sub-class";
 }
 
+sub display_html {
+    my ($self, $raw_html, $html_dir) = @_;
+
+    croak "implement me in sub-class";
+}
+
 1;
index cf8334be3ced600a6accfbb720011806fb624981..98cdc8c4aec31ad1cf7aa12450d7c4443180f1a5 100644 (file)
@@ -36,4 +36,13 @@ sub prompt {
     return ($response // '') eq 'ok';
 }
 
+sub display_html {
+    my ($self, $raw_html, $html_dir) = @_;
+
+    my $html_view = $self->{state}->{html_view};
+
+    # always set base-path to common path, all resources are accesible from there.
+    $html_view->load_html($raw_html,  "file://$html_dir/");
+}
+
 1;
index ba8ca6a0c3780644c4fd7b4a24f10da21f3fe97d..f62bfb4e2a7b7f07444c3fe3be6d8f1fa57523db 100644 (file)
@@ -29,4 +29,10 @@ sub prompt {
     return lc($response) eq 'ok';
 }
 
+sub display_html {
+    my ($raw_html, $html_dir) = @_;
+
+    # ignore for now
+}
+
 1;
index 9154e4e97b684ce29b223a7efcbdb8906b2a883f..8645f633c58e64fbbb7e42fb1746a9a87e457029 100755 (executable)
@@ -138,7 +138,7 @@ my @steps = (
 );
 
 # GUI global variables
-my ($window, $cmdbox, $inbox, $htmlview);
+my ($window, $cmdbox, $inbox);
 my $prev_btn;
 my ($next, $next_fctn, $target_hd);
 my ($progress, $progress_status);
@@ -1429,43 +1429,11 @@ sub display_info {
 }
 
 sub display_html {
-    my ($filename) = @_;
+    my ($filename, $transform) = @_;
 
     $filename = $steps[$step_number]->{html} if !$filename;
 
-    my $htmldir = "${proxmox_libdir}/html";
-    my $path;
-    if (-f "$htmldir/$env->{product}/$filename") {
-       $path = "$htmldir/$env->{product}/$filename";
-    } else {
-       $path = "$htmldir/$filename";
-    }
-
-    my $data = file_read_all($path);
-
-    if ($filename eq 'license.htm') {
-       my $license = eval { decode('utf8', file_read_all("${proxmox_cddir}/EULA")) };
-       if (my $err = $@) {
-           die $err if !is_test_mode();
-           $license = "TESTMODE: Ignore non existent EULA...\n";
-       }
-       my $title = "END USER LICENSE AGREEMENT (EULA)";
-       $data =~ s/__LICENSE__/$license/;
-       $data =~ s/__LICENSE_TITLE__/$title/;
-    } elsif ($filename eq 'success.htm') {
-       my $addr = $ipversion == 6 ? "[${ipaddress}]" : "$ipaddress";
-       $data =~ s/__IPADDR__/$addr/g;
-       $data =~ s/__PORT__/$env->{cfg}->{port}/g;
-
-       my $autoreboot_msg = $config_options->{autoreboot}
-           ? "Automatic reboot scheduled in $autoreboot_seconds seconds."
-           : '';
-       $data =~ s/__AUTOREBOOT_MSG__/$autoreboot_msg/;
-    }
-    $data =~ s/__FULL_PRODUCT_NAME__/$env->{cfg}->{fullname}/g;
-
-    # always set base-path to common path, all resources are accesible from there.
-    $htmlview->load_html($data,  "file://$htmldir/");
+    Proxmox::UI::display_html($filename, $transform);
 
     $last_display_change = time();
 }
@@ -1548,7 +1516,7 @@ sub create_main_window {
     my $vbox2 = Gtk3::Box->new('vertical', 0);
     $hbox->add($vbox2);
 
-    $htmlview = Gtk3::WebKit2::WebView->new();
+    my $htmlview = Gtk3::WebKit2::WebView->new();
     $htmlview->set_hexpand(1);
     my $scrolls = Gtk3::ScrolledWindow->new();
     $scrolls->add($htmlview);
@@ -1569,7 +1537,7 @@ sub create_main_window {
 
     $window->add($vbox);
 
-    Proxmox::UI::init_gtk({ window => $window }, $env);
+    Proxmox::UI::init_gtk({ window => $window, html_view => $htmlview }, $env);
 
     $window->show_all;
     $window->present();
@@ -2960,18 +2928,33 @@ sub create_extract_view {
 
     set_next("_Reboot", sub { app_quit(0); } );
 
+    my $success_transform = sub {
+       my ($raw_html, $env) = @_;
+
+       my $addr = $ipversion == 6 ? "[${ipaddress}]" : "$ipaddress";
+       $raw_html =~ s/__IPADDR__/$addr/g;
+       $raw_html =~ s/__PORT__/$env->{cfg}->{port}/g;
+
+       my $autoreboot_msg = $config_options->{autoreboot}
+           ? "Automatic reboot scheduled in $autoreboot_seconds seconds."
+           : '';
+       $raw_html =~ s/__AUTOREBOOT_MSG__/$autoreboot_msg/;
+
+       return $raw_html;
+    };
+
     if ($err) {
        display_html("fail.htm");
        Proxmox::UI::error($err);
     } else {
        cleanup_view();
-       display_html("success.htm");
+       display_html("success.htm", $success_transform);
 
         if ($config_options->{autoreboot}) {
            Glib::Timeout->add(1000, sub {
                if ($autoreboot_seconds > 0) {
                    $autoreboot_seconds--;
-                   display_html("success.htm");
+                   display_html("success.htm", $success_transform);
                } else {
                    app_quit(0);
                }
@@ -3001,7 +2984,20 @@ sub create_intro_view {
        }
     }
 
-    display_html();
+    display_html('license.htm', sub {
+       my ($raw_html, $env) = @_;
+
+       my $license = eval { decode('utf8', file_read_all("${proxmox_cddir}/EULA")) };
+       if (my $err = $@) {
+           die $err if !is_test_mode();
+           $license = "TESTMODE: Ignore non existent EULA...\n";
+       }
+       my $title = "END USER LICENSE AGREEMENT (EULA)";
+       $raw_html =~ s/__LICENSE__/$license/;
+       $raw_html =~ s/__LICENSE_TITLE__/$title/;
+
+       return $raw_html;
+    });
 
     $step_number++;
     set_next("I a_gree", \&create_hdsel_view);