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
|
var photo string
|
||||||
if chat != nil && chat.Photo != nil {
|
if chat != nil && chat.Photo != nil {
|
||||||
path := chat.Photo.Small.Local.Path
|
file, path, err := c.OpenPhotoFile(chat.Photo.Small, 1)
|
||||||
if path == "" {
|
|
||||||
tgFile, err := c.DownloadFile(chat.Photo.Small.Id, 1, true)
|
|
||||||
if err == nil {
|
|
||||||
path = tgFile.Local.Path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file, err := os.Open(path)
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
defer file.Close()
|
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
|
// subscribe to a Telegram ID
|
||||||
func (c *Client) subscribeToID(id int64, chat *client.Chat) {
|
func (c *Client) subscribeToID(id int64, chat *client.Chat) {
|
||||||
var args []args.V
|
var args []args.V
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -252,17 +251,7 @@ func handleGetVcardTempIq(s xmpp.Sender, iq *stanza.IQ) {
|
||||||
vcard.Fn.Text = chat.Title
|
vcard.Fn.Text = chat.Title
|
||||||
|
|
||||||
if chat.Photo != nil {
|
if chat.Photo != nil {
|
||||||
path := chat.Photo.Small.Local.Path
|
file, path, err := session.OpenPhotoFile(chat.Photo.Small, 32)
|
||||||
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()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue