commit df4e6383f50b496f8ce156ffbbe9a0b30294de6f
Author: Oswald Buddenhagen <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel