Skip to content

Commit

Permalink
desktop: add CLI flag for storage backend
Browse files Browse the repository at this point in the history
this allows to temporarily change the storage backend for a session.
  • Loading branch information
sleepycatcoding committed Mar 27, 2024
1 parent 8e2ad9a commit c55bf4a
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 26 deletions.
7 changes: 7 additions & 0 deletions 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};
Expand Down Expand Up @@ -54,6 +55,12 @@ pub struct Opt {
#[clap(long, short)]
pub power: Option<PowerPreference>,

/// 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<StorageBackend>,

/// Width of window in pixels.
#[clap(long, display_order = 1)]
pub width: Option<f64>,
Expand Down
51 changes: 32 additions & 19 deletions desktop/src/gui/preferences_dialog.rs
Expand Up @@ -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,
}

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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();
}

Expand Down
14 changes: 8 additions & 6 deletions desktop/src/preferences.rs
Expand Up @@ -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> {
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/preferences/save.rs
Expand Up @@ -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,
Expand Down

0 comments on commit c55bf4a

Please sign in to comment.