imap-notes/cmd/notes.go

126 lines
3.1 KiB
Go

package cmd
import (
"fmt"
"git.iamthefij.com/iamthefij/imap-notes/lib"
"git.iamthefij.com/iamthefij/slog"
"github.com/spf13/cobra"
)
var notesCmd = &cobra.Command{
Use: "notes",
Short: "List or access note actions",
Aliases: []string{"note"},
Run: func(cmd *cobra.Command, args []string) {
// Should execute the list command
},
}
var notesListCmd = WrapPositionalArgs(
&cobra.Command{
Use: "list",
Short: "List notes",
Aliases: []string{"ls"},
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
client, err := lib.GetClient()
slog.OnErrFatalf(err, "failed to logon")
folder, err := client.GetNoteFolder(args[0])
slog.OnErrFatalf(err, "failed to select folder")
notes, err := folder.ListNotes()
slog.OnErrFatalf(err, "failed to get notes from folder %s", args[0])
for _, note := range notes {
fmt.Println(note.Name)
}
},
},
[]string{"folder"},
1,
)
var notesGetCmd = WrapPositionalArgs(
&cobra.Command{
Use: "get",
Short: "Print content of a note",
Aliases: []string{"print"},
Args: cobra.ExactArgs(2),
Run: func(cmd *cobra.Command, args []string) {
// TODO: refactor a bit of this duplicate here
client, err := lib.GetClient()
slog.OnErrFatalf(err, "failed to logon")
folder, err := client.GetNoteFolder(args[0])
slog.OnErrFatalf(err, "failed to select folder")
notes, err := folder.FindNotesByName(args[1])
slog.OnErrFatalf(err, "failed to get notes from folder %s", args[0])
note := notes[0]
body, err := note.ReadMarkdown()
slog.OnErrFatalf(err, "failed to read note")
fmt.Println(body)
},
},
[]string{"folder", "note"},
2,
)
var notesViewCmd = WrapPositionalArgs(
&cobra.Command{
Use: "view",
Short: "View content of a note",
Args: cobra.ExactArgs(2),
Run: func(cmd *cobra.Command, args []string) {
client, err := lib.GetClient()
slog.OnErrFatalf(err, "failed to logon")
folder, err := client.GetNoteFolder(args[0])
slog.OnErrFatalf(err, "failed to select folder")
notes, err := folder.FindNotesByName(args[1])
slog.OnErrFatalf(err, "failed to get notes from folder %s", args[0])
note := notes[0]
slog.OnErrFatalf(note.OpenMarkdownInPager(), "failed to open note")
},
},
[]string{"folder", "note"},
2,
)
var notesEditCmd = WrapPositionalArgs(
&cobra.Command{
Use: "edit",
Short: "Edit content of a note",
Args: cobra.ExactArgs(2),
Run: func(cmd *cobra.Command, args []string) {
client, err := lib.GetClient()
slog.OnErrFatalf(err, "failed to logon")
folder, err := client.GetNoteFolder(args[0])
slog.OnErrFatalf(err, "failed to select folder")
notes, err := folder.FindNotesByName(args[1])
slog.OnErrFatalf(err, "failed to get notes from folder %s", args[0])
note := notes[0]
slog.OnErrFatalf(note.EditMarkdown(), "failed to open note")
},
},
[]string{"folder", "note"},
2,
)
func addNotesCmd() {
rootCmd.AddCommand(notesCmd)
notesCmd.AddCommand(notesListCmd)
notesCmd.AddCommand(notesViewCmd)
notesCmd.AddCommand(notesEditCmd)
notesCmd.AddCommand(notesGetCmd)
}