summaryrefslogtreecommitdiff
path: root/internal/client/tui
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-09-21 14:03:45 +0300
committerPaul Buetow <paul@buetow.org>2024-09-21 14:03:45 +0300
commitdff4d455e07d639b82a0bed814f41d0656e9b6d0 (patch)
tree56289a6fd80a00a9724992ab9cb8b3d7215ebedf /internal/client/tui
parent780ade3dc066afb8a43be824373414f3d316ebd6 (diff)
cleanup
Diffstat (limited to 'internal/client/tui')
-rw-r--r--internal/client/tui/compose.go64
-rw-r--r--internal/client/tui/finishedmsg.go21
-rw-r--r--internal/client/tui/submit.go51
-rw-r--r--internal/client/tui/tui.go136
4 files changed, 0 insertions, 272 deletions
diff --git a/internal/client/tui/compose.go b/internal/client/tui/compose.go
deleted file mode 100644
index 61883f8..0000000
--- a/internal/client/tui/compose.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package tui
-
-import (
- "context"
- "fmt"
- "log"
- "os"
- "os/exec"
- "time"
-
- config "codeberg.org/snonux/gos/internal/config/client"
- tea "github.com/charmbracelet/bubbletea"
-)
-
-type composePostAction int
-
-const (
- noPostAction composePostAction = iota
- queueAfterCompose
- submitAfterCompose
-)
-
-func composeActionCmd(ctx context.Context, conf config.ClientConfig, postAction composePostAction) tea.Cmd {
- err := ensureDirectoryExists(conf.DataDir)
- composeFile := fmt.Sprintf("%s/%s", conf.DataDir, conf.ComposeFile)
- log.Println("Composing", composeFile)
-
- return openEditorCmd(conf.Editor, composeFile, func() error {
- if err != nil {
- return err
- }
-
- switch postAction {
- case submitAfterCompose:
- return submitEntry(ctx, conf, composeFile)
- case queueAfterCompose:
- timestamp := time.Now().Format("20060102-150405")
- queuedFile := fmt.Sprintf("%s/queued-%s.txt", conf.DataDir, timestamp)
- return os.Rename(composeFile, queuedFile)
- }
-
- return nil
- })
-}
-
-func openEditorCmd(editor, filePath string, cb func() error) tea.Cmd {
- return tea.ExecProcess(exec.Command(editor, filePath), func(err error) tea.Msg {
- return finishedMsg{
- cb: cb,
- err: 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/finishedmsg.go b/internal/client/tui/finishedmsg.go
deleted file mode 100644
index d1e9165..0000000
--- a/internal/client/tui/finishedmsg.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package tui
-
-import tea "github.com/charmbracelet/bubbletea"
-
-type finishedMsg struct {
- cb func() error
- err error
-}
-
-func (f finishedMsg) Error() string {
- return f.err.Error()
-}
-
-func finishedCmd(cb func() error, err error) tea.Cmd {
- return func() tea.Msg {
- return finishedMsg{
- cb: cb,
- err: err,
- }
- }
-}
diff --git a/internal/client/tui/submit.go b/internal/client/tui/submit.go
deleted file mode 100644
index cc1ff0d..0000000
--- a/internal/client/tui/submit.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package tui
-
-import (
- "context"
- "errors"
- "fmt"
- "log"
- "os"
- "time"
-
- "codeberg.org/snonux/gos/internal/config/client"
- config "codeberg.org/snonux/gos/internal/config/client"
- "codeberg.org/snonux/gos/internal/easyhttp"
- "codeberg.org/snonux/gos/internal/types"
- tea "github.com/charmbracelet/bubbletea"
-)
-
-func submitActionCmd(ctx context.Context, conf config.ClientConfig) tea.Cmd {
- composeFile := fmt.Sprintf("%s/%s", conf.DataDir, conf.ComposeFile)
- log.Println("Submitting", composeFile)
-
- return submitEntryCmd(ctx, conf, composeFile, func() error {
- // This is the cb to call when the entry was submitted succesfully
- return nil
- })
-}
-
-func submitEntryCmd(ctx context.Context, conf client.ClientConfig, composeFile string, cb func() error) tea.Cmd {
- return finishedCmd(cb, submitEntry(ctx, conf, composeFile))
-}
-
-func submitEntry(ctx context.Context, conf client.ClientConfig, composeFile string) error {
- if len(conf.Servers) == 0 {
- return errors.New("no server configured")
- }
-
- entry, err := types.NewEntryFromTextFile(composeFile)
- if err != nil {
- return err
- }
-
- if err := easyhttp.PostData(ctx, "submit", conf.APIKey, &entry, conf.Servers...); err != nil {
- return err
- }
-
- timestamp := time.Now().Format("20060102-150405")
- submittedFile := fmt.Sprintf("%s/submitted-%s.txt", conf.DataDir, timestamp)
-
- log.Println("Renaming", composeFile, "to", submittedFile)
- return os.Rename(composeFile, submittedFile)
-}
diff --git a/internal/client/tui/tui.go b/internal/client/tui/tui.go
deleted file mode 100644
index c084d9c..0000000
--- a/internal/client/tui/tui.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package tui
-
-import (
- "context"
- "fmt"
- "log"
-
- config "codeberg.org/snonux/gos/internal/config/client"
- tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/lipgloss"
-)
-
-var style = lipgloss.NewStyle().
- Foreground(lipgloss.Color("#FFFFFF")).
- Background(lipgloss.Color("#0000FF")).
- PaddingTop(2).PaddingLeft(4).PaddingRight(4).
- BorderStyle(lipgloss.RoundedBorder()).
- BorderForeground(lipgloss.Color("#FFFFFF")).
- BorderBackground(lipgloss.Color("#0000FF"))
-
-var errroStyle = lipgloss.NewStyle().
- Bold(true).
- Align(lipgloss.Center).
- Foreground(lipgloss.Color("#FFFFFF")).
- Background(lipgloss.Color("#FF0000")).
- PaddingTop(0).PaddingBottom(0).PaddingLeft(2).PaddingRight(2).
- BorderStyle(lipgloss.RoundedBorder()).
- BorderForeground(lipgloss.Color("#FFFFFF")).
- BorderBackground(lipgloss.Color("#FF0000"))
-
-func Run(conf config.ClientConfig) error {
- p := tea.NewProgram(initModel(conf))
- _, err := p.Run()
- return err
-}
-
-type model struct {
- choices []string
- cursor int
- conf config.ClientConfig
- altscreenActive bool
- ctx context.Context
- err error
-}
-
-const (
- cursorCompose = iota
- cursorSubmit
- cursorComposeAndSubmit
-)
-
-func initModel(conf config.ClientConfig) model {
- return model{
- choices: []string{"Compose post", "Submit post", "Compose & submit post"},
- ctx: context.Background(),
- conf: conf,
- }
-}
-
-func (m model) Init() tea.Cmd {
- return nil
-}
-
-func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
- switch msg := msg.(type) {
- case tea.KeyMsg:
- switch msg.String() {
- case "up", "k":
- if m.cursor > 0 {
- m.cursor--
- }
- case "down", "j":
- if m.cursor < len(m.choices)-1 {
- m.cursor++
- }
- case "enter":
- switch m.cursor {
- case cursorCompose:
- return m, composeActionCmd(m.ctx, m.conf, noPostAction)
- case cursorSubmit:
- return m, submitActionCmd(m.ctx, m.conf)
- case cursorComposeAndSubmit:
- return m, composeActionCmd(m.ctx, m.conf, submitAfterCompose)
- }
- case "1":
- return m, composeActionCmd(m.ctx, m.conf, noPostAction)
- case "2":
- return m, submitActionCmd(m.ctx, m.conf)
- case "3":
- return m, composeActionCmd(m.ctx, m.conf, submitAfterCompose)
-
- case "a":
- m.altscreenActive = !m.altscreenActive
- cmd := tea.EnterAltScreen
- if !m.altscreenActive {
- cmd = tea.ExitAltScreen
- }
- return m, cmd
- case "ctrl+c", "q":
- return m, tea.Quit
- }
- case finishedMsg:
- m.err = msg.err
- if m.err != nil {
- return m, nil
- }
- if err := msg.cb(); err != nil {
- m.err = err
- }
- }
-
- return m, nil
-}
-
-func (m model) View() string {
- s := "Please choose your destiny\n\n"
-
- for i, choice := range m.choices {
- cursor := " " // no cursor
- if m.cursor == i {
- cursor = "==>"
- }
-
- s += fmt.Sprintf("%s %d. %s\n", cursor, i+1, choice)
- }
-
- if m.err != nil {
- log.Println(m.err)
- s += "\n"
- s += errroStyle.Render(fmt.Sprintf("\nERROR: %s\n", m.err))
- s += "\n"
- }
-
- s += "\nPress q to quit.\n"
- return style.Render(s)
-}