2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-29 13:27:47 +00:00

Fix FILE_REFERENCE_* errors for downloads

This commit is contained in:
Dan 2019-09-21 21:12:11 +02:00
parent 7df4b58a51
commit 1cd94520bf
11 changed files with 62 additions and 5 deletions

View File

@ -1224,6 +1224,7 @@ class Client(Methods, BaseClient):
peer_access_hash=data.peer_access_hash, peer_access_hash=data.peer_access_hash,
volume_id=data.volume_id, volume_id=data.volume_id,
local_id=data.local_id, local_id=data.local_id,
file_ref=data.file_ref,
file_size=data.file_size, file_size=data.file_size,
is_big=data.is_big, is_big=data.is_big,
progress=progress, progress=progress,
@ -1868,6 +1869,7 @@ class Client(Methods, BaseClient):
peer_access_hash: int, peer_access_hash: int,
volume_id: int, volume_id: int,
local_id: int, local_id: int,
file_ref: bytes,
file_size: int, file_size: int,
is_big: bool, is_big: bool,
progress: callable, progress: callable,
@ -1922,21 +1924,21 @@ class Client(Methods, BaseClient):
location = types.InputPhotoFileLocation( location = types.InputPhotoFileLocation(
id=document_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=file_ref,
thumb_size=thumb_size thumb_size=thumb_size
) )
elif media_type == 14: elif media_type == 14:
location = types.InputDocumentFileLocation( location = types.InputDocumentFileLocation(
id=document_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=file_ref,
thumb_size=thumb_size thumb_size=thumb_size
) )
else: else:
location = types.InputDocumentFileLocation( location = types.InputDocumentFileLocation(
id=document_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=file_ref,
thumb_size="" thumb_size=""
) )

View File

@ -22,7 +22,7 @@ class FileData:
self, *, media_type: int = None, dc_id: int = None, document_id: int = None, access_hash: int = None, self, *, media_type: int = None, dc_id: int = None, document_id: int = None, access_hash: int = None,
thumb_size: str = None, peer_id: int = None, peer_access_hash: int = None, volume_id: int = None, thumb_size: str = None, peer_id: int = None, peer_access_hash: int = None, volume_id: int = None,
local_id: int = None, is_big: bool = None, file_size: int = None, mime_type: str = None, file_name: str = None, local_id: int = None, is_big: bool = None, file_size: int = None, mime_type: str = None, file_name: str = None,
date: int = None date: int = None, file_ref: bytes = None
): ):
self.media_type = media_type self.media_type = media_type
self.dc_id = dc_id self.dc_id = dc_id
@ -38,3 +38,4 @@ class FileData:
self.mime_type = mime_type self.mime_type = mime_type
self.file_name = file_name self.file_name = file_name
self.date = date self.date = date
self.file_ref = file_ref

View File

