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 /internal/client/tui/compose.go | |
| parent | 639e8f297241e760f1ac003d53a57161bac792e9 (diff) | |
after composing a file is queued
Diffstat (limited to 'internal/client/tui/compose.go')
| -rw-r--r-- | internal/client/tui/compose.go | 45 |
1 files changed, 45 insertions, 0 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) +} |
