From 305c9df7acc140d1d4b723948b9f59e8282eea87 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 4 May 2025 22:39:37 +0200 Subject: Add option to save temporary replay data on disk --- src/Config.cpp | 1 + src/Overlay.cpp | 10 +++++++++- src/gui/RadioButton.cpp | 11 ++++++++++- src/gui/SettingsPage.cpp | 38 ++++++++++++++++++++++++++++++-------- 4 files changed, 50 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/Config.cpp b/src/Config.cpp index 2de6a96..3445e56 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -264,6 +264,7 @@ namespace gsr { {"replay.save_directory", &config.replay_config.save_directory}, {"replay.container", &config.replay_config.container}, {"replay.time", &config.replay_config.replay_time}, + {"replay.replay_storage", &config.replay_config.replay_storage}, {"replay.start_stop_hotkey", &config.replay_config.start_stop_hotkey}, {"replay.save_hotkey", &config.replay_config.save_hotkey}, {"replay.save_1_min_hotkey", &config.replay_config.save_1_min_hotkey}, diff --git a/src/Overlay.cpp b/src/Overlay.cpp index c423125..70278ee 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -934,8 +934,11 @@ namespace gsr { // when a compositor isn't running. window_create_params.graphics_api = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? MGL_GRAPHICS_API_GLX : MGL_GRAPHICS_API_EGL; - if(!window->create("gsr ui", window_create_params)) + if(!window->create("gsr ui", window_create_params)) { fprintf(stderr, "error: failed to create window\n"); + window.reset(); + return; + } //window->set_low_latency(true); @@ -2308,6 +2311,11 @@ namespace gsr { args.push_back("yes"); } + if(gsr_info.system_info.gsr_version >= GsrVersion{5, 5, 0}) { + args.push_back("-replay-storage"); + args.push_back(config.replay_config.replay_storage.c_str()); + } + char region_str[128]; add_common_gpu_screen_recorder_args(args, config.replay_config.record_options, audio_tracks, video_bitrate, size, region_str, sizeof(region_str), region_selector); diff --git a/src/gui/RadioButton.cpp b/src/gui/RadioButton.cpp index a6ef96a..bbb958a 100644 --- a/src/gui/RadioButton.cpp +++ b/src/gui/RadioButton.cpp @@ -169,7 +169,7 @@ namespace gsr { } } - const std::string RadioButton::get_selected_id() const { + const std::string& RadioButton::get_selected_id() const { if(items.empty()) { static std::string dummy; return dummy; @@ -177,4 +177,13 @@ namespace gsr { return items[selected_item].id; } } + + const std::string& RadioButton::get_selected_text() const { + if(items.empty()) { + static std::string dummy; + return dummy; + } else { + return items[selected_item].text.get_string(); + } + } } \ No newline at end of file diff --git a/src/gui/SettingsPage.cpp b/src/gui/SettingsPage.cpp index 9890d17..b457ab4 100644 --- a/src/gui/SettingsPage.cpp +++ b/src/gui/SettingsPage.cpp @@ -715,7 +715,7 @@ namespace gsr { auto list = std::make_unique(List::Orientation::HORIZONTAL, List::Alignment::CENTER); auto replay_time_entry = std::make_unique(&get_theme().body_font, "60", get_theme().body_font.get_character_size() * 3); - replay_time_entry->validate_handler = create_entry_validator_integer_in_range(1, 10800); + replay_time_entry->validate_handler = create_entry_validator_integer_in_range(2, 86400); replay_time_entry_ptr = replay_time_entry.get(); list->add_widget(std::move(replay_time_entry)); @@ -733,6 +733,24 @@ namespace gsr { return replay_time_list; } + std::unique_ptr SettingsPage::create_replay_storage() { + auto list = std::make_unique(List::Orientation::VERTICAL); + list->add_widget(std::make_unique