Linked additional search parameters
This commit is contained in:
@@ -153,15 +153,21 @@ impl JellyfinClient {
|
||||
) -> Result<PagedItems, String> {
|
||||
let url = format!("{}/Users/{}/Items", self.base_url, user_id);
|
||||
|
||||
let mut sort_by = "SortName";
|
||||
|
||||
if let Some(types) = query.include_item_types.as_deref() {
|
||||
let default_sort_by = if let Some(types) = query.include_item_types.as_deref() {
|
||||
if types.contains("Episode") {
|
||||
sort_by = "ParentIndexNumber,IndexNumber,SortName";
|
||||
} else if types.contains("Audio") {
|
||||
sort_by = "SortName";
|
||||
"ParentIndexNumber,IndexNumber,SortName".to_string()
|
||||
} else {
|
||||
"SortName".to_string()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
"SortName".to_string()
|
||||
};
|
||||
|
||||
let sort_by = query.sort_by.clone().unwrap_or(default_sort_by);
|
||||
let sort_order = query
|
||||
.sort_order
|
||||
.clone()
|
||||
.unwrap_or_else(|| "Ascending".to_string());
|
||||
|
||||
let recursive = if query.recursive { "true" } else { "false" };
|
||||
|
||||
@@ -174,8 +180,8 @@ impl JellyfinClient {
|
||||
("StartIndex", &start_index.to_string()),
|
||||
("Limit", &limit.to_string()),
|
||||
("Fields", "PrimaryImageAspectRatio,SortName,ProductionYear,IndexNumber,ParentIndexNumber,RunTimeTicks,Genres,Studios,Overview,SeriesName,Album,AlbumArtist,Artists,UserData,ChildCount,RecursiveItemCount"),
|
||||
("SortBy", sort_by),
|
||||
("SortOrder", "Ascending"),
|
||||
("SortBy", &sort_by),
|
||||
("SortOrder", &sort_order),
|
||||
]);
|
||||
|
||||
if let Some(types) = query.include_item_types.as_deref() {
|
||||
@@ -280,8 +286,13 @@ pub struct LibraryQuery {
|
||||
pub search_term: Option<String>, // e.g. Some("matrix".into())
|
||||
pub recursive: bool, // true for big lists, false for drilldown
|
||||
pub filters: Option<String>, // e.g. Some("IsResumable".into())
|
||||
|
||||
// optional overrides
|
||||
pub sort_by: Option<String>, // e.g. Some("DateCreated".into())
|
||||
pub sort_order: Option<String>, // "Ascending" or "Descending"
|
||||
}
|
||||
|
||||
|
||||
impl LibraryQuery {
|
||||
pub fn movies() -> Self {
|
||||
Self {
|
||||
@@ -290,6 +301,8 @@ impl LibraryQuery {
|
||||
search_term: None,
|
||||
recursive: true,
|
||||
filters: None,
|
||||
sort_by: None,
|
||||
sort_order: None,
|
||||
}
|
||||
}
|
||||
pub fn shows() -> Self {
|
||||
@@ -299,6 +312,8 @@ impl LibraryQuery {
|
||||
search_term: None,
|
||||
recursive: true,
|
||||
filters: None,
|
||||
sort_by: None,
|
||||
sort_order: None,
|
||||
}
|
||||
}
|
||||
pub fn music() -> Self {
|
||||
@@ -308,6 +323,8 @@ impl LibraryQuery {
|
||||
search_term: None,
|
||||
recursive: true,
|
||||
filters: None,
|
||||
sort_by: None,
|
||||
sort_order: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,6 +336,8 @@ impl LibraryQuery {
|
||||
search_term: None,
|
||||
recursive: true,
|
||||
filters: None,
|
||||
sort_by: None,
|
||||
sort_order: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,6 +361,16 @@ impl LibraryQuery {
|
||||
self.filters = Some(filters.into());
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_sort_by(mut self, sort_by: impl Into<String>) -> Self {
|
||||
self.sort_by = Some(sort_by.into());
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_sort_order(mut self, sort_order: impl Into<String>) -> Self {
|
||||
self.sort_order = Some(sort_order.into());
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
16
src/main.rs
16
src/main.rs
@@ -1012,6 +1012,22 @@ fn handle_key(app: &mut App, code: KeyCode) {
|
||||
"Shows" => core::jellyfin::LibraryQuery::shows(),
|
||||
"Music" => core::jellyfin::LibraryQuery::music(),
|
||||
"Playlists" => core::jellyfin::LibraryQuery::all().with_item_types("Playlist"),
|
||||
|
||||
// NEW
|
||||
"Collections" => core::jellyfin::LibraryQuery::all()
|
||||
.with_item_types("BoxSet"),
|
||||
|
||||
"Continue Watching" => core::jellyfin::LibraryQuery::all()
|
||||
.with_item_types("Episode,Movie")
|
||||
.with_filters("IsResumable")
|
||||
.with_sort_by("DatePlayed")
|
||||
.with_sort_order("Descending"),
|
||||
|
||||
"Recently Added" => core::jellyfin::LibraryQuery::all()
|
||||
.with_item_types("Movie,Series")
|
||||
.with_sort_by("DateCreated,SortName")
|
||||
.with_sort_order("Descending"),
|
||||
|
||||
_ => { app.status = format!("Not wired yet: {}", cat); return; }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user