From 84732f16b94eb8d450485eb53fdd975b193ba4a2 Mon Sep 17 00:00:00 2001 From: Brian Buller Date: Wed, 23 Aug 2023 09:55:38 -0500 Subject: [PATCH] Get it all working --- sort.go | 44 +++++++++++++++++++++++++------------------- todolist.go | 9 +++++---- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/sort.go b/sort.go index d137aca..041e0f3 100644 --- a/sort.go +++ b/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 } diff --git a/todolist.go b/todolist.go index c308a02..04ce45b 100644 --- a/todolist.go +++ b/todolist.go @@ -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.