]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: List index notify cleanup - move code to separate functions
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 4 Sep 2017 14:37:05 +0000 (17:37 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 5 Sep 2017 07:47:28 +0000 (10:47 +0300)
No functional changes. In preparation for the next commit.

src/lib-storage/list/mailbox-list-index-notify.c

index 06048e14b7c57a8720eea1ffa0bf6bb9a3478cde..48a4366a5bf5f0ed27afdec41df1dfd4d2e89d5a 100644 (file)
@@ -66,6 +66,41 @@ struct mailbox_list_notify_index {
        bool inbox_event_pending:1;
 };
 
+static enum mailbox_list_notify_event
+mailbox_list_index_get_changed_events(const struct mailbox_notify_node *nnode,
+                                     const struct mailbox_status *status)
+{
+       enum mailbox_list_notify_event events = 0;
+
+       if (nnode->uidvalidity != status->uidvalidity)
+               events |= MAILBOX_LIST_NOTIFY_UIDVALIDITY;
+       if (nnode->uidnext != status->uidnext)
+               events |= MAILBOX_LIST_NOTIFY_APPENDS;
+       if (nnode->messages > status->messages) {
+               /* NOTE: not entirely reliable, since there could be both
+                  expunges and appends.. but it shouldn't make any difference
+                  in practise, since anybody interested in expunges is most
+                  likely also interested in appends. */
+               events |= MAILBOX_LIST_NOTIFY_EXPUNGES;
+       }
+       if (nnode->unseen != status->unseen)
+               events |= MAILBOX_LIST_NOTIFY_SEEN_CHANGES;
+       if (nnode->highest_modseq < status->highest_modseq)
+               events |= MAILBOX_LIST_NOTIFY_MODSEQ_CHANGES;
+       return events;
+}
+
+static void
+mailbox_notify_node_update_status(struct mailbox_notify_node *nnode,
+                                 struct mailbox_status *status)
+{
+       nnode->uidvalidity = status->uidvalidity;
+       nnode->uidnext = status->uidnext;
+       nnode->messages = status->messages;
+       nnode->unseen = status->unseen;
+       nnode->highest_modseq = status->highest_modseq;
+}
+
 int mailbox_list_index_notify_init(struct mailbox_list *list,
                                   enum mailbox_list_notify_event mask,
                                   struct mailbox_list_notify **notify_r)
@@ -708,28 +743,9 @@ mailbox_list_index_notify_change(struct mailbox_list_notify_index *inotify,
                i_zero(&empty_node);
                nnode = &empty_node;
        }
-       if (nnode->uidvalidity != status.uidvalidity)
-               rec->events |= MAILBOX_LIST_NOTIFY_UIDVALIDITY;
-       if (nnode->uidnext != status.uidnext)
-               rec->events |= MAILBOX_LIST_NOTIFY_APPENDS;
-       if (nnode->messages > status.messages) {
-               /* NOTE: not entirely reliable, since there could be both
-                  expunges and appends.. but it shouldn't make any difference
-                  in practise, since anybody interested in expunges is most
-                  likely also interested in appends. */
-               rec->events |= MAILBOX_LIST_NOTIFY_EXPUNGES;
-       }
-       if (nnode->unseen != status.unseen)
-               rec->events |= MAILBOX_LIST_NOTIFY_SEEN_CHANGES;
-       if (nnode->highest_modseq < status.highest_modseq)
-               rec->events |= MAILBOX_LIST_NOTIFY_MODSEQ_CHANGES;
-
+       rec->events |= mailbox_list_index_get_changed_events(nnode, &status);
        /* update internal state */
-       nnode->uidvalidity = status.uidvalidity;
-       nnode->uidnext = status.uidnext;
-       nnode->messages = status.messages;
-       nnode->unseen = status.unseen;
-       nnode->highest_modseq = status.highest_modseq;
+       mailbox_notify_node_update_status(nnode, &status);
        return rec->events != 0;
 }