1package cache
2
3import "sort"
4
5type OrderBy int
6
7const (
8 _ OrderBy = iota
9 OrderById
10 OrderByCreation
11 OrderByEdit
12)
13
14type OrderDirection int
15
16const (
17 _ OrderDirection = iota
18 OrderAscending
19 OrderDescending
20)
21
22func (c *RepoCache) AllBugsId(order OrderBy, direction OrderDirection) []string {
23 if order == OrderById {
24 return c.orderIds(direction)
25 }
26
27 excerpts := c.allExcerpt()
28
29 var sorter sort.Interface
30
31 switch order {
32 case OrderByCreation:
33 sorter = BugsByCreationTime(excerpts)
34 case OrderByEdit:
35 sorter = BugsByEditTime(excerpts)
36 default:
37 panic("missing sort type")
38 }
39
40 if direction == OrderDescending {
41 sorter = sort.Reverse(sorter)
42 }
43
44 sort.Sort(sorter)
45
46 result := make([]string, len(excerpts))
47
48 for i, val := range excerpts {
49 result[i] = val.Id
50 }
51
52 return result
53}
54
55func (c *RepoCache) orderIds(direction OrderDirection) []string {
56 result := make([]string, len(c.excerpts))
57
58 i := 0
59 for key := range c.excerpts {
60 result[i] = key
61 i++
62 }
63
64 var sorter sort.Interface = sort.StringSlice(result)
65
66 if direction == OrderDescending {
67 sorter = sort.Reverse(sorter)
68 }
69
70 sort.Sort(sorter)
71
72 return result
73}