From 80e762773af05b7808eef34f1abab40c358c0c9d Mon Sep 17 00:00:00 2001 From: Naz Date: Mon, 28 Jul 2025 10:33:46 +0100 Subject: =?UTF-8?q?=E2=9C=A8feat:=20implement=20basic=20install=20and=20re?= =?UTF-8?q?move=20commands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index e7a11a9..3092c43 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,48 @@ -fn main() { - println!("Hello, world!"); +use clap::Parser; +use tokio::fs; + +use zap_rs::{AppImage, Cli, Command, Source, SourceMetadata, appimages_dir, index_dir}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let args = Cli::parse(); + + match args.command { + Command::Install(args) => { + let options = AppImage { + file_path: appimages_dir().join( + args.from + .split('/') + .next_back() + .filter(|s| !s.is_empty()) + .unwrap_or("app.AppImage"), + ), + executable: args.executable.unwrap_or(args.appname.clone()), + source: Source { + identifier: "raw_url".to_string(), + meta: SourceMetadata { url: args.from }, + }, + }; + + if index_dir() + .join(format!("{}.json", &options.executable)) + .exists() + { + eprintln!("{} is already installed.", &options.executable); + } else { + options.download_from_url().await?; + options.save_to_index(&args.appname).await?; + options.create_symlink().await?; + } + } + Command::Remove(args) => { + let index_file_path = index_dir().join(format!("{}.json", args.appname)); + let index_file_content = fs::read_to_string(&index_file_path).await?; + let appimage: AppImage = serde_json::from_str(&index_file_content)?; + + appimage.remove().await?; + } + }; + + Ok(()) } -- cgit v1.2.3