diff --git a/src/main.rs b/src/main.rs index 8838005..0e417a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -420,7 +420,7 @@ fn action_recover_bak(terminal: &mut Terminal, app: &mut App) -> let mut labelled: std::collections::HashSet = std::collections::HashSet::new(); let header = format!(" {:<8} {:<16} {:<14} {:<8} {:>6} {}", "Slot", "Description", "Game Type", "Playtime", "Size", "Date"); - let mut items: Vec = vec![header]; + let mut items: Vec = vec![header, String::new()]; items.extend(bak_summaries .iter() .map(|s| { @@ -459,12 +459,12 @@ fn action_recover_bak(terminal: &mut Terminal, app: &mut App) -> .map(|_| "Restore this backup to its canonical .sav file".to_string()) .collect(); let desc_refs: Vec<&str> = descs.iter().map(|s| s.as_str()).collect(); - let mut state = ListState::default().with_selected(Some(1)); // skip header + let mut state = ListState::default().with_selected(Some(2)); // skip header + blank loop { let selected_info = state .selected() - .and_then(|i| filenames.get(i.saturating_sub(1))) + .and_then(|i| filenames.get(i.saturating_sub(2))) .map(|s| s.as_str()); terminal.draw(|f| { @@ -488,9 +488,9 @@ fn action_recover_bak(terminal: &mut Terminal, app: &mut App) -> state.select(Some((i + 1).min(items.len().saturating_sub(1)))); } KeyCode::Enter => { - let sel = state.selected().unwrap_or(1); - if sel == 0 { continue; } // header row - let idx = sel.saturating_sub(1); + let sel = state.selected().unwrap_or(2); + if sel < 2 { continue; } // header + blank + let idx = sel.saturating_sub(2); let chosen = &bak_summaries[idx]; let target = derive_target_sav(&chosen.filename); let target_path = save_folder.join(&target); @@ -915,16 +915,17 @@ fn action_inspect_saves(terminal: &mut Terminal, app: &mut App) - let sz = e.metadata().map(|m| m.len()).unwrap_or(0); format!(" {:<8} {:<30} {:>7}", label, name, format_size(sz)) }).collect(); - let header = format!(" {:<8} {:<30} {:>7}", "Slot", "Filename", "Size"); + let header = format!(" {:<8} {:<30} {:>7}", "Slot", "Filename", "Size"); items.insert(0, header); + items.insert(1, String::new()); let item_refs: Vec<&str> = items.iter().map(|s| s.as_str()).collect(); let filenames: Vec = files.iter().map(|e| e.file_name().to_string_lossy().to_string()).collect(); let descs = vec!["Press Enter to view full GVAS metadata"; files.len()]; let desc_refs: Vec<&str> = descs.iter().map(|s| *s).collect(); - let mut state = ListState::default().with_selected(Some(1)); // skip header + let mut state = ListState::default().with_selected(Some(2)); // skip header + blank loop { - let selected_info = state.selected().and_then(|i| filenames.get(i.saturating_sub(1))).map(|s| s.as_str()); + let selected_info = state.selected().and_then(|i| filenames.get(i.saturating_sub(2))).map(|s| s.as_str()); terminal.draw(|f| { tui::draw_picker_with_info(f, &app.tui_state, &item_refs, &desc_refs, &mut state, selected_info); })?; @@ -933,9 +934,9 @@ fn action_inspect_saves(terminal: &mut Terminal, app: &mut App) - KeyCode::Up => { let i = state.selected().unwrap_or(0); state.select(Some(i.saturating_sub(1))); } KeyCode::Down => { let i = state.selected().unwrap_or(0); state.select(Some((i+1).min(items.len().saturating_sub(1)))); } KeyCode::Enter => { - let sel = state.selected().unwrap_or(1); - if sel == 0 { continue; } - let idx = sel.saturating_sub(1); + let sel = state.selected().unwrap_or(2); + if sel < 2 { continue; } + let idx = sel.saturating_sub(2); let path = files[idx].path(); match crate::gvas::extract_full_metadata(&path) { Ok(meta) => {