flare: update patches and upstream source
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
From 1546f95d8b6666a7f0e9575ddfa85bcb7ec53e3d Mon Sep 17 00:00:00 2001
|
||||
From: Simon Gardling <titaniumtown@proton.me>
|
||||
Date: Wed, 6 May 2026 14:38:07 -0400
|
||||
Subject: [PATCH 6/6] fix(backend): Refresh cached channels on init_channels
|
||||
re-runs
|
||||
|
||||
init_channels populates the channel cache via or_insert_with, then
|
||||
hands every freshly-built Channel (orphan or just-inserted) to the
|
||||
load_last + initialize_avatar pass. For the first-run case this is
|
||||
fine because the freshly-built Channel is also the cached one. On
|
||||
re-runs (Received::Contacts after the user adds a contact in another
|
||||
client), the existing entry wins the cache and the freshly-built
|
||||
Channel is dropped on the floor, but initialize_avatar still runs
|
||||
on the orphan rather than the cached instance the UI is bound to.
|
||||
|
||||
The orphan's Contact gets its profile name and avatar populated;
|
||||
the cached Contact does not, and the channel-list row is stuck on
|
||||
"Unknown contact" until the next restart.
|
||||
|
||||
Use the result of `entry().or_insert_with()` so to_load contains
|
||||
the actually-cached Channels.
|
||||
---
|
||||
src/backend/manager.rs | 28 +++++++++++++++++-----------
|
||||
1 file changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/backend/manager.rs b/src/backend/manager.rs
|
||||
index 2e9bd761..38d355f4 100644
|
||||
--- a/src/backend/manager.rs
|
||||
+++ b/src/backend/manager.rs
|
||||
@@ -625,13 +625,16 @@ impl Manager {
|
||||
// Storing loaded cannels. Extra block around to drop `known_channels` before `await`.
|
||||
{
|
||||
let mut known_channels = self.imp().channels.borrow_mut();
|
||||
- to_load.extend(loaded_channels.clone());
|
||||
for channel in loaded_channels {
|
||||
- known_channels.entry(channel.thread()).or_insert_with(|| {
|
||||
- log::trace!("Got a contact from the storage");
|
||||
- self.emit_by_name::<()>("channel", &[&channel]);
|
||||
- channel
|
||||
- });
|
||||
+ let stored = known_channels
|
||||
+ .entry(channel.thread())
|
||||
+ .or_insert_with(|| {
|
||||
+ log::trace!("Got a contact from the storage");
|
||||
+ self.emit_by_name::<()>("channel", &[&channel]);
|
||||
+ channel.clone()
|
||||
+ })
|
||||
+ .clone();
|
||||
+ to_load.push(stored);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -665,12 +668,15 @@ impl Manager {
|
||||
// Store loaded channels. Extra block around to drop `known_channels` before `await`.
|
||||
{
|
||||
let mut known_channels = self.imp().channels.borrow_mut();
|
||||
- to_load.extend(loaded_channels.clone());
|
||||
for channel in loaded_channels {
|
||||
- known_channels.entry(channel.thread()).or_insert_with(|| {
|
||||
- self.emit_by_name::<()>("channel", &[&channel]);
|
||||
- channel
|
||||
- });
|
||||
+ let stored = known_channels
|
||||
+ .entry(channel.thread())
|
||||
+ .or_insert_with(|| {
|
||||
+ self.emit_by_name::<()>("channel", &[&channel]);
|
||||
+ channel.clone()
|
||||
+ })
|
||||
+ .clone();
|
||||
+ to_load.push(stored);
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.53.0
|
||||
|
||||
Reference in New Issue
Block a user