Skip to content

Commit

Permalink
Styles + Send Command (#5)
Browse files Browse the repository at this point in the history
* Styles checkpoint

* Redesign
  • Loading branch information
drew-harris authored Aug 12, 2023
1 parent 4efc78a commit 8746854
Show file tree
Hide file tree
Showing 9 changed files with 225 additions and 99 deletions.
Empty file removed debug.log
Empty file.
5 changes: 5 additions & 0 deletions engine/dockerengine.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,11 @@ func (e *DockerEngine) RebuildAllPlugins(log types.Logger, disableCache bool) er
}
}

func (e *DockerEngine) SendCommandToSpigot(cmd string) error {
_, err := e.spigotConnection.Conn.Write([]byte(cmd + "\n"))
return err
}

func filterTerminalCharacters(input string) string {
// Regular expression to match terminal escape sequences
// re := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`)
Expand Down
2 changes: 1 addition & 1 deletion engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ type Engine interface {
// TODO: boolean for cache
RebuildAllPlugins(log types.Logger, disableCache bool) error
Shutdown() error
// SendCommandToSpigot(cmd string) error
SendCommandToSpigot(cmd string) error
CanAttach() bool
}
46 changes: 40 additions & 6 deletions engine/hostengine.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package engine

import (
"bufio"
"errors"
"fmt"
"io"
"net/http"
"os"
"os/exec"
"path/filepath"
"strings"

"github.com/drewharris/shulker/commands"
"github.com/drewharris/shulker/config"
Expand All @@ -17,6 +20,7 @@ import (
type HostEngine struct {
pwd string
config config.Config
server *exec.Cmd
}

func NewHostEngine(config config.Config) (*HostEngine, error) {
Expand Down Expand Up @@ -103,23 +107,53 @@ func (h *HostEngine) RebuildAllPlugins(log types.Logger, disableCache bool) erro
}

func (h *HostEngine) StartServer(log types.Logger) error {
log("Building all plugins...")
var baseDir = filepath.FromSlash(h.pwd + "/.shulkerbox/")
err := commands.RunExternalCommand(log, commands.Command{
cmdtmp := commands.Command{
Name: "java",
Dir: baseDir,
Args: []string{"-Xms1024M", "-Xmx2048M", "-Dfile.encoding=UTF-8", "-jar", "spigot.jar", "--world-dir", "./worlds", "nogui"},
})
}

cmd := exec.Command(cmdtmp.Name, cmdtmp.Args...)
cmd.Dir = baseDir

// Display output
stdout, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err.Error())
return err
}

// Combine stdout and stderr so that both are captured
cmd.Stderr = cmd.Stdout

// Start the command
if err := cmd.Start(); err != nil {
return err
}

scanner := bufio.NewScanner(stdout) // Scanner doesn't return newline byte
for scanner.Scan() {
log(strings.ReplaceAll(scanner.Text(), "\n", ""))
}

h.server = cmd
return nil
}

// Not implemented
func (h *HostEngine) Shutdown() error { return nil }
func (h *HostEngine) CanAttach() bool { return false }
func (h *HostEngine) Shutdown() error {
if h.server != nil {
if h.server.Process != nil {
err := h.server.Process.Kill()
return err
}
}
return nil
}

// Not Implemented
func (h *HostEngine) CanAttach() bool { return false }
func (h *HostEngine) SendCommandToSpigot(cmd string) error { return nil }

func copyFileContents(src, dst string) (err error) {
in, err := os.Open(src)
Expand Down
10 changes: 10 additions & 0 deletions model/cmds.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,13 @@ func (m *MainModel) rebuildAllPlugins(disableCache bool) tea.Cmd {
return types.BuildStarted
}
}

func (m *MainModel) sendCmdToSpigot(cmd string) tea.Cmd {
return func() tea.Msg {
err := m.engine.SendCommandToSpigot(cmd)
if err != nil {
return types.ErrorBuilding
}
return nil
}
}
71 changes: 43 additions & 28 deletions model/keymap.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,60 +2,75 @@ package model

import (
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
)

type KeyMap struct {
Up key.Binding
Down key.Binding
Select key.Binding
Help key.Binding
Quit key.Binding

Attach key.Binding
ToggleBuildLogs key.Binding
RebuildAll key.Binding
RebuildAllNoCache key.Binding
Help key.Binding
Quit key.Binding

SendCmdToSpigot key.Binding
ToggleBuildLogs key.Binding
RebuildAll key.Binding
RebuildAllNoCache key.Binding
ToggleReloadServerEveryBuild key.Binding
}

func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{k.Help, k.Quit}
}

// FullHelp returns keybindings for the expanded help view. It's part of the
// key.Map interface.
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{
{k.SendCmdToSpigot, k.ToggleBuildLogs, k.ToggleReloadServerEveryBuild}, // second column
{k.RebuildAll, k.RebuildAllNoCache}, // second column
{k.Help, k.Quit}, // second column
}
}

var DefaultKeyMap = KeyMap{
Up: key.NewBinding(
key.WithKeys("k", "up"), // actual keybindings
key.WithHelp("↑/k", "Move Up"), // corresponding help text
),
Down: key.NewBinding(
key.WithKeys("j", "down"),
key.WithHelp("↓/j", "Move Down"),
),
// Up: key.NewBinding(
// key.WithKeys("k", "up"), // actual keybindings
// key.WithHelp("↑/k", "Move Up"), // corresponding help text
// ),
// Down: key.NewBinding(
// key.WithKeys("j", "down"),
// key.WithHelp("↓/j", "Move Down"),
// ),

Quit: key.NewBinding(
key.WithKeys("q", "esc", "ctrl+c"),
key.WithHelp("q / esc / ctrl+c", "Quit"),
),

Select: key.NewBinding(
key.WithKeys(tea.KeyEnter.String()),
key.WithHelp("q", "Quit"),
),

Help: key.NewBinding(
key.WithKeys("h", "?"),
key.WithHelp("h", "Show Help"),
key.WithHelp("h", "Toggle Help"),
),

Attach: key.NewBinding(
key.WithKeys("a"),
key.WithHelp("a", "Attach To Server"),
SendCmdToSpigot: key.NewBinding(
key.WithKeys("c"),
key.WithHelp("c", "Send command to spigot"),
),

ToggleBuildLogs: key.NewBinding(
key.WithKeys("b"),
key.WithHelp("b", "Toggle Build Logs"),
),

RebuildAll: key.NewBinding(
key.WithKeys("r"),
key.WithHelp("r", "Rebuild Plugins"),
),

RebuildAllNoCache: key.NewBinding(
key.WithKeys("R"),
key.WithHelp("R", "Rebuild Plugins (without cache)"),
),

ToggleReloadServerEveryBuild: key.NewBinding(
key.WithKeys("t"),
key.WithHelp("t", "Reload server every build (toggle)"),
),
}
Loading

0 comments on commit 8746854

Please sign in to comment.