Merge branch 'isync_1_2_branch'
This commit is contained in:
commit
a041766140
|
@ -41,7 +41,6 @@ typedef struct store_conf {
|
|||
const char *trash;
|
||||
uint max_size; /* off_t is overkill */
|
||||
char trash_remote_new, trash_only_new;
|
||||
char failed;
|
||||
} store_conf_t;
|
||||
|
||||
/* For message->flags */
|
||||
|
@ -249,6 +248,9 @@ struct driver {
|
|||
|
||||
/* Get approximate amount of memory occupied by the driver. */
|
||||
int (*memory_usage)( store_t *ctx );
|
||||
|
||||
/* Get the FAIL_* state of the driver. */
|
||||
int (*fail_state)( store_conf_t *conf );
|
||||
};
|
||||
|
||||
void free_generic_messages( message_t * );
|
||||
|
|
|
@ -57,6 +57,7 @@ typedef struct imap_server_conf {
|
|||
#ifdef HAVE_LIBSSL
|
||||
char ssl_type;
|
||||
#endif
|
||||
char failed;
|
||||
} imap_server_conf_t;
|
||||
|
||||
typedef struct imap_store_conf {
|
||||
|
@ -2166,7 +2167,7 @@ imap_open_store_bail( imap_store_t *ctx, int failed )
|
|||
{
|
||||
void (*cb)( store_t *srv, void *aux ) = ctx->callbacks.imap_open;
|
||||
void *aux = ctx->callback_aux;
|
||||
ctx->gen.conf->failed = failed;
|
||||
((imap_store_conf_t *)ctx->gen.conf)->server->failed = failed;
|
||||
imap_cancel_store( &ctx->gen );
|
||||
cb( 0, aux );
|
||||
}
|
||||
|
@ -2668,6 +2669,14 @@ imap_memory_usage( store_t *gctx )
|
|||
return ctx->buffer_mem + ctx->conn.buffer_mem;
|
||||
}
|
||||
|
||||
/******************* imap_fail_state *******************/
|
||||
|
||||
static int
|
||||
imap_fail_state( store_conf_t *gconf )
|
||||
{
|
||||
return ((imap_store_conf_t *)gconf)->server->failed;
|
||||
}
|
||||
|
||||
/******************* imap_parse_store *******************/
|
||||
|
||||
imap_server_conf_t *servers, **serverapp = &servers;
|
||||
|
@ -2950,4 +2959,5 @@ struct driver imap_driver = {
|
|||
imap_cancel_cmds,
|
||||
imap_commit_cmds,
|
||||
imap_memory_usage,
|
||||
imap_fail_state,
|
||||
};
|
||||
|
|
|
@ -57,6 +57,7 @@ typedef struct maildir_store_conf {
|
|||
int alt_map;
|
||||
#endif /* USE_DB */
|
||||
char info_delimiter;
|
||||
char failed;
|
||||
char *info_prefix, *info_stop; /* precalculated from info_delimiter */
|
||||
} maildir_store_conf_t;
|
||||
|
||||
|
@ -141,12 +142,12 @@ maildir_validate_path( store_conf_t *conf )
|
|||
|
||||
if (!conf->path) {
|
||||
error( "Maildir error: store '%s' has no Path\n", conf->name );
|
||||
conf->failed = FAIL_FINAL;
|
||||
((maildir_store_conf_t *)conf)->failed = FAIL_FINAL;
|
||||
return -1;
|
||||
}
|
||||
if (stat( conf->path, &st ) || !S_ISDIR(st.st_mode)) {
|
||||
error( "Maildir error: cannot open store '%s'\n", conf->path );
|
||||
conf->failed = FAIL_FINAL;
|
||||
((maildir_store_conf_t *)conf)->failed = FAIL_FINAL;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -432,7 +433,7 @@ maildir_validate( const char *box, int create, maildir_store_t *ctx )
|
|||
return DRV_BOX_BAD;
|
||||
if (make_box_dir( buf, bl )) {
|
||||
sys_error( "Maildir error: cannot create mailbox '%s'", box );
|
||||
ctx->gen.conf->failed = FAIL_FINAL;
|
||||
((maildir_store_conf_t *)ctx->gen.conf)->failed = FAIL_FINAL;
|
||||
maildir_invoke_bad_callback( &ctx->gen );
|
||||
return DRV_CANCELED;
|
||||
}
|
||||
|
@ -1630,6 +1631,12 @@ maildir_memory_usage( store_t *gctx ATTR_UNUSED )
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
maildir_fail_state( store_conf_t *gconf )
|
||||
{
|
||||
return ((maildir_store_conf_t *)gconf)->failed;
|
||||
}
|
||||
|
||||
static int
|
||||
maildir_parse_store( conffile_t *cfg, store_conf_t **storep )
|
||||
{
|
||||
|
@ -1698,4 +1705,5 @@ struct driver maildir_driver = {
|
|||
maildir_cancel_cmds,
|
||||
maildir_commit_cmds,
|
||||
maildir_memory_usage,
|
||||
maildir_fail_state,
|
||||
};
|
||||
|
|
10
src/main.c
10
src/main.c
|
@ -448,7 +448,7 @@ main( int argc, char **argv )
|
|||
else if (!strcmp( opt, "-net" ))
|
||||
op = VERBOSE | DEBUG_NET;
|
||||
else if (!strcmp( opt, "-net-all" ))
|
||||
op = VERBOSE | DEBUG_NET_ALL;
|
||||
op = VERBOSE | DEBUG_NET | DEBUG_NET_ALL;
|
||||
else if (!strcmp( opt, "-sync" ))
|
||||
op = VERBOSE | DEBUG_SYNC;
|
||||
else
|
||||
|
@ -637,7 +637,7 @@ main( int argc, char **argv )
|
|||
op |= DEBUG_NET | VERBOSE;
|
||||
break;
|
||||
case 'N':
|
||||
op |= DEBUG_NET_ALL | VERBOSE;
|
||||
op |= DEBUG_NET | DEBUG_NET_ALL | VERBOSE;
|
||||
break;
|
||||
case 's':
|
||||
op |= DEBUG_SYNC | VERBOSE;
|
||||
|
@ -757,8 +757,10 @@ sync_chans( main_vars_t *mvars, int ent )
|
|||
info( "Channel %s\n", mvars->chan->name );
|
||||
mvars->skip = mvars->cben = 0;
|
||||
for (t = 0; t < 2; t++) {
|
||||
if (mvars->chan->stores[t]->failed != FAIL_TEMP) {
|
||||
info( "Skipping due to failed %s store %s.\n", str_ms[t], mvars->chan->stores[t]->name );
|
||||
int st = mvars->chan->stores[t]->driver->fail_state( mvars->chan->stores[t] );
|
||||
if (st != FAIL_TEMP) {
|
||||
info( "Skipping due to %sfailed %s store %s.\n",
|
||||
(st == FAIL_WAIT) ? "temporarily " : "", str_ms[t], mvars->chan->stores[t]->name );
|
||||
mvars->skip = 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user