aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--todo.go4
-rw-r--r--todolist/app.go5
-rw-r--r--todolist/file_store.go22
3 files changed, 26 insertions, 5 deletions
diff --git a/todo.go b/todo.go
index 2a45f28..f7d994d 100644
--- a/todo.go
+++ b/todo.go
@@ -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)
}