blob: e3120c402ac256d57f5ba8a9a8f579e21507f17c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package app
import (
"sort"
"strings"
"github.com/charmbracelet/bubbles/table"
)
func (m *model) toggleSort(target sortField) {
if m.sortField == target {
m.sortAscending = !m.sortAscending
return
}
m.sortField = target
m.sortAscending = true
}
func (m *model) applyFiltersAndSort() {
filtered := make([]video, 0, len(m.videos))
for _, v := range m.videos {
if m.passesFilters(v) {
filtered = append(filtered, v)
}
}
sort.Slice(filtered, func(i, j int) bool {
return m.less(filtered[i], filtered[j])
})
m.filtered = filtered
m.updateTableRows()
}
func (m *model) less(a, b video) bool {
var less bool
switch m.sortField {
case sortByName:
less = strings.ToLower(a.Name) < strings.ToLower(b.Name)
case sortByDuration:
less = a.Duration < b.Duration
case sortByAge:
less = a.ModTime.Before(b.ModTime)
}
if m.sortAscending {
return less
}
return !less
}
func (m *model) updateTableRows() {
rows := make([]table.Row, 0, len(m.filtered))
for _, v := range m.filtered {
rows = append(rows, videoRow(v))
}
m.table.SetRows(rows)
if len(rows) > 0 {
m.table.SetCursor(0)
}
}
|