You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
go-todo/main.go

90 lines
1.6 KiB

package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func PrintMenu() {
fmt.Printf("\n\n### TODO APP ###\n")
fmt.Printf("1: List Todo\n")
fmt.Printf("2: Add Todo\n")
fmt.Printf("3: Remove Todo (via index)\n")
fmt.Printf("4: Save to file\n")
fmt.Printf("\n\n0: Quit\n> ")
}
const (
QUIT = 0
LIST = 1
ADD = 2
REMOVE = 3
SAVE = 4
)
func main() {
fmt.Print("\033[H\033[2J") //clear
PrintMenu()
list := Todos{}
for {
var input int
n, err := fmt.Scanln(&input)
if n < 1 || err != nil {
fmt.Print("[ERR] Invalid input\n")
}
switch input {
case QUIT:
fmt.Print("Quitting, goodbye!\n")
os.Exit(0)
case LIST:
if err := list.ListTodo(); err != nil {
fmt.Print(err)
}
PrintMenu()
case ADD:
in := bufio.NewReader(os.Stdin)
fmt.Print("Add Title:\n> ")
title, _ := in.ReadString('\n')
fmt.Print("Add Content:\n> ")
content, _ := in.ReadString('\n')
list.AddTodo(Todo{Title: title, Content: content})
fmt.Printf("Added %s to the list!\n", title)
PrintMenu()
case REMOVE:
var index int
fmt.Printf("Which TODO to remove?\n> ")
if _, err := fmt.Scanf("%d", &index); err != nil {
fmt.Printf("Which TODO to remove?\n> ")
}
if err := list.RemoveTodo(index); err != nil {
fmt.Print(err)
}
PrintMenu()
case SAVE:
in := bufio.NewReader(os.Stdin)
fmt.Print("Save to file:\n> ")
filename, _ := in.ReadString('\n')
filename = strings.TrimSuffix(filename, "\n")
if err := list.SaveToFile(filename); err != nil {
fmt.Print(err)
} else {
fmt.Printf("%s saved!\n", filename)
}
PrintMenu()
default:
PrintMenu()
}
}
}