|
@@ -196,9 +196,9 @@ typedef struct {
|
|
store_t *ctx[2];
|
|
store_t *ctx[2];
|
|
string_list_t *boxes[2], *cboxes, *chanptr;
|
|
string_list_t *boxes[2], *cboxes, *chanptr;
|
|
const char *names[2];
|
|
const char *names[2];
|
|
- char **argv, *boxlist, *boxp;
|
|
|
|
|
|
+ char **argv;
|
|
int oind, ret, multiple, all, list, ops[2], state[2];
|
|
int oind, ret, multiple, all, list, ops[2], state[2];
|
|
- char done, skip, cben;
|
|
|
|
|
|
+ char done, skip, cben, boxlist;
|
|
} main_vars_t;
|
|
} main_vars_t;
|
|
|
|
|
|
#define AUX &mvars->t[t]
|
|
#define AUX &mvars->t[t]
|
|
@@ -514,7 +514,7 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
channel_conf_t *chan;
|
|
channel_conf_t *chan;
|
|
store_t *store;
|
|
store_t *store;
|
|
string_list_t *mbox, *sbox, **mboxp, **sboxp;
|
|
string_list_t *mbox, *sbox, **mboxp, **sboxp;
|
|
- char *channame;
|
|
|
|
|
|
+ char *channame, *boxp, *nboxp;
|
|
int t;
|
|
int t;
|
|
|
|
|
|
if (!mvars->cben)
|
|
if (!mvars->cben)
|
|
@@ -525,6 +525,7 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
}
|
|
}
|
|
for (;;) {
|
|
for (;;) {
|
|
mvars->boxlist = 0;
|
|
mvars->boxlist = 0;
|
|
|
|
+ mvars->boxes[M] = mvars->boxes[S] = mvars->cboxes = 0;
|
|
if (!mvars->all) {
|
|
if (!mvars->all) {
|
|
if (mvars->chanptr)
|
|
if (mvars->chanptr)
|
|
channame = mvars->chanptr->string;
|
|
channame = mvars->chanptr->string;
|
|
@@ -538,8 +539,8 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
channame = mvars->argv[mvars->oind];
|
|
channame = mvars->argv[mvars->oind];
|
|
gotgrp: ;
|
|
gotgrp: ;
|
|
}
|
|
}
|
|
- if ((mvars->boxlist = strchr( channame, ':' )))
|
|
|
|
- *mvars->boxlist++ = 0;
|
|
|
|
|
|
+ if ((boxp = strchr( channame, ':' )))
|
|
|
|
+ *boxp++ = 0;
|
|
for (chan = channels; chan; chan = chan->next)
|
|
for (chan = channels; chan; chan = chan->next)
|
|
if (!strcmp( chan->name, channame ))
|
|
if (!strcmp( chan->name, channame ))
|
|
goto gotchan;
|
|
goto gotchan;
|
|
@@ -548,6 +549,25 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
goto gotnone;
|
|
goto gotnone;
|
|
gotchan:
|
|
gotchan:
|
|
mvars->chan = chan;
|
|
mvars->chan = chan;
|
|
|
|
+ if (boxp) {
|
|
|
|
+ mvars->boxlist = 1;
|
|
|
|
+ for (;;) {
|
|
|
|
+ nboxp = strpbrk( boxp, ",\n" );
|
|
|
|
+ if (nboxp) {
|
|
|
|
+ t = nboxp - boxp;
|
|
|
|
+ *nboxp++ = 0;
|
|
|
|
+ } else {
|
|
|
|
+ t = strlen( boxp );
|
|
|
|
+ }
|
|
|
|
+ if (t)
|
|
|
|
+ add_string_list_n( &mvars->cboxes, boxp, t );
|
|
|
|
+ else
|
|
|
|
+ add_string_list_n( &mvars->cboxes, "INBOX", 5 );
|
|
|
|
+ if (!nboxp)
|
|
|
|
+ break;
|
|
|
|
+ boxp = nboxp;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
merge_actions( mvars->chan, mvars->ops, XOP_HAVE_TYPE, OP_MASK_TYPE, OP_MASK_TYPE );
|
|
merge_actions( mvars->chan, mvars->ops, XOP_HAVE_TYPE, OP_MASK_TYPE, OP_MASK_TYPE );
|
|
merge_actions( mvars->chan, mvars->ops, XOP_HAVE_CREATE, OP_CREATE, 0 );
|
|
merge_actions( mvars->chan, mvars->ops, XOP_HAVE_CREATE, OP_CREATE, 0 );
|
|
@@ -555,7 +575,6 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
|
|
|
|
mvars->state[M] = mvars->state[S] = ST_FRESH;
|
|
mvars->state[M] = mvars->state[S] = ST_FRESH;
|
|
info( "Channel %s\n", mvars->chan->name );
|
|
info( "Channel %s\n", mvars->chan->name );
|
|
- mvars->boxes[M] = mvars->boxes[S] = mvars->cboxes = 0;
|
|
|
|
mvars->skip = mvars->cben = 0;
|
|
mvars->skip = mvars->cben = 0;
|
|
for (t = 0; t < 2; t++) {
|
|
for (t = 0; t < 2; t++) {
|
|
mvars->drv[t] = mvars->chan->stores[t]->driver;
|
|
mvars->drv[t] = mvars->chan->stores[t]->driver;
|
|
@@ -574,9 +593,8 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
if (mvars->state[M] != ST_OPEN || mvars->state[S] != ST_OPEN)
|
|
if (mvars->state[M] != ST_OPEN || mvars->state[S] != ST_OPEN)
|
|
return;
|
|
return;
|
|
|
|
|
|
- if (mvars->boxlist)
|
|
|
|
- mvars->boxp = mvars->boxlist;
|
|
|
|
- else if (mvars->chan->patterns) {
|
|
|
|
|
|
+ if (!mvars->boxlist && mvars->chan->patterns) {
|
|
|
|
+ mvars->boxlist = 1;
|
|
mvars->boxes[M] = filter_boxes( mvars->ctx[M]->boxes, mvars->chan->patterns );
|
|
mvars->boxes[M] = filter_boxes( mvars->ctx[M]->boxes, mvars->chan->patterns );
|
|
mvars->boxes[S] = filter_boxes( mvars->ctx[S]->boxes, mvars->chan->patterns );
|
|
mvars->boxes[S] = filter_boxes( mvars->ctx[S]->boxes, mvars->chan->patterns );
|
|
for (mboxp = &mvars->boxes[M]; (mbox = *mboxp); ) {
|
|
for (mboxp = &mvars->boxes[M]; (mbox = *mboxp); ) {
|
|
@@ -600,18 +618,6 @@ sync_chans( main_vars_t *mvars, int ent )
|
|
mvars->done = mvars->cben = 0;
|
|
mvars->done = mvars->cben = 0;
|
|
syncmlx:
|
|
syncmlx:
|
|
if (mvars->boxlist) {
|
|
if (mvars->boxlist) {
|
|
- if ((mvars->names[S] = strsep( &mvars->boxp, ",\n" ))) {
|
|
|
|
- if (!*mvars->names[S])
|
|
|
|
- mvars->names[S] = 0;
|
|
|
|
- if (!mvars->list) {
|
|
|
|
- mvars->names[M] = mvars->names[S];
|
|
|
|
- sync_boxes( mvars->ctx, mvars->names, mvars->chan, done_sync, mvars );
|
|
|
|
- goto syncw;
|
|
|
|
- }
|
|
|
|
- puts( nz( mvars->names[S], "INBOX" ) );
|
|
|
|
- goto syncmlx;
|
|
|
|
- }
|
|
|
|
- } else if (mvars->chan->patterns) {
|
|
|
|
if ((mbox = mvars->cboxes)) {
|
|
if ((mbox = mvars->cboxes)) {
|
|
mvars->cboxes = mbox->next;
|
|
mvars->cboxes = mbox->next;
|
|
if (!mvars->list) {
|
|
if (!mvars->list) {
|