downloading 90% done

This commit is contained in:
2026-02-16 15:00:39 -06:00
parent 68c0a84440
commit 82437cbc4f

View File

@@ -523,6 +523,75 @@ fn handle_key(app: &mut App, code: KeyCode) {
return; return;
} }
// --------------------
// Downloads Focus Modal
// --------------------
if app.downloads_focus {
match code {
KeyCode::Esc => {
app.downloads_focus = false;
app.status = "downloads: unfocus".into();
return;
}
KeyCode::Up | KeyCode::Char('k') => {
if app.downloads_selected > 0 {
app.downloads_selected -= 1;
}
return;
}
KeyCode::Down | KeyCode::Char('j') => {
let len = app
.downloads
.as_ref()
.and_then(|dm| dm.state.lock().ok())
.map(|st| st.queue.len())
.unwrap_or(0);
if len > 0 && app.downloads_selected + 1 < len {
app.downloads_selected += 1;
}
return;
}
KeyCode::Char('d') => {
if let Some(dm) = &app.downloads {
let idx = app.downloads_selected;
if idx == 0 {
dm.send(downloads::DownloadCommand::Cancel { index: 0 });
app.status = "download: cancel active".into();
} else {
dm.send(downloads::DownloadCommand::RemoveQueued { index: idx });
app.status = "download: removed".into();
}
// Clamp selection after removal
let len = dm
.state
.lock()
.ok()
.map(|st| st.queue.len())
.unwrap_or(0);
if len == 0 {
app.downloads_selected = 0;
} else if app.downloads_selected >= len {
app.downloads_selected = len - 1;
}
} else {
app.status = "downloads not available".into();
}
return;
}
// Swallow everything else while focused.
_ => return,
}
}
// mpv controls (only when not typing into search/login) // mpv controls (only when not typing into search/login)
if app.search.is_none() && !matches!(app.current_view(), View::Login) { if app.search.is_none() && !matches!(app.current_view(), View::Login) {
match code { match code {
@@ -775,6 +844,7 @@ fn handle_key(app: &mut App, code: KeyCode) {
} }
} }
// downloads focus overrides normal navigation
// downloads focus overrides normal navigation // downloads focus overrides normal navigation
let mut handled_by_downloads = false; let mut handled_by_downloads = false;
@@ -816,23 +886,6 @@ fn handle_key(app: &mut App, code: KeyCode) {
match code { match code {
KeyCode::Char('d') => { KeyCode::Char('d') => {
// downloads: focus => cancel/remove, otherwise enqueue selected item
if app.downloads_focus {
if let Some(dm) = &app.downloads {
let idx = app.downloads_selected;
if idx == 0 {
dm.send(downloads::DownloadCommand::Cancel { index: 0 });
app.status = "download: cancel active".into();
} else {
dm.send(downloads::DownloadCommand::RemoveQueued { index: idx });
app.status = "download: removed".into();
}
} else {
app.status = "downloads not available".into();
}
return;
}
let cfg = match &app.config { let cfg = match &app.config {
Some(c) => c.clone(), Some(c) => c.clone(),
None => { app.status = "No config loaded".into(); return; } None => { app.status = "No config loaded".into(); return; }