Make replay power supply an option that works with the other replay autostart options

This commit is contained in:
dec05eba
2026-04-18 05:08:08 +02:00
parent 82453684b1
commit 8a49ea991b
13 changed files with 63 additions and 30 deletions

View File

@@ -55,8 +55,6 @@ namespace gsr {
return ReplayStartupMode::TURN_ON_AT_SYSTEM_STARTUP;
else if(strcmp(startup_mode_str, "turn_on_at_fullscreen") == 0 || strcmp(startup_mode_str, "turn_on_at_game_launch") == 0)
return ReplayStartupMode::TURN_ON_AT_GAME_LAUNCH;
else if(strcmp(startup_mode_str, "turn_on_at_power_supply_connected") == 0)
return ReplayStartupMode::TURN_ON_AT_POWER_SUPPLY_CONNECTED;
else
return ReplayStartupMode::DONT_TURN_ON_AUTOMATICALLY;
}
@@ -296,6 +294,7 @@ namespace gsr {
{"replay.turn_on_replay_automatically_mode", &config.replay_config.turn_on_replay_automatically_mode},
{"replay.save_video_in_game_folder", &config.replay_config.save_video_in_game_folder},
{"replay.restart_replay_on_save", &config.replay_config.restart_replay_on_save},
{"replay.only_start_replay_if_power_supply_connected", &config.replay_config.only_start_replay_if_power_supply_connected},
{"replay.save_directory", &config.replay_config.save_directory},
{"replay.container", &config.replay_config.container},
{"replay.time", &config.replay_config.replay_time},

View File

@@ -928,6 +928,8 @@ namespace gsr {
update_gsr_screenshot_process_status();
replay_status_update_status();
update_gsr_game_tracker_replay_status();
if(hide_ui) {
hide_ui = false;
hide();
@@ -2188,14 +2190,14 @@ namespace gsr {
if(!line || line[0] == '\0')
return;
if(replay_startup_mode != ReplayStartupMode::TURN_ON_AT_GAME_LAUNCH)
return;
if(recording_status == RecordingStatus::NONE && strncmp(line, "Game launched", 13) == 0) {
on_press_start_replay(false, false);
} else if(recording_status == RecordingStatus::REPLAY && strncmp(line, "Game exited", 11) == 0) {
on_press_start_replay(false, false);
if(strncmp(line, "Game launched", 13) == 0) {
game_running = true;
game_running_replay = true;
} else if(strncmp(line, "Game exited", 11) == 0) {
game_running = false;
game_running_replay = false;
}
} else if(gsr_game_tracker_process_output_fd > 0) {
read(gsr_game_tracker_process_output_fd, buffer, sizeof(buffer));
}
@@ -2402,29 +2404,38 @@ namespace gsr {
// TODO: Instead of checking power supply status periodically listen to power supply event
void Overlay::update_power_supply_status() {
if(replay_startup_mode != ReplayStartupMode::TURN_ON_AT_POWER_SUPPLY_CONNECTED)
if(replay_startup_mode == ReplayStartupMode::DONT_TURN_ON_AUTOMATICALLY)
return;
const bool prev_power_supply_status = power_supply_connected;
power_supply_connected = power_supply_online_filepath.empty() || power_supply_is_connected(power_supply_online_filepath.c_str());
if(power_supply_connected != prev_power_supply_status) {
if(recording_status == RecordingStatus::NONE && power_supply_connected) {
if(are_all_audio_tracks_available_to_capture(config.replay_config.record_options.audio_tracks_list) && is_webcam_available_to_capture(config.replay_config.record_options))
on_press_start_replay(false, false);
} else if(recording_status == RecordingStatus::REPLAY && !power_supply_connected) {
on_press_start_replay(false, false);
}
}
}
void Overlay::update_system_startup_status() {
if(replay_startup_mode != ReplayStartupMode::TURN_ON_AT_SYSTEM_STARTUP || recording_status != RecordingStatus::NONE || !try_replay_startup)
return;
if(config.replay_config.only_start_replay_if_power_supply_connected && !power_supply_connected)
return;
if(are_all_audio_tracks_available_to_capture(config.replay_config.record_options.audio_tracks_list) && is_webcam_available_to_capture(config.replay_config.record_options))
on_press_start_replay(true, false);
}
void Overlay::update_gsr_game_tracker_replay_status() {
if(replay_startup_mode != ReplayStartupMode::TURN_ON_AT_GAME_LAUNCH)
return;
if(config.replay_config.only_start_replay_if_power_supply_connected && !power_supply_connected)
return;
if(recording_status == RecordingStatus::NONE && game_running_replay) {
game_running_replay = false;
on_press_start_replay(false, false);
} else if(recording_status == RecordingStatus::REPLAY && !game_running) {
on_press_start_replay(false, false);
}
}
void Overlay::on_stop_recording(int exit_code, std::string &video_filepath) {
if(exit_code == 0) {
if(config.record_config.save_video_in_game_folder) {

View File

@@ -1140,11 +1140,21 @@ namespace gsr {
radiobutton->add_item(TR("Don't turn on replay automatically"), "dont_turn_on_automatically");
radiobutton->add_item(TR("Turn on replay when this program starts"), "turn_on_at_system_startup");
radiobutton->add_item(TR("Turn on replay when starting a game"), "turn_on_at_game_launch");
radiobutton->add_item(TR("Turn on replay when power supply is connected"), "turn_on_at_power_supply_connected");
turn_on_replay_automatically_mode_ptr = radiobutton.get();
return radiobutton;
}
std::unique_ptr<Widget> SettingsPage::create_start_replay_automatically_section() {
auto list = std::make_unique<List>(List::Orientation::VERTICAL);
list->add_widget(create_start_replay_automatically());
auto checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), TR("Only turn on replay if a power supply is connected"));
replay_power_supply_checkbox_ptr = checkbox.get();
list->add_widget(std::move(checkbox));
return list;
}
std::unique_ptr<CheckBox> SettingsPage::create_save_replay_in_game_folder() {
char text[256];
snprintf(text, sizeof(text), TR("Save video in a folder based on the games name%s"), supports_window_title ? "" : TR(" (X11 applications only)"));
@@ -1280,7 +1290,7 @@ namespace gsr {
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Replay indicator"), create_indicator(TR("replay")), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Autostart"), create_start_replay_automatically(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Autostart"), create_start_replay_automatically_section(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
view_radio_button_ptr->on_selection_changed = [this](std::string_view, std::string_view id) {
view_changed(id == "advanced");
@@ -1705,6 +1715,7 @@ namespace gsr {
replay_storage_button_ptr->set_selected_item(config.replay_config.replay_storage);
turn_on_replay_automatically_mode_ptr->set_selected_item(config.replay_config.turn_on_replay_automatically_mode);
save_replay_in_game_folder_ptr->set_checked(config.replay_config.save_video_in_game_folder);
replay_power_supply_checkbox_ptr->set_checked(config.replay_config.only_start_replay_if_power_supply_connected);
if(restart_replay_on_save)
restart_replay_on_save->set_checked(config.replay_config.restart_replay_on_save);
@@ -1858,6 +1869,7 @@ namespace gsr {
save_common(config.replay_config.record_options);
config.replay_config.turn_on_replay_automatically_mode = turn_on_replay_automatically_mode_ptr->get_selected_id();
config.replay_config.save_video_in_game_folder = save_replay_in_game_folder_ptr->is_checked();
config.replay_config.only_start_replay_if_power_supply_connected = replay_power_supply_checkbox_ptr->is_checked();
if(restart_replay_on_save)
config.replay_config.restart_replay_on_save = restart_replay_on_save->is_checked();
config.replay_config.save_directory = save_directory_button_ptr->get_text();