gospt/src/tui/loader.go

154 lines
3.9 KiB
Go
Raw Normal View History

2023-01-13 06:19:43 +00:00
package tui
import (
"fmt"
"time"
"github.com/charmbracelet/bubbles/list"
)
func (m *mainModel) LoadMoreItems() {
loading = true
defer func() {
2023-04-23 22:10:35 +00:00
page++
loading = false
}()
2023-01-13 06:19:43 +00:00
switch m.mode {
case "artist":
2023-02-17 22:08:25 +00:00
albums, err := m.commands.ArtistAlbums(m.ctx, m.artist.ID, (page + 1))
2023-01-13 06:19:43 +00:00
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":
2023-02-17 22:08:25 +00:00
artists, err := m.commands.UserArtists(m.ctx, (page + 1))
2023-01-13 06:19:43 +00:00
if err != nil {
return
}
items := []list.Item{}
for _, artist := range artists.Artists {
items = append(items, mainItem{
Name: artist.Name,
ID: artist.ID,
Desc: fmt.Sprintf("%d followers, genres: %s, popularity: %d", artist.Followers.Count, artist.Genres, artist.Popularity),
SpotifyItem: artist.SimpleArtist,
})
}
for _, item := range items {
m.list.InsertItem(len(m.list.Items())+1, item)
}
main_updates <- m
return
case "album":
2023-02-17 22:08:25 +00:00
tracks, err := m.commands.AlbumTracks(m.ctx, m.album.ID, (page + 1))
2023-01-13 06:19:43 +00:00
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":
2023-02-17 22:08:25 +00:00
albums, err := m.commands.UserAlbums(m.ctx, (page + 1))
2023-01-13 06:19:43 +00:00
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, %d tracks", album.Artists[0].Name, album.Tracks.Total),
SpotifyItem: album.SimpleAlbum,
})
}
for _, item := range items {
m.list.InsertItem(len(m.list.Items())+1, item)
}
main_updates <- m
return
case "main":
2023-02-17 22:08:25 +00:00
playlists, err := m.commands.Playlists(m.ctx, (page + 1))
2023-01-13 06:19:43 +00:00
if err != nil {
return
}
items := []list.Item{}
for _, playlist := range playlists.Playlists {
items = append(items, mainItem{
Name: playlist.Name,
Desc: playlist.Description,
SpotifyItem: playlist,
})
}
for _, item := range items {
m.list.InsertItem(len(m.list.Items())+1, item)
}
main_updates <- m
return
case "playlist":
2023-02-17 22:08:25 +00:00
tracks, err := m.commands.PlaylistTracks(m.ctx, m.playlist.ID, (page + 1))
2023-01-13 06:19:43 +00:00
if err != nil {
return
}
items := []mainItem{}
for _, track := range tracks.Tracks {
items = append(items, mainItem{
Name: track.Track.Name,
Artist: track.Track.Artists[0],
Duration: track.Track.TimeDuration().Round(time.Second).String(),
ID: track.Track.ID,
Desc: track.Track.Artists[0].Name + " - " + track.Track.TimeDuration().Round(time.Second).String(),
})
}
for _, item := range items {
m.list.InsertItem(len(m.list.Items())+1, item)
}
main_updates <- m
return
case "tracks":
2023-02-17 22:08:25 +00:00
tracks, err := m.commands.TrackList(m.ctx, (page + 1))
2023-01-13 06:19:43 +00:00
if err != nil {
return
}
items := []list.Item{}
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
}
}