use std::path::PathBuf;
use crate::gather::{FileEntries, Origin, Source};
use super::read_folder_recursive;
#[derive(Debug)]
pub struct StartMenuSource;
impl StartMenuSource {
#[must_use]
pub const fn new() -> Self {
Self
}
fn folders(&self) -> Vec<PathBuf> {
let user = std::env::var_os("APPDATA").map(|p| {
PathBuf::from(p)
.join("Microsoft")
.join("Windows")
.join("Start Menu")
.join("Programs")
});
let system = std::env::var_os("ProgramData").map(|p| {
PathBuf::from(p)
.join("Microsoft")
.join("Windows")
.join("Start Menu")
.join("Programs")
});
[user, system].into_iter().flatten().collect()
}
}
impl Default for StartMenuSource {
fn default() -> Self {
Self::new()
}
}
impl Source for StartMenuSource {
fn origin(&self) -> Origin {
Origin::StartMenu
}
fn scan(&self) -> FileEntries<'_> {
let stream = self.folders().into_iter().flat_map(read_folder_recursive);
Box::new(stream)
}
}