diff --git a/src/database/mod.rs b/src/database/mod.rs index f37d309..0e79ed6 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -18,6 +18,6 @@ pub fn init(options: Options) { initialise::init(options); } -pub fn query(a: &str, options: Options) -> Vec { - query::query(a, options) +pub fn query(options: Options) -> Vec { + query::query(options) } diff --git a/src/database/query.rs b/src/database/query.rs index 89e3016..d12470d 100644 --- a/src/database/query.rs +++ b/src/database/query.rs @@ -6,7 +6,7 @@ use rusqlite::Connection; use crate::internal::rpc::Package; use crate::{log, Options}; -pub fn query(a: &str, options: Options) -> Vec { +pub fn query(options: Options) -> Vec { let verbosity = options.verbosity; if verbosity >= 1 { @@ -23,11 +23,9 @@ pub fn query(a: &str, options: Options) -> Vec { log("Querying database for input".to_string()); } - let mut rs = conn - .prepare("SELECT name, version, description, depends, make_depends FROM packages WHERE name LIKE :a;") - .unwrap(); + let mut rs = conn.prepare("SELECT * FROM packages;").unwrap(); let packages_iter = rs - .query_map(&[(":a", &a)], |row| { + .query_map([], |row| { Ok(Package { name: row.get(0).unwrap(), version: row.get(1).unwrap(), diff --git a/src/internal/mod.rs b/src/internal/mod.rs index 1965fd1..06c7006 100644 --- a/src/internal/mod.rs +++ b/src/internal/mod.rs @@ -30,3 +30,24 @@ pub fn crash(a: String, b: i32) { pub fn log(a: String) { strings::log(a); } + +pub fn prompt(a: String, b: bool) -> bool { + strings::prompt(a, b) +} + +#[macro_export] +macro_rules! uwu { + ($x:expr) => {{ + let uwu: String = String::from_str($x).unwrap(); + + let uwu = uwu.replace("l", "w"); + let uwu = uwu.replace("L", "W"); + let uwu = uwu.replace("r", "w"); + let uwu = uwu.replace("R", "W"); + let uwu = uwu.replace("na", "nya"); + let uwu = uwu.replace("Na", "Nya"); + let uwu = uwu.replace("NA", "NYA"); + + uwu + }}; +} diff --git a/src/internal/strings.rs b/src/internal/strings.rs index 29f03e4..516b391 100644 --- a/src/internal/strings.rs +++ b/src/internal/strings.rs @@ -1,16 +1,40 @@ +use crate::uwu; +use std::io::Write; use std::process::exit; +use std::str::FromStr; use std::time::UNIX_EPOCH; +use std::{env, io}; pub fn info(a: String) { + let a = if env::var("AME_UWU").unwrap_or("".to_string()) == "true" { + uwu!(&a) + } else { + a + }; + println!("\x1b[2;22;35m❖\x1b[0m \x1b[1;37m{}\x1b[0m", a) } pub fn crash(a: String, b: i32) { + let a = if env::var("AME_UWU").unwrap_or("".to_string()) == "true" { + uwu!(&a) + } else { + a + }; + println!("\x1b[2;22;31m❌\x1b[0m \x1b[1;91m{}\x1b[0m", a); exit(b); } pub fn log(a: String) { + let a = if env::var("AME_UWU").unwrap_or("".to_string()) == "true" + && env::var("AME_UWU_DEBUG").unwrap_or("".to_string()) == "true" + { + uwu!(&a) + } else { + a + }; + eprintln!( "{} {}", std::time::SystemTime::now() @@ -20,3 +44,32 @@ pub fn log(a: String) { a ); } + +pub fn prompt(a: String, b: bool) -> bool { + let default = ["[Y/n]", "[y/N]"]; + let i = if b { 0 } else { 1 }; + + let a = if env::var("AME_UWU").unwrap_or("".to_string()) == "true" { + uwu!(&a) + } else { + a + }; + + print!( + "\x1b[2;22;35m?\x1b[0m \x1b[1;37m{}\x1b[0m \x1b[2;22;37m{}\x1b[0m: ", + a, default[i] + ); + + let mut yn: String = String::new(); + + io::stdout().flush().ok(); + let _ = std::io::stdin().read_line(&mut yn); + + if yn.trim().to_lowercase() == "n" || yn.trim().to_lowercase() == "no" { + false + } else if yn.trim().to_lowercase() == "y" || yn.trim().to_lowercase() == "yes" { + true + } else { + b + } +} diff --git a/src/operations/aur_install.rs b/src/operations/aur_install.rs index ad97ae4..eb124fa 100644 --- a/src/operations/aur_install.rs +++ b/src/operations/aur_install.rs @@ -4,8 +4,8 @@ use std::fs::remove_dir_all; use std::path::Path; use std::process::{Command, Stdio}; -use crate::internal::crash; use crate::internal::rpc::rpcinfo; +use crate::internal::{crash, prompt}; use crate::{info, log, Options}; pub fn aur_install(a: Vec, options: Options) { @@ -84,14 +84,20 @@ pub fn aur_install(a: Vec, options: Options) { } if !noconfirm { + let p = prompt( + "Would you like to view or edit {}'s PKGBUILD?".to_string(), + false, + ); let editor = env::var("EDITOR").unwrap_or_else(|_| "nano".parse().unwrap()); - Command::new(editor) - .arg(format!("{}/PKGBUILD", pkg)) - .spawn() - .unwrap() - .wait() - .unwrap(); + if p { + Command::new(editor) + .arg(format!("{}/PKGBUILD", pkg)) + .spawn() + .unwrap() + .wait() + .unwrap(); + } } // dep installing @@ -122,10 +128,8 @@ pub fn aur_install(a: Vec, options: Options) { ); } - if makepkg_args.contains(&"--asdeps") { - set_current_dir(&cachedir).unwrap(); - remove_dir_all(format!("{}/{}", cachedir, pkg)).unwrap(); - } + set_current_dir(&cachedir).unwrap(); + remove_dir_all(format!("{}/{}", cachedir, &pkg)).unwrap(); // pushes package to database crate::database::add(rpcres.package.unwrap(), options); diff --git a/src/operations/upgrade.rs b/src/operations/upgrade.rs index 7cbea10..d80c824 100644 --- a/src/operations/upgrade.rs +++ b/src/operations/upgrade.rs @@ -2,7 +2,7 @@ use runas::Command; use crate::internal::rpc::rpcinfo; use crate::operations::aur_install::aur_install; -use crate::{log, Options}; +use crate::{info, log, Options}; pub fn upgrade(options: Options) { let verbosity = options.verbosity; @@ -26,7 +26,11 @@ pub fn upgrade(options: Options) { log("Upgrading AUR packages".to_string()); } - let res = crate::database::query("\"%\"", options); + let res = crate::database::query(options); + + if verbosity >= 1 { + log(format!("{:?}", &res)); + } let mut aur_upgrades = vec![]; for r in res { @@ -37,5 +41,9 @@ pub fn upgrade(options: Options) { } } - aur_install(aur_upgrades, options); + if !aur_upgrades.is_empty() { + aur_install(aur_upgrades, options); + } else { + info("No upgrades available for installed AUR packages".to_string()); + } }