Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c016f5d

Browse files
committedDec 22, 2024··
render mention
1 parent 5616408 commit c016f5d

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-3
lines changed
 

‎pkg/connector/client.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

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

@@ -125,8 +126,12 @@ func (c *GChatClient) onConnect(ctx context.Context) {
125126
for _, item := range res.WorldItems {
126127
name := item.RoomName
127128
var gcMembers []*proto.UserId
129+
roomType := database.RoomTypeGroupDM
130+
isDm := false
128131
if item.DmMembers != nil {
132+
roomType = database.RoomTypeDM
129133
gcMembers = item.DmMembers.Members
134+
isDm = true
130135
for _, member := range item.DmMembers.Members {
131136
if member.Id != string(c.userLogin.ID) {
132137
name = c.users[member.Id].Name
@@ -162,7 +167,8 @@ func (c *GChatClient) onConnect(ctx context.Context) {
162167
},
163168
ChatInfo: &bridgev2.ChatInfo{
164169
Name: &name,
165-
Members: c.gcMembersToMatrix(gcMembers),
170+
Members: c.gcMembersToMatrix(isDm, gcMembers),
171+
Type: &roomType,
166172
},
167173
})
168174

‎pkg/connector/mapping.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ import (
77
"go.mau.fi/mautrix-googlechat/pkg/gchatmeow/proto"
88
)
99

10-
func (c *GChatClient) gcMembersToMatrix(gcMembers []*proto.UserId) *bridgev2.ChatMemberList {
10+
func (c *GChatClient) gcMembersToMatrix(isDm bool, gcMembers []*proto.UserId) *bridgev2.ChatMemberList {
11+
var otherUserId string
1112
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
1213
for _, gcMember := range gcMembers {
1314
userId := networkid.UserID(gcMember.Id)
15+
if isDm && gcMember.Id != string(c.userLogin.ID) {
16+
otherUserId = gcMember.Id
17+
18+
}
1419
memberMap[userId] = bridgev2.ChatMember{
1520
EventSender: bridgev2.EventSender{
1621
IsFromMe: gcMember.Id == string(c.userLogin.ID),
@@ -20,6 +25,7 @@ func (c *GChatClient) gcMembersToMatrix(gcMembers []*proto.UserId) *bridgev2.Cha
2025
}
2126

2227
return &bridgev2.ChatMemberList{
23-
MemberMap: memberMap,
28+
MemberMap: memberMap,
29+
OtherUserID: networkid.UserID(otherUserId),
2430
}
2531
}

‎pkg/msgconv/gchatfmt/convert.go

+33
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
pb "google.golang.org/protobuf/proto"
1111
"maunium.net/go/mautrix/bridgev2"
12+
"maunium.net/go/mautrix/bridgev2/networkid"
1213
"maunium.net/go/mautrix/event"
1314

1415
"go.mau.fi/mautrix-googlechat/pkg/gchatmeow"
@@ -180,6 +181,38 @@ func annotationsToMatrix(
180181
default:
181182
skipEntity = true
182183
}
184+
} else if annotation.GetUrlMetadata() != nil {
185+
fmt.Fprintf(&bodyHtml, "<a href='%s'>%s</a>", annotation.GetUrlMetadata().Url.Url, entityText)
186+
} else if annotation.GetUserMentionMetadata() != nil {
187+
if annotation.GetUserMentionMetadata().Type == proto.UserMentionMetadata_MENTION_ALL {
188+
bodyHtml.WriteString("@room")
189+
} else {
190+
gcid := annotation.GetUserMentionMetadata().Id.Id
191+
dmPortals, err := portal.Bridge.GetDMPortalsWith(ctx, networkid.UserID(gcid))
192+
if err != nil {
193+
return "", err
194+
}
195+
196+
if len(dmPortals) != 0 {
197+
fmt.Fprintf(&bodyHtml,
198+
`<a href="%s">%s</a>`,
199+
dmPortals[0].MXID.URI().MatrixToURL(),
200+
dmPortals[0].Name,
201+
)
202+
} else {
203+
userLogin := portal.Bridge.GetCachedUserLoginByID(networkid.UserLoginID(gcid))
204+
if userLogin != nil {
205+
fmt.Fprintf(&bodyHtml,
206+
`<a href="%s">%s</a>`,
207+
userLogin.UserMXID.URI().MatrixToURL(),
208+
entityText,
209+
)
210+
211+
} else {
212+
bodyHtml.WriteString(entityText)
213+
}
214+
}
215+
}
183216
} else {
184217
skipEntity = true
185218
}

0 commit comments

Comments
 (0)
Please sign in to comment.