Force downloading the chat photo when vCard is requested

This commit is contained in:
Bohdan Horbeshko 2022-01-26 21:09:19 -05:00
parent 02444d7a04
commit 6da0fd56ff
3 changed files with 22 additions and 10 deletions

View file

@ -134,11 +134,7 @@ func (c *Client) updateUserStatus(update *client.UpdateUserStatus) {
func (c *Client) updateNewChat(update *client.UpdateNewChat) { func (c *Client) updateNewChat(update *client.UpdateNewChat) {
go func() { go func() {
if update.Chat != nil && update.Chat.Photo != nil && update.Chat.Photo.Small != nil { if update.Chat != nil && update.Chat.Photo != nil && update.Chat.Photo.Small != nil {
_, err := c.client.DownloadFile(&client.DownloadFileRequest{ _, err := c.DownloadFile(update.Chat.Photo.Small.Id, 32, true)
FileId: update.Chat.Photo.Small.Id,
Priority: 32,
Synchronous: false,
})
if err != nil { if err != nil {
log.Error("Failed to download the chat photo") log.Error("Failed to download the chat photo")
@ -196,11 +192,7 @@ func (c *Client) updateNewMessage(update *client.UpdateNewMessage) {
// download file(s) // download file(s)
if file != nil && !file.Local.IsDownloadingCompleted { if file != nil && !file.Local.IsDownloadingCompleted {
c.client.DownloadFile(&client.DownloadFileRequest{ c.DownloadFile(file.Id, 10, false)
FileId: file.Id,
Priority: 10,
Synchronous: false,
})
} }
// OTR support (I do not know why would you need it, seriously) // OTR support (I do not know why would you need it, seriously)
if !strings.HasPrefix(text, "?OTR") { if !strings.HasPrefix(text, "?OTR") {

View file

@ -635,3 +635,12 @@ func (c *Client) getLastMessages(id int64, query string, from int64, count int32
Limit: count, Limit: count,
}) })
} }
// DownloadFile actually obtains a file by id given by TDlib
func (c *Client) DownloadFile(id int32, priority int32, synchronous bool) (*client.File, error) {
return c.client.DownloadFile(&client.DownloadFileRequest{
FileId: id,
Priority: priority,
Synchronous: synchronous,
})
}

View file

@ -236,6 +236,15 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
if chat.Photo != nil { if chat.Photo != nil {
path := chat.Photo.Small.Local.Path path := chat.Photo.Small.Local.Path
file, err := os.Open(path) file, err := os.Open(path)
// obtain the photo right now if still not downloaded
if err != nil && !chat.Photo.Small.Local.IsDownloadingCompleted {
tdFile, tdErr := session.DownloadFile(chat.Photo.Small.Id, 32, true)
if tdErr == nil {
path = tdFile.Local.Path
file, err = os.Open(path)
}
}
if err == nil { if err == nil {
defer file.Close() defer file.Close()
@ -250,6 +259,8 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
} }
} else if path != "" { } else if path != "" {
log.Errorf("Photo does not exist: %v", path) log.Errorf("Photo does not exist: %v", path)
} else {
log.Errorf("PHOTO: %#v", err.Error())
} }
} }
} }