goroutines
This commit is contained in:
parent
abcbb0eed6
commit
3f892b6605
@ -6,6 +6,7 @@ import (
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func pathExists(path string) bool {
|
||||
@ -44,28 +45,46 @@ func getPmPackages(packagerName string, packagerPath string) string {
|
||||
}
|
||||
|
||||
func GetPkgs() string {
|
||||
rawPkgs := []string{
|
||||
getPmPackages("pacman", "/var/lib/pacman/local"),
|
||||
getPmPackages("apt", "/var/lib/apt"),
|
||||
getPmPackages("dnf", "/var/lib/dnf"),
|
||||
getPmPackages("zypper", "/var/lib/zypp"),
|
||||
getPmPackages("xbps", "/var/db/xbps"),
|
||||
getPmPackages("emerge", "/var/lib/portage"),
|
||||
getPmPackages("nix-user", "~/.nix-profile/lib/nix/profiles/per-user"),
|
||||
getPmPackages("nix", "/nix/store"),
|
||||
getPmPackages("apk", "/etc/apk/"),
|
||||
getPmPackages("flatpak", "/var/lib/flatpak/app"),
|
||||
managers := []struct {
|
||||
name, path string
|
||||
}{
|
||||
{"pacman", "/var/lib/pacman/local"},
|
||||
{"nix-user", "~/.nix-profile/lib/nix/profiles/per-user"},
|
||||
{"nix", "/nix/store"},
|
||||
{"apt", "/var/lib/apt"},
|
||||
{"dnf", "/var/lib/dnf"},
|
||||
{"zypper", "/var/lib/zypp"},
|
||||
{"xbps", "/var/db/xbps"},
|
||||
{"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
|
||||
for _, p := range rawPkgs {
|
||||
for _, p := range results {
|
||||
if p != "" {
|
||||
pkgsList = append(pkgsList, p)
|
||||
}
|
||||
}
|
||||
|
||||
if len(pkgsList) == 0 {
|
||||
return "unknown package manager"
|
||||
}
|
||||
|
||||
return strings.Join(pkgsList[:], ", ")
|
||||
return strings.Join(pkgsList, ", ")
|
||||
}
|
||||
|
||||
@ -15,6 +15,8 @@ import (
|
||||
|
||||
var id, prettyName string
|
||||
|
||||
const gpuCacheFile = "/tmp/gogofetch_gpu_cache"
|
||||
|
||||
func GetDist() (string, string) {
|
||||
f, _ := os.Open("/etc/os-release")
|
||||
defer func(f *os.File) {
|
||||
@ -96,10 +98,28 @@ func GetCpu() string {
|
||||
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 {
|
||||
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()
|
||||
if err != nil || len(out) == 0 {
|
||||
return "unknown GPU"
|
||||
result := "unknown GPU"
|
||||
writeGpuCache(result)
|
||||
return result
|
||||
}
|
||||
|
||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||
@ -118,10 +138,15 @@ func GetGpu() string {
|
||||
}
|
||||
}
|
||||
|
||||
var result string
|
||||
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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user