mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-10 19:46:36 +03:00
Properly clean-up Conversation
This commit is contained in:
parent
d1f2784dff
commit
63174ae404
|
@ -335,12 +335,7 @@ class Conversation(ChatGetter):
|
|||
return
|
||||
|
||||
if len(self._incoming) == self._max_incoming:
|
||||
too_many = ValueError('Too many incoming messages')
|
||||
for pending in itertools.chain(
|
||||
self._pending_responses.values(),
|
||||
self._pending_replies.values(),
|
||||
self._pending_edits):
|
||||
pending.set_exception(too_many)
|
||||
self._cancel_all(ValueError('Too many incoming messages'))
|
||||
return
|
||||
|
||||
self._incoming.append(response)
|
||||
|
@ -420,6 +415,22 @@ class Conversation(ChatGetter):
|
|||
except asyncio.CancelledError:
|
||||
pass
|
||||
|
||||
def _cancel_all(self, exception=None):
|
||||
for pending in itertools.chain(
|
||||
self._pending_responses.values(),
|
||||
self._pending_replies.values(),
|
||||
self._pending_edits):
|
||||
if exception:
|
||||
pending.set_exception(exception)
|
||||
else:
|
||||
pending.cancel()
|
||||
|
||||
for _, fut, _ in self._custom:
|
||||
if exception:
|
||||
fut.set_exception(exception)
|
||||
else:
|
||||
fut.cancel()
|
||||
|
||||
def __enter__(self):
|
||||
return self._client.loop.run_until_complete(self.__aenter__())
|
||||
|
||||
|
@ -429,12 +440,15 @@ class Conversation(ChatGetter):
|
|||
await self._client.get_input_entity(self._input_chat)
|
||||
|
||||
self._chat_peer = utils.get_peer(self._input_chat)
|
||||
self._outgoing.clear()
|
||||
self._last_outgoing = 0
|
||||
self._incoming.clear()
|
||||
self._last_incoming = 0
|
||||
self._pending_responses.clear()
|
||||
self._response_indices.clear()
|
||||
for d in (
|
||||
self._outgoing, self._incoming,
|
||||
self._pending_responses, self._pending_replies,
|
||||
self._pending_edits, self._response_indices,
|
||||
self._reply_indices, self._edit_dates, self._custom):
|
||||
d.clear()
|
||||
|
||||
if self._total_timeout:
|
||||
self._total_due = time.time() + self._total_timeout
|
||||
else:
|
||||
|
@ -447,3 +461,4 @@ class Conversation(ChatGetter):
|
|||
|
||||
async def __aexit__(self, *args):
|
||||
del self._client._conversations[self._id]
|
||||
self._cancel_all()
|
||||
|
|
Loading…
Reference in New Issue
Block a user