albums and artists playi

This commit is contained in:
abs3nt 2023-01-12 19:27:05 -08:00
parent c6531354dd
commit c9f75e1d2a
1 changed files with 103 additions and 2 deletions

View File

@ -42,6 +42,8 @@ type mainModel struct {
client *spotify.Client
mode string
playlist spotify.SimplePlaylist
artist spotify.SimpleArtist
album spotify.SimpleAlbum
}
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() {
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":
artists, err := commands.UserArtists(m.ctx, m.client, (page + 1))
page++
@ -138,6 +160,27 @@ func (m *mainModel) LoadMoreItems() {
}
main_updates <- m
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":
albums, err := commands.UserAlbums(m.ctx, m.client, (page + 1))
page++
@ -316,8 +359,31 @@ func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.list.NewStatusMessage("Setting view to tracks")
}
case "albums":
album := m.list.SelectedItem().(mainItem).SpotifyItem.(spotify.SimpleAlbum)
m.list.NewStatusMessage("Opening " + album.Name)
m.mode = "album"
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":
currentlyPlaying = m.list.SelectedItem().FilterValue()
m.list.NewStatusMessage("Playing " + currentlyPlaying)
@ -471,6 +537,41 @@ func AlbumsView(ctx *gctx.Context, client *spotify.Client) ([]list.Item, error)
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) {
items := []list.Item{}
tracks, err := commands.TrackList(ctx, client, 1)