| 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 | } |