fix: restore deleted_at mails when still on IMAP server — sync was permanently hiding mails
- When IMAP delete fails, deleted_at stays set but mail remains on IMAP server - Sync was skipping deleted_at mails, so they stayed permanently hidden - Now sync restores deleted_at=None when mail is found on IMAP server - This means: if IMAP delete fails, mail reappears in LeoCRM on next sync - Only truly deleted mails (removed from IMAP server) stay hidden
This commit is contained in:
@@ -662,9 +662,12 @@ async def imap_sync_folder(
|
|||||||
).scalar_one_or_none()
|
).scalar_one_or_none()
|
||||||
|
|
||||||
if existing_mail:
|
if existing_mail:
|
||||||
# Don't touch soft-deleted mails — they're being deleted via sync queue
|
# If mail has deleted_at but is still on the IMAP server,
|
||||||
|
# the IMAP delete failed — restore it so it's visible again.
|
||||||
|
# This prevents mails from being permanently hidden when IMAP delete fails.
|
||||||
if existing_mail.deleted_at is not None:
|
if existing_mail.deleted_at is not None:
|
||||||
continue
|
existing_mail.deleted_at = None
|
||||||
|
logger.info("imap_sync_folder: restored mail %s (still on IMAP server, delete had failed)", existing_mail.id)
|
||||||
# Update folder_id and imap_uid if mail moved to a different folder
|
# Update folder_id and imap_uid if mail moved to a different folder
|
||||||
if existing_mail.folder_id != folder.id:
|
if existing_mail.folder_id != folder.id:
|
||||||
existing_mail.folder_id = folder.id
|
existing_mail.folder_id = folder.id
|
||||||
@@ -1157,9 +1160,11 @@ async def imap_sync_account(
|
|||||||
).scalar_one_or_none()
|
).scalar_one_or_none()
|
||||||
|
|
||||||
if existing_mail:
|
if existing_mail:
|
||||||
# Don't touch soft-deleted mails — they're being deleted via sync queue
|
# If mail has deleted_at but is still on the IMAP server,
|
||||||
|
# the IMAP delete failed — restore it so it's visible again.
|
||||||
if existing_mail.deleted_at is not None:
|
if existing_mail.deleted_at is not None:
|
||||||
continue
|
existing_mail.deleted_at = None
|
||||||
|
logger.info("imap_sync_account: restored mail %s (still on IMAP server, delete had failed)", existing_mail.id)
|
||||||
# Track folder moves: update folder_id and imap_uid if the
|
# Track folder moves: update folder_id and imap_uid if the
|
||||||
# mail now appears in a different IMAP folder.
|
# mail now appears in a different IMAP folder.
|
||||||
if existing_mail.folder_id != folder.id:
|
if existing_mail.folder_id != folder.id:
|
||||||
|
|||||||
Reference in New Issue
Block a user