aboutsummaryrefslogtreecommitdiff
path: root/src/page_artists.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/page_artists.go')
-rw-r--r--src/page_artists.go97
1 files changed, 92 insertions, 5 deletions
diff --git a/src/page_artists.go b/src/page_artists.go
index 6b6def6..c064785 100644
--- a/src/page_artists.go
+++ b/src/page_artists.go
@@ -1,15 +1,102 @@
1package src 1package src
2 2
3import "github.com/rivo/tview" 3import (
4 "fmt"
5 "time"
6
7 "github.com/gdamore/tcell/v2"
8 "github.com/rivo/tview"
9)
10
11type selection struct {
12 entryType string
13 id string
14}
4 15
5func artistsPage(a *app) tview.Primitive { 16func artistsPage(a *app) tview.Primitive {
6 grid := tview.NewGrid(). 17 grid := tview.NewGrid().
7 SetRows(1). 18 SetColumns(40, 0).
8 SetColumns(30, 0).
9 SetBorders(true) 19 SetBorders(true)
10 20
11 grid.AddItem(tview.NewTextView().SetText("Artist & Album list"), 0, 0, 1, 1, 0, 0, true) 21 root := tview.NewTreeNode("Subsonic server").SetColor(tcell.ColorYellow)
12 grid.AddItem(tview.NewTextView().SetText("Song list!"), 0, 1, 1, 2, 0, 0, false) 22 a.artistsTree = tview.NewTreeView().
23 SetRoot(root).
24 SetCurrentNode(root).
25 SetPrefixes([]string{"", " ", " "}).
26 SetSelectedFunc(func(node *tview.TreeNode) {
27 if node.GetReference() == nil {
28 return
29 }
30
31 sel := node.GetReference().(selection)
32 if sel.entryType == "artist" {
33 node.SetExpanded(!node.IsExpanded())
34 return
35 }
36
37 loadAlbumInPanel(a, sel.id)
38 a.tv.SetFocus(a.songsList)
39 })
40
41 a.songsList = tview.NewList()
42 a.songsList.ShowSecondaryText(false)
43
44 grid.AddItem(a.artistsTree, 0, 0, 1, 1, 0, 0, true)
45 grid.AddItem(a.songsList, 0, 1, 1, 2, 0, 0, false)
13 46
14 return grid 47 return grid
15} 48}
49
50func refreshArtists(a *app) error {
51 artistsID3, err := a.sub.GetArtists(nil)
52 if err != nil {
53 return err
54 }
55
56 a.artistsTree.GetRoot().ClearChildren()
57 for _, index := range artistsID3.Index {
58 for _, artist := range index.Artist {
59 node := tview.NewTreeNode(artist.Name)
60 node.SetReference(selection{"artist", artist.ID})
61 node.SetColor(tcell.ColorRed)
62 node.SetSelectable(true)
63 node.SetExpanded(false)
64
65 albums, err := a.sub.GetMusicDirectory(artist.ID)
66 if err != nil {
67 return err
68 }
69
70 for _, album := range albums.Child {
71 subnode := tview.NewTreeNode(album.Title)
72 subnode.SetReference(selection{"album", album.ID})
73 subnode.SetColor(tcell.ColorBlue)
74 subnode.SetSelectable(true)
75
76 node.AddChild(subnode)
77 }
78
79 a.artistsTree.GetRoot().AddChild(node)
80 }
81 }
82
83 a.artistsTree.GetRoot().SetExpanded(true)
84
85 return nil
86}
87
88func loadAlbumInPanel(a *app, id string) error {
89 album, err := a.sub.GetMusicDirectory(id)
90 if err != nil {
91 return err
92 }
93
94 a.songsList.SetTitle(album.Name)
95 a.songsList.Clear()
96 for _, song := range album.Child {
97 dur := time.Duration(song.Duration) * time.Second
98 a.songsList.AddItem(fmt.Sprintf("%-10s %d - %s", fmt.Sprintf("[%s]", dur.String()), song.Track, song.Title), "", 0, nil)
99 }
100
101 return nil
102}