74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"supersonic/backend"
|
|
"supersonic/player"
|
|
"supersonic/ui"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/app"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/layout"
|
|
"github.com/20after4/configdir"
|
|
"github.com/dweymouth/go-subsonic"
|
|
)
|
|
|
|
const (
|
|
appname = "supersonic"
|
|
configFile = "config.toml"
|
|
)
|
|
|
|
func main() {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
p := player.NewWithClientName(appname)
|
|
if err := p.Init(); err != nil {
|
|
log.Fatalf("failed to initialize mpv player: %s", err.Error())
|
|
}
|
|
|
|
myApp := app.New()
|
|
myWindow := myApp.NewWindow(appname)
|
|
|
|
b := ui.NewBottomPanel(p)
|
|
c := container.NewBorder(nil, b, nil, nil, &layout.Spacer{})
|
|
|
|
myWindow.SetContent(c)
|
|
myWindow.Resize(fyne.NewSize(1000, 800))
|
|
myWindow.Show()
|
|
|
|
s := &subsonic.Client{
|
|
Client: &http.Client{},
|
|
BaseUrl: "***REMOVED***",
|
|
User: "drew",
|
|
ClientName: appname,
|
|
}
|
|
|
|
if err := s.Authenticate("***REMOVED***"); err != nil {
|
|
fmt.Printf("error authenticating: %v\n", err)
|
|
}
|
|
|
|
lm := backend.NewLibraryManager(s)
|
|
pm := backend.NewPlaybackManager(ctx, s, p)
|
|
im := backend.NewImageManager(s, configdir.LocalCache(appname, "covers"))
|
|
b.ImageManager = im
|
|
|
|
b.SetPlaybackManager(pm)
|
|
pm.OnSongChange(func(song *subsonic.Child) {
|
|
if song == nil {
|
|
myWindow.SetTitle("gomuse")
|
|
return
|
|
}
|
|
myWindow.SetTitle(song.Title)
|
|
})
|
|
|
|
ag := ui.NewAlbumGrid(lm.RecentlyAddedIter(), pm, im)
|
|
myWindow.SetContent(container.NewBorder(nil, b, nil, nil, ag))
|
|
myApp.Run()
|
|
cancel()
|
|
p.Destroy()
|
|
}
|