@@ -192,16 +192,30 @@ async function updateImapState(
192192 uidValidityByMailbox : Record < string , string >
193193) {
194194 const existingUidByMailbox = config . lastProcessedUidByMailbox || { }
195- const mergedUidByMailbox = { ... existingUidByMailbox }
195+ const prevUidValidity = config . uidValidityByMailbox || { }
196196
197- for ( const [ mailbox , uid ] of Object . entries ( uidByMailbox ) ) {
198- mergedUidByMailbox [ mailbox ] = Math . max ( uid , mergedUidByMailbox [ mailbox ] || 0 )
197+ const resetMailboxes = new Set (
198+ Object . entries ( uidValidityByMailbox )
199+ . filter (
200+ ( [ mailbox , validity ] ) =>
201+ prevUidValidity [ mailbox ] !== undefined && prevUidValidity [ mailbox ] !== validity
202+ )
203+ . map ( ( [ mailbox ] ) => mailbox )
204+ )
205+
206+ const mergedUidByMailbox : Record < string , number > = { }
207+
208+ for ( const [ mailbox , uid ] of Object . entries ( existingUidByMailbox ) ) {
209+ if ( ! resetMailboxes . has ( mailbox ) ) {
210+ mergedUidByMailbox [ mailbox ] = uid
211+ }
199212 }
200213
201- const prevUidValidity = config . uidValidityByMailbox || { }
202- for ( const [ mailbox , validity ] of Object . entries ( uidValidityByMailbox ) ) {
203- if ( prevUidValidity [ mailbox ] !== undefined && prevUidValidity [ mailbox ] !== validity ) {
204- delete mergedUidByMailbox [ mailbox ]
214+ for ( const [ mailbox , uid ] of Object . entries ( uidByMailbox ) ) {
215+ if ( resetMailboxes . has ( mailbox ) ) {
216+ mergedUidByMailbox [ mailbox ] = uid
217+ } else {
218+ mergedUidByMailbox [ mailbox ] = Math . max ( uid , mergedUidByMailbox [ mailbox ] || 0 )
205219 }
206220 }
207221
0 commit comments