refactor(audio): update the connection after it has disconnected or been initialized

This commit is contained in:
Ashley Wulber 2023-10-31 10:43:13 -04:00 committed by Ashley Wulber
parent 4c40374014
commit eef73793bf
2 changed files with 14 additions and 4 deletions

View file

@ -397,7 +397,10 @@ impl cosmic::Application for Audio {
} }
} }
Message::Pulse(event) => match event { 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 => { pulse::Event::Connected => {
self.pulse_state.connected(); self.pulse_state.connected();
@ -431,14 +434,22 @@ impl cosmic::Application for Audio {
self.update_input(Some(source)); self.update_input(Some(source));
} }
pulse::Message::Disconnected => { 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") 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) => { Message::ToggleMediaControlsInTopPanel(chain, enabled) => {
self.timeline.set_chain(chain).start(); self.timeline.set_chain(chain).start();

View file

@ -48,7 +48,6 @@ async fn start_listening(
State::Connecting(from_pulse) State::Connecting(from_pulse)
} }
// Waiting for Connection to succeed // 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 { State::Connecting(mut from_pulse) => match from_pulse.recv().await {
Some(Message::Connected) => { Some(Message::Connected) => {
_ = output.send(Event::Connected).await; _ = output.send(Event::Connected).await;