aboutsummaryrefslogtreecommitdiffstats
path: root/todolist/file_store.go
diff options
context:
space:
mode:
authorGrant Ammons <gammons@gmail.com>2016-06-12 09:49:38 -0400
committerGrant Ammons <gammons@gmail.com>2016-06-12 09:49:38 -0400
commitd8d4510d2faebff633d6e98fa4812f2461ae85b6 (patch)
treebe474ce669a994767867f2224d8cdd4103271aee /todolist/file_store.go
parentfd9121e03c18c7dfd947e98ea4cec545f110a804 (diff)
Refactor todolist stuff out of the file store implementation
Diffstat (limited to 'todolist/file_store.go')
-rw-r--r--todolist/file_store.go114
1 files changed, 9 insertions, 105 deletions
diff --git a/todolist/file_store.go b/todolist/file_store.go
index faf235f..61e6e7c 100644
--- a/todolist/file_store.go
+++ b/todolist/file_store.go
@@ -5,12 +5,10 @@ import (
"fmt"
"io/ioutil"
"os"
- "sort"
)
type FileStore struct {
FileLocation string
- Data []*Todo
Loaded bool
}
@@ -18,80 +16,7 @@ func NewFileStore() *FileStore {
return &FileStore{FileLocation: ".todos.json", Loaded: false}
}
-func (f *FileStore) Add(todo *Todo) {
- f.Load()
- todo.Id = f.NextId()
- f.Data = append(f.Data, todo)
-}
-
-func (f *FileStore) FindById(id int) *Todo {
- f.Load()
- for _, todo := range f.Data {
- if todo.Id == id {
- return todo
- }
- }
- return nil
-}
-
-func (f *FileStore) Delete(id int) {
- f.Load()
- i := -1
- for index, todo := range f.Data {
- if todo.Id == id {
- i = index
- }
- }
-
- f.Data = append(f.Data[:i], f.Data[i+1:]...)
-}
-
-func (f *FileStore) Complete(id int) {
- f.Load()
- todo := f.FindById(id)
- todo.Completed = true
- f.Delete(id)
- f.Data = append(f.Data, todo)
-}
-
-func (f *FileStore) Uncomplete(id int) {
- f.Load()
- todo := f.FindById(id)
- todo.Completed = false
- f.Delete(id)
- f.Data = append(f.Data, todo)
-}
-
-func (f *FileStore) Archive(id int) {
- f.Load()
- todo := f.FindById(id)
- todo.Archived = true
- f.Delete(id)
- f.Data = append(f.Data, todo)
-}
-
-func (f *FileStore) Unarchive(id int) {
- f.Load()
- todo := f.FindById(id)
- todo.Archived = false
- f.Delete(id)
- f.Data = append(f.Data, todo)
-}
-
-func (f *FileStore) IndexOf(todoToFind *Todo) int {
- for i, todo := range f.Data {
- if todo.Id == todoToFind.Id {
- return i
- }
- }
- return -1
-}
-
-func (f *FileStore) Load() {
- if f.Loaded {
- return
- }
-
+func (f *FileStore) Load() []*Todo {
data, err := ioutil.ReadFile(f.FileLocation)
if err != nil {
fmt.Println("No todo file found!")
@@ -99,12 +24,15 @@ func (f *FileStore) Load() {
os.Exit(0)
}
- jerr := json.Unmarshal(data, &f.Data)
+ var todos []*Todo
+ jerr := json.Unmarshal(data, &todos)
if jerr != nil {
fmt.Println("Error reading json data", jerr)
os.Exit(1)
}
f.Loaded = true
+
+ return todos
}
func (f *FileStore) Initialize() {
@@ -115,38 +43,14 @@ func (f *FileStore) Initialize() {
}
if err := ioutil.WriteFile(f.FileLocation, []byte("[]"), 0644); err != nil {
fmt.Println("Error writing json file", err)
+ os.Exit(1)
}
+ fmt.Println("Todo repo initialized.")
}
-func (f *FileStore) Save() {
- data, _ := json.Marshal(f.Data)
+func (f *FileStore) Save(todos []*Todo) {
+ data, _ := json.Marshal(todos)
if err := ioutil.WriteFile(f.FileLocation, []byte(data), 0644); err != nil {
fmt.Println("Error writing json file", err)
}
}
-
-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 (f *FileStore) Todos() []*Todo {
- f.Load()
- sort.Sort(ByDate(f.Data))
- return f.Data
-}
-
-func (f *FileStore) NextId() int {
- maxId := 0
- for _, todo := range f.Data {
- if todo.Id > maxId {
- maxId = todo.Id
- }
- }
- return maxId + 1
-}