Fix #496: Persist repeat mode setting across restarts

This commit is contained in:
Drew Weymouth
2025-01-01 14:23:02 -08:00
parent 16d8cb4a58
commit 6572e74aa8
8 changed files with 46 additions and 8 deletions
+9 -1
View File
@@ -119,7 +119,7 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
}
a.ServerManager = NewServerManager(appName, appVersion, a.Config, !portableMode /*use keyring*/)
a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.LocalPlayer, &a.Config.Scrobbling, &a.Config.Transcoding, &a.Config.Application)
a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.LocalPlayer, &a.Config.Playback, &a.Config.Scrobbling, &a.Config.Transcoding, &a.Config.Application)
a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, cacheDir)
a.Config.Application.MaxImageCacheSizeMB = clamp(a.Config.Application.MaxImageCacheSizeMB, 1, 500)
a.ImageManager.SetMaxOnDiskCacheSizeBytes(int64(a.Config.Application.MaxImageCacheSizeMB) * 1_048_576)
@@ -336,6 +336,14 @@ func (a *App) DeleteServerCacheDir(serverID uuid.UUID) error {
}
func (a *App) Shutdown() {
repeatMode := "None"
switch a.PlaybackManager.GetLoopMode() {
case LoopOne:
repeatMode = "One"
case LoopAll:
repeatMode = "All"
}
a.Config.Playback.RepeatMode = repeatMode
a.Config.LocalPlayback.Volume = a.LocalPlayer.GetVolume()
a.SavePlayQueueIfEnabled()
a.SaveConfigFile()
+8
View File
@@ -98,6 +98,10 @@ type NowPlayingPageConfig struct {
InitialView string
}
type PlaybackConfig struct {
RepeatMode string
}
type LocalPlaybackConfig struct {
AudioDeviceName string
AudioExclusive bool
@@ -146,6 +150,7 @@ type Config struct {
PlaylistsPage PlaylistsPageConfig
TracksPage TracksPageConfig
NowPlayingConfig NowPlayingPageConfig
Playback PlaybackConfig
LocalPlayback LocalPlaybackConfig
Scrobbling ScrobbleConfig
ReplayGain ReplayGainConfig
@@ -209,6 +214,9 @@ func DefaultConfig(appVersionTag string) *Config {
TracksPage: TracksPageConfig{
TracklistColumns: []string{"Album", "Time", "Plays"},
},
Playback: PlaybackConfig{
RepeatMode: "None",
},
LocalPlayback: LocalPlaybackConfig{
// "auto" is the name to pass to MPV for autoselecting the output device
AudioDeviceName: "auto",
+7
View File
@@ -78,6 +78,7 @@ func NewPlaybackEngine(
ctx context.Context,
s *ServerManager,
p player.BasePlayer,
playbackCfg *PlaybackConfig,
scrobbleCfg *ScrobbleConfig,
transcodeCfg *TranscodingConfig,
) *playbackEngine {
@@ -92,6 +93,12 @@ func NewPlaybackEngine(
nowPlayingIdx: -1,
wasStopped: true,
}
switch playbackCfg.RepeatMode {
case "All":
pm.loopMode = LoopAll
case "One":
pm.loopMode = LoopOne
}
p.OnTrackChange(pm.handleOnTrackChange)
p.OnSeek(func() {
pm.doUpdateTimePos(true)
+2 -1
View File
@@ -25,11 +25,12 @@ func NewPlaybackManager(
ctx context.Context,
s *ServerManager,
p player.BasePlayer,
playbackCfg *PlaybackConfig,
scrobbleCfg *ScrobbleConfig,
transcodeCfg *TranscodingConfig,
appCfg *AppConfig,
) *PlaybackManager {
e := NewPlaybackEngine(ctx, s, p, scrobbleCfg, transcodeCfg)
e := NewPlaybackEngine(ctx, s, p, playbackCfg, scrobbleCfg, transcodeCfg)
q := NewCommandQueue()
pm := &PlaybackManager{
engine: e,