From f68088cfb5234e4429ca6c882e3bf62e9ec59bf6 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 31 Jan 2022 00:00:00 +0000 Subject: [PATCH] imap: avoid reconnection loop when message without Message-ID is marked as seen - do not attempt to mark reserved meessages as seen when messages with empty Message-ID are marked as seen on IMAP - do not reconnect on Seen flag synchronization failures This avoid reconnection loops in case of permanent errors in `sync_seen_flags` --- CHANGELOG.md | 6 ++++++ src/imap.rs | 2 +- src/scheduler.rs | 9 +++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ca2cadab..75c0935db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes +- avoid reconnection loop when message without Message-ID is marked as seen #3044 + + ## 1.73.0 ### API changes diff --git a/src/imap.rs b/src/imap.rs index 2b2cc705f..90cb90c68 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -1980,7 +1980,7 @@ async fn mark_seen_by_uid( .sql .query_row_optional( "SELECT id, chat_id FROM msgs - WHERE rfc724_mid IN ( + WHERE id > 9 AND rfc724_mid IN ( SELECT rfc724_mid FROM imap WHERE folder=?1 AND uidvalidity=?2 diff --git a/src/scheduler.rs b/src/scheduler.rs index ade60194a..fd4f044d2 100644 --- a/src/scheduler.rs +++ b/src/scheduler.rs @@ -11,6 +11,7 @@ use crate::dc_tools::maybe_add_time_based_warnings; use crate::ephemeral::delete_expired_imap_messages; use crate::imap::Imap; use crate::job::{self, Thread}; +use crate::log::LogExt; use crate::smtp::{send_smtp_messages, Smtp}; use self::connectivity::ConnectivityStore; @@ -206,15 +207,11 @@ async fn fetch_idle(ctx: &Context, connection: &mut Imap, folder: Config) -> Int } // Synchronize Seen flags. - if let Err(err) = connection + connection .sync_seen_flags(ctx, &watch_folder) .await .context("sync_seen_flags") - { - connection.trigger_reconnect(ctx).await; - warn!(ctx, "{:#}", err); - return InterruptInfo::new(false); - } + .ok_or_log(ctx); connection.connectivity.set_connected(ctx).await;