From 27728be2425d08b97e01e40058c1d7f5cc9a51fa Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Sun, 15 Oct 2017 11:05:56 +0200 Subject: [PATCH] Revert "Attempt at not calling .connect for every file chunk" This reverts commit 280a7006557cad141dc6b99be7fe583168eb6b10. The reason for this is that it was causing a lot of files to be downloaded corrupted for some reason. This should be revisited to avoid creating a new connection for every chunk. --- telethon/telegram_bare_client.py | 34 +++++++------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/telethon/telegram_bare_client.py b/telethon/telegram_bare_client.py index fc89d12f..98ddf6d0 100644 --- a/telethon/telegram_bare_client.py +++ b/telethon/telegram_bare_client.py @@ -416,25 +416,11 @@ class TelegramBareClient: # region Invoking Telegram requests - def _get_sender(self, on_main_thread=None): - """Gets the appropriated sender based on the current thread""" - if on_main_thread is None: - on_main_thread = threading.get_ident() == self._main_thread_ident - - if on_main_thread or self._on_read_thread(): - sender = self._sender - else: - sender = self._sender.clone() - sender.connect() - return sender - - def __call__(self, *requests, retries=5, sender=None): + def __call__(self, *requests, retries=5): """Invokes (sends) a MTProtoRequest and returns (receives) its result. The invoke will be retried up to 'retries' times before raising ValueError(). - - If 'sender' is not None, it will override the sender to be used. """ if not all(isinstance(x, TLObject) and x.content_related for x in requests): @@ -442,7 +428,11 @@ class TelegramBareClient: # Determine the sender to be used (main or a new connection) on_main_thread = threading.get_ident() == self._main_thread_ident - sender = sender or self._get_sender(on_main_thread=on_main_thread) + if on_main_thread or self._on_read_thread(): + sender = self._sender + else: + sender = self._sender.clone() + sender.connect() # We should call receive from this thread if there's no background # thread reading or if the server disconnected us and we're trying @@ -696,10 +686,6 @@ class TelegramBareClient: # The used client will change if FileMigrateError occurs client = self - # TODO Keeping just another variable for a sender feels messy, improve. - # This is done not to call .connect() for every single piece of the - # file we'll be trying to download, if we were from another thread. - sender = self._get_sender() cdn_decrypter = None try: @@ -711,7 +697,7 @@ class TelegramBareClient: else: result = client(GetFileRequest( input_location, offset, part_size - ), sender=sender) + )) if isinstance(result, FileCdnRedirect): cdn_decrypter, result = \ @@ -720,11 +706,7 @@ class TelegramBareClient: ) except FileMigrateError as e: - if sender != self._sender: - sender.disconnect() client = self._get_exported_client(e.new_dc) - # Client connected on this thread -> uses the right sender - sender = None continue offset += part_size @@ -739,8 +721,6 @@ class TelegramBareClient: if progress_callback: progress_callback(f.tell(), file_size) finally: - if sender != self._sender: - sender.disconnect() if client != self: client.disconnect()