mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-11-04 09:57:29 +03:00 
			
		
		
		
	Properly clean-up Conversation
This commit is contained in:
		
							parent
							
								
									d1f2784dff
								
							
						
					
					
						commit
						63174ae404
					
				| 
						 | 
					@ -335,12 +335,7 @@ class Conversation(ChatGetter):
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if len(self._incoming) == self._max_incoming:
 | 
					        if len(self._incoming) == self._max_incoming:
 | 
				
			||||||
            too_many = ValueError('Too many incoming messages')
 | 
					            self._cancel_all(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)
 | 
					 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._incoming.append(response)
 | 
					        self._incoming.append(response)
 | 
				
			||||||
| 
						 | 
					@ -420,6 +415,22 @@ class Conversation(ChatGetter):
 | 
				
			||||||
        except asyncio.CancelledError:
 | 
					        except asyncio.CancelledError:
 | 
				
			||||||
            pass
 | 
					            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):
 | 
					    def __enter__(self):
 | 
				
			||||||
        return self._client.loop.run_until_complete(self.__aenter__())
 | 
					        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)
 | 
					            await self._client.get_input_entity(self._input_chat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._chat_peer = utils.get_peer(self._input_chat)
 | 
					        self._chat_peer = utils.get_peer(self._input_chat)
 | 
				
			||||||
        self._outgoing.clear()
 | 
					 | 
				
			||||||
        self._last_outgoing = 0
 | 
					        self._last_outgoing = 0
 | 
				
			||||||
        self._incoming.clear()
 | 
					 | 
				
			||||||
        self._last_incoming = 0
 | 
					        self._last_incoming = 0
 | 
				
			||||||
        self._pending_responses.clear()
 | 
					        for d in (
 | 
				
			||||||
        self._response_indices.clear()
 | 
					                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:
 | 
					        if self._total_timeout:
 | 
				
			||||||
            self._total_due = time.time() + self._total_timeout
 | 
					            self._total_due = time.time() + self._total_timeout
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					@ -447,3 +461,4 @@ class Conversation(ChatGetter):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def __aexit__(self, *args):
 | 
					    async def __aexit__(self, *args):
 | 
				
			||||||
        del self._client._conversations[self._id]
 | 
					        del self._client._conversations[self._id]
 | 
				
			||||||
 | 
					        self._cancel_all()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user