diff options
| author | Paul Buetow <paul@buetow.org> | 2024-06-27 10:57:11 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-06-27 10:57:11 +0300 |
| commit | 2a7f70715de89e2aaf9e5f3bf9a22c6ab7426358 (patch) | |
| tree | acbad1674214a48ffeb8bf5b02c61d963fca98c8 | |
| parent | 639e8f297241e760f1ac003d53a57161bac792e9 (diff) | |
after composing a file is queued
| -rw-r--r-- | internal/client/tui/compose.go | 45 | ||||
| -rw-r--r-- | internal/client/tui/editor.go | 34 | ||||
| -rw-r--r-- | internal/client/tui/enter.go | 1 | ||||
| -rw-r--r-- | internal/client/tui/tui.go | 9 |
4 files changed, 51 insertions, 38 deletions
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 |
