Skip to content

Commit

Permalink
Merge pull request #474 from unclekingpin/override-meta-details-selected
Browse files Browse the repository at this point in the history
Override meta details selected
  • Loading branch information
elpiel committed Jul 6, 2023
2 parents c3e2200 + 8733482 commit e2d7913
Show file tree
Hide file tree
Showing 11 changed files with 23 additions and 121 deletions.
2 changes: 1 addition & 1 deletion src/models/addon_details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ pub struct Selected {
pub transport_url: Url,
}

#[derive(Default, Serialize)]
#[derive(Default, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AddonDetails {
pub selected: Option<Selected>,
Expand Down
2 changes: 1 addition & 1 deletion src/models/catalogs_with_extra.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pub type CatalogPage<T> = ResourceLoadable<Vec<T>>;

pub type Catalog<T> = Vec<CatalogPage<T>>;

#[derive(Default, Serialize, Debug)]
#[derive(Default, Clone, Serialize, Debug)]
pub struct CatalogsWithExtra {
pub selected: Option<Selected>,
pub catalogs: Vec<Catalog<MetaItemPreview>>,
Expand Down
2 changes: 1 addition & 1 deletion src/models/continue_watching_preview.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::types::library::{LibraryBucket, LibraryItem};
use lazysort::SortedBy;
use serde::Serialize;

#[derive(Default, Serialize, Debug)]
#[derive(Default, Clone, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
/// The continue watching section in the app
pub struct ContinueWatchingPreview {
Expand Down
6 changes: 3 additions & 3 deletions src/models/installed_addons_with_filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,19 @@ pub struct Selected {
pub request: InstalledAddonsRequest,
}

#[derive(PartialEq, Eq, Serialize)]
#[derive(Clone, PartialEq, Eq, Serialize)]
pub struct SelectableType {
pub r#type: Option<String>,
pub selected: bool,
pub request: InstalledAddonsRequest,
}

#[derive(Default, PartialEq, Eq, Serialize)]
#[derive(Default, Clone, PartialEq, Eq, Serialize)]
pub struct Selectable {
pub types: Vec<SelectableType>,
}

#[derive(Default, Serialize)]
#[derive(Default, Clone, Serialize)]
pub struct InstalledAddonsWithFilters {
pub selected: Option<Selected>,
pub selectable: Selectable,
Expand Down
6 changes: 3 additions & 3 deletions src/models/library_by_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ pub struct Selected {
pub sort: Sort,
}

#[derive(PartialEq, Eq, Serialize, Debug)]
#[derive(Clone, PartialEq, Eq, Serialize, Debug)]
pub struct SelectableSort {
pub sort: Sort,
pub selected: bool,
}

#[derive(Default, PartialEq, Eq, Serialize, Debug)]
#[derive(Default, Clone, PartialEq, Eq, Serialize, Debug)]
pub struct Selectable {
pub sorts: Vec<SelectableSort>,
}
Expand All @@ -33,7 +33,7 @@ pub type CatalogPage = Vec<LibraryItem>;

pub type Catalog = Vec<CatalogPage>;

#[derive(Derivative, Serialize, Debug)]
#[derive(Derivative, Serialize, Debug, Clone)]
#[derivative(Default(bound = ""))]
pub struct LibraryByType<F> {
pub selected: Option<Selected>,
Expand Down
14 changes: 7 additions & 7 deletions src/models/library_with_filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pub trait LibraryFilter {
fn predicate(library_item: &LibraryItem) -> bool;
}

#[derive(Debug)]
#[derive(Clone, Debug)]
pub enum ContinueWatchingFilter {}

impl LibraryFilter for ContinueWatchingFilter {
Expand All @@ -27,7 +27,7 @@ impl LibraryFilter for ContinueWatchingFilter {
}
}

#[derive(Debug)]
#[derive(Clone, Debug)]
pub enum NotRemovedFilter {}

impl LibraryFilter for NotRemovedFilter {
Expand Down Expand Up @@ -69,34 +69,34 @@ pub struct Selected {
pub request: LibraryRequest,
}

#[derive(PartialEq, Eq, Serialize, Debug)]
#[derive(Clone, PartialEq, Eq, Serialize, Debug)]
pub struct SelectableType {
pub r#type: Option<String>,
pub selected: bool,
pub request: LibraryRequest,
}

#[derive(PartialEq, Eq, Serialize, Debug)]
#[derive(Clone, PartialEq, Eq, Serialize, Debug)]
pub struct SelectableSort {
pub sort: Sort,
pub selected: bool,
pub request: LibraryRequest,
}

#[derive(PartialEq, Eq, Serialize, Debug)]
#[derive(Clone, PartialEq, Eq, Serialize, Debug)]
pub struct SelectablePage {
pub request: LibraryRequest,
}

#[derive(Default, PartialEq, Eq, Serialize, Debug)]
#[derive(Default, Clone, PartialEq, Eq, Serialize, Debug)]
pub struct Selectable {
pub types: Vec<SelectableType>,
pub sorts: Vec<SelectableSort>,
pub prev_page: Option<SelectablePage>,
pub next_page: Option<SelectablePage>,
}

#[derive(Derivative, Serialize, Debug)]
#[derive(Derivative, Clone, Serialize, Debug)]
#[derivative(Default(bound = ""))]
pub struct LibraryWithFilters<F> {
pub selected: Option<Selected>,
Expand Down
5 changes: 2 additions & 3 deletions src/models/meta_details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,14 +203,14 @@ fn library_item_sync(library_item: &Option<LibraryItem>, profile: &Profile) -> E

fn selected_override_update(
selected: &mut Option<Selected>,
meta_items: &Vec<ResourceLoadable<MetaItem>>,
meta_items: &[ResourceLoadable<MetaItem>],
) -> Effects {
let meta_path = match &selected {
Some(Selected {
meta_path,
stream_path: None,
}) => meta_path,
None => return Effects::default(),
_ => return Effects::default(),
};
let meta_item = match meta_items
.iter()
Expand All @@ -229,7 +229,6 @@ fn selected_override_update(
&meta_item.preview.behavior_hints.default_video_id,
) {
(_, Some(default_video_id)) => default_video_id.to_owned(),
(1, _) => meta_item.videos.first().unwrap().id.to_owned(),
(0, None) => meta_item.preview.id.to_owned(),
_ => return Effects::default(),
};
Expand Down
2 changes: 1 addition & 1 deletion src/models/notifications.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const MAX_PER_REQUEST: usize = 50;
// The name of the extra property
const LAST_VID_IDS: &str = "lastVideosIds";

#[derive(Default, Serialize)]
#[derive(Default, Clone, Serialize)]
pub struct Notifications {
pub groups: Vec<ResourceLoadable<Vec<MetaItem>>>,
}
Expand Down
2 changes: 1 addition & 1 deletion src/models/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ pub struct Selected {
pub video_params: Option<VideoParams>,
}

#[derive(Default, Derivative, Serialize, Debug)]
#[derive(Default, Clone, Derivative, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Player {
pub selected: Option<Selected>,
Expand Down
4 changes: 2 additions & 2 deletions src/models/streaming_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,14 @@ pub struct StatisticsRequest {
pub file_idx: u16,
}

#[derive(Serialize, Debug)]
#[derive(Clone, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Selected {
pub transport_url: Url,
pub statistics: Option<StatisticsRequest>,
}

#[derive(Serialize, Debug)]
#[derive(Clone, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct StreamingServer {
pub selected: Selected,
Expand Down
99 changes: 1 addition & 98 deletions src/unit_tests/meta_details/override_selected.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::runtime::msg::{Action, ActionLoad};
use crate::runtime::{EnvFutureExt, Runtime, RuntimeAction, TryEnvFuture};
use crate::types::addon::{ResourcePath, ResourceResponse};
use crate::types::profile::Profile;
use crate::types::resource::{MetaItem, MetaItemBehaviorHints, MetaItemPreview, Video};
use crate::types::resource::{MetaItem, MetaItemBehaviorHints, MetaItemPreview};
use crate::unit_tests::{default_fetch_handler, Request, TestEnv, FETCH_HANDLER, STATES};
use assert_matches::assert_matches;
use enclose::enclose;
Expand Down Expand Up @@ -112,103 +112,6 @@ fn override_selected_default_video_id() {
);
}

#[test]
fn override_selected_only_video_id() {
#[derive(Model, Default, Clone, Debug)]
#[model(TestEnv)]
struct TestModel {
ctx: Ctx,
meta_details: MetaDetails,
}
fn fetch_handler(request: Request) -> TryEnvFuture<Box<dyn Any + Send>> {
match request {
Request { url, .. } if url == "https://v3-cinemeta.strem.io/meta/movie/tt1.json" => {
future::ok(Box::new(ResourceResponse::Meta {
meta: MetaItem {
preview: MetaItemPreview {
id: "tt1".to_owned(),
r#type: "movie".to_owned(),
..Default::default()
},
videos: vec![Video {
id: "_tt1".to_owned(),
..Default::default()
}],
},
}) as Box<dyn Any + Send>)
.boxed_env()
}
_ => default_fetch_handler(request),
}
}
let _env_mutex = TestEnv::reset();
*FETCH_HANDLER.write().unwrap() = Box::new(fetch_handler);
let (runtime, rx) = Runtime::<TestEnv, _>::new(
TestModel {
ctx: Ctx {
profile: Profile {
addons: OFFICIAL_ADDONS
.iter()
.filter(|addon| addon.transport_url == *CINEMETA_URL)
.cloned()
.collect(),
..Default::default()
},
..Default::default()
},
meta_details: Default::default(),
},
vec![],
1000,
);
let runtime = Arc::new(RwLock::new(runtime));
TestEnv::run_with_runtime(
rx,
runtime.clone(),
enclose!((runtime) move || {
let runtime = runtime.read().unwrap();
runtime.dispatch(RuntimeAction {
field: None,
action: Action::Load(ActionLoad::MetaDetails(Selected {
meta_path: ResourcePath {
resource: META_RESOURCE_NAME.to_owned(),
r#type: "movie".to_owned(),
id: "tt1".to_owned(),
extra: vec![]
},
stream_path: None
})),
});
}),
);
let states = STATES.read().unwrap();
let states = states
.iter()
.map(|state| state.downcast_ref::<TestModel>().unwrap())
.collect::<Vec<_>>();
assert_eq!(states.len(), 3);
assert_matches!(states[0].meta_details.selected, None);
assert_matches!(
states[1].meta_details.selected,
Some(Selected {
stream_path: None,
..
})
);
assert_matches!(
&states[2].meta_details.selected,
Some(Selected {
stream_path: Some(ResourcePath {
resource,
r#type,
id,
..
}),
..
}) if id == "_tt1" && r#type == "movie" && resource == STREAM_RESOURCE_NAME
);
}

#[test]
fn override_selected_meta_id() {
#[derive(Model, Default, Clone, Debug)]
Expand Down

0 comments on commit e2d7913

Please sign in to comment.