diff --git a/cmd/dynamo-browse/main.go b/cmd/dynamo-browse/main.go index ac7ac1f..3a89f66 100644 --- a/cmd/dynamo-browse/main.go +++ b/cmd/dynamo-browse/main.go @@ -187,7 +187,7 @@ func main() { jobsController.SetMessageSender(p.Send) scriptController.Init() scriptController.SetMessageSender(p.Send) - commandController.SetMessageSender(p.Send) + go commandController.StartMessageSender(p.Send) log.Println("launching") if err := p.Start(); err != nil { diff --git a/internal/common/ui/commandctrl/commandctrl.go b/internal/common/ui/commandctrl/commandctrl.go index a1360d5..206f8a6 100644 --- a/internal/common/ui/commandctrl/commandctrl.go +++ b/internal/common/ui/commandctrl/commandctrl.go @@ -22,9 +22,9 @@ type CommandController struct { uclInst *ucl.Inst historyProvider IterProvider commandList *CommandList - msgSender func(tea.Msg) lookupExtensions []CommandLookupExtension completionProvider CommandCompletionProvider + msgChan chan tea.Msg } func NewCommandController(historyProvider IterProvider) *CommandController { @@ -32,6 +32,7 @@ func NewCommandController(historyProvider IterProvider) *CommandController { historyProvider: historyProvider, commandList: nil, lookupExtensions: nil, + msgChan: make(chan tea.Msg), } cc.uclInst = ucl.New( ucl.WithOut(ucl.LineHandler(cc.printLine)), @@ -45,8 +46,10 @@ func (c *CommandController) AddCommands(ctx *CommandList) { c.commandList = ctx } -func (c *CommandController) SetMessageSender(msg func(tea.Msg)) { - c.msgSender = msg +func (c *CommandController) StartMessageSender(msgSender func(tea.Msg)) { + for msg := range c.msgChan { + msgSender(msg) + } } func (c *CommandController) AddCommandLookupExtension(ext CommandLookupExtension) { @@ -183,8 +186,10 @@ func (c *CommandController) cmdInvoker(ctx context.Context, name string, args uc } func (c *CommandController) printLine(s string) { - if c.msgSender != nil { - c.msgSender(events.StatusMsg(s)) + select { + case c.msgChan <- events.StatusMsg(s): + default: + log.Println(s) } } diff --git a/internal/dynamo-browse/ui/model.go b/internal/dynamo-browse/ui/model.go index 8d3297e..ac6d873 100644 --- a/internal/dynamo-browse/ui/model.go +++ b/internal/dynamo-browse/ui/model.go @@ -170,8 +170,6 @@ func NewModel( itemType = models.NullItemType case args.HasSwitch("TO"): itemType = models.ExprValueItemType - default: - return events.Error(errors.New("unrecognised item type")) } return wc.SetAttributeValue(dtv.SelectedItemIndex(), itemType, fieldName)