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:
@@ -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() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user