Skip to content

Commit 1557079

Browse files
committed
set room and member avatar
1 parent f610532 commit 1557079

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

pkg/connector/client.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,15 @@ func (c *GChatClient) onConnect(ctx context.Context) {
129129
var gcMembers []*proto.UserId
130130
roomType := database.RoomTypeGroupDM
131131
isDm := false
132+
var dmUser *proto.User
132133
if item.DmMembers != nil {
133134
roomType = database.RoomTypeDM
134135
gcMembers = item.DmMembers.Members
135136
isDm = true
136137
for _, member := range item.DmMembers.Members {
137138
if member.Id != string(c.userLogin.ID) {
138-
name = c.users[member.Id].Name
139+
dmUser = c.users[member.Id]
140+
name = dmUser.Name
139141
break
140142
}
141143
}
@@ -157,6 +159,18 @@ func (c *GChatClient) onConnect(ctx context.Context) {
157159

158160
}
159161

162+
chatInfo := &bridgev2.ChatInfo{
163+
Name: &name,
164+
Members: c.gcMembersToMatrix(isDm, gcMembers),
165+
Type: &roomType,
166+
}
167+
168+
if dmUser != nil {
169+
chatInfo.Avatar = c.makeAvatar(dmUser.AvatarUrl)
170+
} else if item.AvatarUrl != "" {
171+
chatInfo.Avatar = c.makeAvatar(item.AvatarUrl)
172+
}
173+
160174
c.userLogin.Bridge.QueueRemoteEvent(c.userLogin, &simplevent.ChatResync{
161175
EventMeta: simplevent.EventMeta{
162176
Type: bridgev2.RemoteEventChatResync,
@@ -166,11 +180,7 @@ func (c *GChatClient) onConnect(ctx context.Context) {
166180
},
167181
CreatePortal: true,
168182
},
169-
ChatInfo: &bridgev2.ChatInfo{
170-
Name: &name,
171-
Members: c.gcMembersToMatrix(isDm, gcMembers),
172-
Type: &roomType,
173-
},
183+
ChatInfo: chatInfo,
174184
})
175185

176186
c.backfillPortal(ctx, item)

pkg/connector/mapping.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
package connector
22

33
import (
4+
"context"
5+
"io"
6+
"net/http"
7+
48
"maunium.net/go/mautrix/bridgev2"
59
"maunium.net/go/mautrix/bridgev2/networkid"
610

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

14+
func (c *GChatClient) makeAvatar(avatarURL string) *bridgev2.Avatar {
15+
return &bridgev2.Avatar{
16+
ID: networkid.AvatarID(avatarURL),
17+
Get: func(ctx context.Context) ([]byte, error) {
18+
resp, err := http.Get(avatarURL)
19+
if err != nil {
20+
return nil, err
21+
}
22+
data, err := io.ReadAll(resp.Body)
23+
_ = resp.Body.Close()
24+
return data, err
25+
},
26+
Remove: avatarURL == "",
27+
}
28+
}
29+
1030
func (c *GChatClient) gcMembersToMatrix(isDm bool, gcMembers []*proto.UserId) *bridgev2.ChatMemberList {
1131
var otherUserId string
1232
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
@@ -16,12 +36,20 @@ func (c *GChatClient) gcMembersToMatrix(isDm bool, gcMembers []*proto.UserId) *b
1636
otherUserId = gcMember.Id
1737

1838
}
19-
memberMap[userId] = bridgev2.ChatMember{
39+
member := bridgev2.ChatMember{
2040
EventSender: bridgev2.EventSender{
2141
IsFromMe: gcMember.Id == string(c.userLogin.ID),
2242
Sender: userId,
2343
},
2444
}
45+
user := c.users[gcMember.Id]
46+
if user != nil {
47+
member.UserInfo = &bridgev2.UserInfo{
48+
Name: &user.Name,
49+
Avatar: c.makeAvatar(user.AvatarUrl),
50+
}
51+
}
52+
memberMap[userId] = member
2553
}
2654

2755
return &bridgev2.ChatMemberList{

0 commit comments

Comments
 (0)