Linked additional search parameters

This commit is contained in:
2026-02-16 18:01:31 -06:00
parent f40339981a
commit 81d75446fd
2 changed files with 54 additions and 9 deletions

View File

@@ -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
}
}

View File

@@ -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; }
};