From a23e7d382d46e2cdf4fbd697a67db032960820d3 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Wed, 14 May 2025 08:30:32 -0700 Subject: [PATCH] Fix #619: remove correct tracks from playlist if in searched view --- ui/browsing/playlistpage.go | 22 ++++++++++++++++++---- ui/widgets/tracklist.go | 24 ++++++++++++------------ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/ui/browsing/playlistpage.go b/ui/browsing/playlistpage.go index 4c82c3e..b3681cf 100644 --- a/ui/browsing/playlistpage.go +++ b/ui/browsing/playlistpage.go @@ -221,7 +221,6 @@ func (a *PlaylistPage) doSetNewTrackOrder(ids []string, newPos int) { newTracks := sharedutil.ReorderItems(a.tracks, idxs, newPos) ids = sharedutil.TracksToIDs(newTracks) - // we can't block the UI waiting for the server so assume it will succeed go func() { if err := a.sm.Server.ReplacePlaylistTracks(a.playlistID, ids); err != nil { log.Printf("error updating playlist: %s", err.Error()) @@ -244,9 +243,24 @@ func (a *PlaylistPage) doSetNewTrackOrder(ids []string, newPos int) { } func (a *PlaylistPage) onRemoveSelectedFromPlaylist() { - a.sm.Server.RemovePlaylistTracks(a.playlistID, a.tracklist.SelectedTrackIndexes()) - a.tracklist.UnselectAll() - a.Reload() + idxToRemove := sharedutil.MapSlice(a.tracklist.SelectedTracks(), func(t *mediaprovider.Track) int { + return t.TrackNumber - 1 + }) + go func() { + if err := a.sm.Server.RemovePlaylistTracks(a.playlistID, idxToRemove); err != nil { + log.Printf("error removing playlist tracks: %s", err.Error()) + fyne.Do(func() { + a.contr.ToastProvider.ShowErrorToast( + lang.L("An error occurred updating the playlist"), + ) + }) + } else { + fyne.Do(func() { + a.tracklist.UnselectAll() + a.Reload() + }) + } + }() } func (a *PlaylistPage) onSearched(query string) { diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 0b814f6..8a05fb3 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -509,40 +509,40 @@ func (t *Tracklist) onShowContextMenu(e *fyne.PointEvent, trackIdx int) { if t.ctxMenu == nil { t.ctxMenu = util.NewTrackContextMenu(t.Options.DisablePlaybackMenu, t.Options.AuxiliaryMenuItems) t.ctxMenu.OnPlay = func(shuffle bool) { - t.OnPlaySelection(t.selectedTracks(), shuffle) + t.OnPlaySelection(t.SelectedTracks(), shuffle) } t.ctxMenu.OnAddToQueue = func(next bool) { if next { - t.OnPlaySelectionNext(t.selectedTracks()) + t.OnPlaySelectionNext(t.SelectedTracks()) } else { - t.OnAddToQueue(t.selectedTracks()) + t.OnAddToQueue(t.SelectedTracks()) } } t.ctxMenu.OnPlaySongRadio = func() { - t.onPlaySongRadio(t.selectedTracks()) + t.onPlaySongRadio(t.SelectedTracks()) } t.ctxMenu.OnAddToPlaylist = func() { t.OnAddToPlaylist(t.SelectedTrackIDs()) } t.ctxMenu.OnDownload = func() { - t.onDownload(t.selectedTracks(), "Selected tracks") + t.onDownload(t.SelectedTracks(), "Selected tracks") } t.ctxMenu.OnShowInfo = func() { - t.OnShowTrackInfo(t.selectedTracks()[0]) + t.OnShowTrackInfo(t.SelectedTracks()[0]) } t.ctxMenu.OnFavorite = func(fav bool) { - t.onSetFavorites(t.selectedTracks(), fav, true /*needRefresh*/) + t.onSetFavorites(t.SelectedTracks(), fav, true /*needRefresh*/) } t.ctxMenu.OnShare = func() { - t.onShare(t.selectedTracks()) + t.onShare(t.SelectedTracks()) } t.ctxMenu.OnSetRating = func(rating int) { - t.onSetRatings(t.selectedTracks(), rating, true /*needRefresh*/) + t.onSetRatings(t.SelectedTracks(), rating, true /*needRefresh*/) } } t.ctxMenu.SetRatingDisabled(t.Options.DisableRating) - t.ctxMenu.SetShareDisabled(t.Options.DisableSharing || len(t.selectedTracks()) != 1) - t.ctxMenu.SetInfoDisabled(len(t.selectedTracks()) != 1) + t.ctxMenu.SetShareDisabled(t.Options.DisableSharing || len(t.SelectedTracks()) != 1) + t.ctxMenu.SetInfoDisabled(len(t.SelectedTracks()) != 1) t.ctxMenu.ShowAtPosition(e.AbsolutePosition, fyne.CurrentApp().Driver().CanvasForObject(t)) } @@ -617,7 +617,7 @@ func (t *Tracklist) onPlaySongRadio(tracks []*mediaprovider.Track) { } } -func (t *Tracklist) selectedTracks() []*mediaprovider.Track { +func (t *Tracklist) SelectedTracks() []*mediaprovider.Track { return util.SelectedTracks(t.tracks) }