diff --git a/cosmic-applet-audio/src/main.rs b/cosmic-applet-audio/src/main.rs index 0a0dea1f..28832b1c 100644 --- a/cosmic-applet-audio/src/main.rs +++ b/cosmic-applet-audio/src/main.rs @@ -397,7 +397,10 @@ impl cosmic::Application for Audio { } } Message::Pulse(event) => match event { - pulse::Event::Init(conn) => self.pulse_state = PulseState::Disconnected(conn), + pulse::Event::Init(mut conn) => { + conn.send(pulse::Message::UpdateConnection); + self.pulse_state = PulseState::Disconnected(conn); + } pulse::Event::Connected => { self.pulse_state.connected(); @@ -431,14 +434,22 @@ impl cosmic::Application for Audio { self.update_input(Some(source)); } pulse::Message::Disconnected => { - panic!("Subscriton error handling is bad. This should never happen.") + panic!("Subscription error handling is bad. This should never happen.") } _ => { tracing::trace!("Received misc message") } } } - pulse::Event::Disconnected => self.pulse_state.disconnected(), + pulse::Event::Disconnected => { + self.pulse_state.disconnected(); + if let Some(mut conn) = self.pulse_state.connection().cloned() { + _ = tokio::spawn(async move { + tokio::time::sleep(tokio::time::Duration::from_secs(30)).await; + conn.send(pulse::Message::UpdateConnection); + }); + } + } }, Message::ToggleMediaControlsInTopPanel(chain, enabled) => { self.timeline.set_chain(chain).start(); diff --git a/cosmic-applet-audio/src/pulse.rs b/cosmic-applet-audio/src/pulse.rs index ac3ecbcd..fd112cdb 100644 --- a/cosmic-applet-audio/src/pulse.rs +++ b/cosmic-applet-audio/src/pulse.rs @@ -48,7 +48,6 @@ async fn start_listening( State::Connecting(from_pulse) } // Waiting for Connection to succeed - // The GUI doesn't have to monitor this state, as it is never sent to the GUI State::Connecting(mut from_pulse) => match from_pulse.recv().await { Some(Message::Connected) => { _ = output.send(Event::Connected).await;