From 1160665595200b286f27f07247312bfd12e777fa Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Tue, 30 Sep 2025 12:58:15 +0200 Subject: [PATCH] get notifications working --- gemlog/common.go | 4 ++++ gemlog/write.go | 29 +++++++++++++++++++++-------- main.go | 38 +++++++++++++++++++++----------------- 3 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 gemlog/common.go diff --git a/gemlog/common.go b/gemlog/common.go new file mode 100644 index 0000000..30c7d6c --- /dev/null +++ b/gemlog/common.go @@ -0,0 +1,4 @@ +package gemlog + +type Notification string +type ErrorMsg struct{ err error } diff --git a/gemlog/write.go b/gemlog/write.go index 9cbadfd..82d499c 100644 --- a/gemlog/write.go +++ b/gemlog/write.go @@ -4,10 +4,25 @@ import ( "fmt" "os" "os/exec" + + tea "github.com/charmbracelet/bubbletea" ) +func WritePostCMD() tea.Msg { + id, err := write() + + if err != nil { + return ErrorMsg{err} + } + return Notification(fmt.Sprintf("Created post with id: %s", id)) +} + +// For messages that contain errors it's often handy to also implement the +// error interface on the message. +// func (e ErrorMsg) Error() string { return e.err.Error() } + // WriteAction opens a shell editor and prints the output to console -func WriteAction() error { +func write() (string, error) { // Get the editor from environment variable, default to vi editor := os.Getenv("EDITOR") if editor == "" { @@ -17,7 +32,7 @@ func WriteAction() error { // Create a temporary file tmpFile, err := os.CreateTemp("", "gemlog-*.md") if err != nil { - return fmt.Errorf("failed to create temporary file: %w", err) + return "", fmt.Errorf("failed to create temporary file: %w", err) } defer os.Remove(tmpFile.Name()) // Clean up @@ -31,17 +46,15 @@ func WriteAction() error { err = cmd.Run() if err != nil { - return fmt.Errorf("editor command failed: %w", err) + return "", fmt.Errorf("editor command failed: %w", err) } // Read the contents of the file content, err := os.ReadFile(tmpFile.Name()) if err != nil { - return fmt.Errorf("failed to read file contents: %w", err) + return "", fmt.Errorf("failed to read file contents: %w", err) } - // Print the contents to console - fmt.Print(string(content)) - - return nil + contentStr := string(content) + return contentStr, nil } diff --git a/main.go b/main.go index bd6f1f3..dacd459 100644 --- a/main.go +++ b/main.go @@ -17,19 +17,22 @@ const ( Delete Action = "delete" ) -type ActionCallback func() error +func TODOCmd() tea.Msg { + return gemlog.Notification("This action has not been implemented yet.") +} -var callbacks = map[Action]ActionCallback{ - Write: gemlog.WriteAction, - Read: func() error { return fmt.Errorf("not implmented") }, - Edit: func() error { return nil }, - Delete: func() error { return nil }, +var mainCommands = map[Action]tea.Cmd{ + Write: gemlog.WritePostCMD, + Read: TODOCmd, + Edit: TODOCmd, + Delete: TODOCmd, } type model struct { - cursor int - actions []Action - errorTxt string + notification string + cursor int + actions []Action + errorTxt string } func initialModel() model { @@ -44,6 +47,8 @@ func (m model) Init() tea.Cmd { func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { + case gemlog.Notification: + m.notification = fmt.Sprintf("%s\n\n", string(msg)) case tea.KeyMsg: switch msg.String() { case "ctrl+c", "q": @@ -57,13 +62,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.cursor++ } case "enter", " ": - err := callbacks[m.actions[m.cursor]]() - if err == nil { - return m, tea.Quit - } - m.errorTxt = "problem running action\n\nerror:\n" - m.errorTxt += fmt.Sprintf("Error: %v\n", err) - return m, nil + return m, mainCommands[m.actions[m.cursor]] } } @@ -74,7 +73,12 @@ func (m model) View() string { if len(m.errorTxt) > 0 { return m.errorTxt } - s := "Welcome to gemlog cli!\n\nWhat post action would you like to take?\n\n" + s := "" + if m.notification != "" { + s += m.notification + } else { + s += "Welcome to gemlog cli!\n\nWhat post action would you like to take?\n\n" + } for i, action := range m.actions { cursor := " "