From 0b3ebc99963f76fc08ac41250e90b33ea0794895 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Thu, 25 Oct 2018 11:07:46 +0200 Subject: [PATCH] Fix for message service - broadcast messages with loaded attachments --- sam/service/message.go | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/sam/service/message.go b/sam/service/message.go index 85b30af95..f03acd302 100644 --- a/sam/service/message.go +++ b/sam/service/message.go @@ -88,27 +88,39 @@ func (svc *message) Find(filter *types.MessageFilter) (mm types.MessageSet, err return nil, err } - mm.Walk(func(i *types.Message) (err error) { + err = mm.Walk(func(i *types.Message) (err error) { i.User, err = svc.usr.FindByID(i.UserID) return }) + if err != nil { + return + } + return mm, svc.loadAttachments(mm) } func (svc *message) loadAttachments(mm types.MessageSet) (err error) { - var ids []uint64 - mm.Walk(func(m *types.Message) error { + var ( + ids []uint64 + aa types.MessageAttachmentSet + ) + + err = mm.Walk(func(m *types.Message) error { if m.Type == types.MessageTypeAttachment || m.Type == types.MessageTypeInlineImage { ids = append(ids, m.ID) } return nil }) - if set, err := svc.attachment.FindAttachmentByMessageID(ids...); err != nil { - return err + if err != nil { + return + } + + if aa, err = svc.attachment.FindAttachmentByMessageID(ids...); err != nil { + return } else { - return set.Walk(func(a *types.MessageAttachment) error { + return aa.Walk(func(a *types.MessageAttachment) error { if a.MessageID > 0 { if m := mm.FindById(a.MessageID); m != nil { m.Attachment = &a.Attachment @@ -337,8 +349,10 @@ func (svc *message) Unflag(messageID uint64) error { // Sends message to event loop // // It also preloads user -func (svc *message) sendEvent(messages ...*types.Message) (err error) { - for _, msg := range messages { +func (svc *message) sendEvent(mm ...*types.Message) (err error) { + svc.loadAttachments(mm) + + for _, msg := range mm { if msg.User == nil { // @todo pull user from cache if msg.User, err = svc.usr.FindByID(msg.UserID); err != nil {