summaryrefslogtreecommitdiff
path: root/internal/client/tui/compose.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-06-27 10:57:11 +0300
committerPaul Buetow <paul@buetow.org>2024-06-27 10:57:11 +0300
commit2a7f70715de89e2aaf9e5f3bf9a22c6ab7426358 (patch)
treeacbad1674214a48ffeb8bf5b02c61d963fca98c8 /internal/client/tui/compose.go
parent639e8f297241e760f1ac003d53a57161bac792e9 (diff)
after composing a file is queued
Diffstat (limited to 'internal/client/tui/compose.go')
-rw-r--r--internal/client/tui/compose.go45
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)
+}