add settings dialog radio for saving queue locally or to server
This commit is contained in:
@@ -382,6 +382,9 @@ func (s *subsonicMediaProvider) GetLyrics(track *mediaprovider.Track) (*mediapro
|
|||||||
// CanSavePlayQueue interface
|
// CanSavePlayQueue interface
|
||||||
|
|
||||||
func (s *subsonicMediaProvider) SavePlayQueue(trackIDs []string, currentTrackPos int, timeSeconds int) error {
|
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{
|
return s.client.SavePlayQueue(trackIDs, map[string]string{
|
||||||
"current": trackIDs[currentTrackPos],
|
"current": trackIDs[currentTrackPos],
|
||||||
"position": strconv.Itoa(timeSeconds * 1000),
|
"position": strconv.Itoa(timeSeconds * 1000),
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package backend
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
||||||
@@ -64,6 +65,8 @@ func LoadPlayQueue(filepath string, sm *ServerManager, loadFromServer bool) (*Sa
|
|||||||
TrackIndex: queue.TrackPos,
|
TrackIndex: queue.TrackPos,
|
||||||
TimePos: float64(queue.TimePos),
|
TimePos: float64(queue.TimePos),
|
||||||
}, nil
|
}, nil
|
||||||
|
} else {
|
||||||
|
log.Printf("error loading queue from server: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -578,12 +578,13 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
|
|||||||
curPlayer := c.App.PlaybackManager.CurrentPlayer()
|
curPlayer := c.App.PlaybackManager.CurrentPlayer()
|
||||||
_, isReplayGainPlayer := curPlayer.(player.ReplayGainPlayer)
|
_, isReplayGainPlayer := curPlayer.(player.ReplayGainPlayer)
|
||||||
_, isEqualizerPlayer := curPlayer.(*mpv.Player)
|
_, isEqualizerPlayer := curPlayer.(*mpv.Player)
|
||||||
|
_, canSavePlayQueue := c.App.ServerManager.Server.(mediaprovider.CanSavePlayQueue)
|
||||||
isLocalPlayer := isEqualizerPlayer
|
isLocalPlayer := isEqualizerPlayer
|
||||||
bands := c.App.LocalPlayer.Equalizer().BandFrequencies()
|
bands := c.App.LocalPlayer.Equalizer().BandFrequencies()
|
||||||
dlg := dialogs.NewSettingsDialog(c.App.Config,
|
dlg := dialogs.NewSettingsDialog(c.App.Config,
|
||||||
devs, themeFiles, bands,
|
devs, themeFiles, bands,
|
||||||
c.App.ServerManager.Server.ClientDecidesScrobble(),
|
c.App.ServerManager.Server.ClientDecidesScrobble(),
|
||||||
isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer,
|
isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer, canSavePlayQueue,
|
||||||
c.MainWindow)
|
c.MainWindow)
|
||||||
dlg.OnReplayGainSettingsChanged = func() {
|
dlg.OnReplayGainSettingsChanged = func() {
|
||||||
c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain)
|
c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ func NewSettingsDialog(
|
|||||||
isLocalPlayer bool,
|
isLocalPlayer bool,
|
||||||
isReplayGainPlayer bool,
|
isReplayGainPlayer bool,
|
||||||
isEqualizerPlayer bool,
|
isEqualizerPlayer bool,
|
||||||
|
canSavePlayQueue bool,
|
||||||
window fyne.Window,
|
window fyne.Window,
|
||||||
) *SettingsDialog {
|
) *SettingsDialog {
|
||||||
s := &SettingsDialog{config: config, audioDevices: audioDeviceList, themeFiles: themeFileList, clientDecidesScrobble: clientDecidesScrobble}
|
s := &SettingsDialog{config: config, audioDevices: audioDeviceList, themeFiles: themeFileList, clientDecidesScrobble: clientDecidesScrobble}
|
||||||
@@ -66,14 +67,14 @@ func NewSettingsDialog(
|
|||||||
var tabs *container.AppTabs
|
var tabs *container.AppTabs
|
||||||
if isEqualizerPlayer {
|
if isEqualizerPlayer {
|
||||||
tabs = container.NewAppTabs(
|
tabs = container.NewAppTabs(
|
||||||
s.createGeneralTab(),
|
s.createGeneralTab(canSavePlayQueue),
|
||||||
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
|
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
|
||||||
s.createEqualizerTab(equalizerBands),
|
s.createEqualizerTab(equalizerBands),
|
||||||
s.createExperimentalTab(window),
|
s.createExperimentalTab(window),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
tabs = container.NewAppTabs(
|
tabs = container.NewAppTabs(
|
||||||
s.createGeneralTab(),
|
s.createGeneralTab(canSavePlayQueue),
|
||||||
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
|
s.createPlaybackTab(isLocalPlayer, isReplayGainPlayer),
|
||||||
s.createExperimentalTab(window),
|
s.createExperimentalTab(window),
|
||||||
)
|
)
|
||||||
@@ -94,7 +95,7 @@ func NewSettingsDialog(
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SettingsDialog) createGeneralTab() *container.TabItem {
|
func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container.TabItem {
|
||||||
themeNames := []string{"Default"}
|
themeNames := []string{"Default"}
|
||||||
themeFileNames := []string{""}
|
themeFileNames := []string{""}
|
||||||
i, selIndex := 1, 0
|
i, selIndex := 1, 0
|
||||||
@@ -157,8 +158,32 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
|
|||||||
})
|
})
|
||||||
systemTrayEnable.Checked = s.config.Application.EnableSystemTray
|
systemTrayEnable.Checked = s.config.Application.EnableSystemTray
|
||||||
|
|
||||||
saveQueue := widget.NewCheckWithData("Save play queue on exit",
|
// save play queue settings
|
||||||
binding.BindBool(&s.config.Application.SavePlayQueue))
|
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",
|
trackNotif := widget.NewCheckWithData("Show notification on track change",
|
||||||
binding.BindBool(&s.config.Application.ShowTrackChangeNotification))
|
binding.BindBool(&s.config.Application.ShowTrackChangeNotification))
|
||||||
|
|
||||||
@@ -250,7 +275,7 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
|
|||||||
widget.NewLabel("Startup page"), container.NewGridWithColumns(2, startupPage),
|
widget.NewLabel("Startup page"), container.NewGridWithColumns(2, startupPage),
|
||||||
),
|
),
|
||||||
container.NewHBox(systemTrayEnable, closeToTray),
|
container.NewHBox(systemTrayEnable, closeToTray),
|
||||||
saveQueue,
|
saveQueueHBox,
|
||||||
trackNotif,
|
trackNotif,
|
||||||
s.newSectionSeparator(),
|
s.newSectionSeparator(),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user