Filter dialog: only offer options that yield results

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 20:48:57 +02:00
co-authored by Claude Sonnet 5.5
parent ac1c2ebce2
commit 8a357f7418
7 changed files with 215 additions and 81 deletions
+11 -14
View File
@@ -73,10 +73,10 @@ func (a *App) openReleases(title string, fetch func(context.Context) ([]arr.Rele
v.sortMode = (v.sortMode + 1) % numSortModes
v.render()
case ev.Key() == tcell.KeyRune && ev.Rune() == 'F':
v.app.openAttrFilter(v.attr, releaseLanguages(v.all), func(f attrFilter) {
v.app.openAttrFilter(v.attr, v.filterPool, func(f attrFilter) {
v.attr = f
v.render()
})
}, nil)
case ev.Key() == tcell.KeyRune && ev.Rune() == 'f':
v.hideRejected = !v.hideRejected
v.render()
@@ -349,18 +349,15 @@ func formatReleaseAge(minutes float64) string {
return fmt.Sprintf("%dd", int(minutes/(24*60)))
}
// releaseLanguages lists the languages the releases announce, sorted.
func releaseLanguages(all []arr.Release) []string {
seen := map[string]bool{}
var out []string
for _, r := range all {
for _, l := range r.Attrs().Languages {
if !seen[l] {
seen[l] = true
out = append(out, l)
}
// filterPool lists the properties of the releases that pass the rejected
// filter, for the filter dialog.
func (v *releasesView) filterPool() filterPool {
var p filterPool
for _, r := range v.all {
if v.hideRejected && isRejected(r) {
continue
}
p.files = append(p.files, []arr.FileAttrs{r.Attrs()})
}
slices.Sort(out)
return out
return p
}