Same robust file retrieval for calculating avatar SHA1 and Base64
This commit is contained in:
parent
ebc2f244d7
commit
493c49cde5
|
@ -179,14 +179,7 @@ func (c *Client) ProcessStatusUpdate(chatID int64, status string, show string, o
|
|||
|
||||
var photo string
|
||||
if chat != nil && chat.Photo != nil {
|
||||
path := chat.Photo.Small.Local.Path
|
||||
if path == "" {
|
||||
tgFile, err := c.DownloadFile(chat.Photo.Small.Id, 1, true)
|
||||
if err == nil {
|
||||
path = tgFile.Local.Path
|
||||
}
|
||||
}
|
||||
file, err := os.Open(path)
|
||||
file, path, err := c.OpenPhotoFile(chat.Photo.Small, 1)
|
||||
if err == nil {
|
||||
defer file.Close()
|
||||
|
||||
|
@ -1006,6 +999,30 @@ func (c *Client) DownloadFile(id int32, priority int32, synchronous bool) (*clie
|
|||
})
|
||||
}
|
||||
|
||||
// OpenPhotoFile reliably obtains a photo if possible
|
||||
func (c *Client) OpenPhotoFile(photoFile *client.File, priority int32) (*os.File, string, error) {
|
||||
if photoFile == nil {
|
||||
return nil, "", errors.New("Photo file not found")
|
||||
}
|
||||
|
||||
path := photoFile.Local.Path
|
||||
file, err := os.Open(path)
|
||||
if err == nil {
|
||||
return file, path, nil
|
||||
// obtain the photo right now if still not downloaded
|
||||
} else if !photoFile.Local.IsDownloadingCompleted {
|
||||
tdFile, tdErr := c.DownloadFile(photoFile.Id, priority, true)
|
||||
if tdErr == nil {
|
||||
path = tdFile.Local.Path
|
||||
file, err = os.Open(path)
|
||||
return file, path, err
|
||||
}
|
||||
}
|
||||
|
||||
// give up
|
||||
return nil, path, err
|
||||
}
|
||||
|
||||
// subscribe to a Telegram ID
|
||||
func (c *Client) subscribeToID(id int64, chat *client.Chat) {
|
||||
var args []args.V
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"encoding/base64"
|
||||
"github.com/pkg/errors"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
|
@ -252,17 +251,7 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
|
|||
vcard.Fn.Text = chat.Title
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
file, path, err := session.OpenPhotoFile(chat.Photo.Small, 32)
|
||||
if err == nil {
|
||||
defer file.Close()
|
||||
|
||||
|
|
Loading…
Reference in a new issue