Fix iter_dialogs missing dialogs once and for all

This commit is contained in:
Lonami Exo 2019-06-11 10:04:36 +02:00
parent b8a38baaf6
commit 31a26c0a0a

View File

@ -77,15 +77,19 @@ class _DialogsIter(RequestIter):
# we didn't get a DialogsSlice which means we got all. # we didn't get a DialogsSlice which means we got all.
return True return True
# Don't set `request.offset_id` to the last message ID. # We can't use `messages[-1]` as the offset ID / date.
# Why? It seems to cause plenty of dialogs to be skipped. # Why? Because pinned dialogs will mess with the order
# # in this list. Instead, we find the last dialog which
# By leaving it to 0 after the first iteration, even if # has a message, and use it as an offset.
# the user originally passed another ID, we ensure that last_message = next((
# it will work correctly. messages[d.top_message]
self.request.offset_id = 0 for d in reversed(r.dialogs)
if d.top_message in messages
), None)
self.request.exclude_pinned = True self.request.exclude_pinned = True
self.request.offset_date = r.messages[-1].date self.request.offset_id = last_message.id if last_message else 0
self.request.offset_date = last_message.date if last_message else None
self.request.offset_peer =\ self.request.offset_peer =\
entities[utils.get_peer_id(r.dialogs[-1].peer)] entities[utils.get_peer_id(r.dialogs[-1].peer)]