package packagemanager import ( "codeberg.org/Pata1704/system_setup_tool/internal/shell" "fmt" "log" "strings" ) type DnfManager struct { SudoPassword string } func (d *DnfManager) Install(packages []string) error { if len(packages) == 0 { return nil } err := InstallWithProgress(d, packages) if err != nil { return err } return nil } func (d *DnfManager) Name() string { return "OS Home Manager" } func (d *DnfManager) InstallManager() error { return nil } func (d *DnfManager) InstallPackage(pkg string) error { cmd := "dnf install -y --best" fullCmd := fmt.Sprintf("%s %s", cmd, pkg) command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) command.Stdin = strings.NewReader(d.SudoPassword + "\n") return command.Run() } func (d *DnfManager) RemovePackage(pkg string) error { cmd := "dnf remove -y" fullCmd := fmt.Sprintf("%s %s", cmd, pkg) command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) command.Stdin = strings.NewReader(d.SudoPassword + "\n") return command.Run() } func (d *DnfManager) SearchPackage(pkg string) []string { cmd := shell.ExecCommand("dnf", "search", pkg) packages, err := cmd.Output() if err != nil { log.Printf("error fetching %s packages: %v", d.Name(), err) } packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList } func (d *DnfManager) UpdatePackage(pkg string) error { cmd := "dnf update -y" fullCmd := fmt.Sprintf("%s %s", cmd, pkg) command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) command.Stdin = strings.NewReader(d.SudoPassword + "\n") return command.Run() } func (d *DnfManager) UpdateAllPackages() error { cmd := "dnf update -y" fullCmd := fmt.Sprintf("%s", cmd) command := shell.ExecCommand("sudo", "-S", "sh", "-c", fullCmd) command.Stdin = strings.NewReader(d.SudoPassword + "\n") return command.Run() } func (d *DnfManager) Check(pkg string) error { cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("dnf list installed | grep %s", pkg)) return cmd.Run() }