]> git.proxmox.com Git - pve-installer.git/commitdiff
add Finished UIĀ² message
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 20 Jun 2023 18:04:36 +0000 (20:04 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 20 Jun 2023 19:02:53 +0000 (21:02 +0200)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Proxmox/UI.pm
Proxmox/UI/Base.pm
Proxmox/UI/Gtk3.pm
Proxmox/UI/StdIO.pm
proxmox-low-level-installer
proxmox-tui-installer/src/main.rs

index 7d8bd4f08930eb3336e842f888eca37d316b1aa9..68a9cd4d5724f437df52cb7c82d04b9d4e8709b3 100644 (file)
@@ -56,6 +56,11 @@ sub error {
     get_ui()->error($msg);
 }
 
+sub finished {
+    my ($success, $msg) = @_;
+    get_ui()->finished(!!$success, $msg);
+}
+
 sub prompt {
     my ($query) = @_;
     return get_ui()->prompt($query);
index 288bf810271794939071072ed3d5bb33caf3f9c0..c68d3f8b0284f87623d83e99d1dcb36f81de2a9b 100644 (file)
@@ -40,6 +40,12 @@ sub error {
     croak "implement me in sub-class";
 }
 
+sub finished {
+    my ($self, $success, $msg) = @_;
+
+    croak "implement me in sub-class";
+}
+
 sub prompt {
     my ($self, $query) = @_;
 
index 7bb9ddf12c98efcc2709c72ffa38a8210d6e8c89..19fcfd719535c8fd47184c32fbd353b72c8b27e2 100644 (file)
@@ -25,6 +25,11 @@ sub error {
     $dialog->destroy();
 }
 
+sub finished {
+    my ($self, $success, $msg) = @_;
+    # handled manually in proxinstall at the moment
+}
+
 sub prompt {
     my ($self, $query) = @_;
 
index f510dd3071b413a16aa0356731867ec8916a4e4a..2532f63e228057cb6a7c84481a80d93d2f62cdcf 100644 (file)
@@ -5,6 +5,8 @@ use warnings;
 
 use base qw(Proxmox::UI::Base);
 
+use Proxmox::Log;
+
 sub init {
     my ($self) = @_;
 
@@ -19,10 +21,18 @@ sub message {
 
 sub error {
     my ($self, $msg) = @_;
-
+    log_err("error: $msg\n");
     print STDOUT "error: $msg\n";
 }
 
+sub finished {
+    my ($self, $success, $msg) = @_;
+
+    my $state = $success ? 'ok' : 'err';
+    log_info("finished: $state, $msg\n");
+    print STDOUT "finished: $state, $msg\n";
+}
+
 sub prompt {
     my ($self, $query) = @_;
 
index 5802ccda80969f0a5bf1d9f9d5967e31719d794e..159df4e8740da15ec16cd0611c7c383ac8dfffa7 100755 (executable)
@@ -102,20 +102,18 @@ if ($cmd eq 'dump-env') {
     if (my $err = $@) {
        # suppress "empty" error as we got some case where the user choose to abort on a prompt,
        # there it doesn't make sense to show them an error again, they "caused" it after all.
-       warn "installation failed - $err\n";
-       log_error("installation failed: $err");
-       Proxmox::UI::error($err) if $err ne "\n";
+       if ($err ne "\n") {
+           warn "installation failed - $err\n";
+           log_error("installation failed: $err");
+           Proxmox::UI::finished(0, $err);
+       }
     } else {
        if (Proxmox::Install::Config::get_autoreboot()) {
-           Proxmox::UI::message("Installation finished - auto-rebooting in ~ 5 seconds");
-           for (my $i = 5; $i > 0; $i--) {
-               sleep(1);
-               exit(0)
-           }
+           Proxmox::UI::finished(1, "Installation finished - auto-rebooting in ~ 5 seconds");
        } else {
-           while (!Proxmox::UI::prompt("Installation complete - reboot now?")) {}
-           exit(0);
+           Proxmox::UI::finished(1, "Installation complete - reboot now?");
        }
+       exit(0);
     }
 } elsif ($cmd eq 'start-session-test') {
     Proxmox::UI::init_stdio({}, $env);
index 3d2e8386214c8a4872bd270d60609e62fa4ebc3d..af44fa74e37ee40a611c73b3ea21c391a27be8f2 100644 (file)
@@ -746,16 +746,20 @@ fn install_progress_dialog(siv: &mut Cursive) -> InstallerView {
                             progress_text.set_content(s);
                             Ok(())
                         }
+                        UiMessage::Finished(success, msg) => {
+                            counter.set(100);
+                            progress_text.set_content(msg.to_owned());
+                            cb_sink.send(Box::new(move |siv| {
+                                let title = if success { "Success" } else { "Failure" };
+                                siv.add_layer(
+                                    Dialog::text(msg).title(title).button("Reboot", |s| s.quit()),
+                                );
+                            }))
+                        }
                     }
                     .unwrap();
                 }
 
-                cb_sink
-                    .send(Box::new(|siv| {
-                        siv.add_layer(Dialog::info("low-level install finished"));
-                    }))
-                    .unwrap();
-
                 Some(())
             };
 
@@ -799,6 +803,7 @@ enum UiMessage {
     Info(String),
     Error(String),
     Prompt(String),
+    Finished(bool, String),
     Progress(usize, String),
 }
 
@@ -812,12 +817,16 @@ impl FromStr for UiMessage {
             "message" => Ok(UiMessage::Info(rest.to_owned())),
             "error" => Ok(UiMessage::Error(rest.to_owned())),
             "prompt" => Ok(UiMessage::Prompt(rest.to_owned())),
+            "finished" => {
+                let (state, rest) = rest.split_once(", ").ok_or("invalid message: no state")?;
+                Ok(UiMessage::Finished(state == "ok", rest.to_owned()))
+            }
             "progress" => {
                 let (percent, rest) = rest.split_once(' ').ok_or("invalid progress message")?;
                 Ok(UiMessage::Progress(
                     percent
                         .parse::<f64>()
-                        .map(|v| v.round() as usize)
+                        .map(|v| (v * 100.).floor() as usize)
                         .map_err(|err| err.to_string())?,
                     rest.to_owned(),
                 ))