VideoPlayer error handler
This commit is contained in:
parent
be21d2a19b
commit
3b24aa6b3c
1 changed files with 19 additions and 1 deletions
|
@ -16,6 +16,7 @@ where
|
|||
video: &'a Video,
|
||||
on_end_of_stream: Option<Message>,
|
||||
on_new_frame: Option<Message>,
|
||||
on_error: Option<Box<dyn Fn(&glib::Error) -> Message + 'a>>,
|
||||
_phantom: PhantomData<(Theme, Renderer)>,
|
||||
}
|
||||
|
||||
|
@ -29,6 +30,7 @@ where
|
|||
video,
|
||||
on_end_of_stream: None,
|
||||
on_new_frame: None,
|
||||
on_error: None,
|
||||
_phantom: Default::default(),
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +50,16 @@ where
|
|||
..self
|
||||
}
|
||||
}
|
||||
|
||||
pub fn on_error<F>(self, on_error: F) -> Self
|
||||
where
|
||||
F: 'a + Fn(&glib::Error) -> Message,
|
||||
{
|
||||
VideoPlayer {
|
||||
on_error: Some(Box::new(on_error)),
|
||||
..self
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||
|
@ -134,7 +146,13 @@ where
|
|||
|
||||
for msg in inner.bus.iter() {
|
||||
match msg.view() {
|
||||
gst::MessageView::Error(err) => panic!("{:#?}", err),
|
||||
gst::MessageView::Error(err) => {
|
||||
if let Some(ref on_error) = self.on_error {
|
||||
shell.publish(on_error(&err.error()))
|
||||
} else {
|
||||
panic!("{:#?}", err)
|
||||
};
|
||||
}
|
||||
gst::MessageView::Eos(_eos) => {
|
||||
if let Some(on_end_of_stream) = self.on_end_of_stream.clone() {
|
||||
shell.publish(on_end_of_stream);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue