aboutsummaryrefslogtreecommitdiff
path: root/telegram/utils.go
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2022-06-25 23:58:15 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2022-06-25 23:58:15 +0300
commit493c49cde5b5d51f3dd9bc6b1a925b0fd2a1c52f (patch)
tree837c7d87175fc9bee033094650548eb06e26bc96 /telegram/utils.go
parentebc2f244d75edf338142f9f023d984b3c9605a67 (diff)
Same robust file retrieval for calculating avatar SHA1 and Base64
Diffstat (limited to 'telegram/utils.go')
-rw-r--r--telegram/utils.go33
1 files changed, 25 insertions, 8 deletions
diff --git a/telegram/utils.go b/telegram/utils.go
index 61fefa7..a4f3899 100644
--- a/telegram/utils.go
+++ b/telegram/utils.go
@@ -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