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,
|
video: &'a Video,
|
||||||
on_end_of_stream: Option<Message>,
|
on_end_of_stream: Option<Message>,
|
||||||
on_new_frame: Option<Message>,
|
on_new_frame: Option<Message>,
|
||||||
|
on_error: Option<Box<dyn Fn(&glib::Error) -> Message + 'a>>,
|
||||||
_phantom: PhantomData<(Theme, Renderer)>,
|
_phantom: PhantomData<(Theme, Renderer)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ where
|
||||||
video,
|
video,
|
||||||
on_end_of_stream: None,
|
on_end_of_stream: None,
|
||||||
on_new_frame: None,
|
on_new_frame: None,
|
||||||
|
on_error: None,
|
||||||
_phantom: Default::default(),
|
_phantom: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,6 +50,16 @@ where
|
||||||
..self
|
..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>
|
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||||
|
@ -134,7 +146,13 @@ where
|
||||||
|
|
||||||
for msg in inner.bus.iter() {
|
for msg in inner.bus.iter() {
|
||||||
match msg.view() {
|
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) => {
|
gst::MessageView::Eos(_eos) => {
|
||||||
if let Some(on_end_of_stream) = self.on_end_of_stream.clone() {
|
if let Some(on_end_of_stream) = self.on_end_of_stream.clone() {
|
||||||
shell.publish(on_end_of_stream);
|
shell.publish(on_end_of_stream);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue