Get it all working
This commit is contained in:
parent
7661923650
commit
84732f16b9
44
sort.go
44
sort.go
@ -8,33 +8,39 @@ import (
|
||||
|
||||
// Flags for defining sort element and order.
|
||||
const (
|
||||
SORT_PRIORITY_ASC = iota
|
||||
SORT_PRIORITY_DESC
|
||||
SORT_CREATED_DATE_ASC
|
||||
SORT_CREATED_DATE_DESC
|
||||
SORT_COMPLETED_DATE_ASC
|
||||
SORT_COMPLETED_DATE_DESC
|
||||
SORT_DUE_DATE_ASC
|
||||
SORT_DUE_DATE_DESC
|
||||
SortPriorityAsc = iota
|
||||
SortPriorityDesc
|
||||
SortCreatedDateAsc
|
||||
SortCreatedDateDesc
|
||||
SortCompletedDateAsc
|
||||
SortCompletedDateDesc
|
||||
SortDueDateAsc
|
||||
SortDueDateDesc
|
||||
)
|
||||
|
||||
// Sort allows a TodoList to be sorted by certain predefined fields.
|
||||
// See constants SORT_* for fields and sort order.
|
||||
func (todolist *TodoList) Sort(sortFlag int) error {
|
||||
switch sortFlag {
|
||||
case SORT_PRIORITY_ASC, SORT_PRIORITY_DESC:
|
||||
case SortPriorityAsc, SortPriorityDesc:
|
||||
todolist.sortByPriority(sortFlag)
|
||||
case SORT_CREATED_DATE_ASC, SORT_CREATED_DATE_DESC:
|
||||
case SortCreatedDateAsc, SortCreatedDateDesc:
|
||||
todolist.sortByCreatedDate(sortFlag)
|
||||
case SORT_COMPLETED_DATE_ASC, SORT_COMPLETED_DATE_DESC:
|
||||
case SortCompletedDateAsc, SortCompletedDateDesc:
|
||||
todolist.sortByCompletedDate(sortFlag)
|
||||
case SORT_DUE_DATE_ASC, SORT_DUE_DATE_DESC:
|
||||
case SortDueDateAsc, SortDueDateDesc:
|
||||
todolist.sortByDueDate(sortFlag)
|
||||
default:
|
||||
return errors.New("unrecognized sort option")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (todolist *TodoList) refresh() {
|
||||
todolist.Sort(todolist.sortFlag)
|
||||
for i, t := range todolist.todos {
|
||||
t.Id = i
|
||||
}
|
||||
}
|
||||
|
||||
type todolistSort struct {
|
||||
todolists TodoList
|
||||
@ -42,15 +48,15 @@ type todolistSort struct {
|
||||
}
|
||||
|
||||
func (ts *todolistSort) Len() int {
|
||||
return len(ts.todolists)
|
||||
return len(ts.todolists.todos)
|
||||
}
|
||||
|
||||
func (ts *todolistSort) Swap(l, r int) {
|
||||
ts.todolists[l], ts.todolists[r] = ts.todolists[r], ts.todolists[l]
|
||||
ts.todolists.todos[l], ts.todolists.todos[r] = ts.todolists.todos[r], ts.todolists.todos[l]
|
||||
}
|
||||
|
||||
func (ts *todolistSort) Less(l, r int) bool {
|
||||
return ts.by(&ts.todolists[l], &ts.todolists[r])
|
||||
return ts.by(ts.todolists.todos[l], ts.todolists.todos[r])
|
||||
}
|
||||
|
||||
func (todolist *TodoList) sortBy(by func(t1, t2 *Todo) bool) *TodoList {
|
||||
@ -64,7 +70,7 @@ func (todolist *TodoList) sortBy(by func(t1, t2 *Todo) bool) *TodoList {
|
||||
|
||||
func (todolist *TodoList) sortByPriority(order int) *TodoList {
|
||||
todolist.sortBy(func(t1, t2 *Todo) bool {
|
||||
if order == SORT_PRIORITY_ASC { // ASC
|
||||
if order == SortPriorityAsc { // ASC
|
||||
if t1.HasPriority() && t2.HasPriority() {
|
||||
return t1.Priority < t2.Priority
|
||||
}
|
||||
@ -95,21 +101,21 @@ func sortByDate(asc bool, hasDate1, hasDate2 bool, date1, date2 time.Time) bool
|
||||
|
||||
func (todolist *TodoList) sortByCreatedDate(order int) *TodoList {
|
||||
todolist.sortBy(func(t1, t2 *Todo) bool {
|
||||
return sortByDate(order == SORT_CREATED_DATE_ASC, t1.HasCreatedDate(), t2.HasCreatedDate(), t1.CreatedDate, t2.CreatedDate)
|
||||
return sortByDate(order == SortCreatedDateAsc, t1.HasCreatedDate(), t2.HasCreatedDate(), t1.CreatedDate, t2.CreatedDate)
|
||||
})
|
||||
return todolist
|
||||
}
|
||||
|
||||
func (todolist *TodoList) sortByCompletedDate(order int) *TodoList {
|
||||
todolist.sortBy(func(t1, t2 *Todo) bool {
|
||||
return sortByDate(order == SORT_COMPLETED_DATE_ASC, t1.HasCompletedDate(), t2.HasCompletedDate(), t1.CompletedDate, t2.CompletedDate)
|
||||
return sortByDate(order == SortCompletedDateAsc, t1.HasCompletedDate(), t2.HasCompletedDate(), t1.CompletedDate, t2.CompletedDate)
|
||||
})
|
||||
return todolist
|
||||
}
|
||||
|
||||
func (todolist *TodoList) sortByDueDate(order int) *TodoList {
|
||||
todolist.sortBy(func(t1, t2 *Todo) bool {
|
||||
return sortByDate(order == SORT_DUE_DATE_ASC, t1.HasDueDate(), t2.HasDueDate(), t1.DueDate, t2.DueDate)
|
||||
return sortByDate(order == SortDueDateAsc, t1.HasDueDate(), t2.HasDueDate(), t1.DueDate, t2.DueDate)
|
||||
})
|
||||
return todolist
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -51,7 +52,7 @@ func (todolist *TodoList) GetContexts() []string {
|
||||
}
|
||||
}
|
||||
}
|
||||
sort.String(ret)
|
||||
sort.Strings(ret)
|
||||
return ret
|
||||
}
|
||||
func (todolist *TodoList) GetProjects() []string {
|
||||
@ -113,7 +114,7 @@ func (todolist *TodoList) GetTagValuesForKey(key string) []string {
|
||||
func (todolist *TodoList) GetIncompleteTasks() *TodoList {
|
||||
t := *NewTodoList()
|
||||
for _, v := range todolist.todos {
|
||||
if !v.Complete {
|
||||
if !v.Completed {
|
||||
t.todos = append(t.todos, v)
|
||||
}
|
||||
}
|
||||
@ -138,9 +139,9 @@ func (todolist *TodoList) AddTodo(todo *Todo) {
|
||||
// AddTimers adds all passed in timers to the list, sorts the list, then updates the Timer.Id values.
|
||||
func (todolist *TodoList) AddTodos(todos []*Todo) {
|
||||
todolist.todos = append(todolist.todos, todos...)
|
||||
todolist.Sort(SORT_START_DATE_ASC)
|
||||
todolist.Sort(SORT_COMPLETED_DATE_DESC)
|
||||
}
|
||||
func (todolist *TodoList) Combine(other *TodoList) { todolist.AddTodo(other.todos) }
|
||||
func (todolist *TodoList) Combine(other *TodoList) { todolist.AddTodos(other.todos) }
|
||||
|
||||
// GetTodo returns the Todo with the given todo 'id' from the TodoList.
|
||||
// Returns an error if Todo could not be found.
|
||||
|
Loading…
Reference in New Issue
Block a user