From a83e21d7ea92a3d613da81c170f856725cd1b9b5 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 19 Feb 2023 14:19:31 -0800 Subject: [PATCH] remember volume setting across restarts --- backend/app.go | 13 +++++++++++++ backend/config.go | 8 ++++++++ main.go | 1 - ui/bottompanel.go | 2 +- ui/widgets/auxcontrols.go | 10 +++++----- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/backend/app.go b/backend/app.go index 285d7c7..84551b3 100644 --- a/backend/app.go +++ b/backend/app.go @@ -46,6 +46,8 @@ func StartupApp() (*App, error) { if err := a.initMPV(); err != nil { return nil, err } + a.Config.LocalPlayback.Volume = clamp(a.Config.LocalPlayback.Volume, 0, 100) + a.Player.SetVolume(a.Config.LocalPlayback.Volume) a.ServerManager = NewServerManager() a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.Player) @@ -91,10 +93,21 @@ func (a *App) LoginToDefaultServer() error { func (a *App) Shutdown() { a.Player.Stop() + a.Config.LocalPlayback.Volume = a.Player.GetVolume() a.cancel() a.Player.Destroy() + a.Config.WriteConfigFile(configPath()) } func configPath() string { return path.Join(configdir.LocalConfig(AppName), configFile) } + +func clamp(i, min, max int) int { + if i < min { + i = min + } else if i > max { + i = max + } + return i +} diff --git a/backend/config.go b/backend/config.go index ea77b01..da153be 100644 --- a/backend/config.go +++ b/backend/config.go @@ -32,12 +32,17 @@ type PlaylistPageConfig struct { TracklistColumns []string } +type LocalPlaybackConfig struct { + Volume int +} + type Config struct { Application AppConfig Servers []*ServerConfig AlbumPage AlbumPageConfig NowPlayingPage NowPlayingPageConfig PlaylistPage PlaylistPageConfig + LocalPlayback LocalPlaybackConfig } func DefaultConfig() *Config { @@ -55,6 +60,9 @@ func DefaultConfig() *Config { PlaylistPage: PlaylistPageConfig{ TracklistColumns: []string{"Artist", "Album", "Time", "Plays"}, }, + LocalPlayback: LocalPlaybackConfig{ + Volume: 100, + }, } } diff --git a/main.go b/main.go index d4c6974..203b9ea 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,5 @@ func main() { fyneApp.Run() // shutdown tasks - myApp.Config.WriteConfigFile(configPath()) myApp.Shutdown() } diff --git a/ui/bottompanel.go b/ui/bottompanel.go index 6e60aaa..b21561a 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -64,7 +64,7 @@ func NewBottomPanel(p *player.Player, nav func(browsing.Route)) *BottomPanel { p.Seek(fmt.Sprintf("%d", int(f*100)), player.SeekAbsolutePercent) }) - bp.AuxControls = widgets.NewAuxControls() + bp.AuxControls = widgets.NewAuxControls(p.GetVolume()) bp.AuxControls.VolumeControl.OnVolumeChanged = func(v int) { _ = p.SetVolume(v) } diff --git a/ui/widgets/auxcontrols.go b/ui/widgets/auxcontrols.go index e794068..1168a8e 100644 --- a/ui/widgets/auxcontrols.go +++ b/ui/widgets/auxcontrols.go @@ -17,9 +17,9 @@ type AuxControls struct { container *fyne.Container } -func NewAuxControls() *AuxControls { +func NewAuxControls(initialVolume int) *AuxControls { a := &AuxControls{ - VolumeControl: NewVolumeControl(), + VolumeControl: NewVolumeControl(initialVolume), } a.container = container.NewHBox(layout.NewSpacer(), a.VolumeControl) return a @@ -97,16 +97,16 @@ type VolumeControl struct { container *fyne.Container } -func NewVolumeControl() *VolumeControl { +func NewVolumeControl(initialVol int) *VolumeControl { v := &VolumeControl{} v.ExtendBaseWidget(v) v.icon = newTappableIcon(theme.VolumeUpIcon()) v.icon.OnTapped = v.toggleMute v.slider = NewVolumeSlider(100) - v.lastVol = 100 + v.lastVol = initialVol v.slider.Step = 1 v.slider.Orientation = widget.Horizontal - v.slider.Value = 100 + v.slider.Value = float64(v.lastVol) v.slider.OnChanged = v.onChanged v.container = container.NewHBox(container.NewCenter(v.icon), v.slider) return v