use std::path::PathBuf;
use applications::App;
use lnk::ShellLink;
use walkdir::WalkDir;
fn parse_lnk(path: PathBuf) -> Option<App> {
let shortcut = ShellLink::open(&path).unwrap();
let icon = shortcut.icon_location();
let rel_path = shortcut.relative_path();
let work_dir = shortcut.working_dir();
let link_info = shortcut.link_info();
let name = shortcut.name();
println!("name: {:#?}", name);
println!("rel_path: {:#?}", rel_path);
println!("work_dir: {:#?}", work_dir);
println!("shortcut: {:#?}", shortcut.icon_location());
println!("icon::: {:#?}", shortcut.icon_location());
let exe: Option<PathBuf> = match link_info {
Some(info) => {
match info.local_base_path() {
Some(path) => Some(PathBuf::from(path)),
None => None,
}
}
None => None,
};
let work_dir = match work_dir {
Some(dir) => PathBuf::from(dir),
None => {
match &exe {
Some(exe) => exe.parent().unwrap().to_path_buf(),
None => return None,
}
}
};
let icon_path: Option<PathBuf> = icon.as_ref().map(PathBuf::from);
Some(App {
name: path.file_stem().unwrap().to_str().unwrap().to_string(),
icon_path,
app_path_exe: exe,
app_desktop_path: work_dir,
})
}
fn main() {
let start_menu = "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs";
let devclean_ui_lnk = PathBuf::from(
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\devclean-ui\\devclean-ui.lnk",
);
let docker_lnk =
PathBuf::from("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Docker Desktop.lnk");
let vs_path = PathBuf::from(
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Visual Studio 2022.lnk",
);
let task_manager_lnk_path = PathBuf::from(
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\System Tools\\Task Manager.lnk",
);
let capcut_lnk = PathBuf::from("C:\\Users\\shenh\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\CapCut\\CapCut.lnk");
let app = parse_lnk(vs_path);
println!("{:#?}", app);
}