commit df4e6383f50b496f8ce156ffbbe9a0b30294de6f
Author: Oswald Buddenhagen <o...@users.sf.net>
Date:   Mon May 30 21:31:50 2022 +0200

    track number of messages in IMAP stores
    
    ... rather than calculating it on the fly. for efficiency.

 src/driver.c   | 9 ---------
 src/driver.h   | 1 -
 src/drv_imap.c | 5 ++++-
 3 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/src/driver.c b/src/driver.c
index feddaa5a..6b88dbb7 100644
--- a/src/driver.c
+++ b/src/driver.c
@@ -55,15 +55,6 @@ fmt_lone_flags( uchar flags )
        return buf;
 }
 
-uint
-count_generic_messages( message_t *msgs )
-{
-       uint count = 0;
-       for (; msgs; msgs = msgs->next)
-               count++;
-       return count;
-}
-
 void
 free_generic_messages( message_t *msgs )
 {
diff --git a/src/driver.h b/src/driver.h
index 55dd65bb..4ac79093 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -303,7 +303,6 @@ struct driver {
        int (*get_fail_state)( store_conf_t *conf );
 };
 
-uint count_generic_messages( message_t * );
 void free_generic_messages( message_t * );
 
 void parse_generic_store( store_conf_t *store, conffile_t *cfg, const char 
*type );
diff --git a/src/drv_imap.c b/src/drv_imap.c
index f07ab730..23dcfd45 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -113,6 +113,7 @@ union imap_store {
                int total_msgs, recent_msgs;
                uint uidvalidity, uidnext;
                imap_message_t **msgapp, *msgs;  // FETCH results
+               uint msgcnt;
                uint caps;  // CAPABILITY results
                string_list_t *auth_mechs;
                parse_list_state_t parse_list_sts;
@@ -1208,6 +1209,7 @@ parse_fetch_rsp( imap_store_t *ctx, list_t *list, char *s 
ATTR_UNUSED )
                cur = nfzalloc( sizeof(*cur) );
                *ctx->msgapp = cur;
                ctx->msgapp = &cur->next;
+               ctx->msgcnt++;
                cur->uid = uid;
                cur->flags = mask;
                cur->status = status;
@@ -2631,6 +2633,7 @@ imap_select_box( store_t *gctx, const char *name )
        free_generic_messages( &ctx->msgs->gen );
        ctx->msgs = NULL;
        ctx->msgapp = &ctx->msgs;
+       ctx->msgcnt = 0;
 
        ctx->name = name;
        return DRV_OK;
@@ -2935,7 +2938,7 @@ imap_sort_msgs_comp( const void *a_, const void *b_ )
 static void
 imap_sort_msgs( imap_store_t *ctx )
 {
-       uint count = count_generic_messages( &ctx->msgs->gen );
+       uint count = ctx->msgcnt;
        if (count <= 1)
                return;
 


_______________________________________________
isync-devel mailing list
isync-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to