diff options
| author | Grant Ammons <gammons@gmail.com> | 2016-06-12 09:49:38 -0400 |
|---|---|---|
| committer | Grant Ammons <gammons@gmail.com> | 2016-06-12 09:49:38 -0400 |
| commit | d8d4510d2faebff633d6e98fa4812f2461ae85b6 (patch) | |
| tree | be474ce669a994767867f2224d8cdd4103271aee /todolist/todo_list.go | |
| parent | fd9121e03c18c7dfd947e98ea4cec545f110a804 (diff) | |
Refactor todolist stuff out of the file store implementation
Diffstat (limited to 'todolist/todo_list.go')
| -rw-r--r-- | todolist/todo_list.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/todolist/todo_list.go b/todolist/todo_list.go new file mode 100644 index 0000000..d7e1f83 --- /dev/null +++ b/todolist/todo_list.go @@ -0,0 +1,98 @@ +package todolist + +import "sort" + +type TodoList struct { + Data []*Todo +} + +func (t *TodoList) Load(todos []*Todo) { + t.Data = todos +} + +func (t *TodoList) Add(todo *Todo) { + todo.Id = t.NextId() + t.Data = append(t.Data, todo) +} + +func (t *TodoList) Delete(id int) { + i := -1 + for index, todo := range t.Data { + if todo.Id == id { + i = index + } + } + + t.Data = append(t.Data[:i], t.Data[i+1:]...) +} + +func (t *TodoList) Complete(id int) { + todo := t.FindById(id) + todo.Completed = true + t.Delete(id) + t.Data = append(t.Data, todo) +} + +func (t *TodoList) Uncomplete(id int) { + todo := t.FindById(id) + todo.Completed = false + t.Delete(id) + t.Data = append(t.Data, todo) +} + +func (t *TodoList) Archive(id int) { + todo := t.FindById(id) + todo.Archived = true + t.Delete(id) + t.Data = append(t.Data, todo) +} + +func (t *TodoList) Unarchive(id int) { + todo := t.FindById(id) + todo.Archived = false + t.Delete(id) + t.Data = append(t.Data, todo) +} + +func (t *TodoList) IndexOf(todoToFind *Todo) int { + for i, todo := range t.Data { + if todo.Id == todoToFind.Id { + return i + } + } + return -1 +} + +type ByDate []*Todo + +func (a ByDate) Len() int { return len(a) } +func (a ByDate) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ByDate) Less(i, j int) bool { + t1Due := a[i].CalculateDueTime() + t2Due := a[j].CalculateDueTime() + return t1Due.Before(t2Due) +} + +func (t *TodoList) Todos() []*Todo { + sort.Sort(ByDate(t.Data)) + return t.Data +} + +func (t *TodoList) NextId() int { + maxId := 0 + for _, todo := range t.Data { + if todo.Id > maxId { + maxId = todo.Id + } + } + return maxId + 1 +} + +func (t *TodoList) FindById(id int) *Todo { + for _, todo := range t.Data { + if todo.Id == id { + return todo + } + } + return nil +} |
