From 70f36c34c3f6c2502353875414a44728f396ed95 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 21 Oct 2025 10:05:33 -0400 Subject: [PATCH] Add ability to list all tasks along with line number. Add ability to delete task based on line number. --- godo.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/godo.go b/godo.go index 123f61a..0c06a36 100644 --- a/godo.go +++ b/godo.go @@ -4,6 +4,7 @@ import ( "encoding/csv" "fmt" "os" + "strconv" ) func main() { @@ -12,20 +13,29 @@ func main() { fmt.Println("Use godo ? or help for the help menu") os.Exit(0) } + switch args[1] { case "?", "help": help() case "a", "add": add(args[2]) + case "l", "list": + list() + case "d", "delete": + delete(args[2]) } + } +// List all available commands func help() { fmt.Println("?/help - help menu") - fmt.Println("a/add - add new task") - fmt.Println("l/list - add new task") + fmt.Println("a/add - add new task. Must be in quotations") + fmt.Println("d/delete - delete task") + fmt.Println("l/list - list all tasks") } +// Add new task func add(task string) { file, err := os.OpenFile("tasks.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) if err != nil { @@ -40,3 +50,71 @@ func add(task string) { taskWrite = append(taskWrite, task) writer.Write(taskWrite) } + +// List all current tasks +func list() { + file, err := os.Open("tasks.csv") + if err != nil { + fmt.Printf("Error: %v", err) + } + + defer file.Close() + if err != nil { + fmt.Printf("Error: %v", err) + } + + reader := csv.NewReader(file) + records, err := reader.ReadAll() + + if err != nil { + fmt.Printf("Error: %v", err) + } + x := 1 + for _, record := range records { + + fmt.Printf("%x - %s\n", x, record[0]) + x += 1 + } +} + +// Delete the requested task +func delete(task string) { + + fileName := "tasks.csv" + + // Convert arg to int + taskInt, err := strconv.Atoi(task) + if err != nil { + fmt.Println("error") + } + + //open the task csv + file, err := os.Open(fileName) + if err != nil { + fmt.Printf("Error: %v", err) + } + + defer file.Close() + if err != nil { + fmt.Printf("Error: %v", err) + } + //read the file + reader := csv.NewReader(file) + records, err := reader.ReadAll() + + if err != nil { + fmt.Printf("Error: %v", err) + } + //close file and delete + file.Close() + os.Remove(fileName) + //check if the arg number is equal to the csv line number. If not pass it to the add function to readd it + x := 1 + for _, record := range records { + if x != taskInt { + add(record[0]) + } + x += 1 + } + +}