Always show rooms from config in rooms list

This commit is contained in:
Joscha 2022-08-29 20:13:47 +02:00
parent 8c4a966451
commit 923e68c0b5
2 changed files with 13 additions and 4 deletions

View file

@ -16,6 +16,7 @@ Procedure when bumping the version number:
### Changed ### Changed
- Improved JSON export performance - Improved JSON export performance
- Always show rooms from config file in room list
### Fixed ### Fixed
- Rooms reconnecting instead of showing error popups - Rooms reconnecting instead of showing error popups

View file

@ -138,22 +138,30 @@ impl Rooms {
} }
} }
/// Remove rooms that are not running any more and can't be found in the db. /// Remove rooms that are not running any more and can't be found in the db
/// Insert rooms that are in the db but not yet in in the hash map. /// or config. Insert rooms that are in the db or config but not yet in in
/// the hash map.
/// ///
/// These kinds of rooms are either /// These kinds of rooms are either
/// - failed connection attempts, or /// - failed connection attempts, or
/// - rooms that were deleted from the db. /// - rooms that were deleted from the db.
async fn stabilize_rooms(&mut self) { async fn stabilize_rooms(&mut self) {
// Collect all rooms from the db and config file
let rooms = logging_unwrap!(self.vault.euph().rooms().await); let rooms = logging_unwrap!(self.vault.euph().rooms().await);
let mut rooms_set = rooms.into_iter().collect::<HashSet<_>>(); let mut rooms_set = rooms
.into_iter()
.chain(self.config.euph.rooms.keys().cloned())
.collect::<HashSet<_>>();
// Prevent room that is currently being shown from being removed. This // Prevent room that is currently being shown from being removed. This
// could otherwise happen when connecting to a room that doesn't exist. // could otherwise happen after connecting to a room that doesn't exist.
if let State::ShowRoom(name) = &self.state { if let State::ShowRoom(name) = &self.state {
rooms_set.insert(name.clone()); rooms_set.insert(name.clone());
} }
// Now `rooms_set` contains all rooms that must exist. Other rooms may
// also exist, for example rooms that are connecting for the first time.
self.euph_rooms self.euph_rooms
.retain(|n, r| !r.stopped() || rooms_set.contains(n)); .retain(|n, r| !r.stopped() || rooms_set.contains(n));