diff --git a/pkg/packagemanager/flatpak.go b/pkg/packagemanager/flatpak.go index 631beeb..8651f4b 100644 --- a/pkg/packagemanager/flatpak.go +++ b/pkg/packagemanager/flatpak.go @@ -4,46 +4,9 @@ package packagemanager import ( "os/exec" - "encoding/json" - "io/ioutil" "fmt" - "path/filepath" - "os/user" ) -// PackageList represents the mapping of installed packages to their sources -type PackageList map[string]string - -// getPkgListPath returns the file path for the package list -func getPkgListPath() (string, error) { - usr, err := user.Current() - if err != nil { - return "", fmt.Errorf("error getting current user: %v", err) - } - return filepath.Join(usr.HomeDir, ".allpac", "pkg.list"), nil -} - -// readPackageList reads the package list from the file -func readPackageList() (PackageList, error) { - pkgListPath, err := getPkgListPath() - if err != nil { - return nil, err - } - - file, err := ioutil.ReadFile(pkgListPath) - if err != nil { - return nil, fmt.Errorf("error reading package list file: %v", err) - } - - var pkgList PackageList - err = json.Unmarshal(file, &pkgList) - if err != nil { - return nil, fmt.Errorf("error decoding package list: %v", err) - } - - return pkgList, nil -} - // UpdateFlatpakPackages updates specified Flatpak packages or all if no specific package is provided func UpdateFlatpakPackages(packageNames ...string) error { var cmd *exec.Cmd diff --git a/pkg/packagemanager/pacman.go b/pkg/packagemanager/pacman.go index 06cfa88..c0bdb42 100644 --- a/pkg/packagemanager/pacman.go +++ b/pkg/packagemanager/pacman.go @@ -13,12 +13,12 @@ func UpdatePacmanPackages(packageNames ...string) error { if len(packageNames) == 0 { cmd = exec.Command("sudo", "pacman", "-Syu") } else { - args := append([]string{"-S", "--noconfirm"}, packageNames...) - cmd = exec.Command("sudo", "pacman", args...) + args := append([]string{"sudo", "pacman", "-S", "--noconfirm"}, packageNames...) + cmd = exec.Command(args[0], args[1:]...) } if output, err := cmd.CombinedOutput(); err != nil { - return fmt.Errorf("error updating Pacman packages: %s, %v", output, err) + return fmt.Errorf("error updating Pacman packages: %s, %v", string(output), err) } return nil } diff --git a/pkg/packagemanager/snap.go b/pkg/packagemanager/snap.go index 19b95ee..84dd73e 100644 --- a/pkg/packagemanager/snap.go +++ b/pkg/packagemanager/snap.go @@ -1,3 +1,33 @@ package packagemanager // This package is responsible for handling updating and uninstalling snapd applications + +import ( + "os/exec" + "fmt" +) + +// UpdateSnapPackages updates specified Snap packages or all if no specific package is provided +func UpdateSnapPackages(packageNames ...string) error { + var cmd *exec.Cmd + if len(packageNames) == 0 { + cmd = exec.Command("sudo", "snap", "refresh") + } else { + args := append([]string{"refresh"}, packageNames...) + cmd = exec.Command(args[0], args[1:]...) + } + + if output, err := cmd.CombinedOutput(); err != nil { + return fmt.Errorf("error updating Snap packages: %s, %v", string(output), err) + } + return nil +} + +// UninstallSnapPackage uninstalls a specified Snap package +func UninstallSnapPackage(packageName string) error { + cmd := exec.Command("sudo", "snap", "remove", packageName) + if output, err := cmd.CombinedOutput(); err != nil { + return fmt.Errorf("error uninstalling Snap package: %s, %v", string(output), err) + } + return nil +} diff --git a/pkg/search/search.go b/pkg/search/search.go index f59e170..d7dd81f 100644 --- a/pkg/search/search.go +++ b/pkg/search/search.go @@ -3,13 +3,79 @@ package search // This package is responsible for searching various sources for the availability of the requested package import ( - "os/exec" + "pixelridgesoftworks.com/AllPac/pkg/packagemanager" "encoding/json" + "io/ioutil" "fmt" - "net/http" - "strings" + "os/user" + "os/exec" + "path/filepath" + "strings" + "net/http" ) +// PackageList represents the mapping of installed packages to their sources +type PackageList map[string]string + +// UninstallPackages uninstalls the provided packages +func UninstallPackages(packageNames []string) error { + pkgList, err := readPackageList() + if err != nil { + return err + } + + for _, packageName := range packageNames { + source, exists := pkgList[packageName] + if !exists { + fmt.Printf("Package %s not found in installed packages list\n", packageName) + continue + } + + switch source { + case "pacman": + err = packagemanager.UninstallPacmanPackage(packageName) + case "snap": + err = packagemanager.UninstallSnapPackage(packageName) + case "flatpak": + err = packagemanager.UninstallFlatpakPackage(packageName) + // Add cases for other package managers if necessary + default: + fmt.Printf("Unknown source for package %s\n", packageName) + continue + } + + if err != nil { + fmt.Printf("Error uninstalling package %s: %v\n", packageName, err) + } else { + fmt.Printf("Successfully uninstalled package %s\n", packageName) + } + } + + return nil +} + +// readPackageList reads the package list from the pkg.list file +func readPackageList() (PackageList, error) { + usr, err := user.Current() + if err != nil { + return nil, fmt.Errorf("error getting current user: %v", err) + } + pkgListPath := filepath.Join(usr.HomeDir, ".allpac", "pkg.list") + + file, err := ioutil.ReadFile(pkgListPath) + if err != nil { + return nil, fmt.Errorf("error reading package list file: %v", err) + } + + var pkgList PackageList + err = json.Unmarshal(file, &pkgList) + if err != nil { + return nil, fmt.Errorf("error decoding package list: %v", err) + } + + return pkgList, nil +} + // AURResponse represents the structure of the response from AUR RPC type AURResponse struct { Version int `json:"version"`