From 4cec245383ab16656e1c5dcbbbe63350b57ab0ea Mon Sep 17 00:00:00 2001 From: eltrac Date: Tue, 26 May 2026 09:38:48 +0800 Subject: refactor: separate fetch/display logic from main.go --- actions.go | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 actions.go (limited to 'actions.go') 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 +} -- cgit v1.2.3