use iced::Task;
use super::depth_of;
use crate::directory_tree::DirectoryTree;
use crate::directory_tree::message::DirectoryTreeEvent;
use crate::directory_tree::walker;
impl DirectoryTree {
pub(super) fn on_toggled(&mut self, path: std::path::PathBuf) -> Task<DirectoryTreeEvent> {
let depth = depth_of(&self.config.root_path, &path);
let Some(node) = self.root.find_mut(&path) else {
return Task::none();
};
if !node.is_dir {
return Task::none();
}
if node.is_expanded {
node.is_expanded = false;
return Task::none();
}
node.is_expanded = true;
if node.is_loaded {
return Task::none();
}
if let Some(limit) = self.config.max_depth
&& depth > limit
{
node.is_loaded = true; return Task::none();
}
self.prefetching_paths.remove(&path);
self.generation = self.generation.wrapping_add(1);
walker::scan(self.executor.clone(), path, self.generation, depth)
}
}