From ecc691fe525a7353b8cc285f538ddce7c96511b2 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Tue, 7 Jan 2025 07:15:23 -0800 Subject: [PATCH] use error toasts for errors playing random/similar tracks --- backend/playbackmanager.go | 13 +++++++------ res/translations/en.json | 2 ++ ui/browsing/artistpage.go | 8 +++++++- ui/browsing/genrepage.go | 12 +++++++++++- ui/browsing/trackspage.go | 10 +++++++++- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/backend/playbackmanager.go b/backend/playbackmanager.go index 6d98504..95c2398 100644 --- a/backend/playbackmanager.go +++ b/backend/playbackmanager.go @@ -277,14 +277,14 @@ func (p *PlaybackManager) PlayTrackAt(idx int) { p.cmdQueue.PlayTrackAt(idx) } -func (p *PlaybackManager) PlayRandomSongs(genreName string) { - p.fetchAndPlayTracks(func() ([]*mediaprovider.Track, error) { +func (p *PlaybackManager) PlayRandomSongs(genreName string) error { + return p.fetchAndPlayTracks(func() ([]*mediaprovider.Track, error) { return p.engine.sm.Server.GetRandomTracks(genreName, p.cfg.EnqueueBatchSize) }) } -func (p *PlaybackManager) PlaySimilarSongs(id string) { - p.fetchAndPlayTracks(func() ([]*mediaprovider.Track, error) { +func (p *PlaybackManager) PlaySimilarSongs(id string) error { + return p.fetchAndPlayTracks(func() ([]*mediaprovider.Track, error) { return p.engine.sm.Server.GetSimilarTracks(id, p.cfg.EnqueueBatchSize) }) } @@ -298,15 +298,16 @@ func (p *PlaybackManager) PlayRadioStation(station *mediaprovider.RadioStation) p.PlayFromBeginning() } -func (p *PlaybackManager) fetchAndPlayTracks(fetchFn func() ([]*mediaprovider.Track, error)) { +func (p *PlaybackManager) fetchAndPlayTracks(fetchFn func() ([]*mediaprovider.Track, error)) error { if songs, err := fetchFn(); err != nil { - log.Printf("error fetching tracks: %s", err.Error()) + return err } else { p.LoadTracks(songs, Replace, false) if p.engine.replayGainCfg.Mode == ReplayGainAuto { p.SetReplayGainMode(player.ReplayGainTrack) } p.PlayFromBeginning() + return nil } } diff --git a/res/translations/en.json b/res/translations/en.json index f5f8a85..6dbaefc 100644 --- a/res/translations/en.json +++ b/res/translations/en.json @@ -210,6 +210,8 @@ "Track peak": "Track peak", "tracks": "tracks", "UI Scaling": "UI Scaling", + "Unable to play artist radio": "Unable to play artist radio", + "Unable to play random tracks": "Unable to play random tracks", "URL": "URL", "Use legacy authentication": "Use legacy authentication", "Username": "Username", diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index 7d524e2..e2403a1 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -171,7 +171,13 @@ func (g *ArtistPage) Scroll(scrollAmt float32) { } func (a *ArtistPage) playArtistRadio() { - go a.pm.PlaySimilarSongs(a.artistID) + go func() { + err := a.pm.PlaySimilarSongs(a.artistID) + if err != nil { + log.Println("error playing similar songs: %v", err) + a.contr.ToastProvider.ShowErrorToast(lang.L("Unable to play artist radio")) + } + }() } func (a *ArtistPage) showAlbumSortMenu() { diff --git a/ui/browsing/genrepage.go b/ui/browsing/genrepage.go index 15790c7..27064ed 100644 --- a/ui/browsing/genrepage.go +++ b/ui/browsing/genrepage.go @@ -1,6 +1,8 @@ package browsing import ( + "log" + "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/ui/controller" @@ -58,7 +60,15 @@ func (g *genrePageAdapter) Route() controller.Route { } func (g *genrePageAdapter) ActionButton() *widget.Button { - fn := func() { go g.pm.PlayRandomSongs(g.genre) } + fn := func() { + go func() { + err := g.pm.PlayRandomSongs(g.genre) + if err != nil { + log.Println("error playing random tracks: %v", err) + g.contr.ToastProvider.ShowErrorToast(lang.L("Unable to play random tracks")) + } + }() + } return widget.NewButtonWithIcon(lang.L("Play random"), myTheme.ShuffleIcon, fn) } diff --git a/ui/browsing/trackspage.go b/ui/browsing/trackspage.go index ccc38ca..6702ead 100644 --- a/ui/browsing/trackspage.go +++ b/ui/browsing/trackspage.go @@ -1,6 +1,8 @@ package browsing import ( + "log" + "github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend/mediaprovider" "github.com/dweymouth/supersonic/sharedutil" @@ -205,7 +207,13 @@ func (s *tracksPageState) Restore() Page { } func (t *TracksPage) playRandomSongs() { - t.contr.App.PlaybackManager.PlayRandomSongs("") + go func() { + err := t.contr.App.PlaybackManager.PlayRandomSongs("") + if err != nil { + log.Println("error playing random tracks: %v", err) + t.contr.ToastProvider.ShowErrorToast(lang.L("Unable to play random tracks")) + } + }() } func (t *TracksPage) obtainTracklist() *widgets.Tracklist {