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