Don't panic when librespot event channel died

Terminate worker instead and attempt to open a new session

Should hopefully help with #536
This commit is contained in:
Henrik Friedrichsen
2021-05-23 15:29:00 +02:00
parent 01d227be79
commit 0ac789c36e

View File

@@ -154,41 +154,45 @@ impl Worker {
} }
None => info!("empty stream") None => info!("empty stream")
}, },
event = self.player_events.next() => match event.unwrap() { event = self.player_events.next() => match event {
LibrespotPlayerEvent::Playing { Some(LibrespotPlayerEvent::Playing {
play_request_id: _, play_request_id: _,
track_id: _, track_id: _,
position_ms, position_ms,
duration_ms: _, duration_ms: _,
} => { }) => {
let position = Duration::from_millis(position_ms as u64); let position = Duration::from_millis(position_ms as u64);
let playback_start = SystemTime::now() - position; let playback_start = SystemTime::now() - position;
self.events self.events
.send(Event::Player(PlayerEvent::Playing(playback_start))); .send(Event::Player(PlayerEvent::Playing(playback_start)));
self.active = true; self.active = true;
} }
LibrespotPlayerEvent::Paused { Some(LibrespotPlayerEvent::Paused {
play_request_id: _, play_request_id: _,
track_id: _, track_id: _,
position_ms, position_ms,
duration_ms: _, duration_ms: _,
} => { }) => {
let position = Duration::from_millis(position_ms as u64); let position = Duration::from_millis(position_ms as u64);
self.events self.events
.send(Event::Player(PlayerEvent::Paused(position))); .send(Event::Player(PlayerEvent::Paused(position)));
self.active = false; self.active = false;
} }
LibrespotPlayerEvent::Stopped { .. } => { Some(LibrespotPlayerEvent::Stopped { .. }) => {
self.events.send(Event::Player(PlayerEvent::Stopped)); self.events.send(Event::Player(PlayerEvent::Stopped));
self.active = false; self.active = false;
} }
LibrespotPlayerEvent::EndOfTrack { .. } => { Some(LibrespotPlayerEvent::EndOfTrack { .. }) => {
self.events.send(Event::Player(PlayerEvent::FinishedTrack)); self.events.send(Event::Player(PlayerEvent::FinishedTrack));
} }
LibrespotPlayerEvent::TimeToPreloadNextTrack { .. } => { Some(LibrespotPlayerEvent::TimeToPreloadNextTrack { .. }) => {
self.events self.events
.send(Event::Queue(QueueEvent::PreloadTrackRequest)); .send(Event::Queue(QueueEvent::PreloadTrackRequest));
} }
None => {
warn!("Librespot player event channel died, terminating worker");
break
},
_ => {} _ => {}
}, },
_ = ui_refresh.tick() => { _ = ui_refresh.tick() => {