diff --git a/src/models/meta_details.rs b/src/models/meta_details.rs index 3d18c2f54f..713c16f325 100644 --- a/src/models/meta_details.rs +++ b/src/models/meta_details.rs @@ -45,7 +45,7 @@ pub struct MetaDetails { pub meta_items: Vec>, pub meta_streams: Vec>>, pub streams: Vec>>, - pub suggested_stream: Option, + pub suggested_stream: Option>, pub library_item: Option, #[serde(skip_serializing)] pub watched: Option, @@ -438,7 +438,7 @@ fn streams_update( /// is that user might have played a stream from an addon which he no longer has due to some constrains (ie p2p addon), /// that's why we have to try to find it first and verify that's it's still available. fn suggested_stream_update( - suggested_stream: &mut Option, + suggested_stream: &mut Option>, selected: &Option, meta_items: &[ResourceLoadable], meta_streams: &[ResourceLoadable>], @@ -480,11 +480,7 @@ fn suggested_stream_update( .iter() .find(|resource| resource.request.base == stream_item.stream_transport_url) .and_then(|resource| match &resource.content { - Some(Loadable::Ready(streams)) => Some(streams), - _ => None, - }) - .and_then(|streams| { - streams + Some(Loadable::Ready(streams)) => streams .iter() .find(|stream| *stream == &stream_item.stream) .or_else(|| { @@ -497,7 +493,19 @@ fn suggested_stream_update( .as_deref() }) }) - .cloned() + .map(|stream| ResourceLoadable { + request: resource.request.clone(), + content: Some(Loadable::Ready(stream.to_owned())), + }), + Some(Loadable::Loading) => Some(ResourceLoadable { + request: resource.request.clone(), + content: Some(Loadable::Loading), + }), + Some(Loadable::Err(error)) => Some(ResourceLoadable { + request: resource.request.clone(), + content: Some(Loadable::Err(error.clone())), + }), + _ => None, }) }) }