diff --git a/cmd/root.go b/cmd/root.go index da2424b..4b716ea 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -8,7 +8,8 @@ import ( "os" "codeberg.org/danjones000/strip-beats/app" - "codeberg.org/danjones000/strip-beats/input/boolean" + // "codeberg.org/danjones000/strip-beats/input/boolean" + "codeberg.org/danjones000/strip-beats/input/list" "github.com/spf13/cobra" ) @@ -19,14 +20,28 @@ var rootCmd = &cobra.Command{ // Uncomment the following line if your bare application // has an action associated with it: Run: func(cmd *cobra.Command, args []string) { - out := app.PickFileWithConf() - fmt.Printf("%+v\n", out) - // media.Watch(out.Format.Path) - show := boolean.Choose("Show stream?") - if show { - stream := out.WantedAudioStream() - fmt.Printf("Stream %d of %s: %+v\n", stream.Index, out.Format.Path, stream) - } + opt := list.List([]list.Option{ + list.SimpleItem("Yes", "", 'y'), + list.SimpleItem("No", "", 'n'), + list.SimpleItem("Maybe", "perhaps", 'm'), + }, nil) + fmt.Printf("%+v\n", opt) + // out := app.PickFileWithConf() + out := app.SetFile("/home/drj/nothing.mkv") + fmt.Println("first", out.Format.Path) + // tmp, _ := os.CreateTemp("", "audio.*.mka") + // defer os.Remove(tmp.Name()) + // fmt.Println("temp", tmp.Name()) + app.Finish() + /* + fmt.Printf("%+v\n", out) + // media.Watch(out.Format.Path) + show := boolean.Choose("Show stream?") + if show { + stream := out.WantedAudioStream() + fmt.Printf("Stream %d of %s: %+v\n", stream.Index, out.Format.Path, stream) + } + */ }, } diff --git a/input/list/list.go b/input/list/list.go new file mode 100644 index 0000000..2e53d7f --- /dev/null +++ b/input/list/list.go @@ -0,0 +1,66 @@ +package list + +import "github.com/rivo/tview" + +type Option interface { + Title() string + Text() string + Rune() rune + Selected() func() +} + +type opt struct { + tit string + t string + r rune +} + +func (o opt) Title() string { + return o.tit +} + +func (o opt) Text() string { + return o.t +} + +func (o opt) Rune() rune { + return o.r +} + +func (o opt) Selected() func() { + return nil +} + +func SimpleItem(title, text string, char rune) Option { + return opt{title, text, char} +} + +func List(items []Option, cb func(*tview.List)) Option { + if len(items) == 0 { + return opt{} + } + + var index int + + app := tview.NewApplication() + list := tview.NewList() + for _, item := range items { + list.AddItem(item.Title(), item.Text(), item.Rune(), item.Selected()) + } + list.Box.SetBorder(true) //.SetTitle(title) + + if cb != nil { + cb(list) + } + + list.SetSelectedFunc(func(idx int, _ string, _ string, _ rune) { + index = idx + app.Stop() + }) + + if err := app.SetRoot(list, false).EnableMouse(true).Run(); err != nil { + panic(err) + } + + return items[index] +}