diff options
| author | Paul Buetow <paul@buetow.org> | 2024-09-21 14:03:45 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-09-21 14:03:45 +0300 |
| commit | dff4d455e07d639b82a0bed814f41d0656e9b6d0 (patch) | |
| tree | 56289a6fd80a00a9724992ab9cb8b3d7215ebedf /internal/client/tui | |
| parent | 780ade3dc066afb8a43be824373414f3d316ebd6 (diff) | |
cleanup
Diffstat (limited to 'internal/client/tui')
| -rw-r--r-- | internal/client/tui/compose.go | 64 | ||||
| -rw-r--r-- | internal/client/tui/finishedmsg.go | 21 | ||||
| -rw-r--r-- | internal/client/tui/submit.go | 51 | ||||
| -rw-r--r-- | internal/client/tui/tui.go | 136 |
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) -} |
