commit 2a6d10aae11841e28157d41827abed8db9720d33
parent 97aae6663b067451e1c109feb14888b67de8c0fb
Author: triesap <triesap@radroots.dev>
Date: Tue, 20 Jan 2026 17:23:43 +0000
app: persist notifications permission
- add notifications permission field to app data
- add datastore helper to store permission
- export helper for app flows
- add unit test for idb error mapping
Diffstat:
3 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/app/src/bootstrap.rs b/app/src/bootstrap.rs
@@ -96,16 +96,31 @@ pub async fn app_datastore_clear_bootstrap<T: RadrootsClientDatastore>(
Ok(())
}
+pub async fn app_datastore_set_notifications_permission<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &AppKeyMapConfig,
+ permission: &str,
+) -> AppInitResult<AppAppData> {
+ let mut data = match app_datastore_has_app_data(datastore, key_maps).await? {
+ true => app_datastore_read_app_data(datastore, key_maps).await?,
+ false => AppAppData::default(),
+ };
+ data.notifications_permission = Some(permission.to_string());
+ let value = app_datastore_write_app_data(datastore, key_maps, &data).await?;
+ Ok(value)
+}
+
#[cfg(test)]
mod tests {
use super::{
app_datastore_clear_bootstrap,
- app_datastore_has_app_data,
- app_datastore_has_config,
- app_datastore_read_app_data,
- app_datastore_write_app_data,
- app_datastore_write_config,
-};
+ app_datastore_has_app_data,
+ app_datastore_has_config,
+ app_datastore_read_app_data,
+ app_datastore_set_notifications_permission,
+ app_datastore_write_app_data,
+ app_datastore_write_config,
+ };
use crate::{app_key_maps_default, AppAppData, AppConfigData, AppInitError};
use radroots_app_core::datastore::{RadrootsClientDatastoreError, RadrootsClientWebDatastore};
@@ -178,4 +193,17 @@ mod tests {
.expect_err("idb undefined");
assert_eq!(err, AppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
}
+
+ #[test]
+ fn set_notifications_permission_maps_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let key_maps = app_key_maps_default();
+ let err = futures::executor::block_on(app_datastore_set_notifications_permission(
+ &datastore,
+ &key_maps,
+ "granted",
+ ))
+ .expect_err("idb undefined");
+ assert_eq!(err, AppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
+ }
}
diff --git a/app/src/data.rs b/app/src/data.rs
@@ -40,6 +40,7 @@ pub struct AppAppData {
pub role: AppConfigRole,
pub eula_date: String,
pub nip05_key: Option<String>,
+ pub notifications_permission: Option<String>,
}
impl Default for AppAppData {
@@ -49,6 +50,7 @@ impl Default for AppAppData {
role: AppConfigRole::default(),
eula_date: String::new(),
nip05_key: None,
+ notifications_permission: None,
}
}
}
@@ -79,5 +81,6 @@ mod tests {
assert_eq!(data.role, AppConfigRole::Public);
assert_eq!(data.eula_date, "");
assert!(data.nip05_key.is_none());
+ assert!(data.notifications_permission.is_none());
}
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -20,6 +20,7 @@ pub use bootstrap::{
app_datastore_has_app_data,
app_datastore_has_config,
app_datastore_read_app_data,
+ app_datastore_set_notifications_permission,
app_datastore_write_app_data,
app_datastore_write_config,
};