Skip to content

Commit

Permalink
render edited msg
Browse files Browse the repository at this point in the history
  • Loading branch information
rnons committed Dec 24, 2024
1 parent 6046d5a commit 21c4f2d
Showing 1 changed file with 48 additions and 31 deletions.
79 changes: 48 additions & 31 deletions pkg/connector/handlegchat.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,26 @@ import (

"github.com/rs/zerolog"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
"maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/bridgev2/simplevent"

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

func (c *GChatClient) makeEventMeta(evt *proto.Event, typ bridgev2.RemoteEventType, senderId string, ts int64) simplevent.EventMeta {
return simplevent.EventMeta{
Type: typ,
PortalKey: c.makePortalKey(evt),
Sender: bridgev2.EventSender{
IsFromMe: senderId == string(c.userLogin.ID),
SenderLogin: networkid.UserLoginID(senderId),
Sender: networkid.UserID(senderId),
},
Timestamp: time.UnixMicro(ts),
}
}

func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
evt, ok := raw.(*proto.Event)
if !ok {
Expand All @@ -23,26 +37,22 @@ func (c *GChatClient) onStreamEvent(ctx context.Context, raw any) {
switch evt.Type {
case proto.Event_MESSAGE_POSTED:
msg := evt.Body.GetMessagePosted().Message
senderId := msg.Creator.UserId.Id
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Message[*proto.Message]{
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventMessage,
PortalKey: networkid.PortalKey{
ID: networkid.PortalID(evt.GroupId.String()),
Receiver: c.userLogin.ID,
},
// CreatePortal: true,
Sender: bridgev2.EventSender{
// IsFromMe: isFromMe,
SenderLogin: networkid.UserLoginID(senderId),
Sender: networkid.UserID(senderId),
},
Timestamp: time.UnixMicro(msg.CreateTime),
},
EventMeta: c.makeEventMeta(evt, bridgev2.RemoteEventMessage, msg.Creator.UserId.Id, msg.CreateTime),
ID: networkid.MessageID(msg.Id.MessageId),
Data: msg,
ConvertMessageFunc: c.msgConv.ToMatrix,
})
case proto.Event_MESSAGE_UPDATED:
msg := evt.Body.GetMessagePosted().Message
eventMeta := c.makeEventMeta(evt, bridgev2.RemoteEventEdit, msg.Creator.UserId.Id, msg.LastEditTime)
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Message[*proto.Message]{
EventMeta: eventMeta,
ID: networkid.MessageID(msg.Id.MessageId),
TargetMessage: networkid.MessageID(msg.Id.MessageId),
Data: msg,
ConvertEditFunc: c.ConvertEdit,
})
}

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

sender := reaction.UserId.GetId()
messageId := reaction.MessageId.GetMessageId()
eventMeta := c.makeEventMeta(evt, eventType, sender, reaction.Timestamp)
eventMeta.LogContext = func(c zerolog.Context) zerolog.Context {
return c.
Str("message_id", messageId).
Str("sender", sender).
Str("emoji", reaction.Emoji.GetUnicode()).
Str("type", reaction.GetType().String())
}
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.Reaction{
EventMeta: simplevent.EventMeta{
Type: eventType,
LogContext: func(c zerolog.Context) zerolog.Context {
return c.
Str("message_id", messageId).
Str("sender", sender).
Str("emoji", reaction.Emoji.GetUnicode()).
Str("type", reaction.GetType().String())
},
PortalKey: c.makePortalKey(evt),
Timestamp: time.UnixMicro(reaction.Timestamp),
Sender: bridgev2.EventSender{
IsFromMe: sender == string(c.userLogin.ID),
Sender: networkid.UserID(sender),
},
},
EventMeta: eventMeta,
EmojiID: networkid.EmojiID(reaction.Emoji.GetUnicode()),
Emoji: reaction.Emoji.GetUnicode(),
TargetMessage: networkid.MessageID(messageId),
})
}

func (c *GChatClient) ConvertEdit(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, existing []*database.Message, msg *proto.Message) (*bridgev2.ConvertedEdit, error) {
cm, err := c.msgConv.ToMatrix(ctx, portal, intent, msg)
if err != nil {
return nil, err
}

editPart := cm.Parts[len(cm.Parts)-1].ToEditPart(existing[len(existing)-1])
editPart.Part.EditCount++

return &bridgev2.ConvertedEdit{
ModifiedParts: []*bridgev2.ConvertedEditPart{editPart},
}, nil
}

0 comments on commit 21c4f2d

Please sign in to comment.