refactor: seperate files, function and structs into seperate packages
This commit is contained in:
parent
7f951585c8
commit
5b7775f33e
37 changed files with 547 additions and 677 deletions
118
packagemanager/flatpak.go
Normal file
118
packagemanager/flatpak.go
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
package packagemanager
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"system_setup_tool/internal/shell"
|
||||
)
|
||||
|
||||
type FlatpakManager struct {
|
||||
OS *OS
|
||||
SudoPassword string
|
||||
Config FlatpakConfig
|
||||
}
|
||||
|
||||
func NewFlatpakManager(sudoPassword string, config FlatpakConfig) *FlatpakManager {
|
||||
os, err := GetLinuxDistribution()
|
||||
if err != nil {
|
||||
log.Fatalf("error geting os information: %v", err)
|
||||
}
|
||||
return &FlatpakManager{
|
||||
OS: os,
|
||||
SudoPassword: sudoPassword,
|
||||
Config: config,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) Install(packages []string) error {
|
||||
if len(packages) == 0 {
|
||||
return nil
|
||||
}
|
||||
err := InstallWithProgress(f, packages)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) Name() string {
|
||||
return "Flatpak"
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) InstallManager() error {
|
||||
if _, err := shell.ExecLookPath("flatpak"); err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
err := installFlatpak(f.OS, f.SudoPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = addFlatpakRemotes(f.Config.Remotes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type FlatpakConfig struct {
|
||||
Enable bool `mapstructure:"enable"`
|
||||
Remotes []Remote `mapstructure:"remotes"`
|
||||
Packages []string `mapstructure:"packages"`
|
||||
}
|
||||
|
||||
type Remote struct {
|
||||
Name string `mapstructure:"name"`
|
||||
URL string `mapstructure:"url"`
|
||||
}
|
||||
|
||||
func installFlatpak(os *OS, sudoPassword string) error {
|
||||
var command string
|
||||
switch os.PackageManager {
|
||||
case "pacman":
|
||||
command = "pacman -S --noconfirm --needed flatpak"
|
||||
case "apt":
|
||||
command = "apt install -y flatpak"
|
||||
case "dnf":
|
||||
command = "dnf install -y flatpak"
|
||||
default:
|
||||
return fmt.Errorf("keine Flatpak-Installation für OS %s definiert", os.ID)
|
||||
}
|
||||
|
||||
if err := InstallPackage(command, "", sudoPassword); err != nil {
|
||||
return fmt.Errorf("fehler bei der Flatpak-Installation: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func addFlatpakRemotes(remotes []Remote) error {
|
||||
for _, remote := range remotes {
|
||||
cmd := shell.ExecCommand("flatpak", "remote-add", "--if-not-exists", remote.Name, remote.URL)
|
||||
if err := cmd.Run(); err != nil {
|
||||
return fmt.Errorf("fehler beim Hinzufügen des Remotes %s: %v", remote.Name, err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) InstallPackage(pkg string) error {
|
||||
cmd := shell.ExecCommand("flatpak", "install", "-y", pkg)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) RemovePackage(pkg string) error {
|
||||
cmd := shell.ExecCommand("flatpak", "uninstall", "-y", pkg)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) SearchPackage(pkg string) []string {
|
||||
cmd := shell.ExecCommand("flatpak", "search", pkg)
|
||||
packages, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Printf("error fetching %s packages: %v", f.Name(), err)
|
||||
}
|
||||
packageList := strings.Split(strings.TrimSpace(string(packages)), "\n")
|
||||
return packageList
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue