gui/pkg/display/sidecar.go

55 lines
1.5 KiB
Go
Raw Normal View History

package display
import (
"context"
"strings"
core "dappco.re/go/core"
"forge.lthn.ai/core/gui/pkg/deno"
)
func (s *Service) registerSidecarActions() {
if strings.TrimSpace(core.Env("CORE_DENO_ENABLE")) != "" && s.sidecar == nil {
manager := deno.New(deno.Options{
Binary: strings.TrimSpace(core.Env("CORE_DENO_BINARY")),
Dir: strings.TrimSpace(core.Env("CORE_DENO_DIR")),
Args: splitCommandArgs(core.Env("CORE_DENO_ARGS")),
})
s.sidecar = manager
_, _ = s.sidecar.Start(context.Background())
}
s.Core().Action("display.sidecar.start", func(ctx context.Context, _ core.Options) core.Result {
manager := s.ensureSidecar()
status, err := manager.Start(ctx)
return core.Result{}.New(status, err)
})
s.Core().Action("display.sidecar.stop", func(ctx context.Context, _ core.Options) core.Result {
manager := s.ensureSidecar()
status, err := manager.Stop(ctx)
return core.Result{}.New(status, err)
})
s.Core().Action("display.sidecar.status", func(_ context.Context, _ core.Options) core.Result {
return core.Result{Value: s.ensureSidecar().Status(), OK: true}
})
}
func (s *Service) ensureSidecar() *deno.Manager {
if s.sidecar == nil {
s.sidecar = deno.New(deno.Options{
Binary: strings.TrimSpace(core.Env("CORE_DENO_BINARY")),
Dir: strings.TrimSpace(core.Env("CORE_DENO_DIR")),
Args: splitCommandArgs(core.Env("CORE_DENO_ARGS")),
})
}
return s.sidecar
}
func splitCommandArgs(value string) []string {
fields := strings.Fields(strings.TrimSpace(value))
if len(fields) == 0 {
return nil
}
return fields
}