create UpdateChecker background task + constants refactoring
This commit is contained in:
+28
-23
@@ -10,15 +10,14 @@ import (
|
||||
"supersonic/backend/util"
|
||||
"supersonic/player"
|
||||
"supersonic/sharedutil"
|
||||
"time"
|
||||
|
||||
"github.com/20after4/configdir"
|
||||
"github.com/zalando/go-keyring"
|
||||
)
|
||||
|
||||
const (
|
||||
AppName = "supersonic"
|
||||
configFile = "config.toml"
|
||||
LatestReleaseURL = "https://github.com/dweymouth/supersonic/releases/latest"
|
||||
configFile = "config.toml"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -32,21 +31,27 @@ type App struct {
|
||||
LibraryManager *LibraryManager
|
||||
PlaybackManager *PlaybackManager
|
||||
Player *player.Player
|
||||
UpdateChecker UpdateChecker
|
||||
|
||||
bgrndCtx context.Context
|
||||
cancel context.CancelFunc
|
||||
appName string
|
||||
appVersionTag string
|
||||
bgrndCtx context.Context
|
||||
cancel context.CancelFunc
|
||||
}
|
||||
|
||||
func StartupApp() (*App, error) {
|
||||
a := &App{}
|
||||
func StartupApp(appName, appVersionTag, latestReleaseURL string) (*App, error) {
|
||||
a := &App{appName: appName, appVersionTag: appVersionTag}
|
||||
a.bgrndCtx, a.cancel = context.WithCancel(context.Background())
|
||||
|
||||
log.Printf("Starting %s...", AppName)
|
||||
log.Printf("Using config dir: %s", configdir.LocalConfig(AppName))
|
||||
log.Printf("Using cache dir: %s", configdir.LocalCache(AppName))
|
||||
log.Printf("Starting %s...", appName)
|
||||
log.Printf("Using config dir: %s", configdir.LocalConfig(appName))
|
||||
log.Printf("Using cache dir: %s", configdir.LocalCache(appName))
|
||||
|
||||
a.readConfig()
|
||||
|
||||
a.UpdateChecker = NewUpdateChecker(appVersionTag, latestReleaseURL, &a.Config.Application.LastCheckedVersion)
|
||||
a.UpdateChecker.Start(a.bgrndCtx, 24*time.Hour)
|
||||
|
||||
if err := a.initMPV(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -63,10 +68,10 @@ func StartupApp() (*App, error) {
|
||||
PreampGain: a.Config.ReplayGain.PreampGainDB,
|
||||
})
|
||||
|
||||
a.ServerManager = NewServerManager()
|
||||
a.ServerManager = NewServerManager(appName)
|
||||
a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.Player, &a.Config.Scrobbling)
|
||||
a.LibraryManager = NewLibraryManager(a.ServerManager)
|
||||
a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, configdir.LocalCache(AppName))
|
||||
a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, configdir.LocalCache(a.appName))
|
||||
a.LibraryManager.PreCacheCoverFn = func(coverID string) {
|
||||
_, _ = a.ImageManager.GetAlbumThumbnail(coverID)
|
||||
}
|
||||
@@ -75,23 +80,23 @@ func StartupApp() (*App, error) {
|
||||
}
|
||||
|
||||
func (a *App) readConfig() {
|
||||
configdir.MakePath(configdir.LocalConfig(AppName))
|
||||
cfgPath := configPath()
|
||||
cfg, err := ReadConfigFile(cfgPath)
|
||||
configdir.MakePath(configdir.LocalConfig(a.appName))
|
||||
cfgPath := a.configPath()
|
||||
cfg, err := ReadConfigFile(cfgPath, a.appVersionTag)
|
||||
if err != nil {
|
||||
log.Printf("Error reading app config file: %v", err)
|
||||
cfg = DefaultConfig()
|
||||
cfg = DefaultConfig(a.appVersionTag)
|
||||
if _, err := os.Stat(cfgPath); err == nil {
|
||||
backupCfgName := fmt.Sprintf("%s.bak", configFile)
|
||||
log.Printf("Config file may be malformed: copying to %s", backupCfgName)
|
||||
_ = util.CopyFile(cfgPath, path.Join(configdir.LocalConfig(AppName), backupCfgName))
|
||||
_ = util.CopyFile(cfgPath, path.Join(configdir.LocalConfig(a.appName), backupCfgName))
|
||||
}
|
||||
}
|
||||
a.Config = cfg
|
||||
}
|
||||
|
||||
func (a *App) initMPV() error {
|
||||
p := player.NewWithClientName(AppName)
|
||||
p := player.NewWithClientName(a.appName)
|
||||
c := a.Config.LocalPlayback
|
||||
c.InMemoryCacheSizeMB = clamp(c.InMemoryCacheSizeMB, 10, 500)
|
||||
if err := p.Init(c.AudioExclusive, c.InMemoryCacheSizeMB); err != nil {
|
||||
@@ -101,12 +106,12 @@ func (a *App) initMPV() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *App) LoginToDefaultServer() error {
|
||||
func (a *App) LoginToDefaultServer(string) error {
|
||||
serverCfg := a.Config.GetDefaultServer()
|
||||
if serverCfg == nil {
|
||||
return ErrNoServers
|
||||
}
|
||||
pass, err := keyring.Get(AppName, serverCfg.ID.String())
|
||||
pass, err := keyring.Get(a.appName, serverCfg.ID.String())
|
||||
if err != nil {
|
||||
return fmt.Errorf("error reading keyring credentials: %v", err)
|
||||
}
|
||||
@@ -118,11 +123,11 @@ func (a *App) Shutdown() {
|
||||
a.Config.LocalPlayback.Volume = a.Player.GetVolume()
|
||||
a.cancel()
|
||||
a.Player.Destroy()
|
||||
a.Config.WriteConfigFile(configPath())
|
||||
a.Config.WriteConfigFile(a.configPath())
|
||||
}
|
||||
|
||||
func configPath() string {
|
||||
return path.Join(configdir.LocalConfig(AppName), configFile)
|
||||
func (a *App) configPath() string {
|
||||
return path.Join(configdir.LocalConfig(a.appName), configFile)
|
||||
}
|
||||
|
||||
func clamp(i, min, max int) int {
|
||||
|
||||
Reference in New Issue
Block a user