From 36e87b708ed3a2b0d6f2e932509b0fdf10fe0089 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sat, 7 Jun 2025 17:36:22 +0100 Subject: fix: avatar flashing from avatar load --- src/state_store.rs | 68 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 26 deletions(-) (limited to 'src/state_store.rs') 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 { - { - 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> { + 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 StateStore -- cgit