...
1 package progress
2
3 import "sort"
4
5
6 type SortBy int
7
8 const (
9
10 SortByNone SortBy = iota
11
12
13 SortByMessage
14
15
16 SortByMessageDsc
17
18
19 SortByPercent
20
21
22 SortByPercentDsc
23
24
25 SortByValue
26
27
28 SortByValueDsc
29 )
30
31
32 func (sb SortBy) Sort(trackers []*Tracker) {
33 switch sb {
34 case SortByMessage:
35 sort.Sort(sortByMessage(trackers))
36 case SortByMessageDsc:
37 sort.Sort(sortByMessageDsc(trackers))
38 case SortByPercent:
39 sort.Sort(sortByPercent(trackers))
40 case SortByPercentDsc:
41 sort.Sort(sortByPercentDsc(trackers))
42 case SortByValue:
43 sort.Sort(sortByValue(trackers))
44 case SortByValueDsc:
45 sort.Sort(sortByValueDsc(trackers))
46 default:
47
48 }
49 }
50
51 type sortByMessage []*Tracker
52
53 func (sb sortByMessage) Len() int { return len(sb) }
54 func (sb sortByMessage) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
55 func (sb sortByMessage) Less(i, j int) bool { return sb[i].message() < sb[j].message() }
56
57 type sortByMessageDsc []*Tracker
58
59 func (sb sortByMessageDsc) Len() int { return len(sb) }
60 func (sb sortByMessageDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
61 func (sb sortByMessageDsc) Less(i, j int) bool { return sb[i].message() > sb[j].message() }
62
63 type sortByPercent []*Tracker
64
65 func (sb sortByPercent) Len() int { return len(sb) }
66 func (sb sortByPercent) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
67 func (sb sortByPercent) Less(i, j int) bool { return sb[i].PercentDone() < sb[j].PercentDone() }
68
69 type sortByPercentDsc []*Tracker
70
71 func (sb sortByPercentDsc) Len() int { return len(sb) }
72 func (sb sortByPercentDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
73 func (sb sortByPercentDsc) Less(i, j int) bool { return sb[i].PercentDone() > sb[j].PercentDone() }
74
75 type sortByValue []*Tracker
76
77 func (sb sortByValue) Len() int { return len(sb) }
78 func (sb sortByValue) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
79 func (sb sortByValue) Less(i, j int) bool { return sb[i].value < sb[j].value }
80
81 type sortByValueDsc []*Tracker
82
83 func (sb sortByValueDsc) Len() int { return len(sb) }
84 func (sb sortByValueDsc) Swap(i, j int) { sb[i], sb[j] = sb[j], sb[i] }
85 func (sb sortByValueDsc) Less(i, j int) bool { return sb[i].value > sb[j].value }
86
View as plain text