From 568e380a517ff1db89b1d6c83919691d9a104e04 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Thu, 20 Feb 2025 16:13:11 -0800 Subject: [PATCH] add Play random button to album page --- backend/playbackmanager.go | 8 ++++---- ui/browsing/albumspage.go | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index ec16cb2..95debbb 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -295,13 +295,13 @@ func (p *PlaybackManager) PlayRandomAlbums(genreName string) error { } mp := p.engine.sm.Server - var filter mediaprovider.AlbumFilter + var options mediaprovider.AlbumFilterOptions if genreName != "" { - filter = mediaprovider.NewAlbumFilter(mediaprovider.AlbumFilterOptions{ + options = mediaprovider.AlbumFilterOptions{ Genres: []string{genreName}, - }) + } } - iter := mp.IterateAlbums(mediaprovider.AlbumSortRandom, filter) + iter := mp.IterateAlbums(mediaprovider.AlbumSortRandom, mediaprovider.NewAlbumFilter(options)) insertMode := Replace for i := 0; i < 20; i++ { al := iter.Next() diff --git a/ui/browsing/albumspage.go b/ui/browsing/albumspage.go index 3318ac0..1be958d 100644 --- a/ui/browsing/albumspage.go +++ b/ui/browsing/albumspage.go @@ -1,10 +1,12 @@ package browsing import ( + "log" "slices" "fyne.io/fyne/v2" "fyne.io/fyne/v2/lang" + "fyne.io/fyne/v2/widget" "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/ui/controller" @@ -63,7 +65,20 @@ func (a *albumsPageAdapter) SaveSortOrder(orderIdx int) { a.cfg.SortOrder = a.mp.AlbumSortOrders()[orderIdx] } -func (a *albumsPageAdapter) ActionButton() fyne.CanvasObject { return nil } +func (a *albumsPageAdapter) ActionButton() fyne.CanvasObject { + fn := func() { + go func() { + if err := a.pm.PlayRandomAlbums(""); err != nil { + log.Printf("error playing random albums: %v", err) + fyne.Do(func() { + a.contr.ToastProvider.ShowErrorToast(lang.L("Unable to play random albums")) + }) + } + }() + } + + return widget.NewButtonWithIcon(lang.L("Play random"), myTheme.ShuffleIcon, fn) +} func (a *albumsPageAdapter) Iter(sortOrderIdx int, filter mediaprovider.AlbumFilter) widgets.GridViewIterator { sortOrder := a.mp.AlbumSortOrders()[sortOrderIdx]