mirror of
https://github.com/Stremio/stremio-shell-ng.git
synced 2026-05-06 07:39:07 +00:00
Merge pull request #40 from Stremio/claude/fix-player-error-handling-pMLQG
fix(Player): stop fabricating end-file on transient mpv event errors
This commit is contained in:
commit
8be5a2cfca
3 changed files with 13 additions and 29 deletions
|
|
@ -61,21 +61,14 @@ impl PlayerEnded {
|
|||
_ => "other".to_string(),
|
||||
}
|
||||
}
|
||||
pub fn from_end_reason(data: EndFileReason, error: &str) -> Self {
|
||||
pub fn from_end_reason(data: EndFileReason) -> Self {
|
||||
Self {
|
||||
reason: Self::string_from_end_reason(data),
|
||||
error: if data == mpv_end_file_reason::Error {
|
||||
if error.is_empty() {
|
||||
Some(PlayerEndedError {
|
||||
message: "Unknown error".to_string(),
|
||||
critical: true,
|
||||
})
|
||||
} else {
|
||||
Some(PlayerEndedError {
|
||||
message: error.to_string(),
|
||||
critical: true,
|
||||
})
|
||||
}
|
||||
Some(PlayerEndedError {
|
||||
message: "Unknown error".to_string(),
|
||||
critical: false,
|
||||
})
|
||||
} else {
|
||||
None
|
||||
},
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ fn ended_tokens() {
|
|||
Token::Str("message"),
|
||||
Token::Str("Unknown error"),
|
||||
Token::Str("critical"),
|
||||
Token::Bool(true),
|
||||
Token::Bool(false),
|
||||
Token::StructEnd,
|
||||
Token::StructEnd,
|
||||
];
|
||||
|
|
@ -89,11 +89,11 @@ fn ended_tokens() {
|
|||
Token::StructEnd,
|
||||
];
|
||||
assert_tokens(
|
||||
&PlayerEnded::from_end_reason(mpv_end_file_reason::Error, ""),
|
||||
&PlayerEnded::from_end_reason(mpv_end_file_reason::Error),
|
||||
&error_tokens,
|
||||
);
|
||||
assert_tokens(
|
||||
&PlayerEnded::from_end_reason(mpv_end_file_reason::Quit, ""),
|
||||
&PlayerEnded::from_end_reason(mpv_end_file_reason::Quit),
|
||||
&tokens,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,20 +103,11 @@ fn create_event_thread(
|
|||
}
|
||||
|
||||
// -1.0 means to block and wait for an event.
|
||||
let (event, error) = match event_context.wait_event(-1.) {
|
||||
Some(Ok(event)) => (event, ""),
|
||||
let event = match event_context.wait_event(-1.) {
|
||||
Some(Ok(event)) => event,
|
||||
Some(Err(error)) => {
|
||||
if let libmpv2::Error::Raw(e) = error {
|
||||
(
|
||||
Event::EndFile(
|
||||
libmpv2_sys::mpv_end_file_reason_MPV_END_FILE_REASON_ERROR,
|
||||
),
|
||||
libmpv2_sys::mpv_error_str(e),
|
||||
)
|
||||
} else {
|
||||
eprintln!("Unhandled event error: {error:?}");
|
||||
continue;
|
||||
}
|
||||
eprintln!("Event errored: {error:?}");
|
||||
continue;
|
||||
}
|
||||
// dummy event received (may be created on a wake up call or on timeout)
|
||||
None => continue,
|
||||
|
|
@ -133,7 +124,7 @@ fn create_event_thread(
|
|||
),
|
||||
Event::EndFile(reason) => PlayerResponse(
|
||||
"mpv-event-ended",
|
||||
PlayerEvent::End(PlayerEnded::from_end_reason(reason, error)),
|
||||
PlayerEvent::End(PlayerEnded::from_end_reason(reason)),
|
||||
),
|
||||
Event::Shutdown => {
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue