Files
godo/godo.go

125 lines
2.1 KiB
Go

package main
import (
"encoding/csv"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
args := os.Args
if len(args) < 2 {
fmt.Println("Use godo ? or help for the help menu")
os.Exit(0)
}
args[1] = strings.ToLower(args[1])
switch args[1] {
case "?", "help":
help()
case "a", "add":
add(args[2])
case "l", "list":
list()
case "d", "delete":
delete(args[2])
default:
help()
}
}
// 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
}
}