2023-01-10 11:47:03 +00:00
|
|
|
use base64::prelude::BASE64_STANDARD;
|
|
|
|
use base64::Engine;
|
2020-06-15 20:55:29 +00:00
|
|
|
use ruffle_core::backend::storage::StorageBackend;
|
|
|
|
use web_sys::Storage;
|
|
|
|
|
|
|
|
pub struct LocalStorageBackend {
|
|
|
|
storage: Storage,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl LocalStorageBackend {
|
2020-12-21 16:16:44 +00:00
|
|
|
pub(crate) fn new(storage: Storage) -> Self {
|
|
|
|
LocalStorageBackend { storage }
|
2020-06-15 20:55:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl StorageBackend for LocalStorageBackend {
|
2021-05-04 01:22:01 +00:00
|
|
|
fn get(&self, name: &str) -> Option<Vec<u8>> {
|
|
|
|
if let Ok(Some(data)) = self.storage.get(name) {
|
2023-02-11 18:28:53 +00:00
|
|
|
if let Ok(data) = BASE64_STANDARD.decode(data) {
|
2021-05-04 01:22:01 +00:00
|
|
|
return Some(data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
None
|
2020-06-15 20:55:29 +00:00
|
|
|
}
|
|
|
|
|
2021-05-04 01:22:01 +00:00
|
|
|
fn put(&mut self, name: &str, value: &[u8]) -> bool {
|
2023-01-10 11:47:03 +00:00
|
|
|
self.storage
|
|
|
|
.set(name, &BASE64_STANDARD.encode(value))
|
|
|
|
.is_ok()
|
2020-06-15 20:55:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn remove_key(&mut self, name: &str) {
|
2020-12-21 16:16:44 +00:00
|
|
|
let _ = self.storage.delete(name);
|
2020-06-15 20:55:29 +00:00
|
|
|
}
|
|
|
|
}
|