From 6d1ce4d48d6bce269b18c527277ece2d57681740 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Tue, 11 Apr 2017 09:52:44 +0200 Subject: [PATCH] Let only the LogOut request be confirmed via ack --- telethon/interactive_telegram_client.py | 2 +- telethon/network/mtproto_sender.py | 10 +++++++--- telethon/telegram_client.py | 8 +++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/telethon/interactive_telegram_client.py b/telethon/interactive_telegram_client.py index 46efa01e..1cfb03b0 100644 --- a/telethon/interactive_telegram_client.py +++ b/telethon/interactive_telegram_client.py @@ -12,7 +12,7 @@ cols, rows = shutil.get_terminal_size() def print_title(title): # Clear previous window print('\n') - available_cols = cols - 2 # -2 sincewe omit '┌' and '┐' + available_cols = cols - 2 # -2 since we omit '┌' and '┐' print('┌{}┐'.format('─' * available_cols)) print('│{}│'.format(title.center(available_cols))) print('└{}┘'.format('─' * available_cols)) diff --git a/telethon/network/mtproto_sender.py b/telethon/network/mtproto_sender.py index 3621ce9c..946a0e30 100755 --- a/telethon/network/mtproto_sender.py +++ b/telethon/network/mtproto_sender.py @@ -228,11 +228,15 @@ class MtProtoSender: return self.handle_bad_msg_notification(msg_id, sequence, reader) # msgs_ack, it may handle the request we wanted - if self.ack_requests_confirm and code == 0x62d6b459: + if code == 0x62d6b459: ack = reader.tgread_object() if request and request.msg_id in ack.msg_ids: - Log.w('Message ack confirmed a request') - request.confirm_received = True + Log.w('Ack found for the current request ID') + + if self.ack_requests_confirm: + Log.w('Message ack confirmed a request') + request.confirm_received = True + return False # If the code is not parsed manually, then it was parsed by the code generator! diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index cc0b3d72..a3d8da6b 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -121,9 +121,6 @@ class TelegramClient: # although many other options are available! self.dc_options = result.dc_options - # We can now enable these (for such methods such as logout) - self.sender.ack_requests_confirm = True - # We're signed in if we're authorized self.signed_in = self.is_user_authorized() return True @@ -259,6 +256,9 @@ class TelegramClient: def log_out(self): """Logs out and deletes the current session. Returns True if everything went OK""" + # Only the logout request is confirmed via an ack request + # TODO This is only a supposition, there has to be a better way to handle acks + self.sender.ack_requests_confirm = True try: self.invoke(LogOutRequest()) if not self.session.delete(): @@ -266,6 +266,8 @@ class TelegramClient: self.session = None except: + # Something happened when logging out, restore the state back + self.sender.ack_requests_confirm = False return False @staticmethod