From 954061f7550addcc924132c8a060f10088fefd5e Mon Sep 17 00:00:00 2001 From: Squeaky Date: Fri, 8 Nov 2024 10:07:45 +0100 Subject: [PATCH 1/2] new_uids --- inbox/mailsync/backends/imap/generic.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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( From e34a141df6c2e085664e2fceed2cf6b2e84c1f44 Mon Sep 17 00:00:00 2001 From: Squeaky Date: Fri, 8 Nov 2024 10:34:32 +0100 Subject: [PATCH 2/2] guard by initial --- inbox/mailsync/backends/imap/generic.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/inbox/mailsync/backends/imap/generic.py b/inbox/mailsync/backends/imap/generic.py index 9f40a70c6..50b301931 100644 --- a/inbox/mailsync/backends/imap/generic.py +++ b/inbox/mailsync/backends/imap/generic.py @@ -877,7 +877,9 @@ def condstore_refresh_flags(self, crispin_client: CrispinClient) -> None: self.account_id, db_session, self.folder_id ) - new_uids = remote_uids.difference(local_uids) + new_uids = ( + remote_uids.difference(local_uids) if self.state != "initial" else None + ) 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 @@ -933,7 +935,9 @@ def refresh_flags_impl(self, crispin_client: CrispinClient, max_uids: int) -> No self.account_id, db_session, self.folder_id ) - new_uids = remote_uids.difference(local_uids) + new_uids = ( + remote_uids.difference(local_uids) if self.state != "initial" else None + ) 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