diff --git a/internal/dl/dl.go b/internal/dl/dl.go index eb83f73..7c67ddb 100644 --- a/internal/dl/dl.go +++ b/internal/dl/dl.go @@ -25,6 +25,53 @@ type Download struct { Metadata bool } +func PipxUpgrade() error { + cmd := exec.Command("pipx", "upgrade-all") + + stdout, err := cmd.StdoutPipe() + if err != nil { + return fmt.Errorf("pipx upgrade stdout: %w", err) + } + + stderr, err := cmd.StderrPipe() + if err != nil { + return fmt.Errorf("pipx upgrade stderr: %w", err) + } + + log.Println("[pipx] running pipx upgrade-all") + + var wg sync.WaitGroup + wg.Add(2) + + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stdout) + for scanner.Scan() { + log.Printf("[pipx] %s\n", scanner.Text()) + } + }() + + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stderr) + for scanner.Scan() { + log.Printf("[pipx] %s\n", scanner.Text()) + } + }() + + if err := cmd.Start(); err != nil { + return fmt.Errorf("pipx upgrade start: %w", err) + } + + wg.Wait() + + if err := cmd.Wait(); err != nil { + return fmt.Errorf("pipx upgrade failed: %w", err) + } + + return nil +} + func Youtube(d Download, p config.Provider) { if p.Bgutil_server != "" && p.Po_token != "" { log.Fatal("please only provide bgutil_server OR po_token, not both") diff --git a/main.go b/main.go index 57b83d9..9daca10 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,10 @@ import ( ) func run(cfg config.Config) { + if err := dl.PipxUpgrade(); err != nil { + log.Fatalf("failed to upgrade pipx packages: %v", err) + } + provider := cfg.Provider["youtube"] opml, err := format.OpmlLoad(provider.Opml_file)