~sircmpwn/aerc

a81467dda9d577be706a1875451a3b031840639d — Drew DeVault 1 year, 5 months ago 7d17707
Remove worker callbacks when Done is received
2 files changed, 13 insertions(+), 5 deletions(-)

M worker/types/messages.go
M worker/types/worker.go
M worker/types/messages.go => worker/types/messages.go +1 -1
@@ 34,7 34,7 @@ func (m Message) getId() int64 {
	return m.id
}

func (m Message) setId(id int64) {
func (m *Message) setId(id int64) {
	m.id = id
}


M worker/types/worker.go => worker/types/worker.go +12 -4
@@ 72,13 72,17 @@ func (worker *Worker) PostMessage(msg WorkerMessage,

func (worker *Worker) ProcessMessage(msg WorkerMessage) WorkerMessage {
	if resp := msg.InResponseTo(); resp != nil {
		worker.Logger.Printf("(ui)<= %T:%T\n", msg, resp)
		worker.Logger.Printf("(ui)<= %T(%d):%T(%d)\n",
			msg, msg.getId(), resp, resp.getId())
	} else {
		worker.Logger.Printf("(ui)<= %T\n", msg)
		worker.Logger.Printf("(ui)<= %T(%d)\n", msg, msg.getId())
	}
	if inResponseTo := msg.InResponseTo(); inResponseTo != nil {
		if f, ok := worker.actionCallbacks[inResponseTo.getId()]; ok {
			f(msg)
			if _, ok := msg.(*Done); ok {
				delete(worker.actionCallbacks, inResponseTo.getId())
			}
		}
	}
	return msg


@@ 86,13 90,17 @@ func (worker *Worker) ProcessMessage(msg WorkerMessage) WorkerMessage {

func (worker *Worker) ProcessAction(msg WorkerMessage) WorkerMessage {
	if resp := msg.InResponseTo(); resp != nil {
		worker.Logger.Printf("<-(ui) %T:%T\n", msg, resp)
		worker.Logger.Printf("<-(ui) %T(%d):%T(%d)\n",
			msg, msg.getId(), resp, resp.getId())
	} else {
		worker.Logger.Printf("<-(ui) %T\n", msg)
		worker.Logger.Printf("<-(ui) %T(%d)\n", msg, msg.getId())
	}
	if inResponseTo := msg.InResponseTo(); inResponseTo != nil {
		if f, ok := worker.messageCallbacks[inResponseTo.getId()]; ok {
			f(msg)
			if _, ok := msg.(*Done); ok {
				delete(worker.messageCallbacks, inResponseTo.getId())
			}
		}
	}
	return msg