]> granicus.if.org Git - neomutt/commitdiff
Change imap body cache cleanup to use the uid_hash.
authorKevin McCarthy <kevin@8t8.us>
Wed, 24 May 2017 22:46:41 +0000 (15:46 -0700)
committerKevin McCarthy <kevin@8t8.us>
Wed, 24 May 2017 22:46:41 +0000 (15:46 -0700)
This should speed up $message_cache_clean cleanup when syncing.

imap/message.c

index ef3a661799f8f34800e8481df6357e808a428926..4ec1c01edbd9d847aa973c00abedec58d9326dac 100644 (file)
@@ -1128,24 +1128,17 @@ int imap_cache_del (IMAP_DATA* idata, HEADER* h)
 
 static int msg_cache_clean_cb (const char* id, body_cache_t* bcache, void* data)
 {
-  unsigned int uv, uid, n;
+  unsigned int uv, uid;
   IMAP_DATA* idata = (IMAP_DATA*)data;
 
   if (sscanf (id, "%u-%u", &uv, &uid) != 2)
     return 0;
 
   /* bad UID */
-  if (uv != idata->uid_validity)
+  if (uv != idata->uid_validity ||
+      !int_hash_find (idata->uid_hash, uid))
     mutt_bcache_del (bcache, id);
 
-  /* TODO: presort UIDs, walk in order */
-  for (n = 0; n < idata->ctx->msgcount; n++)
-  {
-    if (uid == HEADER_DATA(idata->ctx->hdrs[n])->uid)
-      return 0;
-  }
-  mutt_bcache_del (bcache, id);
-
   return 0;
 }