}
/*
- * Convert a struct quickroom to an IMAP-compatible mailbox name.
+ * Convert a struct room to an IMAP-compatible mailbox name.
*/
-void imap_mailboxname(char *buf, int bufsize, struct quickroom *qrbuf)
+void imap_mailboxname(char *buf, int bufsize, struct room *qrbuf)
{
struct floor *fl;
+ int i;
/*
* For mailboxes, just do it straight...
fl->f_name,
qrbuf->QRname);
}
+
+ /*
+ * Replace delimiter characters with "|" for pseudo-folder-delimiting
+ */
+ for (i=0; i<strlen(buf); ++i) {
+ if (buf[i] == FDELIM) buf[i] = '|';
+ }
}
int imap_roomname(char *rbuf, int bufsize, char *foldername)
{
int levels;
- char buf[SIZ];
+ char floorname[SIZ];
+ char roomname[SIZ];
int i;
struct floor *fl;
+ int ret = (-1);
- if (foldername == NULL)
- return (-1);
+ if (foldername == NULL) return(-1);
levels = num_parms(foldername);
- /* When we can support hierarchial mailboxes, take this out. */
- if (levels > 2)
- return (-1);
-
/*
* Convert the crispy idiot's reserved names to our reserved names.
*/
if (!strcasecmp(foldername, "INBOX")) {
safestrncpy(rbuf, MAILROOM, bufsize);
- return (0 | IR_MAILBOX);
+ ret = (0 | IR_MAILBOX);
}
- if (levels > 1) {
- extract(buf, foldername, 0);
+ else if (levels > 1) {
+ extract(floorname, foldername, 0);
+ strcpy(roomname, &foldername[strlen(floorname)+1]);
for (i = 0; i < MAXFLOORS; ++i) {
fl = cgetfloor(i);
if (fl->f_flags & F_INUSE) {
- if (!strcasecmp(buf, fl->f_name)) {
- extract(rbuf, foldername, 1);
- return (i);
+ if (!strcasecmp(floorname, fl->f_name)) {
+ strcpy(rbuf, roomname);
+ ret = i;
}
}
}
- /* since we don't allow multi-level yet, fail.
- extract(rbuf, buf, 1);
- return(0);
- */
- return (-1);
+ if (ret < 0) {
+ /* No subfolderificationalisticism on this one... */
+ safestrncpy(rbuf, foldername, bufsize);
+ ret = (0 | IR_MAILBOX);
+ }
+
}
- safestrncpy(rbuf, foldername, bufsize);
- return (0 | IR_MAILBOX);
+ else {
+ safestrncpy(rbuf, foldername, bufsize);
+ ret = (0 | IR_MAILBOX);
+ }
+
+ /* Undelimiterizationalize the room name (change '|') */
+ for (i=0; i<strlen(rbuf); ++i) {
+ if (rbuf[i] == '|') rbuf[i] = FDELIM;
+ }
+
+
+/*** This doesn't work.
+ char buf[SIZ];
+ if (ret & IR_MAILBOX) {
+ if (atol(rbuf) == 0L) {
+ strcpy(buf, rbuf);
+ sprintf(rbuf, "%010ld.%s", CC->user.usernum, buf);
+ }
+ }
+ ***/
+
+ lprintf(9, "(That translates to \"%s\")\n", rbuf);
+ return(ret);
}