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{
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
},
}
+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
// 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
}
}