apps/blobs/tui_run.go 1.1 K raw
1
package main
2
3
import (
4
	"fmt"
5
	"os"
6
	"strings"
7
8
	tea "charm.land/bubbletea/v2"
9
)
10
11
type tuiOptions struct {
12
	Bucket string
13
	Prefix string
14
}
15
16
func parseTUIArgs(args []string) tuiOptions {
17
	var opts tuiOptions
18
	for i := 0; i < len(args); i++ {
19
		a := args[i]
20
		switch {
21
		case (a == "-b" || a == "--bucket") && i+1 < len(args):
22
			opts.Bucket = args[i+1]
23
			i++
24
		case strings.HasPrefix(a, "--bucket="):
25
			opts.Bucket = strings.TrimPrefix(a, "--bucket=")
26
		case a == "--prefix" && i+1 < len(args):
27
			opts.Prefix = args[i+1]
28
			i++
29
		case strings.HasPrefix(a, "--prefix="):
30
			opts.Prefix = strings.TrimPrefix(a, "--prefix=")
31
		}
32
	}
33
	return opts
34
}
35
36
func runTUI(args []string) {
37
	opts := parseTUIArgs(args)
38
	cfg, err := LoadClientConfig(ClientFlags{Bucket: opts.Bucket})
39
	if err != nil {
40
		fmt.Fprintln(os.Stderr, "config:", err)
41
		os.Exit(1)
42
	}
43
	s3, err := NewS3FromConfig(cfg)
44
	if err != nil {
45
		fmt.Fprintln(os.Stderr, "s3:", err)
46
		os.Exit(1)
47
	}
48
49
	m := newTUIModel(s3, cfg, opts)
50
	p := tea.NewProgram(m)
51
	if _, err := p.Run(); err != nil {
52
		fmt.Fprintln(os.Stderr, err)
53
		os.Exit(1)
54
	}
55
}