From 7e2d9bbc4e7783282abc7285d976ba0ad27e555e Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Tue, 20 Aug 2024 14:05:18 -0600 Subject: [PATCH] avatar: fix downloading avatars Signed-off-by: Sumner Evans --- pkg/connector/client.go | 6 +++++- pkg/connector/media/transfer.go | 22 ++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/pkg/connector/client.go b/pkg/connector/client.go index 17a129a2..7fc1615e 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -444,7 +444,11 @@ func (t *TelegramClient) getUserInfoFromTelegramUser(ctx context.Context, u tg.U avatar = &bridgev2.Avatar{ ID: ids.MakeAvatarID(photo.PhotoID), Get: func(ctx context.Context) (data []byte, err error) { - data, _, err = media.NewTransferer(t.client.API()).WithUserPhoto(user, photo.PhotoID).Download(ctx) + transferer, err := media.NewTransferer(t.client.API()).WithUserPhoto(ctx, t.ScopedStore, user, photo.PhotoID) + if err != nil { + return nil, err + } + data, _, err = transferer.Download(ctx) return }, } diff --git a/pkg/connector/media/transfer.go b/pkg/connector/media/transfer.go index b00cbeb8..fdbc742b 100644 --- a/pkg/connector/media/transfer.go +++ b/pkg/connector/media/transfer.go @@ -193,14 +193,20 @@ func (t *Transferer) WithPhoto(pc tg.PhotoClass) *ReadyTransferer { // WithUser transforms a [Transferer] to a [ReadyTransferer] by setting the // given user's photo as the location that will be downloaded by the // [ReadyTransferer]. -func (t *Transferer) WithUserPhoto(user *tg.User, photoID int64) *ReadyTransferer { - return &ReadyTransferer{ - inner: t, - loc: &tg.InputPeerPhotoFileLocation{ - Peer: &tg.InputPeerUser{UserID: user.GetID()}, - PhotoID: photoID, - Big: true, - }, +func (t *Transferer) WithUserPhoto(ctx context.Context, store *store.ScopedStore, user *tg.User, photoID int64) (*ReadyTransferer, error) { + if accessHash, found, err := store.GetUserAccessHash(ctx, user.GetID()); err != nil { + return nil, fmt.Errorf("failed to get user access hash for %d: %w", user.GetID(), err) + } else if !found { + return nil, fmt.Errorf("user access hash not found for %d", user.GetID()) + } else { + return &ReadyTransferer{ + inner: t, + loc: &tg.InputPeerPhotoFileLocation{ + Peer: &tg.InputPeerUser{UserID: user.GetID(), AccessHash: accessHash}, + PhotoID: photoID, + Big: true, + }, + }, nil } }