desktop: Add --save-directory
This commit is contained in:
parent
145275af86
commit
6136d14179
|
@ -1,4 +1,3 @@
|
|||
use anyhow::{Context, Error};
|
||||
use ruffle_core::backend::storage::StorageBackend;
|
||||
use std::fs;
|
||||
use std::fs::File;
|
||||
|
@ -10,23 +9,18 @@ pub struct DiskStorageBackend {
|
|||
}
|
||||
|
||||
impl DiskStorageBackend {
|
||||
pub fn new() -> Result<Self, Error> {
|
||||
let base_path = dirs::data_local_dir()
|
||||
.context("Couldn't find a valid data_local dir")?
|
||||
.join("ruffle");
|
||||
let shared_objects_path = base_path.join("SharedObjects");
|
||||
|
||||
pub fn new(shared_objects_path: PathBuf) -> Self {
|
||||
// Create a base dir if one doesn't exist yet
|
||||
if !shared_objects_path.exists() {
|
||||
tracing::info!("Creating storage dir");
|
||||
if let Err(r) = fs::create_dir_all(&base_path) {
|
||||
if let Err(r) = fs::create_dir_all(&shared_objects_path) {
|
||||
tracing::warn!("Unable to create storage dir {}", r);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(DiskStorageBackend {
|
||||
DiskStorageBackend {
|
||||
shared_objects_path,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Verifies that the path contains no `..` components to prevent accessing files outside of the Ruffle directory.
|
||||
|
|
|
@ -10,6 +10,13 @@ use ruffle_render_wgpu::clap::{GraphicsBackend, PowerPreference};
|
|||
use std::path::Path;
|
||||
use url::Url;
|
||||
|
||||
fn get_default_save_directory() -> std::path::PathBuf {
|
||||
dirs::data_local_dir()
|
||||
.expect("Couldn't find a valid data_local dir")
|
||||
.join("ruffle")
|
||||
.join("SharedObjects")
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[clap(
|
||||
name = "Ruffle",
|
||||
|
@ -82,6 +89,10 @@ pub struct Opt {
|
|||
#[cfg(feature = "render_trace")]
|
||||
trace_path: Option<std::path::PathBuf>,
|
||||
|
||||
/// Location to store save data for games.
|
||||
#[clap(long, default_value_os_t=get_default_save_directory())]
|
||||
pub save_directory: std::path::PathBuf,
|
||||
|
||||
/// Proxy to use when loading movies via URL.
|
||||
#[clap(long)]
|
||||
pub proxy: Option<Url>,
|
||||
|
|
|
@ -20,6 +20,7 @@ use ruffle_render::quality::StageQuality;
|
|||
use ruffle_render_wgpu::backend::WgpuRenderBackend;
|
||||
use ruffle_render_wgpu::descriptors::Descriptors;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
use std::sync::{Arc, Mutex, MutexGuard};
|
||||
use std::time::Duration;
|
||||
|
@ -46,6 +47,7 @@ pub struct PlayerOptions {
|
|||
pub upgrade_to_https: bool,
|
||||
pub fullscreen: bool,
|
||||
pub load_behavior: LoadBehavior,
|
||||
pub save_directory: PathBuf,
|
||||
pub letterbox: Letterbox,
|
||||
pub spoof_url: Option<Url>,
|
||||
pub player_version: u8,
|
||||
|
@ -72,6 +74,7 @@ impl From<&Opt> for PlayerOptions {
|
|||
upgrade_to_https: value.upgrade_to_https,
|
||||
fullscreen: value.fullscreen,
|
||||
load_behavior: value.load_behavior,
|
||||
save_directory: value.save_directory.clone(),
|
||||
letterbox: value.letterbox,
|
||||
spoof_url: value.spoof_url.clone(),
|
||||
player_version: value.player_version.unwrap_or(32),
|
||||
|
@ -154,7 +157,7 @@ impl ActivePlayer {
|
|||
builder = builder
|
||||
.with_navigator(navigator)
|
||||
.with_renderer(renderer)
|
||||
.with_storage(DiskStorageBackend::new().expect("Couldn't create storage backend"))
|
||||
.with_storage(DiskStorageBackend::new(opt.save_directory.clone()))
|
||||
.with_fs_commands(Box::new(DesktopFSCommandProvider {
|
||||
event_loop: event_loop.clone(),
|
||||
window: window.clone(),
|
||||
|
|
Loading…
Reference in New Issue