From 35be71e43b992745ee0589166091e43ff6967d2e Mon Sep 17 00:00:00 2001 From: axtlos <3alouchi2006@gmail.com> Date: Sun, 10 Oct 2021 21:57:01 +0200 Subject: [PATCH] uhhhh, more database advancements, i guess --- Cargo.toml | 2 +- src/main.rs | 4 ---- src/mods/clone.rs | 4 +++- src/mods/database.rs | 25 +++++++++++++++---------- src/mods/uninstall.rs | 18 +++++++++++------- src/mods/upgrade.rs | 36 ++++++++++++++++++++++++++++++++++-- 6 files changed, 64 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 33f6122..c460000 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,4 +17,4 @@ moins = "*" regex = "*" toml_edit = "*" toml = "*" -bytes = "*" +bytes = "*" \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index f39da20..9d71995 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,10 +42,6 @@ fn main() { upgrade(noconfirm); } else if oper == "-Sy" || oper == "upd" { update(); - } else if oper == "-db" { - addPkg(pkgs); - } else if oper == "-remdb" { - remPkg(pkgs); } else if oper == "-Ss" || oper == "sea" { r_search(&args[2]); a_search(&args[2]); diff --git a/src/mods/clone.rs b/src/mods/clone.rs index 9ad657c..0d64410 100644 --- a/src/mods/clone.rs +++ b/src/mods/clone.rs @@ -1,6 +1,6 @@ use crate::{ err_unrec, inf, inssort, mods::strs::prompt, mods::strs::sec, mods::strs::succ, - mods::uninstall::uninstall, + mods::uninstall::uninstall, mods::database::addPkg }; use git2::Repository; use moins::Moins; @@ -102,6 +102,7 @@ pub fn clone(noconfirm: bool, pkg: &str) { match install_result { Ok(_) => { uninstall_make_depend(pkg); + addPkg(false, pkg); } Err(_) => { err_unrec(format!("Couldn't install {}", pkg)); @@ -117,6 +118,7 @@ pub fn clone(noconfirm: bool, pkg: &str) { match install_result.code() { Some(0) => { uninstall_make_depend(pkg); + addPkg(false, pkg); } Some(_) => { err_unrec(format!("Couldn't install {}", pkg)); diff --git a/src/mods/database.rs b/src/mods/database.rs index db84b6f..8ff4927 100644 --- a/src/mods/database.rs +++ b/src/mods/database.rs @@ -3,16 +3,18 @@ use toml_edit::{Document, value}; use std::io::{Read, Write, Error}; use std::fs::File; -pub fn remPkg(pkgs: Vec) { +pub fn remPkg(pkgs: &Vec) { let file = format!("{}/.local/ame/aurPkgs.db", std::env::var("HOME").unwrap()); let mut database = std::fs::read_to_string(&file).expect("cant open database"); let mut updateDatabase = database; for i in pkgs { - let results = raur::search(&i); - for res in &results { - let databaseEntry = format!("{} = {{ name = \"{}\", version = \"{}\"}}\n",&i, &res[0].name, &res[0].version); - updateDatabase = format!("{}",updateDatabase.replace(&databaseEntry, "")); + if updateDatabase.contains(i) { + let results = raur::search(&i); + for res in &results { + let databaseEntry = format!("{} = {{ name = \"{}\", version = \"{}\"}}\n",&res[0].name, &res[0].name, &res[0].version); + updateDatabase = format!("{}",updateDatabase.replace(&databaseEntry, "")); + } } } let fileAsPath = File::create(std::path::Path::new(&file)).unwrap(); @@ -20,20 +22,23 @@ pub fn remPkg(pkgs: Vec) { } -pub fn addPkg(pkgs: Vec) -> Result<(), Error> { +pub fn addPkg(fromRepo: bool, pkg: &str) -> Result<(), Error> { let file = format!("{}/.local/ame/aurPkgs.db", std::env::var("HOME").unwrap()); let database = std::fs::read_to_string(&file).expect("cant open database"); let mut fileAsPath = File::create(std::path::Path::new(&file))?; let mut dbParsed = database.parse::().expect("invalid Database"); - for i in pkgs { - let results = raur::search(&i); + if fromRepo == false { + let results = raur::search(&pkg); for res in &results { for r in res { - dbParsed[&i]["name"] = value(&r.name); - dbParsed[&i]["version"] = value(&r.version); + dbParsed[&r.name]["name"] = value(&r.name); + dbParsed[&r.name]["version"] = value(&r.version); } } + } else { + dbParsed[&pkg]["name"] = value(pkg); + dbParsed[&pkg]["version"] = value(pkg); } print!("{}",dbParsed); fileAsPath.write_all(format!("{}",dbParsed).as_bytes()).unwrap(); diff --git a/src/mods/uninstall.rs b/src/mods/uninstall.rs index 809dc15..b672b55 100644 --- a/src/mods/uninstall.rs +++ b/src/mods/uninstall.rs @@ -1,4 +1,4 @@ -use crate::mods::strs::{err_rec, err_unrec, sec, succ}; +use crate::mods::{strs::{err_rec, err_unrec, sec, succ}, database::remPkg}; use runas::Command; use std::{fs, path::Path}; @@ -15,10 +15,12 @@ pub fn uninstall(noconfirm: bool, pkgs: Vec) { .status() .expect("Couldn't call pacman"); match result.code() { - Some(0) => succ(format!( + Some(0) => { + succ(format!( "Succesfully uninstalled packages: {}", - &pkgs.join(" ") - )), + &pkgs.join(" "))); + remPkg(&pkgs); + }, Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), }; @@ -29,10 +31,12 @@ pub fn uninstall(noconfirm: bool, pkgs: Vec) { .status() .expect("Couldn't call pacman"); match result.code() { - Some(0) => succ(format!( + Some(0) => { + succ(format!( "Succesfully uninstalled packages: {}", - &pkgs.join(" ") - )), + &pkgs.join(" "))); + remPkg(&pkgs); + }, Some(_) => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), None => err_rec(format!("Couldn't uninstall packages: {}", &pkgs.join(" "))), }; diff --git a/src/mods/upgrade.rs b/src/mods/upgrade.rs index 168dcbd..bddc9c7 100644 --- a/src/mods/upgrade.rs +++ b/src/mods/upgrade.rs @@ -1,11 +1,16 @@ use crate::mods::strs::{err_unrec, inf, sec, succ}; use runas::Command; use std::{env, fs}; +use toml; pub fn upgrade(noconfirm: bool) { let homepath = std::env::var("HOME").unwrap(); let cachedir = format!("/{}/.cache/ame/", homepath); let cache_exists = std::path::Path::new(&format!("/{}/.cache/ame/", homepath)).is_dir(); + let file = format!("{}/.local/ame/aurPkgs.db", std::env::var("HOME").unwrap()); + let database = std::fs::read_to_string(&file).expect("cant open database"); + let mut dbParsed = database.parse::().expect("invalid Database"); + if cache_exists == false { let cachecreate = fs::create_dir_all(&cachedir); match cachecreate { @@ -40,7 +45,34 @@ pub fn upgrade(noconfirm: bool) { }; } - for file in std::fs::read_dir(&cachedir).unwrap() { + println!("{:?}", dbParsed); + for entry in dbParsed.as_table() { + for (key, value) in &*entry { + //println!("{} / {}", key, value); + for (option, entry) in { + println!("{} / {}", option, entry); + } + //if key.contains("name") { + /* println!("{}",value); + let results = raur::search(format!("{}",entry["paru"])); + println!("{}",format!("{}",entry)); + let mut test = value.to_string().replace("\"", ""); + test = test.replace("version", "").replace("name",""); + test = test.replace("=", ""); + println!("{}",test.replace(" ",""));*/ + //let results = raur::search(format!("{}",value)); + //for res in results { + // println!("{}",&res[0].name); + //} + /*} else if key.contains("version") { + if value.as_integer() == lVersion { + println!("upgrading"); + } + }*/ + } + } + + /*for file in std::fs::read_dir(&cachedir).unwrap() { let dir = &file.unwrap().path(); let output = std::process::Command::new("git") .arg("pull") @@ -82,5 +114,5 @@ pub fn upgrade(noconfirm: bool) { None => err_unrec(format!("Couldn't install new AUR package version")), }; } - } + }*/ }