Restart connection & subscription on error

timeout_old
Tassilo Horn 4 years ago
parent dd52f6d8c3
commit f14d70a4f0
  1. 58
      src/demon.rs

@ -17,35 +17,41 @@ use swayipc::reply as r;
pub fn monitor_sway_events( pub fn monitor_sway_events(
extra_props: Arc<RwLock<HashMap<i64, ipc::ExtraProps>>>, extra_props: Arc<RwLock<HashMap<i64, ipc::ExtraProps>>>,
) { ) {
let iter = s::Connection::new() 'reset: loop {
.expect("Could not connect!") println!("Connecting to sway for subscribing to events...");
.subscribe(&[s::EventType::Window, s::EventType::Workspace]) let iter = s::Connection::new()
.expect("Could not subscribe to window and workspace events."); .expect("Could not connect!")
.subscribe(&[s::EventType::Window, s::EventType::Workspace])
.expect("Could not subscribe to window and workspace events.");
for ev_result in iter { for ev_result in iter {
let handled; let handled;
match ev_result { match ev_result {
Ok(ev) => match ev { Ok(ev) => match ev {
r::Event::Window(win_ev) => { r::Event::Window(win_ev) => {
let extra_props_clone = extra_props.clone(); let extra_props_clone = extra_props.clone();
handled = handle_window_event(win_ev, extra_props_clone); handled =
} handle_window_event(win_ev, extra_props_clone);
r::Event::Workspace(ws_ev) => { }
let extra_props_clone = extra_props.clone(); r::Event::Workspace(ws_ev) => {
handled = handle_workspace_event(ws_ev, extra_props_clone); let extra_props_clone = extra_props.clone();
handled =
handle_workspace_event(ws_ev, extra_props_clone);
}
_ => handled = false,
},
Err(e) => {
eprintln!("Error while receiving events: {}", e);
eprintln!("Resetting!");
break 'reset;
} }
_ => handled = false,
},
Err(e) => {
eprintln!("Error while receiving events: {}", e);
handled = false;
} }
} if handled {
if handled { println!(
println!( "New extra_props state:\n{:#?}",
"New extra_props state:\n{:#?}", *extra_props.read().unwrap()
*extra_props.read().unwrap() );
); }
} }
} }
} }

Loading…
Cancel
Save