Fix #315: Pre-select most recent playlist in "Add to playlist" dialog

This commit is contained in:
Drew Weymouth
2024-01-20 14:22:30 -08:00
parent e1bc745645
commit edc3ef7bfa
3 changed files with 22 additions and 4 deletions
+1
View File
@@ -42,6 +42,7 @@ type AppConfig struct {
AllowMultiInstance bool AllowMultiInstance bool
MaxImageCacheSizeMB int MaxImageCacheSizeMB int
SavePlayQueue bool SavePlayQueue bool
DefaultPlaylistID string
// Experimental - may be removed in future // Experimental - may be removed in future
FontNormalTTF string FontNormalTTF string
+10 -3
View File
@@ -272,12 +272,17 @@ func (m *Controller) DoAddTracksToPlaylistWorkflow(trackIDs []string) {
log.Printf("error getting user-owned playlists: %s", err.Error()) log.Printf("error getting user-owned playlists: %s", err.Error())
return return
} }
selectedIdx := -1
plNames := make([]string, 0, len(pls)) plNames := make([]string, 0, len(pls))
for _, pl := range pls { for i, pl := range pls {
plNames = append(plNames, pl.Name) plNames = append(plNames, pl.Name)
if defId := m.App.Config.Application.DefaultPlaylistID; defId != "" && pl.ID == defId {
selectedIdx = i
}
} }
dlg := dialogs.NewAddToPlaylistDialog("Add to Playlist", plNames) dlg := dialogs.NewAddToPlaylistDialog("Add to Playlist", plNames, selectedIdx)
pop := widget.NewModalPopUp(dlg, m.MainWindow.Canvas()) pop := widget.NewModalPopUp(dlg, m.MainWindow.Canvas())
m.ClosePopUpOnEscape(pop) m.ClosePopUpOnEscape(pop)
dlg.OnCanceled = pop.Hide dlg.OnCanceled = pop.Hide
@@ -287,8 +292,10 @@ func (m *Controller) DoAddTracksToPlaylistWorkflow(trackIDs []string) {
if playlistChoice < 0 { if playlistChoice < 0 {
go m.App.ServerManager.Server.CreatePlaylist(newPlaylistName, trackIDs) go m.App.ServerManager.Server.CreatePlaylist(newPlaylistName, trackIDs)
} else { } else {
playlist := pls[playlistChoice]
m.App.Config.Application.DefaultPlaylistID = playlist.ID
go m.App.ServerManager.Server.AddPlaylistTracks( go m.App.ServerManager.Server.AddPlaylistTracks(
pls[playlistChoice].ID, trackIDs) playlist.ID, trackIDs)
} }
} }
m.haveModal = true m.haveModal = true
+11 -1
View File
@@ -1,6 +1,8 @@
package dialogs package dialogs
import ( import (
"time"
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
"fyne.io/fyne/v2/container" "fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/layout"
@@ -23,7 +25,7 @@ type AddToPlaylistDialog struct {
var _ fyne.Widget = (*AddToPlaylistDialog)(nil) var _ fyne.Widget = (*AddToPlaylistDialog)(nil)
func NewAddToPlaylistDialog(title string, existingPlaylistNames []string) *AddToPlaylistDialog { func NewAddToPlaylistDialog(title string, existingPlaylistNames []string, selectedIdx int) *AddToPlaylistDialog {
a := &AddToPlaylistDialog{} a := &AddToPlaylistDialog{}
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
@@ -35,6 +37,14 @@ func NewAddToPlaylistDialog(title string, existingPlaylistNames []string) *AddTo
a.onSelectionChanged() a.onSelectionChanged()
}) })
a.playlistSelect.PlaceHolder = "(Choose playlist)" a.playlistSelect.PlaceHolder = "(Choose playlist)"
if selectedIdx >= 0 {
// calling SetSelectedIndex before showing the Select crashes...
go func() {
time.Sleep(10 * time.Millisecond)
// add 1 to selectedIdx to account for "(Choose playlist)" entry
a.playlistSelect.SetSelectedIndex(selectedIdx + 1)
}()
}
a.newPlaylistName = widget.NewEntry() a.newPlaylistName = widget.NewEntry()
a.newPlaylistName.Hidden = true a.newPlaylistName.Hidden = true
a.newPlaylistName.OnChanged = func(text string) { a.newPlaylistName.OnChanged = func(text string) {