more work on album filters

This commit is contained in:
Drew Weymouth
2023-05-11 16:45:47 -07:00
parent b2dce99714
commit 87ae111cb2
10 changed files with 250 additions and 206 deletions
+21 -15
View File
@@ -4,7 +4,6 @@ import (
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/sharedutil"
"github.com/dweymouth/supersonic/ui/controller"
"github.com/dweymouth/supersonic/ui/dialogs"
"github.com/dweymouth/supersonic/ui/util"
"github.com/dweymouth/supersonic/ui/widgets"
@@ -77,14 +76,20 @@ func NewAlbumsPage(cfg *backend.AlbumsPageConfig, contr *controller.Controller,
iter := lm.AlbumsIter(backend.AlbumSortOrder(a.sortOrder.Selected), a.filter)
a.grid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), im)
contr.ConnectAlbumGridActions(a.grid)
a.searcher = widgets.NewSearchEntry()
a.searcher.OnSearched = a.OnSearched
a.filterBtn = widgets.NewAlbumFilterButton(&a.filter, func(filter *backend.AlbumFilter) fyne.CanvasObject { return dialogs.NewAlbumFilterDialog(filter) })
a.createSearchAndFilter("")
a.createContainer(false)
return a
}
func (a *AlbumsPage) createSearchAndFilter(searchText string) {
a.searcher = widgets.NewSearchEntry()
a.searcher.Text = searchText
a.searcher.OnSearched = a.OnSearched
a.filterBtn = widgets.NewAlbumFilterButton(&a.filter)
a.filterBtn.OnChanged = a.Reload
}
func (a *AlbumsPage) createContainer(searchgrid bool) {
searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher, layout.NewSpacer())
sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer())
@@ -93,7 +98,7 @@ func (a *AlbumsPage) createContainer(searchgrid bool) {
g = a.searchGrid
}
a.container = container.NewBorder(
container.NewHBox(util.NewHSpace(6), a.titleDisp, sortVbox, layout.NewSpacer(), a.filterBtn, searchVbox, util.NewHSpace(12)),
container.NewHBox(util.NewHSpace(6), a.titleDisp, sortVbox, layout.NewSpacer(), container.NewCenter(a.filterBtn), searchVbox, util.NewHSpace(12)),
nil,
nil,
nil,
@@ -103,11 +108,13 @@ func (a *AlbumsPage) createContainer(searchgrid bool) {
func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a := &AlbumsPage{
cfg: saved.cfg,
contr: saved.contr,
pm: saved.pm,
lm: saved.lm,
im: saved.im,
cfg: saved.cfg,
contr: saved.contr,
pm: saved.pm,
lm: saved.lm,
im: saved.im,
searchText: saved.searchText,
filter: saved.filter,
}
a.ExtendBaseWidget(a)
@@ -119,13 +126,10 @@ func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a.sortOrder.Selected = saved.sortOrder
a.sortOrder.OnChanged = a.onSortOrderChanged
a.grid = widgets.NewGridViewFromState(saved.gridState)
a.searcher = widgets.NewSearchEntry()
a.searcher.OnSearched = a.OnSearched
a.searcher.Entry.Text = saved.searchText
a.searchText = saved.searchText
if a.searchText != "" {
a.searchGrid = widgets.NewGridViewFromState(saved.searchGridState)
}
a.createSearchAndFilter(saved.searchText)
a.createContainer(saved.searchText != "")
return a
@@ -172,6 +176,7 @@ func (a *AlbumsPage) Save() SavedPage {
lm: a.lm,
im: a.im,
searchText: a.searchText,
filter: a.filter,
sortOrder: a.sortOrder.Selected,
gridState: a.grid.SaveToState(),
}
@@ -186,7 +191,7 @@ func (a *AlbumsPage) doSearch(query string) {
a.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(a.lm.SearchIter(query)), a.im)
a.contr.ConnectAlbumGridActions(a.searchGrid)
} else {
a.searchGrid.Reset(widgets.NewGridViewAlbumIterator(a.lm.SearchIter(query)))
a.searchGrid.Reset(widgets.NewGridViewAlbumIterator(a.lm.SearchIterWithFilter(query, a.filter)))
}
a.container.Objects[0] = a.searchGrid
a.Refresh()
@@ -209,6 +214,7 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
type savedAlbumsPage struct {
searchText string
filter backend.AlbumFilter
cfg *backend.AlbumsPageConfig
contr *controller.Controller
pm *backend.PlaybackManager
+1 -4
View File
@@ -2,7 +2,6 @@ package browsing
import (
"log"
"time"
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/ui/controller"
@@ -213,9 +212,7 @@ func (a *FavoritesPage) OnSongChange(song *subsonic.Child, _ *subsonic.Child) {
}
func (a *FavoritesPage) doSearchAlbums(query string) {
iter := a.lm.SearchIterWithFilter(query, func(al *subsonic.AlbumID3) bool {
return al.Starred.After(time.Time{})
})
iter := a.lm.SearchIterWithFilter(query, backend.AlbumFilter{ExcludeUnfavorited: true})
if a.searchGrid == nil {
a.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), a.im)
a.contr.ConnectAlbumGridActions(a.searchGrid)
+1 -5
View File
@@ -12,8 +12,6 @@ import (
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"github.com/dweymouth/go-subsonic/subsonic"
)
// TODO: there is a lot of code duplication between this and albumspage. Refactor?
@@ -160,9 +158,7 @@ func (g *GenrePage) OnSearched(query string) {
}
func (g *GenrePage) doSearch(query string) {
iter := g.lm.SearchIterWithFilter(query, func(al *subsonic.AlbumID3) bool {
return al.Genre == g.genre
})
iter := g.lm.SearchIterWithFilter(query, backend.AlbumFilter{Genres: []string{g.genre}})
if g.searchGrid == nil {
g.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), g.im)
g.contr.ConnectAlbumGridActions(g.searchGrid)