Fixed deadlock with message listener
This commit is contained in:
parent
b2ddc62555
commit
29d425c77e
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue