From 0ac789c36eca90ea8b0c6e9c8a0dc37ee7f177f2 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Sun, 23 May 2021 15:29:00 +0200 Subject: [PATCH] Don't panic when librespot event channel died Terminate worker instead and attempt to open a new session Should hopefully help with #536 --- src/spotify_worker.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/spotify_worker.rs b/src/spotify_worker.rs index ad6b830..7340a74 100644 --- a/src/spotify_worker.rs +++ b/src/spotify_worker.rs @@ -154,41 +154,45 @@ impl Worker { } None => info!("empty stream") }, - event = self.player_events.next() => match event.unwrap() { - LibrespotPlayerEvent::Playing { + event = self.player_events.next() => match event { + Some(LibrespotPlayerEvent::Playing { play_request_id: _, track_id: _, position_ms, duration_ms: _, - } => { + }) => { let position = Duration::from_millis(position_ms as u64); let playback_start = SystemTime::now() - position; self.events .send(Event::Player(PlayerEvent::Playing(playback_start))); self.active = true; } - LibrespotPlayerEvent::Paused { + Some(LibrespotPlayerEvent::Paused { play_request_id: _, track_id: _, position_ms, duration_ms: _, - } => { + }) => { let position = Duration::from_millis(position_ms as u64); self.events .send(Event::Player(PlayerEvent::Paused(position))); self.active = false; } - LibrespotPlayerEvent::Stopped { .. } => { + Some(LibrespotPlayerEvent::Stopped { .. }) => { self.events.send(Event::Player(PlayerEvent::Stopped)); self.active = false; } - LibrespotPlayerEvent::EndOfTrack { .. } => { + Some(LibrespotPlayerEvent::EndOfTrack { .. }) => { self.events.send(Event::Player(PlayerEvent::FinishedTrack)); } - LibrespotPlayerEvent::TimeToPreloadNextTrack { .. } => { + Some(LibrespotPlayerEvent::TimeToPreloadNextTrack { .. }) => { self.events .send(Event::Queue(QueueEvent::PreloadTrackRequest)); } + None => { + warn!("Librespot player event channel died, terminating worker"); + break + }, _ => {} }, _ = ui_refresh.tick() => {