121 lines
2.1 KiB
Go
121 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
func main() {
|
|
args := os.Args
|
|
if len(args) < 2 {
|
|
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. 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 {
|
|
fmt.Println("Error Creating File;", err)
|
|
os.Exit(1)
|
|
}
|
|
defer file.Close()
|
|
|
|
writer := csv.NewWriter(file)
|
|
defer writer.Flush()
|
|
var taskWrite []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
|
|
}
|
|
|
|
}
|