Skip to content

Commit

Permalink
dm room name and member list
Browse files Browse the repository at this point in the history
  • Loading branch information
rnons committed Dec 3, 2024
1 parent 74a4761 commit 55b419d
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 16 deletions.
49 changes: 33 additions & 16 deletions pkg/connector/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ import (
"context"

"go.mau.fi/mautrix-googlechat/pkg/gchatmeow"
"go.mau.fi/mautrix-googlechat/pkg/gchatmeow/types"
"go.mau.fi/util/ptr"

"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
"maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/bridgev2/simplevent"
)
Expand All @@ -20,15 +23,15 @@ var (
)

func (c *GChatClient) Connect(ctx context.Context) error {
_, err := c.Client.LoadMessagesPage()
initialData, err := c.Client.LoadMessagesPage()
if err != nil {
return err
}
err = c.Client.Connect()
if err != nil {
return err
}
return c.onConnect(ctx)
return c.onConnect(ctx, initialData)
}

func (c *GChatClient) Disconnect() {
Expand Down Expand Up @@ -57,31 +60,45 @@ func (c *GChatClient) IsThisUser(ctx context.Context, userID networkid.UserID) b
func (c *GChatClient) LogoutRemote(ctx context.Context) {
}

func (c *GChatClient) onConnect(ctx context.Context) error {
res, err := c.Client.GetPaginatedWorlds(nil)
if err != nil {
return err
}
for _, item := range res.WorldItems {
// TODO room name for DM, and full members list
name := item.GetRoomName()
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
memberMap[networkid.UserID(c.UserLogin.ID)] = bridgev2.ChatMember{
EventSender: bridgev2.EventSender{
IsFromMe: true,
Sender: networkid.UserID(c.UserLogin.ID),
func (c *GChatClient) onConnect(ctx context.Context, initialData *types.InitialConfigData) error {
for _, group := range initialData.GroupList.SingleDms {
name := group.Name
memberMap := c.dmToMemberMap(ctx, group)
c.UserLogin.Bridge.QueueRemoteEvent(c.UserLogin, &simplevent.ChatResync{
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventChatResync,
PortalKey: networkid.PortalKey{
ID: networkid.PortalID(group.Id.SyntheticId),
Receiver: c.UserLogin.ID,
},
CreatePortal: true,
},
ChatInfo: &bridgev2.ChatInfo{
Type: ptr.Ptr(database.RoomTypeDM),
Name: &name,
Members: &bridgev2.ChatMemberList{
MemberMap: memberMap,
},
},
})
}
for _, group := range initialData.GroupList.Spaces {
name := group.Name
memberMap, err := c.spaceToMemberMap(ctx, group)
if err != nil {
return err
}
c.UserLogin.Bridge.QueueRemoteEvent(c.UserLogin, &simplevent.ChatResync{
EventMeta: simplevent.EventMeta{
Type: bridgev2.RemoteEventChatResync,
PortalKey: networkid.PortalKey{
ID: networkid.PortalID(item.GroupId.String()),
ID: networkid.PortalID(group.Id.SyntheticId),
Receiver: c.UserLogin.ID,
},
CreatePortal: true,
},
ChatInfo: &bridgev2.ChatInfo{
Type: ptr.Ptr(database.RoomTypeDefault),
Name: &name,
Members: &bridgev2.ChatMemberList{
MemberMap: memberMap,
Expand Down
68 changes: 68 additions & 0 deletions pkg/connector/mapping.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package connector

import (
"context"

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

"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/networkid"
)

func (c *GChatClient) dmToMemberMap(ctx context.Context, group *gchatprotoweb.Group) map[networkid.UserID]bridgev2.ChatMember {
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
currentUserID := networkid.UserID(c.UserLogin.ID)
memberMap[currentUserID] = bridgev2.ChatMember{
EventSender: bridgev2.EventSender{
IsFromMe: true,
Sender: currentUserID,
},
}
for _, member := range group.DmMembers {
memberUserID := networkid.UserID(member.Id.Id)
memberMap[memberUserID] = bridgev2.ChatMember{
EventSender: bridgev2.EventSender{
IsFromMe: memberUserID == currentUserID,
Sender: memberUserID,
},
UserInfo: &bridgev2.UserInfo{
Name: &member.Fullname,
},
}
}

return memberMap
}

func (c *GChatClient) spaceToMemberMap(ctx context.Context, group *gchatprotoweb.Group) (map[networkid.UserID]bridgev2.ChatMember, error) {
memberMap := map[networkid.UserID]bridgev2.ChatMember{}
payload := &gchatproto.ListMembersRequest{
GroupId: &gchatproto.GroupId{
Id: &gchatproto.GroupId_SpaceId{
SpaceId: &gchatproto.SpaceId{
SpaceId: "the-space-id",
},
},
},
}
res, err := c.Client.ListMembers(payload)
if err != nil {
return nil, err
}
currentUserID := networkid.UserID(c.UserLogin.ID)
for _, member := range res.Members {
memberUserID := networkid.UserID(member.GetUser().Id.Id)
memberMap[memberUserID] = bridgev2.ChatMember{
EventSender: bridgev2.EventSender{
IsFromMe: memberUserID == currentUserID,
Sender: memberUserID,
},
UserInfo: &bridgev2.UserInfo{
Name: &member.GetUser().Name,
},
}

}
return memberMap, nil
}

0 comments on commit 55b419d

Please sign in to comment.