You've already forked img-proxy-url-generator
127 lines
2.8 KiB
Go
127 lines
2.8 KiB
Go
package interactive
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/charmbracelet/bubbles/key"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/huh"
|
|
"github.com/siteworxpro/img-proxy-url-generator/config"
|
|
"github.com/siteworxpro/img-proxy-url-generator/generator"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
type Model struct {
|
|
Fields []huh.Field
|
|
generator *generator.Generator
|
|
url *string
|
|
format *generator.Format
|
|
selectedParams *[]UrlParam
|
|
err error
|
|
focusField huh.Field
|
|
inParamsFields bool
|
|
}
|
|
|
|
type UrlParam interface {
|
|
value() string
|
|
display() string
|
|
key() string
|
|
Input() huh.Field
|
|
}
|
|
|
|
func InitialModel(c *cli.Context) Model {
|
|
|
|
m := Model{
|
|
url: aws.String(""),
|
|
selectedParams: &[]UrlParam{},
|
|
format: generator.ToPtr(generator.DEF),
|
|
}
|
|
|
|
fields := make([]huh.Field, 0)
|
|
fields = append(fields, m.initialFields()...)
|
|
|
|
m.Fields = fields
|
|
|
|
cfg, _ := config.NewConfig(c.String("config"))
|
|
|
|
if cfg == nil {
|
|
err := fmt.Errorf("config not loaded")
|
|
m.err = err
|
|
|
|
return m
|
|
}
|
|
|
|
g, err := generator.NewGenerator(cfg)
|
|
|
|
if err != nil {
|
|
m.err = err
|
|
return m
|
|
}
|
|
|
|
m.generator = g
|
|
|
|
return m
|
|
}
|
|
|
|
func (m Model) initialFields() []huh.Field {
|
|
|
|
fields := make([]huh.Field, 0)
|
|
|
|
options := []UrlParam{
|
|
NewHeight(),
|
|
NewWidth(),
|
|
}
|
|
|
|
var huhOptions []huh.Option[UrlParam]
|
|
for _, option := range options {
|
|
huhOptions = append(huhOptions, huh.NewOption[UrlParam](option.display(), option))
|
|
}
|
|
|
|
fields = append(fields,
|
|
huh.NewInput().
|
|
Key("imgUrl").
|
|
Description("The URL of the image to generate a proxy for.").
|
|
Title("Image URL").
|
|
Value(m.url).
|
|
Prompt("Enter the image URL:"),
|
|
)
|
|
fields = append(fields,
|
|
huh.NewMultiSelect[UrlParam]().
|
|
Description("Params to add to the URL.").
|
|
Options(huhOptions...).
|
|
Value(m.selectedParams).
|
|
WithKeyMap(&huh.KeyMap{
|
|
MultiSelect: huh.MultiSelectKeyMap{
|
|
Up: key.NewBinding(key.WithKeys("up"), key.WithHelp("up", "up")),
|
|
Down: key.NewBinding(key.WithKeys("down"), key.WithHelp("down", "down")),
|
|
Toggle: key.NewBinding(key.WithKeys(" "), key.WithHelp(" ", "toggle")),
|
|
},
|
|
}),
|
|
)
|
|
|
|
fields = append(fields, huh.NewSelect[generator.Format]().
|
|
Description("Convert the image format.").
|
|
Options(
|
|
huh.NewOption[generator.Format]("JPEG", generator.JPG),
|
|
huh.NewOption[generator.Format]("PNG", generator.PNG),
|
|
huh.NewOption[generator.Format]("BMP", generator.BMP),
|
|
huh.NewOption[generator.Format]("Default", generator.DEF),
|
|
).
|
|
Key("format").
|
|
Title("Format").
|
|
Value(m.format).
|
|
WithKeyMap(&huh.KeyMap{
|
|
Select: huh.SelectKeyMap{
|
|
Up: key.NewBinding(key.WithKeys("up"), key.WithHelp("up", "up")),
|
|
Down: key.NewBinding(key.WithKeys("down"), key.WithHelp("down", "down")),
|
|
},
|
|
}),
|
|
)
|
|
|
|
return fields
|
|
}
|
|
|
|
func (m Model) Init() tea.Cmd {
|
|
return nil
|
|
}
|