avatar: fix downloading avatars

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-08-20 14:05:18 -06:00
parent d11af1a463
commit 7e2d9bbc4e
2 changed files with 19 additions and 9 deletions
+5 -1
View File
@@ -444,7 +444,11 @@ func (t *TelegramClient) getUserInfoFromTelegramUser(ctx context.Context, u tg.U
avatar = &bridgev2.Avatar{ avatar = &bridgev2.Avatar{
ID: ids.MakeAvatarID(photo.PhotoID), ID: ids.MakeAvatarID(photo.PhotoID),
Get: func(ctx context.Context) (data []byte, err error) { 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 return
}, },
} }
+14 -8
View File
@@ -193,14 +193,20 @@ func (t *Transferer) WithPhoto(pc tg.PhotoClass) *ReadyTransferer {
// WithUser transforms a [Transferer] to a [ReadyTransferer] by setting the // WithUser transforms a [Transferer] to a [ReadyTransferer] by setting the
// given user's photo as the location that will be downloaded by the // given user's photo as the location that will be downloaded by the
// [ReadyTransferer]. // [ReadyTransferer].
func (t *Transferer) WithUserPhoto(user *tg.User, photoID int64) *ReadyTransferer { func (t *Transferer) WithUserPhoto(ctx context.Context, store *store.ScopedStore, user *tg.User, photoID int64) (*ReadyTransferer, error) {
return &ReadyTransferer{ if accessHash, found, err := store.GetUserAccessHash(ctx, user.GetID()); err != nil {
inner: t, return nil, fmt.Errorf("failed to get user access hash for %d: %w", user.GetID(), err)
loc: &tg.InputPeerPhotoFileLocation{ } else if !found {
Peer: &tg.InputPeerUser{UserID: user.GetID()}, return nil, fmt.Errorf("user access hash not found for %d", user.GetID())
PhotoID: photoID, } else {
Big: true, return &ReadyTransferer{
}, inner: t,
loc: &tg.InputPeerPhotoFileLocation{
Peer: &tg.InputPeerUser{UserID: user.GetID(), AccessHash: accessHash},
PhotoID: photoID,
Big: true,
},
}, nil
} }
} }