From f14d70a4f09f8470f1de5a22b3400a6b4168436f Mon Sep 17 00:00:00 2001 From: Tassilo Horn Date: Wed, 17 Feb 2021 09:14:12 +0100 Subject: [PATCH] Restart connection & subscription on error --- src/demon.rs | 58 +++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/demon.rs b/src/demon.rs index b8be845..719d6ba 100644 --- a/src/demon.rs +++ b/src/demon.rs @@ -17,35 +17,41 @@ use swayipc::reply as r; pub fn monitor_sway_events( extra_props: Arc>>, ) { - let iter = s::Connection::new() - .expect("Could not connect!") - .subscribe(&[s::EventType::Window, s::EventType::Workspace]) - .expect("Could not subscribe to window and workspace events."); + 'reset: loop { + println!("Connecting to sway for subscribing to events..."); + let iter = s::Connection::new() + .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 { - let handled; - match ev_result { - Ok(ev) => match ev { - r::Event::Window(win_ev) => { - let extra_props_clone = extra_props.clone(); - handled = handle_window_event(win_ev, extra_props_clone); - } - r::Event::Workspace(ws_ev) => { - let extra_props_clone = extra_props.clone(); - handled = handle_workspace_event(ws_ev, extra_props_clone); + for ev_result in iter { + let handled; + match ev_result { + Ok(ev) => match ev { + r::Event::Window(win_ev) => { + let extra_props_clone = extra_props.clone(); + handled = + handle_window_event(win_ev, extra_props_clone); + } + r::Event::Workspace(ws_ev) => { + 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 { - println!( - "New extra_props state:\n{:#?}", - *extra_props.read().unwrap() - ); + if handled { + println!( + "New extra_props state:\n{:#?}", + *extra_props.read().unwrap() + ); + } } } }