Fixed deadlock with message listener

This commit is contained in:
Leon Mika 2024-05-01 21:45:47 +10:00
parent b2ddc62555
commit 29d425c77e
3 changed files with 11 additions and 8 deletions

View file

@ -187,7 +187,7 @@ func main() {
jobsController.SetMessageSender(p.Send) jobsController.SetMessageSender(p.Send)
scriptController.Init() scriptController.Init()
scriptController.SetMessageSender(p.Send) scriptController.SetMessageSender(p.Send)
commandController.SetMessageSender(p.Send) go commandController.StartMessageSender(p.Send)
log.Println("launching") log.Println("launching")
if err := p.Start(); err != nil { if err := p.Start(); err != nil {

View file

@ -22,9 +22,9 @@ type CommandController struct {
uclInst *ucl.Inst uclInst *ucl.Inst
historyProvider IterProvider historyProvider IterProvider
commandList *CommandList commandList *CommandList
msgSender func(tea.Msg)
lookupExtensions []CommandLookupExtension lookupExtensions []CommandLookupExtension
completionProvider CommandCompletionProvider completionProvider CommandCompletionProvider
msgChan chan tea.Msg
} }
func NewCommandController(historyProvider IterProvider) *CommandController { func NewCommandController(historyProvider IterProvider) *CommandController {
@ -32,6 +32,7 @@ func NewCommandController(historyProvider IterProvider) *CommandController {
historyProvider: historyProvider, historyProvider: historyProvider,
commandList: nil, commandList: nil,
lookupExtensions: nil, lookupExtensions: nil,
msgChan: make(chan tea.Msg),
} }
cc.uclInst = ucl.New( cc.uclInst = ucl.New(
ucl.WithOut(ucl.LineHandler(cc.printLine)), ucl.WithOut(ucl.LineHandler(cc.printLine)),
@ -45,8 +46,10 @@ func (c *CommandController) AddCommands(ctx *CommandList) {
c.commandList = ctx c.commandList = ctx
} }
func (c *CommandController) SetMessageSender(msg func(tea.Msg)) { func (c *CommandController) StartMessageSender(msgSender func(tea.Msg)) {
c.msgSender = msg for msg := range c.msgChan {
msgSender(msg)
}
} }
func (c *CommandController) AddCommandLookupExtension(ext CommandLookupExtension) { 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) { func (c *CommandController) printLine(s string) {
if c.msgSender != nil { select {
c.msgSender(events.StatusMsg(s)) case c.msgChan <- events.StatusMsg(s):
default:
log.Println(s)
} }
} }

View file

@ -170,8 +170,6 @@ func NewModel(
itemType = models.NullItemType itemType = models.NullItemType
case args.HasSwitch("TO"): case args.HasSwitch("TO"):
itemType = models.ExprValueItemType itemType = models.ExprValueItemType
default:
return events.Error(errors.New("unrecognised item type"))
} }
return wc.SetAttributeValue(dtv.SelectedItemIndex(), itemType, fieldName) return wc.SetAttributeValue(dtv.SelectedItemIndex(), itemType, fieldName)