isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit b6949c64d2fb68349ea7e3a6165c603bfed1512e
parent 71524cb6b0c2a1b0c5a811cb5bf00eac91d561a8
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sun,  1 Dec 2013 17:45:34 +0100

avoid useless delay after creating maildir box

we would see the recent timestamp of the creation and conclude that
something is going on, so we'd wait. this is obviously nonsense.
as we know that a freshly created mailbox is empty, simply skip the
message scan alltogether.

Diffstat:
Msrc/drv_maildir.c | 8+++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/drv_maildir.c b/src/drv_maildir.c @@ -66,7 +66,7 @@ typedef struct maildir_message { typedef struct maildir_store { store_t gen; - int uvfd, uvok, nuid; + int uvfd, uvok, nuid, fresh; int minuid, maxuid, newuid, nexcs, *excs; char *trash; #ifdef USE_DB @@ -355,6 +355,7 @@ maildir_validate( const char *box, int create, maildir_store_t *ctx ) sys_error( "Maildir error: cannot access mailbox '%s'", buf ); return DRV_BOX_BAD; } + ctx->fresh = 1; } else { for (i = 0; i < 3; i++) { memcpy( buf + bl, subdirs[i], 4 ); @@ -385,6 +386,7 @@ maildir_validate( const char *box, int create, maildir_store_t *ctx ) } } closedir( dirp ); + ctx->fresh = 0; } return DRV_OK; } @@ -1026,6 +1028,9 @@ maildir_load( store_t *gctx, int minuid, int maxuid, int newuid, int *excs, int ctx->excs = nfrealloc( excs, nexcs * sizeof(int) ); ctx->nexcs = nexcs; + if (ctx->fresh) + goto dontscan; + if (maildir_scan( ctx, &msglist ) != DRV_OK) { cb( DRV_BOX_BAD, aux ); return; @@ -1035,6 +1040,7 @@ maildir_load( store_t *gctx, int minuid, int maxuid, int newuid, int *excs, int maildir_app_msg( ctx, &msgapp, msglist.ents + i ); maildir_free_scan( &msglist ); + dontscan: cb( DRV_OK, aux ); }