From e961fad84734ba750386ed463057bacedf24bc17 Mon Sep 17 00:00:00 2001 From: Naz Date: Fri, 8 Aug 2025 17:18:43 +0100 Subject: =?UTF-8?q?=E2=9C=A8feat:=20add=20desktop=20integration=20logic=20?= =?UTF-8?q?to=20AppImage=20and=20utilize=20it=20in=20PackageManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/manager.rs | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'src/manager.rs') diff --git a/src/manager.rs b/src/manager.rs index 15f28d9..bdb152a 100644 --- a/src/manager.rs +++ b/src/manager.rs @@ -1,7 +1,12 @@ +use std::{ + io::{self, Write}, + path::PathBuf, +}; use tokio::fs; use crate::{ - AppImage, Downloader, Index, Result, SymlinkManager, get_github_release_url, index_dir, + AppImage, Downloader, Index, Result, SymlinkManager, desktops_dir, get_github_release_url, + icons_dir, index_dir, }; #[derive(Debug, Default)] @@ -44,6 +49,17 @@ impl PackageManager { self.index.add(appimage, appname).await?; self.symlink_manager.create(appimage).await?; + + print!("Do you want to integrate this appimage? (y/N) "); + io::stdout().flush()?; + + let mut input = String::new(); + io::stdin().read_line(&mut input)?; + + if input.to_lowercase().trim() == "y" || input.to_lowercase().trim() == "yes" { + appimage.integrate_desktop().await?; + } + Ok(()) } pub async fn remove(&self, appname: &str) -> Result<()> { @@ -53,6 +69,26 @@ impl PackageManager { self.symlink_manager.remove(&appimage.executable).await?; self.index.remove(appname).await?; + if fs::try_exists(desktops_dir()?.join(format!("{}.desktop", appimage.executable))).await? { + fs::remove_file(desktops_dir()?.join(format!("{}.desktop", appimage.executable))) + .await?; + } + if fs::try_exists(PathBuf::from(std::env::var("HOME")?).join(format!( + ".local/share/applications/{}.desktop", + appimage.executable + ))) + .await? + { + fs::remove_file(PathBuf::from(std::env::var("HOME")?).join(format!( + ".local/share/applications/{}.desktop", + appimage.executable + ))) + .await?; + } + if fs::try_exists(icons_dir()?.join(format!("{}.png", appimage.executable))).await? { + fs::remove_file(icons_dir()?.join(format!("{}.png", appimage.executable))).await?; + } + Ok(()) } pub async fn list(&self) -> Result<()> { -- cgit v1.2.3