summaryrefslogtreecommitdiff
path: root/actions.go
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-05-26 09:38:48 +0800
committereltrac <hi@eltr.ac>2026-05-26 09:38:48 +0800
commit4cec245383ab16656e1c5dcbbbe63350b57ab0ea (patch)
treead4453d4cbc904e060f9b93b77d199e7018b695d /actions.go
parent6ab2a444250bb79aed3f65917ef28d32e90e69eb (diff)
refactor: separate fetch/display logic from main.go
Diffstat (limited to 'actions.go')
-rw-r--r--actions.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/actions.go b/actions.go
new file mode 100644
index 0000000..81d0e63
--- /dev/null
+++ b/actions.go
@@ -0,0 +1,108 @@
+package main
+
+import (
+ "fmt"
+ "slices"
+ "sort"
+ "sync"
+
+ "github.com/fatih/color"
+)
+
+func fetchAndDisplay(pkgName string) *statistics {
+ fmt.Print("\033[s")
+ showLoadingPrompt(fmt.Sprintf("What the heck is \"%s\"", pkgName))
+
+ stat := initStat(pkgName)
+
+ fmlChan := make(chan *FormulaInfo)
+ caskChan := make(chan *CaskInfo)
+ rvsChan := make(chan []string)
+ fetchData(pkgName, fmlChan, caskChan, rvsChan)
+
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ var fml *FormulaInfo
+ var cask *CaskInfo
+ var rvs []string
+ remaining := 3
+ for remaining > 0 {
+ select {
+ case v := <-fmlChan:
+ fml = v
+ remaining--
+ case v := <-caskChan:
+ cask = v
+ remaining--
+ case v := <-rvsChan:
+ rvs = v
+ remaining--
+ }
+ fmt.Print("\033[u\033[J")
+ stat = NewStatistics(fml, cask, pkgName, rvs)
+ stat.Print()
+ }
+ }()
+ wg.Wait()
+
+ return stat
+}
+
+func initStat(pkgName string) *statistics {
+ if NoCache {
+ return &statistics{PkgName: pkgName}
+ }
+ stat := NewStatisticsFromCache(pkgName)
+ if stat == nil {
+ return &statistics{PkgName: pkgName}
+ }
+ return stat
+}
+
+func runList() error {
+ depmap := GetBrewDeps()
+ list := GetBrewList()
+
+ keys := []string{}
+ for k := range depmap {
+ if !slices.Contains(list, k) {
+ delete(depmap, k)
+ } else {
+ keys = append(keys, k)
+ }
+ }
+
+ if ListAscend {
+ sort.Slice(keys, func(i, j int) bool {
+ return len(depmap[keys[i]]) > len(depmap[keys[j]])
+ })
+ } else if ListDescend {
+ sort.Slice(keys, func(i, j int) bool {
+ return len(depmap[keys[i]]) < len(depmap[keys[j]])
+ })
+ } else {
+ sort.Strings(keys)
+ }
+
+ for _, pkg := range keys {
+ deps := depmap[pkg]
+ count := len(deps)
+
+ color.New(color.FgBlue).Printf("%s", pkg)
+ if count > 1 {
+ fmt.Printf(" (%d dependencies)\n", count)
+ } else {
+ fmt.Printf(" (%d dependency)\n", count)
+ }
+
+ if ListNoDep {
+ continue
+ }
+ for _, dep := range deps {
+ fmt.Printf(" ► %s\n", dep)
+ }
+ }
+ return nil
+}