1package spotify
2
3import (
4	"fmt"
5
6	"github.com/rivo/tview"
7	"github.com/sticreations/spotigopher/spotigopher"
8	"github.com/wtfutil/wtf/utils"
9	"github.com/wtfutil/wtf/view"
10)
11
12// A Widget represents a Spotify widget
13type Widget struct {
14	view.KeyboardWidget
15	view.TextWidget
16
17	client   spotigopher.SpotifyClient
18	settings *Settings
19	spotigopher.Info
20}
21
22// NewWidget creates a new instance of a widget
23func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget {
24	widget := Widget{
25		KeyboardWidget: view.NewKeyboardWidget(app, pages, settings.common),
26		TextWidget:     view.NewTextWidget(app, settings.common, true),
27
28		Info:   spotigopher.Info{},
29		client: spotigopher.NewClient(),
30
31		settings: settings,
32	}
33
34	widget.settings.common.RefreshInterval = 5
35
36	widget.initializeKeyboardControls()
37	widget.View.SetInputCapture(widget.InputCapture)
38
39	widget.View.SetWrap(true)
40	widget.View.SetWordWrap(true)
41
42	widget.KeyboardWidget.SetView(widget.View)
43
44	return &widget
45}
46
47func (w *Widget) refreshSpotifyInfos() error {
48	info, err := w.client.GetInfo()
49	w.Info = info
50	return err
51}
52
53func (w *Widget) Refresh() {
54	w.Redraw(w.createOutput)
55}
56
57func (widget *Widget) HelpText() string {
58	return widget.KeyboardWidget.HelpText()
59}
60
61func (w *Widget) createOutput() (string, string, bool) {
62	var content string
63	err := w.refreshSpotifyInfos()
64	if err != nil {
65		content = err.Error()
66	} else {
67		content = utils.CenterText(fmt.Sprintf("[green]Now %v [white]\n", w.Info.Status), w.CommonSettings().Width)
68		content += utils.CenterText(fmt.Sprintf("[green]Title:[white] %v\n ", w.Info.Title), w.CommonSettings().Width)
69		content += utils.CenterText(fmt.Sprintf("[green]Artist:[white] %v\n", w.Info.Artist), w.CommonSettings().Width)
70		content += utils.CenterText(fmt.Sprintf("[green]%v:[white] %v\n", w.Info.TrackNumber, w.Info.Album), w.CommonSettings().Width)
71	}
72	return w.CommonSettings().Title, content, true
73}
74