Add utils.get_input_location

This commit is contained in:
Lonami Exo 2018-04-27 21:10:41 +02:00
parent f16289cf93
commit dc273ab6bc
2 changed files with 36 additions and 1 deletions

View File

@ -2235,6 +2235,7 @@ class TelegramClient(TelegramBareClient):
# The used client will change if FileMigrateError occurs
client = self
cdn_decrypter = None
input_location = utils.get_input_location(input_location)
__log__.info('Downloading file in chunks of %d bytes', part_size)
try:

View File

@ -25,7 +25,8 @@ from .tl.types import (
InputPhotoEmpty, FileLocation, ChatPhotoEmpty, UserProfilePhotoEmpty,
FileLocationUnavailable, InputMediaUploadedDocument, ChannelFull,
InputMediaUploadedPhoto, DocumentAttributeFilename, photos,
TopPeer, InputNotifyPeer, InputMessageID
TopPeer, InputNotifyPeer, InputMessageID, InputFileLocation,
InputDocumentFileLocation, PhotoSizeEmpty
)
from .tl.types.contacts import ResolvedPeer
@ -352,6 +353,39 @@ def get_input_message(message):
_raise_cast_fail(message, 'InputMedia')
def get_input_location(location):
"""Similar to :meth:`get_input_peer`, but for input messages."""
try:
if location.SUBCLASS_OF_ID == 0x1523d462:
return location # crc32(b'InputFileLocation'):
except AttributeError:
_raise_cast_fail(location, 'InputFileLocation')
if isinstance(location, Message):
location = location.media
if isinstance(location, MessageMediaDocument):
location = location.document
elif isinstance(location, MessageMediaPhoto):
location = location.photo
if isinstance(location, Document):
return InputDocumentFileLocation(
location.id, location.access_hash, location.version)
elif isinstance(location, Photo):
try:
location = next(x for x in reversed(location.sizes)
if not isinstance(x, PhotoSizeEmpty)).location
except StopIteration:
pass
if isinstance(location, (FileLocation, FileLocationUnavailable)):
return InputFileLocation(
location.volume_id, location.local_id, location.secret)
_raise_cast_fail(location, 'InputFileLocation')
def is_image(file):
"""
Returns ``True`` if the file extension looks like an image file to Telegram.