ui, add download options

This commit is contained in:
djkato 2023-04-24 16:47:06 +02:00
parent b99b6698de
commit cdeb14a23a

View file

@ -10,33 +10,56 @@ use version_compare::Version;
use walkdir::WalkDir; use walkdir::WalkDir;
fn main() -> Result<(), eframe::Error> { fn main() -> Result<(), eframe::Error> {
let mut installed_apps = list_installed_adobe_programs(); let mut installed_apps = find_local_programs();
let online_apps = find_updates(&installed_apps); /*let mut installed_apps: Vec<LocalFoundApp> = vec![
compare_versions(&mut installed_apps, online_apps); LocalFoundApp {
create_ui(installed_apps) name: "Adobe After Effects".to_owned(),
version: "1.0.0".to_owned(),
newest_online: None,
},
LocalFoundApp {
name: "Adobe Premiere Pro".to_owned(),
version: "1.0.0".to_owned(),
newest_online: None,
},
LocalFoundApp {
name: "Adobe Photoshop".to_owned(),
version: "1.0.0".to_owned(),
newest_online: None,
},
];*/
let mut online_apps = find_online_programs(&installed_apps);
compare_versions(&mut installed_apps, &mut online_apps);
create_ui(installed_apps, online_apps)
} }
fn create_ui(installed_apps: Vec<LocalFoundApp>) -> Result<(), eframe::Error> { fn create_ui(
installed_apps: Vec<LocalFoundApp>,
online_apps: Vec<OnlineFoundApp>,
) -> Result<(), eframe::Error> {
//egui //egui
let options = NativeOptions { let options = NativeOptions {
initial_window_size: Some(egui::vec2(320.0, 240.0)), initial_window_size: Some(egui::vec2(320.0, 240.0)),
..Default::default() ..Default::default()
}; };
let app = Box::new(IsaApp { let app = Box::new(IsaApp {
app_list: installed_apps, local_app_list: installed_apps,
..Default::default() online_app_list: online_apps,
}); });
run_native("Adobe checker", options, Box::new(|_cc| app)) run_native("Adobe checker", options, Box::new(|_cc| app))
} }
/* GUI */ /* GUI */
#[derive(Default)] #[derive(Default)]
struct IsaApp { struct IsaApp {
app_list: Vec<LocalFoundApp>, local_app_list: Vec<LocalFoundApp>,
online_app_list: Vec<OnlineFoundApp>,
} }
impl App for IsaApp { impl App for IsaApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
for local_app in self.app_list.iter() { ui.heading("Updates");
ui.separator();
for local_app in self.local_app_list.iter() {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.label(format!("{}:", &local_app.name)); ui.label(format!("{}:", &local_app.name));
if local_app.newest_online.is_some() { if local_app.newest_online.is_some() {
@ -60,15 +83,33 @@ impl App for IsaApp {
} }
}); });
} }
ui.add_space(20.0);
ui.heading("Online found apps");
ui.separator();
egui::ScrollArea::vertical().show(ui, |ui| {
for online_app in self.online_app_list.iter() {
ui.horizontal(|ui| {
ui.label(format!(
"{}, version: {} ",
online_app.name, &online_app.version
));
ui.hyperlink_to("download", &online_app.magnet);
ui.add_space(ui.available_width());
});
}
});
}); });
} }
} }
/* COMPARE VERS */ /* COMPARE VERS */
fn compare_versions(installed_apps: &mut Vec<LocalFoundApp>, online_apps: Vec<OnlineFoundApp>) { fn compare_versions(
installed_apps: &mut Vec<LocalFoundApp>,
online_apps: &mut Vec<OnlineFoundApp>,
) {
for local_app in installed_apps.iter_mut() { for local_app in installed_apps.iter_mut() {
for online_app in online_apps.iter() { for online_app in online_apps.iter() {
if local_app.name == online_app.name { if online_app.name.contains(&local_app.name) {
if local_app.newest_online.is_none() { if local_app.newest_online.is_none() {
if Version::from(&local_app.version) < Version::from(&online_app.version) { if Version::from(&local_app.version) < Version::from(&online_app.version) {
local_app.newest_online = Some(online_app.clone()); local_app.newest_online = Some(online_app.clone());
@ -86,9 +127,11 @@ fn compare_versions(installed_apps: &mut Vec<LocalFoundApp>, online_apps: Vec<On
} }
/* SCAPER */ /* SCAPER */
fn find_updates(app_list: &Vec<LocalFoundApp>) -> Vec<OnlineFoundApp> { fn find_online_programs(app_list: &Vec<LocalFoundApp>) -> Vec<OnlineFoundApp> {
let version_regex = Regex::new(r"\(v.*?\)").unwrap(); let version_brackets_regex = Regex::new(r"\(v.*?\)").unwrap();
let version_bare_regex = Regex::new(r"v[.\d]* ").unwrap();
let magnet_regex = Regex::new(r#"href="magnet:\?xt.*?""#).unwrap(); let magnet_regex = Regex::new(r#"href="magnet:\?xt.*?""#).unwrap();
let name_regex = Regex::new(r#"<b>Adobe .*<wbr>"#).unwrap();
//if temp is missing make it, delete previous tracker.php file if there is one //if temp is missing make it, delete previous tracker.php file if there is one
match std::fs::read_dir("./temp") { match std::fs::read_dir("./temp") {
Ok(_) => std::fs::remove_file("./temp/tracker.php").unwrap_or_else(|_e| ()), Ok(_) => std::fs::remove_file("./temp/tracker.php").unwrap_or_else(|_e| ()),
@ -110,17 +153,33 @@ fn find_updates(app_list: &Vec<LocalFoundApp>) -> Vec<OnlineFoundApp> {
println!(""); println!("");
let website_file = fs::read_to_string("./temp/tracker.php").unwrap(); let website_file = fs::read_to_string("./temp/tracker.php").unwrap();
for (web_line_i, web_line) in website_file.lines().enumerate() { for (web_line_i, web_line) in website_file.lines().enumerate() {
for app_name in app_list { if web_line.to_ascii_lowercase().contains("adobe") {
if web_line
.to_ascii_lowercase()
.contains(&app_name.name.to_ascii_lowercase())
{
let mut version = "".to_owned(); let mut version = "".to_owned();
if let Some(res) = version_regex.find(web_line) { let mut name = "".to_owned();
if let Some(res) = name_regex.find(web_line) {
name = web_line
.get(res.start() + 3..res.end() - 5)
.unwrap()
.to_string();
}
if let Some(res) = version_brackets_regex.find(web_line) {
version = web_line version = web_line
.get(res.start() + 2..res.end() - 1) .get(res.start() + 2..res.end() - 1)
.unwrap() .unwrap()
.to_string(); .to_string();
if version.contains("<wbr>") {
version.pop();
version.pop();
version.pop();
version.pop();
version.pop();
}
} else if let Some(res) = version_bare_regex.find(&web_line) {
version = web_line
.get(res.start() + 1..res.end() - 1)
.unwrap()
.to_string();
version = version.trim().to_string();
} }
let mut magnet = "".to_string(); let mut magnet = "".to_string();
@ -135,16 +194,13 @@ fn find_updates(app_list: &Vec<LocalFoundApp>) -> Vec<OnlineFoundApp> {
} }
} }
} }
println!( println!("App: {}\nVersion: {}\nMagnet:{}\n", &name, &version, magnet);
"App: {}\nVersion: {}\nMagnet:{}\n", let mut online_app = OnlineFoundApp {
&app_name.name, &version, magnet name,
);
online_apps.push(OnlineFoundApp {
name: app_name.name.clone(),
version,
magnet, magnet,
}); version,
} };
online_apps.push(online_app.clone());
} }
} }
}; };
@ -152,7 +208,7 @@ fn find_updates(app_list: &Vec<LocalFoundApp>) -> Vec<OnlineFoundApp> {
} }
/* FILE BROWSER */ /* FILE BROWSER */
fn list_installed_adobe_programs() -> Vec<LocalFoundApp> { fn find_local_programs() -> Vec<LocalFoundApp> {
let version_regex = Regex::new(r#""\{\w*-\d*\.\d.*?-64-"#).unwrap(); let version_regex = Regex::new(r#""\{\w*-\d*\.\d.*?-64-"#).unwrap();
let mut apps = Vec::new(); let mut apps = Vec::new();
for directory_res in WalkDir::new(r"C:\Program Files\Adobe").max_depth(1) { for directory_res in WalkDir::new(r"C:\Program Files\Adobe").max_depth(1) {