From 752107ffb03d20dcc98853ba63045820e8ac2cec Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Mon, 24 Jun 2024 14:04:56 -0600 Subject: [PATCH] initial metadata: set room avatar Signed-off-by: Sumner Evans --- ROADMAP.md | 2 +- pkg/connector/client.go | 23 +++++++++++++++++++---- pkg/connector/ids/ids.go | 4 ++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 52e2d322..89c16574 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -48,7 +48,7 @@ * [ ] Avatar * [ ] † About text * [ ] † Public channel username - * [ ] Initial chat metadata (about text missing) + * [x] Initial chat metadata (about text missing) * [ ] User metadata (displayname/avatar) * [ ] Supergroup upgrade * Misc diff --git a/pkg/connector/client.go b/pkg/connector/client.go index b95357d4..52c045df 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -17,6 +17,7 @@ import ( "maunium.net/go/mautrix/bridgev2" "maunium.net/go/mautrix/bridgev2/networkid" + "go.mau.fi/mautrix-telegram/pkg/connector/download" "go.mau.fi/mautrix-telegram/pkg/connector/ids" "go.mau.fi/mautrix-telegram/pkg/connector/msgconv" "go.mau.fi/mautrix-telegram/pkg/connector/util" @@ -258,6 +259,7 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta var name string var members []networkid.UserID var isSpace, isDM bool + var avatar *bridgev2.Avatar switch peerType { case ids.PeerTypeUser: @@ -287,6 +289,21 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta } } + chatFull, ok := fullChat.FullChat.(*tg.ChatFull) + if !ok { + return nil, fmt.Errorf("full chat is not %T", chatFull) + } + + if photo, ok := chatFull.ChatPhoto.(*tg.Photo); ok { + avatar = &bridgev2.Avatar{ + ID: ids.MakeAvatarID(photo.ID), + Get: func(ctx context.Context) (data []byte, err error) { + data, _, err = download.DownloadPhoto(ctx, t.client.API(), photo) + return + }, + } + } + for _, user := range fullChat.Users { members = append(members, ids.MakeUserID(user.GetID())) } @@ -296,10 +313,8 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta } return &bridgev2.PortalInfo{ - Name: &name, - // TODO - // Avatar *Avatar - + Name: &name, + Avatar: avatar, Members: members, IsDirectChat: &isDM, IsSpace: &isSpace, diff --git a/pkg/connector/ids/ids.go b/pkg/connector/ids/ids.go index 6f57f0de..a07d1892 100644 --- a/pkg/connector/ids/ids.go +++ b/pkg/connector/ids/ids.go @@ -99,3 +99,7 @@ func InputPeerForPortalID(portalID networkid.PortalID) (tg.InputPeerClass, error panic("invalid peer type") } } + +func MakeAvatarID(photoID int64) networkid.AvatarID { + return networkid.AvatarID(strconv.FormatInt(photoID, 10)) +}