#include "ply-trigger.h"
#include "ply-utils.h"
#include "ply-progress.h"
+#include "ply-kmsg-reader.h"
#define BOOT_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/boot-duration"
#define SHUTDOWN_DURATION_FILE PLYMOUTH_TIME_DIRECTORY "/shutdown-duration"
ply_event_loop_t *loop;
ply_boot_server_t *boot_server;
ply_boot_splash_t *boot_splash;
+ ply_kmsg_reader_t *kmsg_reader;
ply_terminal_session_t *session;
ply_buffer_t *boot_buffer;
ply_progress_t *progress;
ply_trigger_t *deactivate_trigger;
ply_trigger_t *quit_trigger;
+ ply_trigger_t *kmsg_trigger;
double start_time;
double splash_delay;
static void on_quit (state_t *state,
bool retain_splash,
ply_trigger_t *quit_trigger);
+static void on_new_kmsg_message (state_t *state,
+ kmsg_message_t *kmsg_message);
static bool sh_is_init (state_t *state);
static void cancel_pending_delayed_show (state_t *state);
static void prepare_logging (state_t *state);
}
}
+void
+on_new_kmsg_message (state_t *state,
+ kmsg_message_t *kmsg_message)
+{
+ long size = strlen (kmsg_message->message) + 1;
+ char output[size];
+
+ strcpy (output, kmsg_message->message);
+ strcat (output, "\n");
+
+ ply_buffer_append_bytes (state->boot_buffer, output, size);
+
+ if (state->boot_splash != NULL)
+ ply_boot_splash_update_output (state->boot_splash, output, size);
+}
+
static bool
on_has_active_vt (state_t *state)
{
on_escape_pressed (state_t *state)
{
ply_trace ("escape key pressed");
+ bool has_vt_consoles = true;
if (state->local_console_terminal != NULL) {
if (!ply_terminal_is_vt (state->local_console_terminal))
- return;
+ has_vt_consoles = false;
} else {
- return;
+ has_vt_consoles = false;
}
- if (validate_input (state, "", "\e"))
+ if (validate_input (state, "", "\e") && has_vt_consoles == true)
toggle_between_splash_and_details (state);
}
return false;
}
+ if (state->kmsg_reader == NULL) {
+ ply_trace ("Creating new kmsg reader");
+ state->kmsg_reader = ply_kmsg_reader_new ();
+
+ ply_kmsg_reader_watch_for_messages (state->kmsg_reader,
+ (ply_kmsg_reader_message_handler_t)
+ on_new_kmsg_message,
+ state);
+ }
+
+ ply_kmsg_reader_start (state->kmsg_reader);
+
#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
tell_systemd_to_print_details (state);
#endif
tell_systemd_to_stop_printing_details (state);
#endif
+ ply_trace ("stopping kmsg reader");
+ ply_kmsg_reader_stop (state->kmsg_reader);
+
ply_trace ("detaching from terminal session");
ply_terminal_session_detach (state->session);
state->is_redirected = false;