@ -35,6 +35,7 @@ class DownloadMedia(BaseClient):
def download_media( def download_media(
self, self,
message: Union["pyrogram.Message", str], message: Union["pyrogram.Message", str],
file_ref: bytes = None,
file_name: str = DEFAULT_DOWNLOAD_DIR, file_name: str = DEFAULT_DOWNLOAD_DIR,
block: bool = True, block: bool = True,
progress: callable = None, progress: callable = None,
@ -47,6 +48,9 @@ class DownloadMedia(BaseClient):
Pass a Message containing the media, the media itself (message.audio, message.video, ...) or Pass a Message containing the media, the media itself (message.audio, message.video, ...) or
the file id as string. the file id as string.
file_ref (``bytes``, *optional*):
A valid file reference obtained by a recently fetched media message.
file_name (``str``, *optional*): file_name (``str``, *optional*):
A custom *file_name* to be used instead of the one provided by Telegram. A custom *file_name* to be used instead of the one provided by Telegram.
By default, all files are downloaded in the *downloads* folder in your working directory. By default, all files are downloaded in the *downloads* folder in your working directory.
@ -122,12 +126,14 @@ class DownloadMedia(BaseClient):
file_size = getattr(media, "file_size", None) file_size = getattr(media, "file_size", None)
mime_type = getattr(media, "mime_type", None) mime_type = getattr(media, "mime_type", None)
date = getattr(media, "date", None) date = getattr(media, "date", None)
file_ref = getattr(media, "file_ref", None)
data = FileData( data = FileData(
file_name=media_file_name, file_name=media_file_name,
file_size=file_size, file_size=file_size,
mime_type=mime_type, mime_type=mime_type,
date=date date=date,
file_ref=file_ref or b""
) )
def get_existing_attributes() -> dict: def get_existing_attributes() -> dict:

View File

@ -33,6 +33,9 @@ class Animation(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
width (``int``): width (``int``):
Animation width as defined by sender. Animation width as defined by sender.
@ -63,6 +66,7 @@ class Animation(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
width: int, width: int,
height: int, height: int,
duration: int, duration: int,
@ -75,6 +79,7 @@ class Animation(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.file_name = file_name self.file_name = file_name
self.mime_type = mime_type self.mime_type = mime_type
self.file_size = file_size self.file_size = file_size
@ -101,6 +106,7 @@ class Animation(Object):
animation.access_hash animation.access_hash
) )
), ),
file_ref=animation.file_reference,
width=getattr(video_attributes, "w", 0), width=getattr(video_attributes, "w", 0),
height=getattr(video_attributes, "h", 0), height=getattr(video_attributes, "h", 0),
duration=getattr(video_attributes, "duration", 0), duration=getattr(video_attributes, "duration", 0),

View File

@ -33,6 +33,9 @@ class Audio(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
duration (``int``): duration (``int``):
Duration of the audio in seconds as defined by sender. Duration of the audio in seconds as defined by sender.
@ -63,6 +66,7 @@ class Audio(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
duration: int, duration: int,
file_name: str = None, file_name: str = None,
mime_type: str = None, mime_type: str = None,
@ -75,6 +79,7 @@ class Audio(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.file_name = file_name self.file_name = file_name
self.mime_type = mime_type self.mime_type = mime_type
self.file_size = file_size self.file_size = file_size
@ -101,6 +106,7 @@ class Audio(Object):
audio.access_hash audio.access_hash
) )
), ),
file_ref=audio.file_reference,
duration=audio_attributes.duration, duration=audio_attributes.duration,
performer=audio_attributes.performer, performer=audio_attributes.performer,
title=audio_attributes.title, title=audio_attributes.title,

View File

@ -33,6 +33,9 @@ class Document(Object):
file_id (``str``): file_id (``str``):
Unique file identifier. Unique file identifier.
file_ref (``bytes``):
Up to date file reference.
file_name (``str``, *optional*): file_name (``str``, *optional*):
Original filename as defined by sender. Original filename as defined by sender.
@ -54,6 +57,7 @@ class Document(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
file_name: str = None, file_name: str = None,
mime_type: str = None, mime_type: str = None,
file_size: int = None, file_size: int = None,
@ -63,6 +67,7 @@ class Document(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.file_name = file_name self.file_name = file_name
self.mime_type = mime_type self.mime_type = mime_type
self.file_size = file_size self.file_size = file_size
@ -81,6 +86,7 @@ class Document(Object):
document.access_hash document.access_hash
) )
), ),
file_ref=document.file_reference,
file_name=file_name, file_name=file_name,
mime_type=document.mime_type, mime_type=document.mime_type,
file_size=document.size, file_size=document.size,

View File

@ -33,6 +33,9 @@ class Photo(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this photo. Unique identifier for this photo.
file_ref (``bytes``):
Up to date file reference.
width (``int``): width (``int``):
Photo width. Photo width.
@ -54,6 +57,7 @@ class Photo(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
width: int, width: int,
height: int, height: int,
file_size: int, file_size: int,
@ -63,6 +67,7 @@ class Photo(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.width = width self.width = width
self.height = height self.height = height
self.file_size = file_size self.file_size = file_size
@ -83,6 +88,7 @@ class Photo(Object):
big.location.local_id big.location.local_id
) )
), ),
file_ref=photo.file_reference,
width=big.w, width=big.w,
height=big.h, height=big.h,
file_size=big.size, file_size=big.size,

