diff options
| -rw-r--r-- | todo.go | 4 | ||||
| -rw-r--r-- | todolist/app.go | 5 | ||||
| -rw-r--r-- | todolist/file_store.go | 22 |
3 files changed, 26 insertions, 5 deletions
@@ -110,6 +110,10 @@ func usage() { func routeInput(command string, input string) { app := todolist.NewApp() + if app == nil { + return + } + switch command { case "l", "list", "agenda": app.ListTodos(input) diff --git a/todolist/app.go b/todolist/app.go index 1ab6b20..e3d8cc7 100644 --- a/todolist/app.go +++ b/todolist/app.go @@ -15,6 +15,11 @@ type App struct { func NewApp() *App { app := &App{TodoList: &TodoList{}, TodoStore: NewFileStore()} + if app.TodoStore.FileLocation == "" { + fmt.Println("No todo file found!") + fmt.Println("You may run 'todo init' to initialize an empty repo in current directory.") + return nil + } return app } diff --git a/todolist/file_store.go b/todolist/file_store.go index 5413295..63738b2 100644 --- a/todolist/file_store.go +++ b/todolist/file_store.go @@ -5,6 +5,7 @@ import ( "fmt" "io/ioutil" "os" + "os/user" ) type FileStore struct { @@ -13,22 +14,33 @@ type FileStore struct { } func NewFileStore() *FileStore { - return &FileStore{FileLocation: ".todos.json", Loaded: false} + localrepo := ".todos.json" + usr, _ := user.Current() + homerepo := fmt.Sprintf("%s/.todos.json", usr.HomeDir) + _, err1 := os.Stat(localrepo) + _, err2 := os.Stat(homerepo) + + if err1 == nil { + return &FileStore{FileLocation: localrepo, Loaded: false} + } else if err2 == nil { + return &FileStore{FileLocation: homerepo, Loaded: false} + } else { + return &FileStore{FileLocation: "", Loaded: false} + } } func (f *FileStore) Load() ([]*Todo, error) { data, err := ioutil.ReadFile(f.FileLocation) if err != nil { - fmt.Println("No todo file found!") - fmt.Println("Initialize a new todo repo by running 'todo init'") + fmt.Println("Error reading", f.FileLocation, "by", err) return nil, err - os.Exit(0) + os.Exit(1) } var todos []*Todo jerr := json.Unmarshal(data, &todos) if jerr != nil { - fmt.Println("Error reading json data", jerr) + fmt.Println("Error reading", f.FileLocation, "by", jerr) return nil, jerr os.Exit(1) } |
