From c55bf4a318e6503b72795ac604c499c9ae73a4dd Mon Sep 17 00:00:00 2001 From: sleepycatcoding <131554884+sleepycatcoding@users.noreply.github.com> Date: Tue, 26 Mar 2024 21:02:16 +0200 Subject: [PATCH] desktop: add CLI flag for storage backend this allows to temporarily change the storage backend for a session. --- desktop/src/cli.rs | 7 ++++ desktop/src/gui/preferences_dialog.rs | 51 +++++++++++++++++---------- desktop/src/preferences.rs | 14 ++++---- desktop/src/preferences/save.rs | 2 +- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/desktop/src/cli.rs b/desktop/src/cli.rs index c7235a606908..76611c95cba0 100644 --- a/desktop/src/cli.rs +++ b/desktop/src/cli.rs @@ -1,3 +1,4 @@ +use crate::preferences::save::StorageBackend; use crate::RUFFLE_VERSION; use anyhow::{anyhow, Error}; use clap::{Parser, ValueEnum}; @@ -54,6 +55,12 @@ pub struct Opt { #[clap(long, short)] pub power: Option, + /// Type of storage backend to use. This determines where local storage data is saved (e.g. shared objects). + /// + /// This option temporarily overrides any stored preference. + #[clap(long)] + pub storage: Option, + /// Width of window in pixels. #[clap(long, display_order = 1)] pub width: Option, diff --git a/desktop/src/gui/preferences_dialog.rs b/desktop/src/gui/preferences_dialog.rs index cd68d43adfcc..10ee61ed044a 100644 --- a/desktop/src/gui/preferences_dialog.rs +++ b/desktop/src/gui/preferences_dialog.rs @@ -30,6 +30,7 @@ pub struct PreferencesDialog { log_filename_pattern_changed: bool, save_storage_backend: StorageBackend, + save_storage_backend_readonly: bool, save_storage_backend_changed: bool, } @@ -68,6 +69,7 @@ impl PreferencesDialog { log_filename_pattern_changed: false, save_storage_backend: preferences.save_storage_backend(), + save_storage_backend_readonly: preferences.cli.storage.is_some(), save_storage_backend_changed: false, preferences, @@ -98,7 +100,7 @@ impl PreferencesDialog { self.show_log_preferences(locale, ui); - self.show_save_preferences(locale, ui); + self.show_save_preferences(locale, &locked_text, ui); }); if self.restart_required() { @@ -274,28 +276,39 @@ impl PreferencesDialog { ui.end_row(); } - fn show_save_preferences(&mut self, locale: &LanguageIdentifier, ui: &mut Ui) { + fn show_save_preferences( + &mut self, + locale: &LanguageIdentifier, + locked_text: &str, + ui: &mut Ui, + ) { ui.label(text(locale, "save-storage-backend")); - let previous = self.save_storage_backend; - ComboBox::from_id_source("save-storage-backend") - .selected_text(storage_backend_name(locale, self.save_storage_backend)) - .show_ui(ui, |ui| { - ui.selectable_value( - &mut self.save_storage_backend, - StorageBackend::Disk, - storage_backend_name(locale, StorageBackend::Disk), - ); - ui.selectable_value( - &mut self.save_storage_backend, - StorageBackend::Memory, - storage_backend_name(locale, StorageBackend::Memory), - ); - }); + if self.save_storage_backend_readonly { + ui.label(storage_backend_name(locale, self.save_storage_backend)) + .on_hover_text(locked_text); + } else { + let previous = self.save_storage_backend; + ComboBox::from_id_source("save-storage-backend") + .selected_text(storage_backend_name(locale, self.save_storage_backend)) + .show_ui(ui, |ui| { + ui.selectable_value( + &mut self.save_storage_backend, + StorageBackend::Disk, + storage_backend_name(locale, StorageBackend::Disk), + ); + ui.selectable_value( + &mut self.save_storage_backend, + StorageBackend::Memory, + storage_backend_name(locale, StorageBackend::Memory), + ); + }); - if self.save_storage_backend != previous { - self.save_storage_backend_changed = true; + if self.save_storage_backend != previous { + self.save_storage_backend_changed = true; + } } + ui.end_row(); } diff --git a/desktop/src/preferences.rs b/desktop/src/preferences.rs index b0e28044c846..1fb54054e555 100644 --- a/desktop/src/preferences.rs +++ b/desktop/src/preferences.rs @@ -130,12 +130,14 @@ impl GlobalPreferences { } pub fn save_storage_backend(&self) -> save::StorageBackend { - self.preferences - .lock() - .expect("Preferences is not reentrant") - .values - .save - .backend + self.cli.storage.unwrap_or_else(|| { + self.preferences + .lock() + .expect("Preferences is not reentrant") + .values + .save + .backend + }) } pub fn write_preferences(&self, fun: impl FnOnce(&mut PreferencesWriter)) -> Result<(), Error> { diff --git a/desktop/src/preferences/save.rs b/desktop/src/preferences/save.rs index 25736f9db0f7..8119b380c8f8 100644 --- a/desktop/src/preferences/save.rs +++ b/desktop/src/preferences/save.rs @@ -2,7 +2,7 @@ use crate::{backends::DiskStorageBackend, player::PlayerOptions}; use ruffle_core::backend::storage::MemoryStorageBackend; use std::str::FromStr; -#[derive(Copy, Clone, PartialEq, Eq, Debug, Default)] +#[derive(clap::ValueEnum, Copy, Clone, PartialEq, Eq, Debug, Default)] pub enum StorageBackend { #[default] Disk,