Skip to content

Commit

Permalink
fixes after rebase
Browse files Browse the repository at this point in the history
  • Loading branch information
TheBeastLT committed Nov 10, 2023
1 parent 97e4244 commit 42bc988
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 63 deletions.
109 changes: 48 additions & 61 deletions src/models/meta_details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use crate::{
library::{LibraryBucket, LibraryItem},
profile::Profile,
resource::{MetaItem, Stream},
streams::{StreamsBucket, StreamsItemKey},
streams::StreamsBucket,
},
};

Expand Down Expand Up @@ -445,72 +445,59 @@ fn suggested_stream_update(
streams: &[ResourceLoadable<Vec<Stream>>],
stream_bucket: &StreamsBucket,
) -> Effects {
let all_streams = [meta_streams, streams].concat();
let next_suggested_stream = match selected {
Some(Selected {
meta_path,
stream_path: Some(stream_path),
..
}) => {
meta_items
.iter()
.find_map(|meta_item| match &meta_item.content {
Some(Loadable::Ready(meta_item)) => Some(&meta_item.videos),
_ => None,
})
.and_then(|videos| {
// Check saved stream only for last 30 videos starting from the current video
videos
.iter()
.position(|video| video.id == stream_path.id)
.and_then(|max_index| {
videos[max_index.saturating_sub(30)..=max_index]
.iter()
.rev()
.find_map(|video| {
stream_bucket.items.get(&StreamsItemKey {
meta_id: meta_path.id.to_string(),
video_id: video.id.to_owned(),
})
})
})
})
.and_then(|stream_item| {
[meta_streams, streams]
.concat()
.iter()
.find(|resource| resource.request.base == stream_item.stream_transport_url)
.and_then(|resource| match &resource.content {
Some(Loadable::Ready(streams)) => Some(ResourceLoadable {
request: resource.request.clone(),
content: Some(Loadable::Ready(
streams
.iter()
.find(|stream| *stream == &stream_item.stream)
.or_else(|| {
streams.iter().find(|stream| {
stream.behavior_hints.binge_group.as_deref()
== stream_item
.stream
.behavior_hints
.binge_group
.as_deref()
}) => meta_items
.iter()
.filter(|_| !all_streams.is_empty())
.find_map(|meta_item_res| match &meta_item_res.content {
Some(Loadable::Ready(meta_item)) => stream_bucket
.last_stream_item(&stream_path.id, meta_item)
.and_then(|stream_item| {
all_streams
.iter()
.find(|resource| {
resource.request.base == stream_item.stream_transport_url
})
.and_then(|resource| match &resource.content {
Some(Loadable::Ready(streams)) => Some(ResourceLoadable {
request: resource.request.clone(),
content: Some(Loadable::Ready(
streams
.iter()
.find(|stream| {
stream.is_source_match(&stream_item.stream)
})
.or_else(|| {
streams.iter().find(|stream| {
stream.is_binge_match(&stream_item.stream)
})
})
})
.cloned(),
)),
}),
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,
.cloned(),
)),
}),
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,
})
})
.or_else(|| {
Some(ResourceLoadable {
request: meta_item_res.request.clone(),
content: Some(Loadable::Ready(None)),
})
})
}
}),
_ => None,
}),
_ => None,
};
eq_update(suggested_stream, next_suggested_stream)
Expand Down
5 changes: 5 additions & 0 deletions src/types/resource/stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,11 @@ impl Stream {
}
}

#[inline]
pub fn is_source_match(&self, other_stream: &Stream) -> bool {
self.source == other_stream.source
}

#[inline]
pub fn is_binge_match(&self, other_stream: &Stream) -> bool {
match (
Expand Down
4 changes: 2 additions & 2 deletions src/types/streams/streams_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ impl StreamsItem {
#[inline]
pub fn adjusted_state(&self, new_stream: &Stream) -> Option<StreamItemState> {
self.state.clone().map(|state| {
let is_exact_match = self.stream.source == new_stream.source;
let is_source_match = self.stream.is_source_match(new_stream);
let is_binge_match = self.stream.is_binge_match(new_stream);
if is_exact_match {
if is_source_match {
return state;
} else if is_binge_match {
return StreamItemState {
Expand Down

0 comments on commit 42bc988

Please sign in to comment.