aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2022-01-27 05:09:19 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2022-01-27 05:09:19 +0300
commit6da0fd56fff386f19ae982cc02c8f0996c51e2f1 (patch)
treef8e491d6bf2a77655e74b0523e460c514425cd4f
parent02444d7a044fad74414e7d55905ab5a13df61aae (diff)
Force downloading the chat photo when vCard is requested
-rw-r--r--telegram/handlers.go12
-rw-r--r--telegram/utils.go9
-rw-r--r--xmpp/handlers.go11
3 files changed, 22 insertions, 10 deletions
diff --git a/telegram/handlers.go b/telegram/handlers.go
index a28d5da..cf8b3d8 100644
--- a/telegram/handlers.go
+++ b/telegram/handlers.go
@@ -134,11 +134,7 @@ func (c *Client) updateUserStatus(update *client.UpdateUserStatus) {
func (c *Client) updateNewChat(update *client.UpdateNewChat) {
go func() {
if update.Chat != nil && update.Chat.Photo != nil && update.Chat.Photo.Small != nil {
- _, err := c.client.DownloadFile(&client.DownloadFileRequest{
- FileId: update.Chat.Photo.Small.Id,
- Priority: 32,
- Synchronous: false,
- })
+ _, err := c.DownloadFile(update.Chat.Photo.Small.Id, 32, true)
if err != nil {
log.Error("Failed to download the chat photo")
@@ -196,11 +192,7 @@ func (c *Client) updateNewMessage(update *client.UpdateNewMessage) {
// download file(s)
if file != nil && !file.Local.IsDownloadingCompleted {
- c.client.DownloadFile(&client.DownloadFileRequest{
- FileId: file.Id,
- Priority: 10,
- Synchronous: false,
- })
+ c.DownloadFile(file.Id, 10, false)
}
// OTR support (I do not know why would you need it, seriously)
if !strings.HasPrefix(text, "?OTR") {
diff --git a/telegram/utils.go b/telegram/utils.go
index 63a880e..be48497 100644
--- a/telegram/utils.go
+++ b/telegram/utils.go
@@ -635,3 +635,12 @@ func (c *Client) getLastMessages(id int64, query string, from int64, count int32
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,
+ })
+}
diff --git a/xmpp/handlers.go b/xmpp/handlers.go
index 07c30ec..6770e3a 100644
--- a/xmpp/handlers.go
+++ b/xmpp/handlers.go
@@ -236,6 +236,15 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
if chat.Photo != nil {
path := chat.Photo.Small.Local.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 {
defer file.Close()
@@ -250,6 +259,8 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
}
} else if path != "" {
log.Errorf("Photo does not exist: %v", path)
+ } else {
+ log.Errorf("PHOTO: %#v", err.Error())
}
}
}