2014-06-20 20:07:53 +00:00
|
|
|
use std::io::{fs, IoResult};
|
2014-06-16 23:27:05 +00:00
|
|
|
use file::File;
|
|
|
|
|
|
|
|
// The purpose of a Dir is to provide a cached list of the file paths
|
|
|
|
// in the directory being searched for. This object is then passed to
|
|
|
|
// the Files themselves, which can then check the status of their
|
|
|
|
// surrounding files, such as whether it needs to be coloured
|
|
|
|
// differently if a certain other file exists.
|
|
|
|
|
|
|
|
pub struct Dir<'a> {
|
2014-06-21 18:39:27 +00:00
|
|
|
pub contents: Vec<Path>,
|
|
|
|
pub path: Path,
|
2014-06-16 23:27:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> Dir<'a> {
|
2014-06-20 20:07:53 +00:00
|
|
|
pub fn readdir(path: Path) -> IoResult<Dir<'a>> {
|
|
|
|
fs::readdir(&path).map(|paths| Dir {
|
|
|
|
contents: paths,
|
2014-06-21 18:39:27 +00:00
|
|
|
path: path.clone(),
|
2014-06-20 20:07:53 +00:00
|
|
|
})
|
2014-06-16 23:27:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn files(&'a self) -> Vec<File<'a>> {
|
2014-06-20 20:07:53 +00:00
|
|
|
let mut files = vec![];
|
|
|
|
|
|
|
|
for path in self.contents.iter() {
|
|
|
|
match File::from_path(path, self) {
|
|
|
|
Ok(file) => {
|
|
|
|
files.push(file);
|
|
|
|
}
|
|
|
|
Err(e) => {
|
2014-06-20 20:40:31 +00:00
|
|
|
println!("{}: {}", path.display(), e);
|
2014-06-20 20:07:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
files
|
2014-06-16 23:27:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn contains(&self, path: &Path) -> bool {
|
|
|
|
self.contents.contains(path)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|