Skip to content

Commit 30d7b8a

Browse files
committed
feat(stremio-core-web): use Storage wasm-bindgen binding
Signed-off-by: Lachezar Lechev <[email protected]>
1 parent 82c8c28 commit 30d7b8a

File tree

3 files changed

+68
-41
lines changed

3 files changed

+68
-41
lines changed

stremio-core-web/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ web-sys = { version = "0.3", features = [
5959
"Request",
6060
"RequestInit",
6161
"Response",
62+
"Storage",
63+
"Window",
6264
"console",
6365
], optional = true }
6466
# for env. impl

stremio-core-web/src/env.rs

Lines changed: 63 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ extern "C" {
4141
static SHELL_VERSION: Option<String>;
4242
#[wasm_bindgen(catch, js_namespace = ["self"])]
4343
async fn get_location_hash() -> Result<JsValue, JsValue>;
44-
#[wasm_bindgen(catch, js_namespace = ["self"])]
45-
async fn local_storage_get_item(key: String) -> Result<JsValue, JsValue>;
46-
#[wasm_bindgen(catch, js_namespace = ["self"])]
47-
async fn local_storage_set_item(key: String, value: String) -> Result<(), JsValue>;
48-
#[wasm_bindgen(catch, js_namespace = ["self"])]
49-
async fn local_storage_remove_item(key: String) -> Result<(), JsValue>;
44+
// #[wasm_bindgen(catch, js_namespace = ["self"])]
45+
// async fn local_storage_get_item(key: String) -> Result<JsValue, JsValue>;
46+
// #[wasm_bindgen(catch, js_namespace = ["self"])]
47+
// async fn local_storage_set_item(key: String, value: String) -> Result<(), JsValue>;
48+
// #[wasm_bindgen(catch, js_namespace = ["self"])]
49+
// async fn local_storage_remove_item(key: String) -> Result<(), JsValue>;
5050
}
5151

5252
static INSTALLATION_ID: Lazy<RwLock<Option<String>>> = Lazy::new(Default::default);
@@ -351,51 +351,76 @@ impl Env for WebEnv {
351351
where
352352
for<'de> T: Deserialize<'de> + 'static,
353353
{
354-
local_storage_get_item(key.to_owned())
355-
.map_err(|error| {
356-
EnvError::StorageReadError(
357-
error
358-
.dyn_into::<js_sys::Error>()
359-
.map(|error| String::from(error.message()))
360-
.unwrap_or_else(|_| UNKNOWN_ERROR.to_owned()),
361-
)
362-
})
363-
.and_then(|value| async move {
364-
value
365-
.as_string()
366-
.map(|value| serde_json::from_str(&value))
367-
.transpose()
368-
.map_err(EnvError::from)
369-
})
370-
.boxed_local()
354+
future::ready(
355+
web_sys::window()
356+
.unwrap()
357+
.local_storage()
358+
.unwrap()
359+
.unwrap()
360+
.get_item(key)
361+
// local_storage_get_item(key.to_owned())
362+
.map_err(|error| {
363+
EnvError::StorageReadError(
364+
error
365+
.dyn_into::<js_sys::Error>()
366+
.map(|error| String::from(error.message()))
367+
.unwrap_or_else(|_| UNKNOWN_ERROR.to_owned()),
368+
)
369+
})
370+
.and_then(|value| {
371+
value
372+
// .as_string()
373+
.map(|value| serde_json::from_str(&value))
374+
.transpose()
375+
.map_err(EnvError::from)
376+
}),
377+
)
378+
.boxed_local()
371379
}
372380

373381
fn set_storage<T: Serialize>(key: &str, value: Option<&T>) -> TryEnvFuture<()> {
374382
let key = key.to_owned();
375383
match value {
376384
Some(value) => future::ready(serde_json::to_string(value))
377385
.map_err(EnvError::from)
378-
.and_then(|value| {
379-
local_storage_set_item(key, value).map_err(|error| {
386+
.and_then(move |value| {
387+
future::ready(
388+
web_sys::window()
389+
.unwrap()
390+
.local_storage()
391+
.unwrap()
392+
.unwrap()
393+
.set_item(&key, &value)
394+
// local_storage_set_item(key, value)
395+
.map_err(|error| {
396+
EnvError::StorageWriteError(
397+
error
398+
.dyn_into::<js_sys::Error>()
399+
.map(|error| String::from(error.message()))
400+
.unwrap_or_else(|_| UNKNOWN_ERROR.to_owned()),
401+
)
402+
}),
403+
)
404+
})
405+
.boxed_local(),
406+
None => future::ready(
407+
web_sys::window()
408+
.unwrap()
409+
.local_storage()
410+
.unwrap()
411+
.unwrap()
412+
.delete(&key)
413+
// local_storage_remove_item(key)
414+
.map_err(|error| {
380415
EnvError::StorageWriteError(
381416
error
382417
.dyn_into::<js_sys::Error>()
383418
.map(|error| String::from(error.message()))
384419
.unwrap_or_else(|_| UNKNOWN_ERROR.to_owned()),
385420
)
386-
})
387-
})
388-
.boxed_local(),
389-
None => local_storage_remove_item(key)
390-
.map_err(|error| {
391-
EnvError::StorageWriteError(
392-
error
393-
.dyn_into::<js_sys::Error>()
394-
.map(|error| String::from(error.message()))
395-
.unwrap_or_else(|_| UNKNOWN_ERROR.to_owned()),
396-
)
397-
})
398-
.boxed_local(),
421+
}),
422+
)
423+
.boxed_local(),
399424
}
400425
}
401426

stremio-core-web/src/worker.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ self.init = async ({ appVersion, shellVersion }) => {
1111
self.app_version = appVersion;
1212
self.shell_version = shellVersion;
1313
self.get_location_hash = async () => bridge.call(['location', 'hash'], []);
14-
self.local_storage_get_item = async (key) => bridge.call(['localStorage', 'getItem'], [key]);
15-
self.local_storage_set_item = async (key, value) => bridge.call(['localStorage', 'setItem'], [key, value]);
16-
self.local_storage_remove_item = async (key) => bridge.call(['localStorage', 'removeItem'], [key]);
14+
// self.local_storage_get_item = async (key) => bridge.call(['localStorage', 'getItem'], [key]);
15+
// self.local_storage_set_item = async (key, value) => bridge.call(['localStorage', 'setItem'], [key, value]);
16+
// self.local_storage_remove_item = async (key) => bridge.call(['localStorage', 'removeItem'], [key]);
1717
const { default: initialize_api, initialize_runtime, get_state, get_debug_state, dispatch, analytics, decode_stream } = require('./stremio_core_web.js');
1818
self.getState = get_state;
1919
self.getDebugState = get_debug_state;

0 commit comments

Comments
 (0)