albums and artists playi
This commit is contained in:
parent
c6531354dd
commit
c9f75e1d2a
@ -42,6 +42,8 @@ type mainModel struct {
|
|||||||
client *spotify.Client
|
client *spotify.Client
|
||||||
mode string
|
mode string
|
||||||
playlist spotify.SimplePlaylist
|
playlist spotify.SimplePlaylist
|
||||||
|
artist spotify.SimpleArtist
|
||||||
|
album spotify.SimpleAlbum
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mainModel) Init() tea.Cmd {
|
func (m mainModel) Init() tea.Cmd {
|
||||||
@ -118,6 +120,26 @@ func HandleSetDevice(ctx *gctx.Context, client *spotify.Client, player spotify.P
|
|||||||
|
|
||||||
func (m *mainModel) LoadMoreItems() {
|
func (m *mainModel) LoadMoreItems() {
|
||||||
switch m.mode {
|
switch m.mode {
|
||||||
|
case "artist":
|
||||||
|
albums, err := commands.ArtistAlbums(m.ctx, m.client, m.artist.ID, (page + 1))
|
||||||
|
page++
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
items := []list.Item{}
|
||||||
|
for _, album := range albums.Albums {
|
||||||
|
items = append(items, mainItem{
|
||||||
|
Name: album.Name,
|
||||||
|
ID: album.ID,
|
||||||
|
Desc: fmt.Sprintf("%s by %s", album.AlbumType, album.Artists[0].Name),
|
||||||
|
SpotifyItem: album,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, item := range items {
|
||||||
|
m.list.InsertItem(len(m.list.Items())+1, item)
|
||||||
|
}
|
||||||
|
main_updates <- m
|
||||||
|
return
|
||||||
case "artists":
|
case "artists":
|
||||||
artists, err := commands.UserArtists(m.ctx, m.client, (page + 1))
|
artists, err := commands.UserArtists(m.ctx, m.client, (page + 1))
|
||||||
page++
|
page++
|
||||||
@ -138,6 +160,27 @@ func (m *mainModel) LoadMoreItems() {
|
|||||||
}
|
}
|
||||||
main_updates <- m
|
main_updates <- m
|
||||||
return
|
return
|
||||||
|
case "album":
|
||||||
|
tracks, err := commands.AlbumTracks(m.ctx, m.client, m.album.ID, (page + 1))
|
||||||
|
page++
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
items := []mainItem{}
|
||||||
|
for _, track := range tracks.Tracks {
|
||||||
|
items = append(items, mainItem{
|
||||||
|
Name: track.Name,
|
||||||
|
Artist: track.Artists[0],
|
||||||
|
Duration: track.TimeDuration().Round(time.Second).String(),
|
||||||
|
ID: track.ID,
|
||||||
|
Desc: track.Artists[0].Name + " - " + track.TimeDuration().Round(time.Second).String(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, item := range items {
|
||||||
|
m.list.InsertItem(len(m.list.Items())+1, item)
|
||||||
|
}
|
||||||
|
main_updates <- m
|
||||||
|
return
|
||||||
case "albums":
|
case "albums":
|
||||||
albums, err := commands.UserAlbums(m.ctx, m.client, (page + 1))
|
albums, err := commands.UserAlbums(m.ctx, m.client, (page + 1))
|
||||||
page++
|
page++
|
||||||
@ -316,8 +359,31 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.list.NewStatusMessage("Setting view to tracks")
|
m.list.NewStatusMessage("Setting view to tracks")
|
||||||
}
|
}
|
||||||
case "albums":
|
case "albums":
|
||||||
album := m.list.SelectedItem().(mainItem).SpotifyItem.(spotify.SimpleAlbum)
|
m.mode = "album"
|
||||||
m.list.NewStatusMessage("Opening " + album.Name)
|
m.album = m.list.SelectedItem().(mainItem).SpotifyItem.(spotify.SimpleAlbum)
|
||||||
|
m.list.NewStatusMessage("Opening " + m.album.Name)
|
||||||
|
new_items, err := AlbumTracksView(m.ctx, m.album.ID, m.client)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
return m, tea.Quit
|
||||||
|
}
|
||||||
|
m.list.SetItems(new_items)
|
||||||
|
m.list.ResetSelected()
|
||||||
|
case "artists":
|
||||||
|
m.mode = "albums"
|
||||||
|
m.artist = m.list.SelectedItem().(mainItem).SpotifyItem.(spotify.SimpleArtist)
|
||||||
|
m.list.NewStatusMessage("Opening " + m.artist.Name)
|
||||||
|
new_items, err := ArtistAlbumsView(m.ctx, m.artist.ID, m.client)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
return m, tea.Quit
|
||||||
|
}
|
||||||
|
m.list.SetItems(new_items)
|
||||||
|
m.list.ResetSelected()
|
||||||
|
case "album":
|
||||||
|
currentlyPlaying = m.list.SelectedItem().FilterValue()
|
||||||
|
m.list.NewStatusMessage("Playing " + currentlyPlaying)
|
||||||
|
go HandlePlay(m.ctx, m.client, &m.album.URI, m.list.Cursor()+(m.list.Paginator.Page*m.list.Paginator.TotalPages))
|
||||||
case "playlist":
|
case "playlist":
|
||||||
currentlyPlaying = m.list.SelectedItem().FilterValue()
|
currentlyPlaying = m.list.SelectedItem().FilterValue()
|
||||||
m.list.NewStatusMessage("Playing " + currentlyPlaying)
|
m.list.NewStatusMessage("Playing " + currentlyPlaying)
|
||||||
@ -471,6 +537,41 @@ func AlbumsView(ctx *gctx.Context, client *spotify.Client) ([]list.Item, error)
|
|||||||
return items, nil
|
return items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ArtistAlbumsView(ctx *gctx.Context, album spotify.ID, client *spotify.Client) ([]list.Item, error) {
|
||||||
|
items := []list.Item{}
|
||||||
|
albums, err := commands.ArtistAlbums(ctx, client, album, 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, album := range albums.Albums {
|
||||||
|
items = append(items, mainItem{
|
||||||
|
Name: album.Name,
|
||||||
|
ID: album.ID,
|
||||||
|
Desc: fmt.Sprintf("%s by %s", album.AlbumType, album.Artists[0].Name),
|
||||||
|
SpotifyItem: album,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return items, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func AlbumTracksView(ctx *gctx.Context, album spotify.ID, client *spotify.Client) ([]list.Item, error) {
|
||||||
|
items := []list.Item{}
|
||||||
|
tracks, err := commands.AlbumTracks(ctx, client, album, 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, track := range tracks.Tracks {
|
||||||
|
items = append(items, mainItem{
|
||||||
|
Name: track.Name,
|
||||||
|
Artist: track.Artists[0],
|
||||||
|
Duration: track.TimeDuration().Round(time.Second).String(),
|
||||||
|
ID: track.ID,
|
||||||
|
Desc: track.Artists[0].Name + " - " + track.TimeDuration().Round(time.Second).String(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return items, err
|
||||||
|
}
|
||||||
|
|
||||||
func SavedTracksView(ctx *gctx.Context, client *spotify.Client) ([]list.Item, error) {
|
func SavedTracksView(ctx *gctx.Context, client *spotify.Client) ([]list.Item, error) {
|
||||||
items := []list.Item{}
|
items := []list.Item{}
|
||||||
tracks, err := commands.TrackList(ctx, client, 1)
|
tracks, err := commands.TrackList(ctx, client, 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user