]> granicus.if.org Git - neomutt/commitdiff
fix: mbox_check_stats() retvals
authorRichard Russon <rich@flatcap.org>
Wed, 11 Sep 2019 13:31:08 +0000 (14:31 +0100)
committerRichard Russon <rich@flatcap.org>
Tue, 1 Oct 2019 10:11:59 +0000 (11:11 +0100)
Change mbox_check_stats() to clearly show when a Mailbox has new mail.
Return:
 * -1 Error
 *  0 Success, no new mail
 *  1 Success, some new mail

A bug was introduced when mbox_check_stats() was created that caused
'mbox' Mailboxes to always appear as if they had new mail.

imap/imap.c
maildir/maildir.c
maildir/mh.c
mbox/mbox.c
mutt_mailbox.c
mx.h
notmuch/mutt_notmuch.c

index 19c414f76d9ffc069e7e69e4d516050500819ed1..3ec35140ded43f7639741146f7d2e81997db727a 100644 (file)
@@ -1295,7 +1295,7 @@ int imap_mbox_check_stats(struct Mailbox *m, int flags)
 {
   int rc = imap_mailbox_status(m, true);
   if (rc > 0)
-    rc = 0;
+    rc = 1;
   return rc;
 }
 
index ad6b731adfeaa2897d9b9905b989d0c602f49dff..3db24cabbf242694be3a76795d903f32b3756a79 100644 (file)
@@ -549,7 +549,7 @@ static int maildir_mbox_check_stats(struct Mailbox *m, int flags)
   if (check_new || check_stats)
     maildir_check_dir(m, "cur", check_new, check_stats);
 
-  return 0;
+  return (m->msg_new > 0);
 }
 
 /**
index a5bb65d0d9a45b535f7dfb077f39d60a45864eae..759524af06acd5f15bf444e78bbe80d9aba72a46 100644 (file)
@@ -419,7 +419,7 @@ static int mh_mbox_check_stats(struct Mailbox *m, int flags)
 {
   struct MhSequences mhs = { 0 };
   bool check_new = true;
-  bool rc = false;
+  int rc = -1;
   DIR *dirp = NULL;
   struct dirent *de = NULL;
 
@@ -427,7 +427,7 @@ static int mh_mbox_check_stats(struct Mailbox *m, int flags)
    * since the last m visit, there is no "new mail" */
   if (C_MailCheckRecent && (mh_sequences_changed(m) <= 0))
   {
-    rc = false;
+    rc = 0;
     check_new = false;
   }
 
@@ -435,7 +435,7 @@ static int mh_mbox_check_stats(struct Mailbox *m, int flags)
     return 0;
 
   if (mh_read_sequences(&mhs, mailbox_path(m)) < 0)
-    return false;
+    return -1;
 
   m->msg_count = 0;
   m->msg_unread = 0;
@@ -455,7 +455,7 @@ static int mh_mbox_check_stats(struct Mailbox *m, int flags)
         if (!C_MailCheckRecent || (mh_already_notified(m, i) == 0))
         {
           m->has_new = true;
-          rc = true;
+          rc = 1;
         }
         /* Because we are traversing from high to low, we can stop
          * checking for new mail after the first unseen message.
index f2246803c191f28c4d8a4a9b1c8acb2e3abcc5b4..49a90017e0044d249501f3d98c50755b26a03031 100644 (file)
@@ -1781,7 +1781,7 @@ static int mbox_mbox_check_stats(struct Mailbox *m, int flags)
     }
   }
 
-  return 0;
+  return (m->msg_new > 0);
 }
 
 // clang-format off
index 3925d6ba6009c924bc5872f853467516f3f58ec2..6cb89b79b339e5fc3b85497ae483bc70adb393d5 100644 (file)
@@ -88,7 +88,7 @@ static void mailbox_check(struct Mailbox *m_cur, struct Mailbox *m_check,
       case MUTT_MAILDIR:
       case MUTT_MH:
       case MUTT_NOTMUCH:
-        if (mx_mbox_check_stats(m_check, 0) == 0)
+        if ((mx_mbox_check_stats(m_check, check_stats) == 1) && m_check->has_new)
           MailboxCount++;
         break;
       default:; /* do nothing */
@@ -187,7 +187,7 @@ int mutt_mailbox_check(struct Mailbox *m_cur, int force)
  */
 bool mutt_mailbox_notify(struct Mailbox *m_cur)
 {
-  if (mutt_mailbox_check(m_cur, 0) && MailboxNotify)
+  if ((mutt_mailbox_check(m_cur, 0) > 0) && MailboxNotify)
   {
     return mutt_mailbox_list();
   }
@@ -292,7 +292,7 @@ void mutt_mailbox_next_buffer(struct Mailbox *m_cur, struct Buffer *s)
 {
   mutt_buffer_expand_path(s);
 
-  if (mutt_mailbox_check(m_cur, 0))
+  if (mutt_mailbox_check(m_cur, 0) > 0)
   {
     bool found = false;
     for (int pass = 0; pass < 2; pass++)
diff --git a/mx.h b/mx.h
index 28957bc60573be3e2c1b675973d67772750e7152..2e53e53ebc513d58d372efda6c2e213efe689346 100644 (file)
--- a/mx.h
+++ b/mx.h
@@ -149,7 +149,8 @@ struct MxOps
    * mbox_check_stats - Check the Mailbox statistics
    * @param m     Mailbox to check
    * @param flags Function flags
-   * @retval  0 Success
+   * @retval  0 Success, no new mail
+   * @retval  1 Success, some new mail
    * @retval -1 Failure
    */
   int (*mbox_check_stats)(struct Mailbox *m, int flags);
index 7bcfd862332dff0bee3df5ff7a62bed736a7b17e..3e55dac126cc5bf2add82e565c0e2189ace1f863 100644 (file)
@@ -1996,7 +1996,7 @@ static int nm_mbox_check_stats(struct Mailbox *m, int flags)
   m->msg_flagged = count_query(db, qstr, limit);
   FREE(&qstr);
 
-  rc = 0;
+  rc = (m->msg_new > 0);
 done:
   if (db)
   {