diff --git a/inbox/mailsync/backends/imap/generic.py b/inbox/mailsync/backends/imap/generic.py index 9d78a3d8b..9f40a70c6 100644 --- a/inbox/mailsync/backends/imap/generic.py +++ b/inbox/mailsync/backends/imap/generic.py @@ -877,11 +877,15 @@ def condstore_refresh_flags(self, crispin_client: CrispinClient) -> None: self.account_id, db_session, self.folder_id ) + new_uids = remote_uids.difference(local_uids) expunged_uids = local_uids.difference(remote_uids) del local_uids # free memory as soon as possible max_remote_uid = max(remote_uids) if remote_uids else 0 del remote_uids # free memory as soon as possible + if new_uids: + self.download_and_commit_uids(crispin_client, new_uids) + if expunged_uids: # If new UIDs have appeared since we last checked in # get_new_uids, save them first. We want to always have the @@ -922,17 +926,21 @@ def refresh_flags_impl(self, crispin_client: CrispinClient, max_uids: int) -> No with self.global_lock: # Check for any deleted messages. - remote_uids = crispin_client.all_uids() + remote_uids = set(crispin_client.all_uids()) with session_scope(self.namespace_id) as db_session: local_uids = common.local_uids( self.account_id, db_session, self.folder_id ) + new_uids = remote_uids.difference(local_uids) expunged_uids = local_uids.difference(remote_uids) del local_uids # free memory as soon as possible del remote_uids # free memory as soon as possible + if new_uids: + self.download_and_commit_uids(crispin_client, new_uids) + if expunged_uids: with self.syncmanager_lock: common.remove_deleted_uids(