[pve-devel] [PATCH installer v2 8/8] low-level, tui: count down auto-reboot timeout
Christoph Heiss
c.heiss at proxmox.com
Fri Nov 10 15:17:26 CET 2023
The GUI installer already has the same functionality, with this the TUI
installer gains the same. It is a nice touch anyway, primarily to
indicate to the user that the installer is not frozen or similar.
Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
---
Changes v1 -> v2:
* no changes
proxmox-low-level-installer | 25 +++++++++++--------
.../src/views/install_progress.rs | 12 +++++++--
2 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/proxmox-low-level-installer b/proxmox-low-level-installer
index b8269d7..9b4b773 100755
--- a/proxmox-low-level-installer
+++ b/proxmox-low-level-installer
@@ -69,6 +69,19 @@ sub read_and_merge_config {
log_info("got installation config: ". to_json(Proxmox::Install::Config::get(), { utf8 => 1, canonical => 1 }) ."\n");
}
+sub send_reboot_ui_message {
+ if (Proxmox::Install::Config::get_autoreboot()) {
+ my $secs = 5;
+ while ($secs > 0) {
+ Proxmox::UI::finished(1, "Installation finished - auto-rebooting in $secs seconds ..");
+ sleep 1;
+ $secs -= 1;
+ }
+ } else {
+ Proxmox::UI::finished(1, "Installation complete - reboot now?");
+ }
+}
+
my $cmd = shift;
if (!$cmd || $cmd eq 'help' || !exists($commands->{$cmd})) {
usage($cmd // '');
@@ -115,11 +128,7 @@ if ($cmd eq 'dump-env') {
Proxmox::UI::finished(0, $err);
}
} else {
- if (Proxmox::Install::Config::get_autoreboot()) {
- Proxmox::UI::finished(1, "Installation finished - auto-rebooting in ~ 5 seconds");
- } else {
- Proxmox::UI::finished(1, "Installation complete - reboot now?");
- }
+ send_reboot_ui_message();
}
} elsif ($cmd eq 'start-session-test') {
Proxmox::UI::init_stdio({}, $env);
@@ -137,11 +146,7 @@ if ($cmd eq 'dump-env') {
}
}
- if (Proxmox::Install::Config::get_autoreboot()) {
- Proxmox::UI::finished(1, "Installation finished - auto-rebooting in ~ 5 seconds");
- } else {
- Proxmox::UI::finished(1, "Installation complete - reboot now?");
- }
+ send_reboot_ui_message();
}
exit(0);
diff --git a/proxmox-tui-installer/src/views/install_progress.rs b/proxmox-tui-installer/src/views/install_progress.rs
index 96e62f8..76dd518 100644
--- a/proxmox-tui-installer/src/views/install_progress.rs
+++ b/proxmox-tui-installer/src/views/install_progress.rs
@@ -8,7 +8,7 @@ use std::{
use cursive::{
utils::Counter,
- view::{Resizable, ViewWrapper},
+ view::{Nameable, Resizable, ViewWrapper},
views::{Dialog, DummyView, LinearLayout, PaddedView, ProgressBar, TextContent, TextView},
CbSink, Cursive,
};
@@ -153,14 +153,22 @@ impl InstallProgressView {
}
fn prepare_for_reboot(siv: &mut Cursive, success: bool, msg: &str) {
+ const DIALOG_ID: &str = "autoreboot-dialog";
let title = if success { "Success" } else { "Failure" };
+ // If the dialog was previously created, just update its content and we're done.
+ if let Some(mut dialog) = siv.find_name::<Dialog>(DIALOG_ID) {
+ dialog.set_content(TextView::new(msg));
+ return;
+ }
+
// For rebooting, we just need to quit the installer,
// our caller does the actual reboot.
siv.add_layer(
Dialog::text(msg)
.title(title)
- .button("Reboot now", Cursive::quit),
+ .button("Reboot now", Cursive::quit)
+ .with_name(DIALOG_ID),
);
let autoreboot = siv
--
2.42.0
More information about the pve-devel
mailing list