BUFFY* inc;
IMAP_MBOX mx;
int count;
- IMAP_STATUS *status, sb;
- int olduv, oldun;
+ IMAP_STATUS *status;
+ unsigned int olduv, oldun;
mailbox = imap_next_word (s);
s = imap_next_word (mailbox);
*(s - 1) = '\0';
imap_unmunge_mbox_name (mailbox);
- if (!(status = imap_mboxcache_get (idata, mailbox)))
- {
- /* ugly interface - why should I look up what I just added? */
- memset (&sb, 0, sizeof (IMAP_STATUS));
- sb.name = mailbox;
- idata->mboxcache = mutt_add_list_n (idata->mboxcache, &sb, sizeof (IMAP_STATUS));
- status = imap_mboxcache_get (idata, mailbox);
- status->name = safe_strdup (mailbox);
- }
+ status = imap_mboxcache_get (idata, mailbox, 1);
olduv = status->uidvalidity;
oldun = status->uidnext;
}
FREE (&mx.mbox);
- if (imap_mboxcache_get (idata, mailbox))
+ if (imap_mboxcache_get (idata, mailbox, 0))
{
dprint (3, (debugfile, "imap_access: found %s in cache\n", mailbox));
return 0;
{
CONNECTION *conn;
IMAP_DATA *idata;
- IMAP_STATUS* status, sb;
+ IMAP_STATUS* status;
char buf[LONG_STRING];
char bufout[LONG_STRING];
int count = 0;
imap_cmd_start (idata, bufout);
- if (!(status = imap_mboxcache_get (idata, idata->mailbox)))
- {
- memset (&sb, 0, sizeof (IMAP_STATUS));
- sb.name = idata->mailbox;
- idata->mboxcache = mutt_add_list_n (idata->mboxcache, &sb, sizeof (IMAP_STATUS));
- status = imap_mboxcache_get (idata, idata->mailbox);
- status->name = safe_strdup (idata->mailbox);
- }
+ status = imap_mboxcache_get (idata, idata->mailbox, 1);
+
do
{
char *pc;
imap_exec (idata, buf, 0);
queued = 0;
- if ((status = imap_mboxcache_get (idata, mbox)))
+ if ((status = imap_mboxcache_get (idata, mbox, 0)))
return status->messages;
return 0;
}
-/* return cached mailbox stats or NULL */
-IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox)
+/* return cached mailbox stats or NULL if create is 0 */
+IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox, int create)
{
LIST* cur;
IMAP_STATUS* status;
}
status = NULL;
+ /* lame */
+ if (create)
+ {
+ memset (&scache, 0, sizeof (scache));
+ scache.name = (char*)mbox;
+ idata->mboxcache = mutt_add_list_n (idata->mboxcache, &scache,
+ sizeof (scache));
+ status = imap_mboxcache_get (idata, mbox, 0);
+ status->name = safe_strdup (mbox);
+ }
+
#ifdef USE_HCACHE
path = safe_strdup (idata->ctx->path);
url_parse_ciss (&url, path);
uidnext = mutt_hcache_fetch_raw (hc, "/UIDNEXT", imap_hcache_keylen);
if (uidvalidity)
{
- /* lame */
- memset (&scache, 0, sizeof (scache));
- scache.name = (char*)mbox;
- idata->mboxcache = mutt_add_list_n (idata->mboxcache, &scache,
- sizeof (scache));
- status = imap_mboxcache_get (idata, mbox);
- status->name = safe_strdup (mbox);
status->uidvalidity = *uidvalidity;
status->uidnext = uidnext ? *uidnext: 0;
dprint (3, (debugfile, "mboxcache: hcache uidvalidity %d, uidnext %d\n",
/* imap.c */
int imap_create_mailbox (IMAP_DATA* idata, char* mailbox);
int imap_rename_mailbox (IMAP_DATA* idata, IMAP_MBOX* mx, const char* newname);
-IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox);
+IMAP_STATUS* imap_mboxcache_get (IMAP_DATA* idata, const char* mbox,
+ int create);
void imap_mboxcache_free (IMAP_DATA* idata);
int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed,
int invert);