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 ruffle_core::backend::storage::StorageBackend;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
@ -10,23 +9,18 @@ pub struct DiskStorageBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DiskStorageBackend {
|
impl DiskStorageBackend {
|
||||||
pub fn new() -> Result<Self, Error> {
|
pub fn new(shared_objects_path: PathBuf) -> Self {
|
||||||
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");
|
|
||||||
|
|
||||||
// Create a base dir if one doesn't exist yet
|
// Create a base dir if one doesn't exist yet
|
||||||
if !shared_objects_path.exists() {
|
if !shared_objects_path.exists() {
|
||||||
tracing::info!("Creating storage dir");
|
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);
|
tracing::warn!("Unable to create storage dir {}", r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(DiskStorageBackend {
|
DiskStorageBackend {
|
||||||
shared_objects_path,
|
shared_objects_path,
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Verifies that the path contains no `..` components to prevent accessing files outside of the Ruffle directory.
|
/// 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 std::path::Path;
|
||||||
use url::Url;
|
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)]
|
#[derive(Parser, Debug)]
|
||||||
#[clap(
|
#[clap(
|
||||||
name = "Ruffle",
|
name = "Ruffle",
|
||||||
|
@ -82,6 +89,10 @@ pub struct Opt {
|
||||||
#[cfg(feature = "render_trace")]
|
#[cfg(feature = "render_trace")]
|
||||||
trace_path: Option<std::path::PathBuf>,
|
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.
|
/// Proxy to use when loading movies via URL.
|
||||||
#[clap(long)]
|
#[clap(long)]
|
||||||
pub proxy: Option<Url>,
|
pub proxy: Option<Url>,
|
||||||
|
|
|
@ -20,6 +20,7 @@ use ruffle_render::quality::StageQuality;
|
||||||
use ruffle_render_wgpu::backend::WgpuRenderBackend;
|
use ruffle_render_wgpu::backend::WgpuRenderBackend;
|
||||||
use ruffle_render_wgpu::descriptors::Descriptors;
|
use ruffle_render_wgpu::descriptors::Descriptors;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::sync::{Arc, Mutex, MutexGuard};
|
use std::sync::{Arc, Mutex, MutexGuard};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
@ -46,6 +47,7 @@ pub struct PlayerOptions {
|
||||||
pub upgrade_to_https: bool,
|
pub upgrade_to_https: bool,
|
||||||
pub fullscreen: bool,
|
pub fullscreen: bool,
|
||||||
pub load_behavior: LoadBehavior,
|
pub load_behavior: LoadBehavior,
|
||||||
|
pub save_directory: PathBuf,
|
||||||
pub letterbox: Letterbox,
|
pub letterbox: Letterbox,
|
||||||
pub spoof_url: Option<Url>,
|
pub spoof_url: Option<Url>,
|
||||||
pub player_version: u8,
|
pub player_version: u8,
|
||||||
|
@ -72,6 +74,7 @@ impl From<&Opt> for PlayerOptions {
|
||||||
upgrade_to_https: value.upgrade_to_https,
|
upgrade_to_https: value.upgrade_to_https,
|
||||||
fullscreen: value.fullscreen,
|
fullscreen: value.fullscreen,
|
||||||
load_behavior: value.load_behavior,
|
load_behavior: value.load_behavior,
|
||||||
|
save_directory: value.save_directory.clone(),
|
||||||
letterbox: value.letterbox,
|
letterbox: value.letterbox,
|
||||||
spoof_url: value.spoof_url.clone(),
|
spoof_url: value.spoof_url.clone(),
|
||||||
player_version: value.player_version.unwrap_or(32),
|
player_version: value.player_version.unwrap_or(32),
|
||||||
|
@ -154,7 +157,7 @@ impl ActivePlayer {
|
||||||
builder = builder
|
builder = builder
|
||||||
.with_navigator(navigator)
|
.with_navigator(navigator)
|
||||||
.with_renderer(renderer)
|
.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 {
|
.with_fs_commands(Box::new(DesktopFSCommandProvider {
|
||||||
event_loop: event_loop.clone(),
|
event_loop: event_loop.clone(),
|
||||||
window: window.clone(),
|
window: window.clone(),
|
||||||
|
|
Loading…
Reference in New Issue