summaryrefslogtreecommitdiffstats
path: root/src/state_store.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-07 17:36:22 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-07 17:36:22 +0100
commit36e87b708ed3a2b0d6f2e932509b0fdf10fe0089 (patch)
tree5f3fc5a3d863f52a82a204a7746532202103d7cc /src/state_store.rs
parent4a5aa6579f5184c443ffbe80ce93e0daa0926826 (diff)
downloadmacaw-web-main.tar.gz
macaw-web-main.tar.bz2
macaw-web-main.zip
fix: avatar flashing from avatar loadHEADmain
Diffstat (limited to '')
-rw-r--r--src/state_store.rs68
1 files changed, 42 insertions, 26 deletions
diff --git a/src/state_store.rs b/src/state_store.rs
index ac90e40..7e6e6a1 100644
--- a/src/state_store.rs
+++ b/src/state_store.rs
@@ -112,35 +112,51 @@ where
V: Send + Sync + 'static,
{
pub fn store(&self, key: K, value: V) -> StateListener<K, V> {
- {
- let store = self.inner.try_get_value().unwrap();
- let mut store = store.store.write().unwrap();
- debug!("store state: {:?}", store);
- if let Some((v, count)) = store.get_mut(&key) {
- debug!("updating old value already in store");
- v.set(value);
- *count += 1;
- StateListener {
- value: v.clone(),
- cleaner: StateCleaner {
- key,
- state_store: self.clone(),
- },
- }
- } else {
- let v = ArcRwSignal::new(value);
- store.insert(key.clone(), (v.clone(), 1));
- debug!("inserting new value: {:?}", store);
- StateListener {
- value: v.into(),
- cleaner: StateCleaner {
- key,
- state_store: self.clone(),
- },
- }
+ let store = self.inner.try_get_value().unwrap();
+ let mut store = store.store.write().unwrap();
+ debug!("store state: {:?}", store);
+ if let Some((v, count)) = store.get_mut(&key) {
+ debug!("updating old value already in store");
+ v.set(value);
+ *count += 1;
+ StateListener {
+ value: v.clone(),
+ cleaner: StateCleaner {
+ key,
+ state_store: self.clone(),
+ },
+ }
+ } else {
+ let v = ArcRwSignal::new(value);
+ store.insert(key.clone(), (v.clone(), 1));
+ debug!("inserting new value: {:?}", store);
+ StateListener {
+ value: v.into(),
+ cleaner: StateCleaner {
+ key,
+ state_store: self.clone(),
+ },
}
}
}
+
+ pub fn get_listener(&self, key: K) -> Option<StateListener<K, V>> {
+ let store = self.inner.try_get_value().unwrap();
+ let mut store = store.store.write().unwrap();
+ debug!("store state: {:?}", store);
+ if let Some((v, count)) = store.get_mut(&key) {
+ *count += 1;
+ Some(StateListener {
+ value: v.clone(),
+ cleaner: StateCleaner {
+ key,
+ state_store: self.clone(),
+ },
+ })
+ } else {
+ None
+ }
+ }
}
impl<K, V> StateStore<K, V>