From b5f76fb321b80d173c8f561b3598819eab07cdb7 Mon Sep 17 00:00:00 2001 From: abs3nt Date: Sun, 16 Apr 2023 10:47:26 -0700 Subject: [PATCH] queue tracks, view queue, queue updates when open, hotkey clean up --- {src/cmd => cmd}/clearradio.go | 0 {src/cmd => cmd}/completion.go | 0 {src/cmd => cmd}/devices.go | 0 {src/cmd => cmd}/like.go | 0 {src/cmd => cmd}/link.go | 0 {src/cmd => cmd}/linkcontext.go | 0 {src/cmd => cmd}/mute.go | 0 {src/cmd => cmd}/next.go | 0 {src/cmd => cmd}/nowplaying.go | 0 {src/cmd => cmd}/pause.go | 0 {src/cmd => cmd}/play.go | 0 {src/cmd => cmd}/playurl.go | 0 {src/cmd => cmd}/previous.go | 0 {src/cmd => cmd}/radio.go | 0 {src/cmd => cmd}/refillradio.go | 0 {src/cmd => cmd}/repeat.go | 0 {src/cmd => cmd}/root.go | 0 {src/cmd => cmd}/seek.go | 0 {src/cmd => cmd}/setdevice.go | 0 {src/cmd => cmd}/shuffle.go | 0 {src/cmd => cmd}/status.go | 0 {src/cmd => cmd}/toggleplay.go | 0 {src/cmd => cmd}/tracks.go | 0 {src/cmd => cmd}/tui.go | 0 {src/cmd => cmd}/unlike.go | 0 {src/cmd => cmd}/unmute.go | 0 {src/cmd => cmd}/version.go | 0 {src/cmd => cmd}/volume.go | 0 {src/cmd => cmd}/youtube-link.go | 0 main.go | 2 +- src/tui/handlers.go | 7 +++++ src/tui/main.go | 54 ++++++++++++++++++++++++++------ 32 files changed, 53 insertions(+), 10 deletions(-) rename {src/cmd => cmd}/clearradio.go (100%) rename {src/cmd => cmd}/completion.go (100%) rename {src/cmd => cmd}/devices.go (100%) rename {src/cmd => cmd}/like.go (100%) rename {src/cmd => cmd}/link.go (100%) rename {src/cmd => cmd}/linkcontext.go (100%) rename {src/cmd => cmd}/mute.go (100%) rename {src/cmd => cmd}/next.go (100%) rename {src/cmd => cmd}/nowplaying.go (100%) rename {src/cmd => cmd}/pause.go (100%) rename {src/cmd => cmd}/play.go (100%) rename {src/cmd => cmd}/playurl.go (100%) rename {src/cmd => cmd}/previous.go (100%) rename {src/cmd => cmd}/radio.go (100%) rename {src/cmd => cmd}/refillradio.go (100%) rename {src/cmd => cmd}/repeat.go (100%) rename {src/cmd => cmd}/root.go (100%) rename {src/cmd => cmd}/seek.go (100%) rename {src/cmd => cmd}/setdevice.go (100%) rename {src/cmd => cmd}/shuffle.go (100%) rename {src/cmd => cmd}/status.go (100%) rename {src/cmd => cmd}/toggleplay.go (100%) rename {src/cmd => cmd}/tracks.go (100%) rename {src/cmd => cmd}/tui.go (100%) rename {src/cmd => cmd}/unlike.go (100%) rename {src/cmd => cmd}/unmute.go (100%) rename {src/cmd => cmd}/version.go (100%) rename {src/cmd => cmd}/volume.go (100%) rename {src/cmd => cmd}/youtube-link.go (100%) diff --git a/src/cmd/clearradio.go b/cmd/clearradio.go similarity index 100% rename from src/cmd/clearradio.go rename to cmd/clearradio.go diff --git a/src/cmd/completion.go b/cmd/completion.go similarity index 100% rename from src/cmd/completion.go rename to cmd/completion.go diff --git a/src/cmd/devices.go b/cmd/devices.go similarity index 100% rename from src/cmd/devices.go rename to cmd/devices.go diff --git a/src/cmd/like.go b/cmd/like.go similarity index 100% rename from src/cmd/like.go rename to cmd/like.go diff --git a/src/cmd/link.go b/cmd/link.go similarity index 100% rename from src/cmd/link.go rename to cmd/link.go diff --git a/src/cmd/linkcontext.go b/cmd/linkcontext.go similarity index 100% rename from src/cmd/linkcontext.go rename to cmd/linkcontext.go diff --git a/src/cmd/mute.go b/cmd/mute.go similarity index 100% rename from src/cmd/mute.go rename to cmd/mute.go diff --git a/src/cmd/next.go b/cmd/next.go similarity index 100% rename from src/cmd/next.go rename to cmd/next.go diff --git a/src/cmd/nowplaying.go b/cmd/nowplaying.go similarity index 100% rename from src/cmd/nowplaying.go rename to cmd/nowplaying.go diff --git a/src/cmd/pause.go b/cmd/pause.go similarity index 100% rename from src/cmd/pause.go rename to cmd/pause.go diff --git a/src/cmd/play.go b/cmd/play.go similarity index 100% rename from src/cmd/play.go rename to cmd/play.go diff --git a/src/cmd/playurl.go b/cmd/playurl.go similarity index 100% rename from src/cmd/playurl.go rename to cmd/playurl.go diff --git a/src/cmd/previous.go b/cmd/previous.go similarity index 100% rename from src/cmd/previous.go rename to cmd/previous.go diff --git a/src/cmd/radio.go b/cmd/radio.go similarity index 100% rename from src/cmd/radio.go rename to cmd/radio.go diff --git a/src/cmd/refillradio.go b/cmd/refillradio.go similarity index 100% rename from src/cmd/refillradio.go rename to cmd/refillradio.go diff --git a/src/cmd/repeat.go b/cmd/repeat.go similarity index 100% rename from src/cmd/repeat.go rename to cmd/repeat.go diff --git a/src/cmd/root.go b/cmd/root.go similarity index 100% rename from src/cmd/root.go rename to cmd/root.go diff --git a/src/cmd/seek.go b/cmd/seek.go similarity index 100% rename from src/cmd/seek.go rename to cmd/seek.go diff --git a/src/cmd/setdevice.go b/cmd/setdevice.go similarity index 100% rename from src/cmd/setdevice.go rename to cmd/setdevice.go diff --git a/src/cmd/shuffle.go b/cmd/shuffle.go similarity index 100% rename from src/cmd/shuffle.go rename to cmd/shuffle.go diff --git a/src/cmd/status.go b/cmd/status.go similarity index 100% rename from src/cmd/status.go rename to cmd/status.go diff --git a/src/cmd/toggleplay.go b/cmd/toggleplay.go similarity index 100% rename from src/cmd/toggleplay.go rename to cmd/toggleplay.go diff --git a/src/cmd/tracks.go b/cmd/tracks.go similarity index 100% rename from src/cmd/tracks.go rename to cmd/tracks.go diff --git a/src/cmd/tui.go b/cmd/tui.go similarity index 100% rename from src/cmd/tui.go rename to cmd/tui.go diff --git a/src/cmd/unlike.go b/cmd/unlike.go similarity index 100% rename from src/cmd/unlike.go rename to cmd/unlike.go diff --git a/src/cmd/unmute.go b/cmd/unmute.go similarity index 100% rename from src/cmd/unmute.go rename to cmd/unmute.go diff --git a/src/cmd/version.go b/cmd/version.go similarity index 100% rename from src/cmd/version.go rename to cmd/version.go diff --git a/src/cmd/volume.go b/cmd/volume.go similarity index 100% rename from src/cmd/volume.go rename to cmd/volume.go diff --git a/src/cmd/youtube-link.go b/cmd/youtube-link.go similarity index 100% rename from src/cmd/youtube-link.go rename to cmd/youtube-link.go diff --git a/main.go b/main.go index 9ff0a10..8ffa671 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "git.asdf.cafe/abs3nt/gospt/src/cmd" + "git.asdf.cafe/abs3nt/gospt/cmd" ) func main() { diff --git a/src/tui/handlers.go b/src/tui/handlers.go index 85ad868..5f789d2 100644 --- a/src/tui/handlers.go +++ b/src/tui/handlers.go @@ -99,6 +99,13 @@ func HandleSkipWithinContext(ctx *gctx.Context, commands *commands.Commands, amt } } +func HandleQueueItem(ctx *gctx.Context, commands *commands.Commands, item spotify.ID) { + err := commands.QueueSong(ctx, item) + if err != nil { + return + } +} + func HandleSetDevice(ctx *gctx.Context, commands *commands.Commands, player spotify.PlayerDevice) { err := commands.SetDevice(ctx, player) if err != nil { diff --git a/src/tui/main.go b/src/tui/main.go index f037832..861aab2 100644 --- a/src/tui/main.go +++ b/src/tui/main.go @@ -242,6 +242,35 @@ func (m *mainModel) CopyToClipboard() error { return nil } +func (m *mainModel) QueueItem() error { + switch item := m.list.SelectedItem().(mainItem).SpotifyItem.(type) { + case spotify.PlaylistTrack: + go HandleQueueItem(m.ctx, m.commands, item.Track.ID) + case spotify.SavedTrack: + go HandleQueueItem(m.ctx, m.commands, item.ID) + case spotify.SimpleTrack: + go HandleQueueItem(m.ctx, m.commands, item.ID) + case spotify.FullTrack: + go HandleQueueItem(m.ctx, m.commands, item.ID) + case *spotify.FullTrack: + go HandleQueueItem(m.ctx, m.commands, item.ID) + case *spotify.SimpleTrack: + go HandleQueueItem(m.ctx, m.commands, item.ID) + case *spotify.SimplePlaylist: + go HandleQueueItem(m.ctx, m.commands, item.ID) + } + if m.mode == Queue { + go func() { + new_items, err := QueueView(m.ctx, m.commands) + if err != nil { + return + } + m.list.SetItems(new_items) + }() + } + return nil +} + func (m *mainModel) SelectItem() error { switch m.mode { case Queue: @@ -630,9 +659,14 @@ func (m *mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.list.ResetSelected() return m, msg } - + if msg.String() == "ctrl+@" || msg.String() == "ctrl+p" { + err := m.QueueItem() + if err != nil { + return m, tea.Quit + } + } // select item - if msg.String() == "enter" || msg.String() == "spacebar" { + if msg.String() == "enter" || msg.String() == " " || msg.String() == "p" { err := m.SelectItem() if err != nil { return m, tea.Quit @@ -697,27 +731,29 @@ func InitMain(ctx *gctx.Context, c *commands.Commands, mode Mode) (tea.Model, er go m.TickPlayback() Tick() m.list.DisableQuitKeybindings() + m.list.SetFilteringEnabled(false) m.list.AdditionalShortHelpKeys = func() []key.Binding { return []key.Binding{ - key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "back")), - key.NewBinding(key.WithKeys("s"), key.WithHelp("s", "search")), - key.NewBinding(key.WithKeys("ctrl+c"), key.WithHelp("ctrl+c", "quit")), - key.NewBinding(key.WithKeys("ctrl"+"r"), key.WithHelp("ctrl+r", "start radio")), - key.NewBinding(key.WithKeys("ctrl"+"shift"+"c"), key.WithHelp("ctrl+shift+c", "copy url")), + key.NewBinding(key.WithKeys("q"), key.WithHelp("q", "back")), + key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "select")), + key.NewBinding(key.WithKeys("/"), key.WithHelp("/", "search")), + key.NewBinding(key.WithKeys("ctrl"+"r"), key.WithHelp("ctrl+r", "radio")), + key.NewBinding(key.WithKeys("ctrl"+"p"), key.WithHelp("ctrl+p", "queue")), key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "select device")), } } m.list.AdditionalFullHelpKeys = func() []key.Binding { return []key.Binding{ key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "back")), - key.NewBinding(key.WithKeys("s"), key.WithHelp("s", "search")), + key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "select")), + key.NewBinding(key.WithKeys("/"), key.WithHelp("/", "search")), key.NewBinding(key.WithKeys(">"), key.WithHelp(">", "seek forward")), key.NewBinding(key.WithKeys("<"), key.WithHelp("<", "seek backward")), key.NewBinding(key.WithKeys("+"), key.WithHelp("+", "volume up")), key.NewBinding(key.WithKeys("-"), key.WithHelp("-", "volume down")), key.NewBinding(key.WithKeys("ctrl+c"), key.WithHelp("ctrl+c", "quit")), key.NewBinding(key.WithKeys("ctrl"+"r"), key.WithHelp("ctrl+r", "start radio")), - key.NewBinding(key.WithKeys("ctrl"+"shift"+"c"), key.WithHelp("ctrl+shift+c", "copy url")), + key.NewBinding(key.WithKeys("ctrl"+"p"), key.WithHelp("ctrl+p", "queue song")), key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "select device")), } }