Fix #496: Persist repeat mode setting across restarts
This commit is contained in:
+9
-1
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user