This commit is contained in:
Drew Weymouth
2023-11-05 14:07:52 -08:00
parent 38a399222a
commit 17df4d780e
5 changed files with 75 additions and 16 deletions
+9 -3
View File
@@ -91,6 +91,8 @@ func mergeResults(
for _, al := range searchResult.Album {
results = append(results, &mediaprovider.SearchResult{
Type: mediaprovider.ContentTypeAlbum,
ID: al.ID,
CoverID: al.CoverArt,
Name: al.Name,
ArtistName: getNameString(al.Artist, al.Artists),
Size: al.SongCount,
@@ -99,15 +101,19 @@ func mergeResults(
for _, ar := range searchResult.Artist {
results = append(results, &mediaprovider.SearchResult{
Type: mediaprovider.ContentTypeArtist,
Name: ar.Name,
Size: ar.AlbumCount,
Type: mediaprovider.ContentTypeArtist,
ID: ar.ID,
CoverID: ar.CoverArt,
Name: ar.Name,
Size: ar.AlbumCount,
})
}
for _, tr := range searchResult.Song {
results = append(results, &mediaprovider.SearchResult{
Type: mediaprovider.ContentTypeTrack,
ID: tr.ID,
CoverID: tr.CoverArt,
Name: tr.Title,
ArtistName: getNameString(tr.Artist, tr.Artists),
Size: tr.Duration,
+3 -2
View File
@@ -64,7 +64,7 @@ type BrowsingPane struct {
container *fyne.Container
}
func NewBrowsingPane(app *backend.App) *BrowsingPane {
func NewBrowsingPane(app *backend.App, controller *controller.Controller) *BrowsingPane {
b := &BrowsingPane{app: app}
b.ExtendBaseWidget(b)
b.home = widget.NewButtonWithIcon("", theme.HomeIcon(), b.GoHome)
@@ -81,13 +81,14 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
p.ShowAtPosition(fyne.NewPos(b.Size().Width-p.MinSize().Width+4,
b.navBtnsContainer.MinSize().Height+theme.Padding()))
})
quickSearchBtn := widget.NewButtonWithIcon("", theme.SearchIcon(), controller.ShowQuickSearch)
b.settingsMenu = fyne.NewMenu("")
b.navBtnsContainer = container.NewHBox()
b.container = container.NewBorder(container.New(
&layouts.MaxPadLayout{PadLeft: -5, PadRight: -5},
container.New(layouts.NewLeftMiddleRightLayout(0),
container.NewHBox(b.home, b.back, b.forward, b.reload), b.navBtnsContainer,
container.NewHBox(layout.NewSpacer(), b.settingsBtn))),
container.NewHBox(layout.NewSpacer(), quickSearchBtn, b.settingsBtn))),
nil, nil, nil, b.pageContainer)
b.updateHistoryButtons()
return b
+26
View File
@@ -483,6 +483,32 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
pop.Show()
}
func (c *Controller) ShowQuickSearch() {
qs := dialogs.NewQuickSearch(c.App.ServerManager.Server, c.App.ImageManager)
pop := widget.NewModalPopUp(qs, c.MainWindow.Canvas())
qs.OnDismiss = func() {
pop.Hide()
c.doModalClosed()
}
qs.OnNavigateTo = func(contentType mediaprovider.ContentType, id string) {
pop.Hide()
c.doModalClosed()
switch contentType {
case mediaprovider.ContentTypeAlbum:
c.NavigateTo(AlbumRoute(id))
case mediaprovider.ContentTypeArtist:
c.NavigateTo(ArtistRoute(id))
case mediaprovider.ContentTypeTrack:
// TODO
case mediaprovider.ContentTypePlaylist:
c.NavigateTo(PlaylistRoute(id))
case mediaprovider.ContentTypeGenre:
c.NavigateTo(GenreRoute(id))
}
}
pop.Show()
}
func (c *Controller) trySetPasswordAndConnectToServer(server *backend.ServerConfig, password string) error {
if err := c.App.ServerManager.SetServerPassword(server, password); err != nil {
log.Printf("error setting keyring credentials: %v", err)
+33 -7
View File
@@ -2,6 +2,7 @@ package dialogs
import (
"image"
"log"
"sync"
"fyne.io/fyne/v2"
@@ -18,7 +19,10 @@ import (
type QuickSearch struct {
widget.BaseWidget
mp *mediaprovider.MediaProvider
OnDismiss func()
OnNavigateTo func(mediaprovider.ContentType, string)
mp mediaprovider.MediaProvider
im *backend.ImageManager
resultsMutex sync.RWMutex
@@ -29,7 +33,7 @@ type QuickSearch struct {
content *fyne.Container
}
func NewQuickSearch(mp *mediaprovider.MediaProvider, im *backend.ImageManager) *QuickSearch {
func NewQuickSearch(mp mediaprovider.MediaProvider, im *backend.ImageManager) *QuickSearch {
q := &QuickSearch{
mp: mp,
im: im,
@@ -57,25 +61,42 @@ func NewQuickSearch(mp *mediaprovider.MediaProvider, im *backend.ImageManager) *
)
title := widget.NewRichText(&widget.TextSegment{Text: "Quick Search", Style: boldStyle})
title.Segments[0].(*widget.TextSegment).Style.Alignment = fyne.TextAlignCenter
q.content = container.NewVBox(
title,
container.NewBorder(searchEntry, nil, nil, nil, q.list),
)
q.content = container.NewBorder(
container.NewVBox(title, searchEntry), nil, nil, nil, q.list)
return q
}
func (q *QuickSearch) onSearched(query string) {
var results []*mediaprovider.SearchResult
if query != "" {
if res, err := q.mp.SearchAll(query, 20); err != nil {
log.Printf("Error searching: %s", err.Error())
} else {
results = res
}
}
q.resultsMutex.Lock()
q.searchResults = results
q.resultsMutex.Unlock()
q.list.Refresh()
}
func (q *QuickSearch) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(q.content)
}
func (q *QuickSearch) MinSize() fyne.Size {
return fyne.NewSize(500, 350)
}
type quickSearchResult struct {
widget.BaseWidget
// parent *QuickSearch
id string
contentType mediaprovider.ContentType
imageLoader backend.ThumbnailLoader
image *widgets.ImagePlaceholder
@@ -88,7 +109,7 @@ type quickSearchResult struct {
func newQuickSearchResult(im *backend.ImageManager) *quickSearchResult {
qs := &quickSearchResult{
image: widgets.NewImagePlaceholder(myTheme.AlbumIcon, 64),
image: widgets.NewImagePlaceholder(myTheme.AlbumIcon, 50),
title: widget.NewLabel(""),
secondary: widget.NewRichText(),
}
@@ -107,6 +128,11 @@ func (q *quickSearchResult) Update(result *mediaprovider.SearchResult) {
if result == nil {
return
}
if q.contentType == result.Type && q.id == result.ID {
return // nothing to do
}
q.id = result.ID
q.contentType = result.Type
q.image.CenterIcon = placeholderIconForContentType(result.Type)
q.imageLoader.Load(result.CoverID)
q.title.SetText(result.Name)
+4 -4
View File
@@ -53,10 +53,9 @@ type MainWindow struct {
func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, app *backend.App, size fyne.Size) MainWindow {
m := MainWindow{
App: app,
Window: fyneApp.NewWindow(displayAppName),
BrowsingPane: browsing.NewBrowsingPane(app),
theme: theme.NewMyTheme(&app.Config.Theme, configdir.LocalConfig(appName, "themes")),
App: app,
Window: fyneApp.NewWindow(displayAppName),
theme: theme.NewMyTheme(&app.Config.Theme, configdir.LocalConfig(appName, "themes")),
}
m.theme.NormalFont = app.Config.Application.FontNormalTTF
@@ -71,6 +70,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
MainWindow: m.Window,
App: app,
}
m.BrowsingPane = browsing.NewBrowsingPane(app, m.Controller)
m.Router = browsing.NewRouter(app, m.Controller, m.BrowsingPane)
// inject controller dependencies
m.Controller.NavHandler = m.Router.NavigateTo