runa_tui/app/
parent.rs

1use crate::file_manager::FileEntry;
2use std::path::{Path, PathBuf};
3
4#[derive(Default)]
5pub struct ParentState {
6    entries: Vec<FileEntry>,
7    selected_idx: Option<usize>,
8    last_path: Option<PathBuf>,
9    request_id: u64,
10}
11
12impl ParentState {
13    pub fn request_id(&self) -> u64 {
14        self.request_id
15    }
16    pub fn entries(&self) -> &[FileEntry] {
17        &self.entries
18    }
19    pub fn selected_idx(&self) -> Option<usize> {
20        self.selected_idx
21    }
22
23    pub fn should_request(&self, parent_path: &Path) -> bool {
24        if self.entries.is_empty() {
25            return true;
26        }
27        Some(parent_path) != self.last_path.as_deref()
28    }
29
30    pub fn prepare_new_request(&mut self, path: PathBuf) -> u64 {
31        self.request_id += 1;
32        self.last_path = Some(path);
33        self.request_id
34    }
35
36    pub fn update_from_entries(
37        &mut self,
38        entries: Vec<FileEntry>,
39        current_name: &str,
40        req_id: u64,
41    ) {
42        if req_id < self.request_id {
43            return;
44        }
45        // Find the index of the folder we are currently inside to highlight it
46        self.selected_idx = entries.iter().position(|e| e.name_str() == current_name);
47        self.entries = entries;
48        self.request_id = req_id;
49    }
50
51    pub fn clear(&mut self) {
52        self.entries.clear();
53        self.selected_idx = None;
54        self.last_path = None;
55        self.request_id += 1;
56    }
57}