Filter dialog: only offer options that yield results
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
+11
-14
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user