From 2a7f70715de89e2aaf9e5f3bf9a22c6ab7426358 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 27 Jun 2024 10:57:11 +0300 Subject: after composing a file is queued --- internal/client/tui/compose.go | 45 ++++++++++++++++++++++++++++++++++++++++++ internal/client/tui/editor.go | 34 ------------------------------- internal/client/tui/enter.go | 1 - internal/client/tui/tui.go | 9 ++++++--- 4 files changed, 51 insertions(+), 38 deletions(-) create mode 100644 internal/client/tui/compose.go delete mode 100644 internal/client/tui/editor.go delete mode 100644 internal/client/tui/enter.go (limited to 'internal/client') diff --git a/internal/client/tui/compose.go b/internal/client/tui/compose.go new file mode 100644 index 0000000..7bdfbf3 --- /dev/null +++ b/internal/client/tui/compose.go @@ -0,0 +1,45 @@ +package tui + +import ( + "fmt" + "os" + "os/exec" + "time" + + tea "github.com/charmbracelet/bubbletea" +) + +type composeFinishedMsg struct { + callback func() error + err error +} + +func composeAction(editor, dataDir string) tea.Cmd { + // Maybe handle the error explicitly? Should be obvious anyway + // when the editor can't open the file because directory isn't there + _ = ensureDirectoryExists(dataDir) + composeFile := fmt.Sprintf("%s/compose.txt", dataDir) + + return openEditor(editor, composeFile, func() error { + timestamp := time.Now().Format("20060102-150405") + queuedFile := fmt.Sprintf("%s/queued-%s.txt", dataDir, timestamp) + return os.Rename(composeFile, queuedFile) + }) +} + +func openEditor(editor, filePath string, callback func() error) tea.Cmd { + return tea.ExecProcess(exec.Command(editor, filePath), func(err error) tea.Msg { + return composeFinishedMsg{callback, err} + }) +} + +func ensureDirectoryExists(dir string) error { + info, err := os.Stat(dir) + if err != nil && os.IsNotExist(err) { + return os.MkdirAll(dir, os.ModePerm) + } + if info.IsDir() { + return nil + } + return fmt.Errorf("path %s is not a directory", dir) +} diff --git a/internal/client/tui/editor.go b/internal/client/tui/editor.go deleted file mode 100644 index 85bcff5..0000000 --- a/internal/client/tui/editor.go +++ /dev/null @@ -1,34 +0,0 @@ -package tui - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - - tea "github.com/charmbracelet/bubbletea" -) - -type editorFinishedMsg struct{ err error } - -func openEditor(editor, filePath string) tea.Cmd { - // Maybe handle the error explicitly? Should be obvious anyway - // when the editor can't open the file because directory isn't there - _ = ensureDirectoryExists(filepath.Dir(filePath)) - - c := exec.Command(editor, filePath) //nolint:gosec - return tea.ExecProcess(c, func(err error) tea.Msg { - return editorFinishedMsg{err} - }) -} - -func ensureDirectoryExists(dir string) error { - info, err := os.Stat(dir) - if err != nil && os.IsNotExist(err) { - return os.MkdirAll(dir, os.ModePerm) - } - if info.IsDir() { - return nil - } - return fmt.Errorf("path %s is not a directory", dir) -} diff --git a/internal/client/tui/enter.go b/internal/client/tui/enter.go deleted file mode 100644 index 89aa0ee..0000000 --- a/internal/client/tui/enter.go +++ /dev/null @@ -1 +0,0 @@ -package tui diff --git a/internal/client/tui/tui.go b/internal/client/tui/tui.go index 4a27caa..7584ef2 100644 --- a/internal/client/tui/tui.go +++ b/internal/client/tui/tui.go @@ -60,8 +60,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "enter": switch m.cursor { case composePostCursorPos: - tmpFile := fmt.Sprintf("%s/compose.md", m.conf.DataDir) - return m, openEditor(m.conf.Editor, tmpFile) + return m, composeAction(m.conf.Editor, m.conf.DataDir) } case "a": @@ -74,11 +73,15 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "ctrl+c", "q": return m, tea.Quit } - case editorFinishedMsg: + case composeFinishedMsg: if msg.err != nil { m.err = msg.err return m, tea.Quit } + if err := msg.callback(); err != nil { + m.err = err + return m, tea.Quit + } } return m, nil -- cgit v1.2.3