Skip to content

Commit 21c4f2d

Browse files
committed
render edited msg
1 parent 6046d5a commit 21c4f2d

File tree

1 file changed

+48
-31
lines changed

1 file changed

+48
-31
lines changed

pkg/connector/handlegchat.go

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,26 @@ import (
77

88
"github.com/rs/zerolog"
99
"maunium.net/go/mautrix/bridgev2"
10+
"maunium.net/go/mautrix/bridgev2/database"
1011
"maunium.net/go/mautrix/bridgev2/networkid"
1112
"maunium.net/go/mautrix/bridgev2/simplevent"
1213

1314
"go.mau.fi/mautrix-googlechat/pkg/gchatmeow/proto"
1415
)
1516

17+
func (c *GChatClient) makeEventMeta(evt *proto.Event, typ bridgev2.RemoteEventType, senderId string, ts int64) simplevent.EventMeta {
18+
return simplevent.EventMeta{
19+
Type: typ,
20+
PortalKey: c.makePortalKey(evt),
21+
Sender: bridgev2.EventSender{
22+
IsFromMe: senderId == string(c.userLogin.ID),
23+
SenderLogin: networkid.UserLoginID(senderId),
24+
Sender: networkid.UserID(senderId),
25+
},
26+
Timestamp: time.UnixMicro(ts),
27+
}
28+
}
29+
1630
func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
1731
evt, ok := raw.(*proto.Event)
1832
if !ok {
@@ -23,26 +37,22 @@ func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
2337
switch evt.Type {
2438
case proto.Event_MESSAGE_POSTED:
2539
msg := evt.Body.GetMessagePosted().Message
26-
senderId := msg.Creator.UserId.Id
2740
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Message[*proto.Message]{
28-
EventMeta: simplevent.EventMeta{
29-
Type: bridgev2.RemoteEventMessage,
30-
PortalKey: networkid.PortalKey{
31-
ID: networkid.PortalID(evt.GroupId.String()),
32-
Receiver: c.userLogin.ID,
33-
},
34-
// CreatePortal: true,
35-
Sender: bridgev2.EventSender{
36-
// IsFromMe: isFromMe,
37-
SenderLogin: networkid.UserLoginID(senderId),
38-
Sender: networkid.UserID(senderId),
39-
},
40-
Timestamp: time.UnixMicro(msg.CreateTime),
41-
},
41+
EventMeta: c.makeEventMeta(evt, bridgev2.RemoteEventMessage, msg.Creator.UserId.Id, msg.CreateTime),
4242
ID: networkid.MessageID(msg.Id.MessageId),
4343
Data: msg,
4444
ConvertMessageFunc: c.msgConv.ToMatrix,
4545
})
46+
case proto.Event_MESSAGE_UPDATED:
47+
msg := evt.Body.GetMessagePosted().Message
48+
eventMeta := c.makeEventMeta(evt, bridgev2.RemoteEventEdit, msg.Creator.UserId.Id, msg.LastEditTime)
49+
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Message[*proto.Message]{
50+
EventMeta: eventMeta,
51+
ID: networkid.MessageID(msg.Id.MessageId),
52+
TargetMessage: networkid.MessageID(msg.Id.MessageId),
53+
Data: msg,
54+
ConvertEditFunc: c.ConvertEdit,
55+
})
4656
}
4757

4858
c.setPortalRevision(ctx, evt)
@@ -66,25 +76,32 @@ func (c *GChatClient) handleReaction(ctx context.Context, evt *proto.Event) {
6676

6777
sender := reaction.UserId.GetId()
6878
messageId := reaction.MessageId.GetMessageId()
79+
eventMeta := c.makeEventMeta(evt, eventType, sender, reaction.Timestamp)
80+
eventMeta.LogContext = func(c zerolog.Context) zerolog.Context {
81+
return c.
82+
Str("message_id", messageId).
83+
Str("sender", sender).
84+
Str("emoji", reaction.Emoji.GetUnicode()).
85+
Str("type", reaction.GetType().String())
86+
}
6987
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Reaction{
70-
EventMeta: simplevent.EventMeta{
71-
Type: eventType,
72-
LogContext: func(c zerolog.Context) zerolog.Context {
73-
return c.
74-
Str("message_id", messageId).
75-
Str("sender", sender).
76-
Str("emoji", reaction.Emoji.GetUnicode()).
77-
Str("type", reaction.GetType().String())
78-
},
79-
PortalKey: c.makePortalKey(evt),
80-
Timestamp: time.UnixMicro(reaction.Timestamp),
81-
Sender: bridgev2.EventSender{
82-
IsFromMe: sender == string(c.userLogin.ID),
83-
Sender: networkid.UserID(sender),
84-
},
85-
},
88+
EventMeta: eventMeta,
8689
EmojiID: networkid.EmojiID(reaction.Emoji.GetUnicode()),
8790
Emoji: reaction.Emoji.GetUnicode(),
8891
TargetMessage: networkid.MessageID(messageId),
8992
})
9093
}
94+
95+
func (c *GChatClient) ConvertEdit(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, existing []*database.Message, msg *proto.Message) (*bridgev2.ConvertedEdit, error) {
96+
cm, err := c.msgConv.ToMatrix(ctx, portal, intent, msg)
97+
if err != nil {
98+
return nil, err
99+
}
100+
101+
editPart := cm.Parts[len(cm.Parts)-1].ToEditPart(existing[len(existing)-1])
102+
editPart.Part.EditCount++
103+
104+
return &bridgev2.ConvertedEdit{
105+
ModifiedParts: []*bridgev2.ConvertedEditPart{editPart},
106+
}, nil
107+
}

0 commit comments

Comments
 (0)