Skip to content

Commit 7a09066

Browse files
committed
fix: Correct ordering of board-added signals in backend
1 parent 17907b3 commit 7a09066

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

backend/src/lib.rs

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@ use glib::{
66
subclass::{prelude::*, Signal},
77
};
88
use once_cell::sync::Lazy;
9-
use std::{
10-
cell::RefCell,
11-
collections::{HashMap, HashSet},
12-
iter::FromIterator,
13-
process,
14-
rc::Rc,
15-
};
9+
use std::{cell::RefCell, collections::HashMap, process, rc::Rc};
1610

1711
mod board;
1812
mod color;
@@ -33,7 +27,6 @@ use daemon::*;
3327
#[derive(Default)]
3428
pub struct BackendInner {
3529
daemon: DerefCell<Rc<dyn Daemon>>,
36-
ids: RefCell<HashSet<BoardId>>,
3730
boards: RefCell<HashMap<BoardId, Board>>,
3831
}
3932

@@ -102,20 +95,24 @@ impl Backend {
10295
error!("Failed to refresh boards: {}", err);
10396
}
10497

105-
let mut ids = self.inner().ids.borrow_mut();
106-
let new_ids = HashSet::from_iter(self.inner().daemon.boards().unwrap().into_iter());
98+
let new_ids = self.inner().daemon.boards().unwrap();
10799

108100
let mut boards = self.inner().boards.borrow_mut();
109101

110102
// Removed boards
111-
for i in ids.difference(&new_ids) {
112-
self.emit_by_name("board-removed", &[&boards[i]]).unwrap();
113-
boards.remove(i);
114-
}
103+
boards.retain(|k, v| {
104+
if new_ids.iter().find(|i| *i == k).is_none() {
105+
self.emit_by_name("board-removed", &[v]).unwrap();
106+
return false;
107+
}
108+
true
109+
});
115110

116111
// Added boards
117-
// TODO: emit in correct order
118-
for i in new_ids.difference(&ids) {
112+
for i in &new_ids {
113+
if boards.contains_key(i) {
114+
continue;
115+
}
119116
match Board::new(self.inner().daemon.clone(), *i) {
120117
Ok(board) => {
121118
boards.insert(*i, board.clone());
@@ -124,8 +121,6 @@ impl Backend {
124121
Err(err) => error!("Failed to add board: {}", err),
125122
}
126123
}
127-
128-
*ids = new_ids;
129124
}
130125

131126
pub fn connect_board_added<F: Fn(Board) + 'static>(&self, cb: F) {

0 commit comments

Comments
 (0)