View File

@ -35,6 +35,9 @@ class Sticker(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
width (``int``): width (``int``):
Sticker width. Sticker width.
@ -73,6 +76,7 @@ class Sticker(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
width: int, width: int,
height: int, height: int,
is_animated: bool, is_animated: bool,
@ -87,6 +91,7 @@ class Sticker(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.file_name = file_name self.file_name = file_name
self.mime_type = mime_type self.mime_type = mime_type
self.file_size = file_size self.file_size = file_size
@ -135,6 +140,7 @@ class Sticker(Object):
sticker.access_hash sticker.access_hash
) )
), ),
file_ref=sticker.file_reference,
width=image_size_attributes.w if image_size_attributes else 512, width=image_size_attributes.w if image_size_attributes else 512,
height=image_size_attributes.h if image_size_attributes else 512, height=image_size_attributes.h if image_size_attributes else 512,
is_animated=sticker.mime_type == "application/x-tgsticker", is_animated=sticker.mime_type == "application/x-tgsticker",

View File

@ -33,6 +33,9 @@ class Video(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
width (``int``): width (``int``):
Video width as defined by sender. Video width as defined by sender.
@ -66,6 +69,7 @@ class Video(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
width: int, width: int,
height: int, height: int,
duration: int, duration: int,
@ -79,6 +83,7 @@ class Video(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.width = width self.width = width
self.height = height self.height = height
self.duration = duration self.duration = duration
@ -106,6 +111,7 @@ class Video(Object):
video.access_hash video.access_hash
) )
), ),
file_ref=video.file_reference,
width=video_attributes.w, width=video_attributes.w,
height=video_attributes.h, height=video_attributes.h,
duration=video_attributes.duration, duration=video_attributes.duration,

View File

@ -33,6 +33,9 @@ class VideoNote(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
length (``int``): length (``int``):
Video width and height as defined by sender. Video width and height as defined by sender.
@ -57,6 +60,7 @@ class VideoNote(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
length: int, length: int,
duration: int, duration: int,
thumbs: List[Thumbnail] = None, thumbs: List[Thumbnail] = None,
@ -67,6 +71,7 @@ class VideoNote(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.mime_type = mime_type self.mime_type = mime_type
self.file_size = file_size self.file_size = file_size
self.date = date self.date = date
@ -86,6 +91,7 @@ class VideoNote(Object):
video_note.access_hash video_note.access_hash
) )
), ),
file_ref=video_note.file_reference,
length=video_attributes.w, length=video_attributes.w,
duration=video_attributes.duration, duration=video_attributes.duration,
file_size=video_note.size, file_size=video_note.size,

View File

@ -31,6 +31,9 @@ class Voice(Object):
file_id (``str``): file_id (``str``):
Unique identifier for this file. Unique identifier for this file.
file_ref (``bytes``):
Up to date file reference.
duration (``int``): duration (``int``):
Duration of the audio in seconds as defined by sender. Duration of the audio in seconds as defined by sender.
@ -52,6 +55,7 @@ class Voice(Object):
*, *,
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
file_id: str, file_id: str,
file_ref: bytes,
duration: int, duration: int,
waveform: bytes = None, waveform: bytes = None,
mime_type: str = None, mime_type: str = None,
@ -61,6 +65,7 @@ class Voice(Object):
super().__init__(client) super().__init__(client)
self.file_id = file_id self.file_id = file_id
self.file_ref = file_ref
self.duration = duration self.duration = duration
self.waveform = waveform self.waveform = waveform
self.mime_type = mime_type self.mime_type = mime_type
@ -79,6 +84,7 @@ class Voice(Object):
voice.access_hash voice.access_hash
) )
), ),
file_ref=voice.file_reference,
duration=attributes.duration, duration=attributes.duration,
mime_type=voice.mime_type, mime_type=voice.mime_type,
file_size=voice.size, file_size=voice.size,