Hello, Oswald Buddenhagen (Sunday 2019-04-21): > the option name is too technical; it should be something like > SubscribedOnly. > you're a bit too generous with parentheses for my taste and the spacing > of the ternary op does not comply with the style, but other than that i > cannot see anything obviously wrong with the patch. well, except that > documentation is missing.
Thanks. Here's a new patch, this time against 1.3.1, with the option name you suggested. I've tried to pay more attention to the coding style. I documented the option in the man page mbsync.1; I didn't see any other place for the documentation, or did I miss it? Best regards, Cedric Ware.
diff -ur isync-1.3.1.orig/src/drv_imap.c isync-1.3.1/src/drv_imap.c --- isync-1.3.1.orig/src/drv_imap.c 2019-03-10 11:27:55.000000000 +0100 +++ isync-1.3.1/src/drv_imap.c 2019-07-19 16:44:40.079901557 +0200 @@ -66,6 +66,7 @@ imap_server_conf_t *server; char delimiter; char use_namespace; + char use_lsub; } imap_store_conf_t; typedef struct { @@ -1391,7 +1392,8 @@ error( "Error from IMAP server: %s\n", cmd ); } else if (!strcmp( "CAPABILITY", arg )) { parse_capability( ctx, cmd ); - } else if (!strcmp( "LIST", arg )) { + } else if ((!strcmp( "LIST", arg )) || + (!strcmp( "LSUB", arg ))) { resp = parse_list( ctx, cmd, parse_list_rsp ); goto listret; } else if (!strcmp( "NAMESPACE", arg )) { @@ -3010,6 +3012,7 @@ void (*cb)( int sts, string_list_t *boxes, void *aux ), void *aux ) { imap_store_t *ctx = (imap_store_t *)gctx; + imap_store_conf_t *cfg = (imap_store_conf_t *)ctx->gen.conf; INIT_REFCOUNTED_STATE(imap_list_store_state_t, sts, cb, aux) // ctx->prefix may be empty, "INBOX.", or something else. @@ -3033,14 +3036,15 @@ if (pfx_is_empty) ctx->listed |= LIST_INBOX; imap_exec( ctx, imap_refcounted_new_cmd( &sts->gen ), imap_list_store_p2, - "LIST \"\" \"%\\s*\"", ctx->prefix ); + cfg->use_lsub ? "LSUB \"\" \"%\\s*\"" : "LIST \"\" \"%\\s*\"", + ctx->prefix ); } if (((flags & LIST_INBOX) || pfx_is_inbox) && !pfx_is_empty && !(ctx->listed & LIST_INBOX)) { ctx->listed |= LIST_INBOX; if (pfx_is_inbox) ctx->listed |= LIST_PATH; imap_exec( ctx, imap_refcounted_new_cmd( &sts->gen ), imap_list_store_p2, - "LIST \"\" INBOX*" ); + cfg->use_lsub ? "LSUB \"\" INBOX*" : "LIST \"\" INBOX*" ); } imap_list_store_p3( ctx, sts ); } @@ -3136,6 +3140,7 @@ store->gen.driver = &imap_driver; store->gen.name = nfstrdup( cfg->val ); store->use_namespace = 1; + store->use_lsub = 0; *storep = &store->gen; memset( &sserver, 0, sizeof(sserver) ); server = &sserver; @@ -3298,6 +3303,8 @@ store->server = srv; } else if (!strcasecmp( "UseNamespace", cfg->cmd )) store->use_namespace = parse_bool( cfg ); + else if (!strcasecmp( "SubscribedOnly", cfg->cmd )) + store->use_lsub = parse_bool( cfg ); else if (!strcasecmp( "Path", cfg->cmd )) store->gen.path = nfstrdup( cfg->val ); else if (!strcasecmp( "PathDelimiter", cfg->cmd )) { diff -ur isync-1.3.1.orig/src/mbsync.1 isync-1.3.1/src/mbsync.1 --- isync-1.3.1.orig/src/mbsync.1 2017-10-01 15:11:11.000000000 +0200 +++ isync-1.3.1/src/mbsync.1 2019-07-19 17:03:43.704563436 +0200 @@ -435,6 +435,13 @@ (Default: \fByes\fR) .. .TP +\fBSubscribedOnly\fR \fByes\fR|\fBno\fR +Selects whether to synchronize only mailboxes that are subscribed to on the +IMAP server. In technical terms, if this option is set, \fBmbsync\fR will use +the IMAP command LSUB instead of LIST to look for mailboxes in this Store. +(Default: \fBno\fR) +.. +.TP \fBPathDelimiter\fR \fIdelim\fR Specify the server's hierarchy delimiter. (Default: taken from the server's first "personal" NAMESPACE)
_______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel