goroutines

This commit is contained in:
nekohepott 2026-06-17 04:16:28 +03:00
parent abcbb0eed6
commit 3f892b6605
No known key found for this signature in database
2 changed files with 60 additions and 16 deletions

View File

@ -6,6 +6,7 @@ import (
"os/exec" "os/exec"
"strconv" "strconv"
"strings" "strings"
"sync"
) )
func pathExists(path string) bool { func pathExists(path string) bool {
@ -44,28 +45,46 @@ func getPmPackages(packagerName string, packagerPath string) string {
} }
func GetPkgs() string { func GetPkgs() string {
rawPkgs := []string{ managers := []struct {
getPmPackages("pacman", "/var/lib/pacman/local"), name, path string
getPmPackages("apt", "/var/lib/apt"), }{
getPmPackages("dnf", "/var/lib/dnf"), {"pacman", "/var/lib/pacman/local"},
getPmPackages("zypper", "/var/lib/zypp"), {"nix-user", "~/.nix-profile/lib/nix/profiles/per-user"},
getPmPackages("xbps", "/var/db/xbps"), {"nix", "/nix/store"},
getPmPackages("emerge", "/var/lib/portage"), {"apt", "/var/lib/apt"},
getPmPackages("nix-user", "~/.nix-profile/lib/nix/profiles/per-user"), {"dnf", "/var/lib/dnf"},
getPmPackages("nix", "/nix/store"), {"zypper", "/var/lib/zypp"},
getPmPackages("apk", "/etc/apk/"), {"xbps", "/var/db/xbps"},
getPmPackages("flatpak", "/var/lib/flatpak/app"), {"emerge", "/var/lib/portage"},
{"apk", "/etc/apk/"},
{"flatpak", "/var/lib/flatpak/app"},
} }
results := make([]string, len(managers))
var wg sync.WaitGroup
for i, m := range managers {
wg.Add(1)
go func(idx int, name, path string) {
defer wg.Done()
if p := getPmPackages(name, path); p != "" {
results[idx] = p
}
}(i, m.name, m.path)
}
wg.Wait()
var pkgsList []string var pkgsList []string
for _, p := range rawPkgs { for _, p := range results {
if p != "" { if p != "" {
pkgsList = append(pkgsList, p) pkgsList = append(pkgsList, p)
} }
} }
if len(pkgsList) == 0 { if len(pkgsList) == 0 {
return "unknown package manager" return "unknown package manager"
} }
return strings.Join(pkgsList[:], ", ") return strings.Join(pkgsList, ", ")
} }

View File

@ -15,6 +15,8 @@ import (
var id, prettyName string var id, prettyName string
const gpuCacheFile = "/tmp/gogofetch_gpu_cache"
func GetDist() (string, string) { func GetDist() (string, string) {
f, _ := os.Open("/etc/os-release") f, _ := os.Open("/etc/os-release")
defer func(f *os.File) { defer func(f *os.File) {
@ -96,10 +98,28 @@ func GetCpu() string {
return strings.TrimSpace(cpu) return strings.TrimSpace(cpu)
} }
func readGpuCache() (string, bool) {
data, err := os.ReadFile(gpuCacheFile)
if err != nil {
return "", false
}
return strings.TrimSpace(string(data)), true
}
func writeGpuCache(gpuData string) {
_ = os.WriteFile(gpuCacheFile, []byte(gpuData), 0644)
}
func GetGpu() string { func GetGpu() string {
if cached, ok := readGpuCache(); ok && cached != "" {
return cached
}
out, err := exec.Command("sh", "-c", `lspci -mm | awk -F'"' '$2=="VGA compatible controller" || $2=="3D controller" || $2=="Display controller"'`).Output() out, err := exec.Command("sh", "-c", `lspci -mm | awk -F'"' '$2=="VGA compatible controller" || $2=="3D controller" || $2=="Display controller"'`).Output()
if err != nil || len(out) == 0 { if err != nil || len(out) == 0 {
return "unknown GPU" result := "unknown GPU"
writeGpuCache(result)
return result
} }
lines := strings.Split(strings.TrimSpace(string(out)), "\n") lines := strings.Split(strings.TrimSpace(string(out)), "\n")
@ -118,10 +138,15 @@ func GetGpu() string {
} }
} }
var result string
if len(gpus) > 0 { if len(gpus) > 0 {
return strings.Join(gpus, " / ") result = strings.Join(gpus, " / ")
} else {
result = "GPU not found"
} }
return "GPU not found"
writeGpuCache(result)
return result
} }
func cleanGpuString(raw string) string { func cleanGpuString(raw string) string {