mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-25 02:43:45 +03:00
Incredibly improve downloading media on different DCs*
* This involves raising the InvalidDCError on .invoke() when the message is FILE_MIGRATE_X, but users can always catch this error and use the .invoke_on_dc() function
This commit is contained in:
parent
efd1c1ba64
commit
40f4c2533a
|
@ -252,21 +252,17 @@ class TelegramClient(TelegramBareClient):
|
|||
return result
|
||||
|
||||
except InvalidDCError as e:
|
||||
if (e.message.startswith('PHONE_MIGRATE_') or
|
||||
e.message.startswith('USER_MIGRATE_')):
|
||||
if not e.message.startswith('FILE_MIGRATE_'):
|
||||
# Only reconnect unless we're trying to download media,
|
||||
# this is, on login (user migrate, phone migrate, etc.)
|
||||
self._logger.info('DC error when invoking request, '
|
||||
'attempting to reconnect at DC {}'
|
||||
.format(e.new_dc))
|
||||
|
||||
self.reconnect(new_dc=e.new_dc)
|
||||
return self.invoke(request, timeout=timeout)
|
||||
|
||||
else:
|
||||
self._logger.info('DC error when invoking request, '
|
||||
'attempting to send it on DC {}'
|
||||
.format(e.new_dc))
|
||||
|
||||
return self.invoke_on_dc(request, e.new_dc, timeout=timeout)
|
||||
raise
|
||||
|
||||
finally:
|
||||
self._lock.release()
|
||||
|
@ -725,6 +721,35 @@ class TelegramClient(TelegramBareClient):
|
|||
|
||||
return file_path
|
||||
|
||||
def download_file(self,
|
||||
input_location,
|
||||
file_path,
|
||||
part_size_kb=None,
|
||||
file_size=None,
|
||||
progress_callback=None,
|
||||
on_dc=None):
|
||||
if on_dc is None:
|
||||
try:
|
||||
super(TelegramClient, self).download_file(
|
||||
input_location,
|
||||
file_path,
|
||||
part_size_kb=part_size_kb,
|
||||
file_size=file_size,
|
||||
progress_callback=progress_callback
|
||||
)
|
||||
except InvalidDCError as e:
|
||||
on_dc = e.new_dc
|
||||
|
||||
if on_dc is not None:
|
||||
client = self._get_exported_client(on_dc)
|
||||
client.download_file(
|
||||
input_location,
|
||||
file_path,
|
||||
part_size_kb=part_size_kb,
|
||||
file_size=file_size,
|
||||
progress_callback=progress_callback
|
||||
)
|
||||
|
||||
# endregion
|
||||
|
||||
# endregion
|
||||
|
|
Loading…
Reference in New Issue
Block a user