add settings dialog radio for saving queue locally or to server

This commit is contained in:
Drew Weymouth
2024-04-16 18:13:22 -07:00
parent 8eeb2aa53a
commit 63b0ab7374
4 changed files with 39 additions and 7 deletions
@@ -382,6 +382,9 @@ func (s *subsonicMediaProvider) GetLyrics(track *mediaprovider.Track) (*mediapro
// CanSavePlayQueue interface
func (s *subsonicMediaProvider) SavePlayQueue(trackIDs []string, currentTrackPos int, timeSeconds int) error {
if len(trackIDs) == 0 {
return nil // don't save an empty queue
}
return s.client.SavePlayQueue(trackIDs, map[string]string{
"current": trackIDs[currentTrackPos],
"position": strconv.Itoa(timeSeconds * 1000),
+3
View File
@@ -3,6 +3,7 @@ package backend
import (
"encoding/json"
"errors"
"log"
"os"
"github.com/dweymouth/supersonic/backend/mediaprovider"
@@ -64,6 +65,8 @@ func LoadPlayQueue(filepath string, sm *ServerManager, loadFromServer bool) (*Sa
TrackIndex: queue.TrackPos,
TimePos: float64(queue.TimePos),
}, nil
} else {
log.Printf("error loading queue from server: %v", err.Error())
}
}
+2 -1
View File
@@ -578,12 +578,13 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
curPlayer := c.App.PlaybackManager.CurrentPlayer()
_, isReplayGainPlayer := curPlayer.(player.ReplayGainPlayer)
_, isEqualizerPlayer := curPlayer.(*mpv.Player)
_, canSavePlayQueue := c.App.ServerManager.Server.(mediaprovider.CanSavePlayQueue)
isLocalPlayer := isEqualizerPlayer
bands := c.App.LocalPlayer.Equalizer().BandFrequencies()
dlg := dialogs.NewSettingsDialog(c.App.Config,
devs, themeFiles, bands,
c.App.ServerManager.Server.ClientDecidesScrobble(),
isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer,
isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer, canSavePlayQueue,
c.MainWindow)
dlg.OnReplayGainSettingsChanged = func() {
c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain)
+31 -6
View File
@@ -56,6 +56,7 @@ func NewSettingsDialog(
isLocalPlayer bool,
isReplayGainPlayer bool,
isEqualizerPlayer bool,
canSavePlayQueue bool,
window fyne.Window,
) *SettingsDialog {
s := &SettingsDialog{config: config, audioDevices: audioDeviceList, themeFiles: themeFileList, clientDecidesScrobble: clientDecidesScrobble}
@@ -66,14 +67,14 @@ func NewSettingsDialog(
var tabs *container.AppTabs
if isEqualizerPlayer {
tabs = container.NewAppTabs(
s.createGeneralTab(),
s.createGeneralTab(canSavePlayQueue),
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
s.createEqualizerTab(equalizerBands),
s.createExperimentalTab(window),
)
} else {
tabs = container.NewAppTabs(
s.createGeneralTab(),
s.createGeneralTab(canSavePlayQueue),
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
s.createExperimentalTab(window),
)
@@ -94,7 +95,7 @@ func NewSettingsDialog(
return s
}
func (s *SettingsDialog) createGeneralTab() *container.TabItem {
func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container.TabItem {
themeNames := []string{"Default"}
themeFileNames := []string{""}
i, selIndex := 1, 0
@@ -157,8 +158,32 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
})
systemTrayEnable.Checked = s.config.Application.EnableSystemTray
saveQueue := widget.NewCheckWithData("Save play queue on exit",
binding.BindBool(&s.config.Application.SavePlayQueue))
// save play queue settings
saveToServer := widget.NewRadioGroup([]string{"Locally", "To server"}, func(choice string) {
s.config.Application.SaveQueueToServer = choice == "To server"
})
saveToServer.Horizontal = true
if !s.config.Application.SavePlayQueue {
saveToServer.Disable()
}
saveToServer.Selected = "Locally"
if s.config.Application.SaveQueueToServer {
saveToServer.Selected = "To server"
}
saveQueue := widget.NewCheck("Save play queue on exit", func(save bool) {
s.config.Application.SavePlayQueue = save
if save && canSaveQueueToServer {
saveToServer.Enable()
} else if canSaveQueueToServer {
saveToServer.Disable()
}
})
saveQueue.Checked = s.config.Application.SavePlayQueue
saveQueueHBox := container.NewHBox(saveQueue)
if canSaveQueueToServer {
saveQueueHBox.Add(saveToServer)
}
trackNotif := widget.NewCheckWithData("Show notification on track change",
binding.BindBool(&s.config.Application.ShowTrackChangeNotification))
@@ -250,7 +275,7 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
widget.NewLabel("Startup page"), container.NewGridWithColumns(2, startupPage),
),
container.NewHBox(systemTrayEnable, closeToTray),
saveQueue,
saveQueueHBox,
trackNotif,
s.newSectionSeparator(),