From 7b3aca6027cf8611731b0f344b9853b7335ad7c8 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Wed, 4 Jan 2023 17:33:44 -0800 Subject: [PATCH] refactoring package organization --- ui/bottompanel.go | 7 ++++--- ui/{ => browsing}/albumpage.go | 2 +- ui/{ => browsing}/albumspage.go | 10 +++++----- ui/{ => browsing}/artistpage.go | 7 ++++--- ui/{ => browsing}/browsingpane.go | 2 +- ui/{ => browsing}/router.go | 6 ++++-- ui/mainwindow.go | 11 ++++++----- ui/{ => widgets}/albumgrid.go | 20 +++++++++++--------- 8 files changed, 36 insertions(+), 29 deletions(-) rename ui/{ => browsing}/albumpage.go (99%) rename ui/{ => browsing}/albumspage.go (92%) rename ui/{ => browsing}/artistpage.go (91%) rename ui/{ => browsing}/browsingpane.go (99%) rename ui/{ => browsing}/router.go (95%) rename ui/{ => widgets}/albumgrid.go (88%) diff --git a/ui/bottompanel.go b/ui/bottompanel.go index c301a54..e9b05d6 100644 --- a/ui/bottompanel.go +++ b/ui/bottompanel.go @@ -5,6 +5,7 @@ import ( "image" "supersonic/backend" "supersonic/player" + "supersonic/ui/browsing" "supersonic/ui/widgets" "fyne.io/fyne/v2" @@ -66,7 +67,7 @@ type BottomPanel struct { var _ fyne.Widget = (*BottomPanel)(nil) -func NewBottomPanel(p *player.Player, nav func(Route)) *BottomPanel { +func NewBottomPanel(p *player.Player, nav func(browsing.Route)) *BottomPanel { bp := &BottomPanel{} bp.ExtendBaseWidget(bp) p.OnPaused(func() { @@ -81,10 +82,10 @@ func NewBottomPanel(p *player.Player, nav func(Route)) *BottomPanel { bp.NowPlaying = widgets.NewNowPlayingCard() bp.NowPlaying.OnAlbumNameTapped(func() { - nav(AlbumRoute(bp.playbackManager.NowPlaying().AlbumID)) + nav(browsing.AlbumRoute(bp.playbackManager.NowPlaying().AlbumID)) }) bp.NowPlaying.OnArtistNameTapped(func() { - nav(ArtistRoute(bp.playbackManager.NowPlaying().ArtistID)) + nav(browsing.ArtistRoute(bp.playbackManager.NowPlaying().ArtistID)) }) bp.Controls = widgets.NewPlayerControls() bp.Controls.OnPlayPause(func() { diff --git a/ui/albumpage.go b/ui/browsing/albumpage.go similarity index 99% rename from ui/albumpage.go rename to ui/browsing/albumpage.go index a01cb23..8707ce3 100644 --- a/ui/albumpage.go +++ b/ui/browsing/albumpage.go @@ -1,4 +1,4 @@ -package ui +package browsing import ( "fmt" diff --git a/ui/albumspage.go b/ui/browsing/albumspage.go similarity index 92% rename from ui/albumspage.go rename to ui/browsing/albumspage.go index dd86907..0923a20 100644 --- a/ui/albumspage.go +++ b/ui/browsing/albumspage.go @@ -1,4 +1,4 @@ -package ui +package browsing import ( "supersonic/backend" @@ -19,8 +19,8 @@ type AlbumsPage struct { im *backend.ImageManager lm *backend.LibraryManager nav func(Route) - grid *AlbumGrid - searchGrid *AlbumGrid + grid *widgets.AlbumGrid + searchGrid *widgets.AlbumGrid searchText string titleDisp *widget.RichText sortOrder *selectWidget @@ -66,7 +66,7 @@ func NewAlbumsPage(title string, sortOrder string, lm *backend.LibraryManager, i a.sortOrder.OnChanged = a.onSortOrderChanged sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer()) iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected)) - a.grid = NewAlbumGrid(iter, im.GetAlbumThumbnail, false /*showYear*/) + a.grid = widgets.NewAlbumGrid(iter, im.GetAlbumThumbnail, false /*showYear*/) a.grid.OnPlayAlbum = a.onPlayAlbum a.grid.OnShowArtistPage = a.onShowArtistPage a.grid.OnShowAlbumPage = a.onShowAlbumPage @@ -91,7 +91,7 @@ func (a *AlbumsPage) OnSearched(query string) { return } if a.searchGrid == nil { - a.searchGrid = NewAlbumGrid(a.lm.SearchIter(query), a.im.GetAlbumThumbnail, false /*showYear*/) + a.searchGrid = widgets.NewAlbumGrid(a.lm.SearchIter(query), a.im.GetAlbumThumbnail, false /*showYear*/) a.searchGrid.OnPlayAlbum = a.onPlayAlbum a.searchGrid.OnShowAlbumPage = a.onShowAlbumPage a.searchGrid.OnShowArtistPage = a.onShowArtistPage diff --git a/ui/artistpage.go b/ui/browsing/artistpage.go similarity index 91% rename from ui/artistpage.go rename to ui/browsing/artistpage.go index 6d4394c..f79f2f1 100644 --- a/ui/artistpage.go +++ b/ui/browsing/artistpage.go @@ -1,8 +1,9 @@ -package ui +package browsing import ( "log" "supersonic/backend" + "supersonic/ui/widgets" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" @@ -20,7 +21,7 @@ type ArtistPage struct { im *backend.ImageManager sm *backend.ServerManager nav func(Route) - grid *AlbumGrid + grid *widgets.AlbumGrid titleDisp *widget.RichText container *fyne.Container @@ -71,7 +72,7 @@ func (a *ArtistPage) loadAsync() { } a.titleDisp.Segments[0].(*widget.TextSegment).Text = artist.Name a.titleDisp.Refresh() - ag := NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail, true /*showYear*/) + ag := widgets.NewFixedAlbumGrid(artist.Album, a.im.GetAlbumThumbnail, true /*showYear*/) ag.OnPlayAlbum = a.onPlayAlbum ag.OnShowAlbumPage = a.onShowAlbumPage a.container.Objects[0] = ag diff --git a/ui/browsingpane.go b/ui/browsing/browsingpane.go similarity index 99% rename from ui/browsingpane.go rename to ui/browsing/browsingpane.go index d97a109..046d3ad 100644 --- a/ui/browsingpane.go +++ b/ui/browsing/browsingpane.go @@ -1,4 +1,4 @@ -package ui +package browsing import ( "image/color" diff --git a/ui/router.go b/ui/browsing/router.go similarity index 95% rename from ui/router.go rename to ui/browsing/router.go index b3c38b9..b7ba96e 100644 --- a/ui/router.go +++ b/ui/browsing/router.go @@ -1,6 +1,8 @@ -package ui +package browsing -import "supersonic/backend" +import ( + "supersonic/backend" +) type PageName int diff --git a/ui/mainwindow.go b/ui/mainwindow.go index cfe7bd2..1cd449b 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -2,6 +2,7 @@ package ui import ( "supersonic/backend" + "supersonic/ui/browsing" "supersonic/ui/widgets" "fyne.io/fyne/v2" @@ -13,8 +14,8 @@ import ( type MainWindow struct { Window fyne.Window - Router Router - BrowsingPane *BrowsingPane + Router browsing.Router + BrowsingPane *browsing.BrowsingPane BottomPanel *BottomPanel container *fyne.Container @@ -23,9 +24,9 @@ type MainWindow struct { func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App) MainWindow { m := MainWindow{ Window: fyneApp.NewWindow(appName), - BrowsingPane: NewBrowsingPane(app), + BrowsingPane: browsing.NewBrowsingPane(app), } - m.Router = NewRouter(app, m.BrowsingPane) + m.Router = browsing.NewRouter(app, m.BrowsingPane) m.BottomPanel = NewBottomPanel(app.Player, m.Router.OpenRoute) m.BottomPanel.SetPlaybackManager(app.PlaybackManager) m.BottomPanel.ImageManager = app.ImageManager @@ -40,7 +41,7 @@ func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App) MainWindo m.Window.SetTitle(song.Title) }) app.ServerManager.OnServerConnected(func() { - m.Router.OpenRoute(AlbumsRoute(backend.AlbumSortRecentlyAdded)) + m.Router.OpenRoute(browsing.AlbumsRoute(backend.AlbumSortRecentlyAdded)) }) return m } diff --git a/ui/albumgrid.go b/ui/widgets/albumgrid.go similarity index 88% rename from ui/albumgrid.go rename to ui/widgets/albumgrid.go index 2f7507e..0d418ab 100644 --- a/ui/albumgrid.go +++ b/ui/widgets/albumgrid.go @@ -1,11 +1,9 @@ -package ui +package widgets import ( "context" "image" "log" - "supersonic/backend" - "supersonic/ui/widgets" "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" @@ -14,12 +12,16 @@ import ( type ImageFetcher func(string) (image.Image, error) +type AlbumIterator interface { + NextN(int, func(*subsonic.AlbumID3)) +} + type AlbumGrid struct { widget.BaseWidget grid *widget.GridWrapList albums []*subsonic.AlbumID3 - iter backend.AlbumIterator + iter AlbumIterator fetching bool done bool showYear bool @@ -44,7 +46,7 @@ func NewFixedAlbumGrid(albums []*subsonic.AlbumID3, fetch ImageFetcher, showYear return ag } -func NewAlbumGrid(iter backend.AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumGrid { +func NewAlbumGrid(iter AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumGrid { ag := &AlbumGrid{ iter: iter, imageFetcher: fetch, @@ -63,7 +65,7 @@ func (ag *AlbumGrid) Clear() { ag.done = true } -func (ag *AlbumGrid) Reset(iter backend.AlbumIterator) { +func (ag *AlbumGrid) Reset(iter AlbumIterator) { ag.albums = nil ag.fetching = false ag.done = false @@ -78,7 +80,7 @@ func (ag *AlbumGrid) createGridWrapList() { }, // create func func() fyne.CanvasObject { - ac := widgets.NewAlbumCard(ag.showYear) + ac := NewAlbumCard(ag.showYear) ac.OnPlay = func() { if ag.OnPlayAlbum != nil { ag.OnPlayAlbum(ac.AlbumID()) @@ -98,14 +100,14 @@ func (ag *AlbumGrid) createGridWrapList() { }, // update func func(itemID int, obj fyne.CanvasObject) { - ac := obj.(*widgets.AlbumCard) + ac := obj.(*AlbumCard) ag.doUpdateAlbumCard(itemID, ac) }, ) ag.grid = g } -func (ag *AlbumGrid) doUpdateAlbumCard(albumIdx int, ac *widgets.AlbumCard) { +func (ag *AlbumGrid) doUpdateAlbumCard(albumIdx int, ac *AlbumCard) { album := ag.albums[albumIdx] if ac.PrevAlbumID == album.ID { // nothing to do