itashi.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. _ "embed"
  4. "fmt"
  5. "log"
  6. "os"
  7. "strconv"
  8. "strings"
  9. itashi "git.aetherial.dev/aeth/itashi/pkg"
  10. tea "github.com/charmbracelet/bubbletea"
  11. )
  12. const ADD_TASK = "add"
  13. const DEL_TASK = "del"
  14. const DONE_TASK = "done"
  15. const TIDY_TASK = "tidy"
  16. //go:embed banner.txt
  17. var banner []byte
  18. func main() {
  19. args := os.Args
  20. if len(args) >= 2 {
  21. action := args[1]
  22. shelf := itashi.NewFilesystemShelf(itashi.GetDefualtSave())
  23. switch action {
  24. case ADD_TASK:
  25. itashi.AddTaskPrompt(shelf)
  26. os.Exit(0)
  27. case DEL_TASK:
  28. id, err := strconv.Atoi(args[2])
  29. if err != nil {
  30. log.Fatal("ID passed was not a valid integer: ", err)
  31. }
  32. shelf.DeleteTask(id)
  33. os.Exit(0)
  34. case DONE_TASK:
  35. var taskName string
  36. id, err := strconv.Atoi(args[2])
  37. if err != nil {
  38. log.Fatal("ID passed was not a valid integer: ", err)
  39. }
  40. taskName = shelf.MarkDone(id)
  41. if taskName == "" {
  42. fmt.Printf("No task was indexed with ID: %v\n", id)
  43. os.Exit(0)
  44. }
  45. fmt.Printf("よくできた! Good job! Task '%s' was marked complete!\n", strings.TrimSuffix(taskName, "\n"))
  46. os.Exit(0)
  47. case TIDY_TASK:
  48. fmt.Printf("Shelf tidied, removed %v completed tasks.\n", shelf.Clean())
  49. os.Exit(0)
  50. }
  51. }
  52. fmt.Printf("%+v\n", string(banner))
  53. p := tea.NewProgram(itashi.InitialModel())
  54. if _, err := p.Run(); err != nil {
  55. fmt.Printf("Alas, there's been an error: %v", err)
  56. os.Exit(1)
  57. }
  58. }