web: Add create_storage_backend to builder

This commit is contained in:
Nathan Adams 2024-06-05 22:54:05 +02:00
parent b727610cc4
commit 8ce7e82a0d
2 changed files with 14 additions and 11 deletions

View File

@ -1,8 +1,9 @@
use crate::navigator::WebNavigatorBackend;
use crate::{audio, JavascriptPlayer, RuffleHandle, SocketProxy, RUFFLE_GLOBAL_PANIC};
use crate::{audio, storage, JavascriptPlayer, RuffleHandle, SocketProxy, RUFFLE_GLOBAL_PANIC};
use js_sys::Promise;
use ruffle_core::backend::audio::{AudioBackend, NullAudioBackend};
use ruffle_core::backend::navigator::OpenURLMode;
use ruffle_core::backend::storage::{MemoryStorageBackend, StorageBackend};
use ruffle_core::backend::ui::FontDefinition;
use ruffle_core::compatibility_rules::CompatibilityRules;
use ruffle_core::config::{Letterbox, NetworkingAccessMode};
@ -542,4 +543,14 @@ impl RuffleInstanceBuilder {
self.credential_allow_list.clone(),
)
}
pub fn create_storage_backend(&self) -> Box<dyn StorageBackend> {
match web_sys::window().expect("window()").local_storage() {
Ok(Some(s)) => Box::new(storage::LocalStorageBackend::new(s)),
err => {
tracing::warn!("Unable to use localStorage: {:?}\nData will not save.", err);
Box::new(MemoryStorageBackend::new())
}
}
}
}

View File

@ -398,16 +398,8 @@ impl RuffleHandle {
let mut builder = PlayerBuilder::new()
.with_boxed_renderer(renderer)
.with_boxed_audio(config.create_audio_backend(log_subscriber.clone()))
.with_navigator(config.create_navigator(log_subscriber.clone()));
match window.local_storage() {
Ok(Some(s)) => {
builder = builder.with_storage(Box::new(storage::LocalStorageBackend::new(s)));
}
err => {
tracing::warn!("Unable to use localStorage: {:?}\nData will not save.", err);
}
};
.with_navigator(config.create_navigator(log_subscriber.clone()))
.with_storage(config.create_storage_backend());
// Create the external interface.
if allow_script_access && allow_networking == NetworkingAccessMode::All {