extend searchdialog / SearchResult to properly support headphone profiles

This commit is contained in:
Drew Weymouth
2026-02-06 08:27:52 -08:00
parent 7e3b102fa4
commit daf0440fbc
5 changed files with 41 additions and 15 deletions
+4 -2
View File
@@ -12,6 +12,7 @@ import (
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/backend/mediaprovider"
"github.com/dweymouth/supersonic/sharedutil"
"github.com/dweymouth/supersonic/ui/theme"
"github.com/dweymouth/supersonic/ui/util"
)
@@ -70,8 +71,9 @@ func (ab *AutoEQBrowser) profileToSearchResult(profile backend.AutoEQProfileMeta
return &mediaprovider.SearchResult{
Name: profile.Name,
ID: profile.Path, // Store path as ID for retrieval
Type: mediaprovider.ContentTypeAlbum, // Use album icon (looks like headphones)
Icon: theme.HeadphonesIcon, // Use headphone icon for all profiles
ID: profile.Path, // Store path as ID for retrieval
Type: mediaprovider.ContentTypeOther, // Use "Other" content type for AutoEQ profiles
ArtistName: subtitle,
Size: 0, // Don't show track count
}
+24 -10
View File
@@ -272,7 +272,11 @@ func (s *searchResult) Update(result *mediaprovider.SearchResult) {
}
s.id = result.ID
s.contentType = result.Type
s.image.PlaceholderIcon = placeholderIconForContentType(result.Type)
if result.Icon != nil {
s.image.PlaceholderIcon = result.Icon
} else {
s.image.PlaceholderIcon = placeholderIconForContentType(result.Type)
}
s.imageLoader.Load(result.CoverID)
s.title.SetText(result.Name)
@@ -300,19 +304,29 @@ func (s *searchResult) Update(result *mediaprovider.SearchResult) {
} else {
secondaryText = ""
}
case mediaprovider.ContentTypeOther:
secondaryText = result.ArtistName
}
s.secondary.Segments = []widget.RichTextSegment{
&widget.TextSegment{
Text: result.Type.String(),
Style: widget.RichTextStyle{SizeName: theme.SizeNameCaptionText, TextStyle: fyne.TextStyle{Bold: true}, Inline: true},
},
if result.Type == mediaprovider.ContentTypeOther {
s.secondary.Segments = []widget.RichTextSegment{}
} else {
s.secondary.Segments = []widget.RichTextSegment{
&widget.TextSegment{
Text: result.Type.String(),
Style: widget.RichTextStyle{SizeName: theme.SizeNameCaptionText, TextStyle: fyne.TextStyle{Bold: true}, Inline: true},
},
}
}
if secondaryText != "" {
if len(s.secondary.Segments) > 0 {
s.secondary.Segments = append(s.secondary.Segments,
&widget.TextSegment{
Text: " · ",
Style: widget.RichTextStyle{SizeName: theme.SizeNameCaptionText, Inline: true},
})
}
s.secondary.Segments = append(s.secondary.Segments,
&widget.TextSegment{
Text: " · ",
Style: widget.RichTextStyle{SizeName: theme.SizeNameCaptionText, Inline: true},
},
&widget.TextSegment{
Text: secondaryText,
Style: widget.RichTextStyle{SizeName: theme.SizeNameCaptionText, Inline: true},
+1 -1
View File
@@ -54,7 +54,7 @@ var (
RadioIcon fyne.Resource = theme.NewThemedResource(res.ResBroadcastSvg)
FavoriteIcon fyne.Resource = theme.NewThemedResource(res.ResHeartFilledSvg)
NotFavoriteIcon fyne.Resource = theme.NewThemedResource(res.ResHeartOutlineSvg)
NowPlayingIcon fyne.Resource = theme.NewThemedResource(res.ResHeadphonesSvg)
HeadphonesIcon fyne.Resource = theme.NewThemedResource(res.ResHeadphonesSvg)
PlaylistIcon fyne.Resource = theme.NewThemedResource(res.ResPlaylistSvg)
PlayNextIcon fyne.Resource = theme.NewThemedResource(res.ResPlaylistAddNextSvg)
PlayQueueIcon fyne.Resource = theme.NewThemedResource(res.ResPlayqueueSvg)
+1 -1
View File
@@ -146,7 +146,7 @@ func (t *Toolbar) CreateRenderer() fyne.WidgetRenderer {
}
func (t *Toolbar) setupNavigationButtons(navigateFn func(controller.Route)) {
t.addNavigationButton(myTheme.NowPlayingIcon, controller.NowPlaying, func() {
t.addNavigationButton(myTheme.HeadphonesIcon, controller.NowPlaying, func() {
navigateFn(controller.NowPlayingRoute())
})
t.addNavigationButton(myTheme.FavoriteIcon, controller.Favorites, func() {