summaryrefslogtreecommitdiff
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
parent639e8f297241e760f1ac003d53a57161bac792e9 (diff)
after composing a file is queued
-rw-r--r--internal/client/tui/compose.go45
-rw-r--r--internal/client/tui/editor.go34
-rw-r--r--internal/client/tui/enter.go1
-rw-r--r--internal/client/tui/tui.go9
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