int imap_mailbox_rename (const char* url, const char* parent, const char* subfolder, int subscribe) { IMAP_DATA* idata; IMAP_MBOX mx; char buf[LONG_STRING]; short n; BUFFER new_url; memset (&new_url, 0, sizeof (new_url)); if (imap_parse_path (url, &mx) < 0) { dprint (1, (debugfile, "imap_mailbox_rename: Bad path %s\n", url)); return -1; } if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) { dprint (1, (debugfile, "imap_mailbox_rename: Couldn't find open connection to %s", mx.account.host)); goto fail; } strfcpy (buf, parent, sizeof (buf)); /* append a delimiter if necessary */ n = mutt_strlen (buf); if (n && (n < sizeof (buf) - 1) && (buf[n-1] != idata->delim)) { buf[n++] = idata->delim; buf[n] = '\0'; } strfcpy (buf + n, subfolder, sizeof (buf) - n); imap_subscribe(url, 0); if (imap_rename_mailbox (idata, mx.mbox, buf) < 0) goto fail; if (subscribe) { char* slash = strchr(url+8, '/'); if(slash) { mutt_buffer_add(&new_url, url, slash-url+1); mutt_buffer_addstr(&new_url, parent); mutt_buffer_addch (&new_url, idata->delim); mutt_buffer_addstr(&new_url, subfolder); if (imap_subscribe(new_url.data, 1) < 0) goto fail; } } FREE (&new_url.data); FREE (&mx.mbox); return 0; fail: FREE (&new_url.data); FREE (&mx.mbox); return -1; }
/* * Auxiliary function to create a mailbox. */ int create_mailbox(session *ssn, const char *mbox) { int r; const char *m; m = apply_namespace(mbox, ssn->ns.prefix, ssn->ns.delim); if ((r = response_generic(ssn, imap_create(ssn, m))) == -1) return -1; if (get_option_boolean("subscribe")) if (response_generic(ssn, imap_subscribe(ssn, m)) == -1) return -1; return r; }
/* * Subscribe the specified mailbox. */ int request_subscribe(const char *server, const char *port, const char *user, const char *mbox) { int r; session *s; const char *m; if (!(s = session_find(server, port, user))) return -1; m = apply_namespace(mbox, s->ns.prefix, s->ns.delim); if ((r = response_generic(s, imap_subscribe(s, m))) == -1) goto fail; return r; fail: close_connection(s); session_destroy(s); return -1; }
int imap_mailbox_create (const char* folder, const char* subfolder, int subscribe) #endif { IMAP_DATA* idata; IMAP_MBOX mx; char buf[LONG_STRING]; short n; if (imap_parse_path (folder, &mx) < 0) { dprint (1, (debugfile, "imap_mailbox_create: Bad starting path %s\n", folder)); return -1; } if (!(idata = imap_conn_find (&mx.account, M_IMAP_CONN_NONEW))) { dprint (1, (debugfile, "imap_mailbox_create: Couldn't find open connection to %s", mx.account.host)); goto fail; } strfcpy (buf, NONULL (mx.mbox), sizeof (buf)); /* append a delimiter if necessary */ n = mutt_strlen (buf); if (n && (n < sizeof (buf) - 1) && (buf[n-1] != idata->delim)) { buf[n++] = idata->delim; buf[n] = '\0'; } #ifndef LIBMUTT if (mutt_get_field (_("Create mailbox: "), buf, sizeof (buf), M_FILE) < 0) goto fail; if (!mutt_strlen (buf)) { mutt_error (_("Mailbox must have a name.")); mutt_sleep(1); goto fail; } #else strfcpy (buf + n, subfolder, sizeof (buf) - n); #endif if (imap_create_mailbox (idata, buf) < 0) goto fail; #ifndef LIBMUTT mutt_message _("Mailbox created."); mutt_sleep (0); #else if (subscribe) { snprintf(buf, sizeof (buf), "%s%c%s", folder, idata->delim, subfolder); if (imap_subscribe(buf, 1) < 0) goto fail; } #endif FREE (&mx.mbox); return 0; fail: FREE (&mx.mbox); return -1; }