From b15cf87242c501d52966b10410d7ff3f10fbb766 Mon Sep 17 00:00:00 2001 From: cwj3rcb Date: Tue, 17 Feb 2026 16:40:45 -0600 Subject: [PATCH] fixed play glitch on folders --- src/main.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 9059d67..c4ad65c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -896,7 +896,15 @@ fn handle_key(app: &mut App, code: KeyCode) { // - Offline directory browser: we have a direct local file path let (maybe_item_id, item_name, maybe_path) = match app.current_view() { View::Library { items, selected, .. } if !items.is_empty() => { - (Some(items[*selected].id.clone()), items[*selected].name.clone(), None) + let it = &items[*selected]; + let ty = it.item_type.as_deref().unwrap_or(""); + + if !is_playable_item_type(ty) { + app.status = "Not playable (use Enter to drill down)".into(); + return; + } + + (Some(it.id.clone()), it.name.clone(), None) } View::OfflineLibrary { entries, selected, .. } if !entries.is_empty() => { let e = &entries[*selected]; @@ -975,6 +983,12 @@ fn handle_key(app: &mut App, code: KeyCode) { match view { View::Library { items, selected, .. } if !items.is_empty() => { + let ty = items[selected].item_type.as_deref().unwrap_or(""); + if !is_playable_item_type(ty) { + app.status = "Not playable (use Enter to drill down)".into(); + return; + } + let item_id = items[selected].id.clone(); let item_name = items[selected].name.clone(); let len = items.len(); @@ -3944,3 +3958,7 @@ fn jellyfin_report_stopped_best_effort(app: &mut App) { let _ = client.report_playback_stopped(&item_id, Some(pos_ticks), failed); } } + +fn is_playable_item_type(ty: &str) -> bool { + matches!(ty, "Episode" | "Movie" | "Audio") +}