X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=imap%2Fcommand.c;h=989bd6766bb3f7c49cbc50925388d6c00e0114be;hp=f76cff6f314db417aa2eb8bd3d6a9abd97f078f9;hb=be393b838c5e0b8dfe9bedcc7a4a63f05caae7c4;hpb=841a368ddea400022328f35dd8c7a3eb6f543892 diff --git a/imap/command.c b/imap/command.c index f76cff6..989bd67 100644 --- a/imap/command.c +++ b/imap/command.c @@ -2,7 +2,7 @@ * Copyright notice from original mutt: * Copyright (C) 1996-8 Michael R. Elkins * Copyright (C) 1996-9 Brandon Long - * Copyright (C) 1999-2002 Brendan Cully + * Copyright (C) 1999-2005 Brendan Cully * * This file is part of mutt-ng, see http://www.muttng.org/. * It's licensed under the GNU General Public License, @@ -36,6 +36,7 @@ static int cmd_handle_untagged (IMAP_DATA * idata); static void cmd_make_sequence (IMAP_DATA * idata); static void cmd_parse_capabilities (IMAP_DATA * idata, char *s); static void cmd_parse_expunge (IMAP_DATA * idata, const char *s); +static void cmd_parse_lsub (IMAP_DATA* idata, char* s); static void cmd_parse_fetch (IMAP_DATA * idata, char *s); static void cmd_parse_myrights (IMAP_DATA * idata, char *s); @@ -347,6 +348,8 @@ static int cmd_handle_untagged (IMAP_DATA * idata) } else if (ascii_strncasecmp ("CAPABILITY", s, 10) == 0) cmd_parse_capabilities (idata, s); + else if (ascii_strncasecmp ("LSUB", s, 4) == 0) + cmd_parse_lsub (idata, s); else if (ascii_strncasecmp ("MYRIGHTS", s, 8) == 0) cmd_parse_myrights (idata, s); else if (ascii_strncasecmp ("BYE", s, 3) == 0) { @@ -491,6 +494,60 @@ static void cmd_parse_fetch (IMAP_DATA * idata, char *s) } } +static void cmd_parse_lsub (IMAP_DATA* idata, char* s) { + char buf[STRING]; + char errstr[STRING]; + BUFFER err, token; + ciss_url_t url; + char *ep; + + if (!option (OPTIMAPCHECKSUBSCRIBED)) + return; + + s = imap_next_word (s); /* flags */ + + if (*s != '(') { + debug_print (1, ("Bad LSUB response\n")); + return; + } + + s++; + ep = s; + for (ep = s; *ep && *ep != ')'; ep++); + do { + if (!ascii_strncasecmp (s, "\\NoSelect", 9)) + return; + while (s < ep && *s != ' ' && *s != ')') + s++; + if (*s == ' ') + s++; + } while (s != ep); + + s = imap_next_word (s); /* delim */ + s = imap_next_word (s); /* name */ + + if (s) { + imap_unmunge_mbox_name (s); + debug_print (2, ("Subscribing to %s\n", s)); + + strfcpy (buf, "mailboxes \"", sizeof (buf)); + mutt_account_tourl (&idata->conn->account, &url); + url.path = s; + if (!str_cmp (url.user, ImapUser)) + url.user = NULL; + url_ciss_tostring (&url, buf + 11, sizeof (buf) - 10, 0); + str_cat (buf, sizeof (buf), "\""); + memset (&token, 0, sizeof (token)); + err.data = errstr; + err.dsize = sizeof (errstr); + if (mutt_parse_rc_line (buf, &token, &err)) + debug_print (1, ("Error adding subscribed mailbox: %s\n", errstr)); + mem_free (&token.data); + } + else + debug_print (1, ("Bad LSUB response\n")); +} + /* cmd_parse_myrights: set rights bits according to MYRIGHTS response */ static void cmd_parse_myrights (IMAP_DATA * idata, char *s) {