/// <summary>sends extended LIST command</summary> /// <remarks>valid in authenticated state</remarks> public ImapCommandResult ListExtended(string referenceName, string[] mailboxNamePatterns, ImapListSelectionOptions selectionOptions, ImapListReturnOptions returnOptions, out ImapMailbox[] mailboxes) { if (referenceName == null) throw new ArgumentNullException("referenceName"); if (mailboxNamePatterns == null) throw new ArgumentNullException("mailboxNamePatterns"); else if (mailboxNamePatterns.Length == 0) throw new ArgumentException("must be non-empty array", "mailboxNamePatterns"); if (selectionOptions == null) throw new ArgumentNullException("selectionOptions"); if (returnOptions == null) throw new ArgumentNullException("returnOptions"); return ListExtendedInternal(referenceName, mailboxNamePatterns, selectionOptions, returnOptions, out mailboxes); }
/// <summary>sends extended LIST command</summary> /// <remarks>valid in authenticated state</remarks> public ImapCommandResult ListExtended(string mailboxNamePattern, ImapListSelectionOptions selectionOptions, ImapListReturnOptions returnOptions, out ImapMailbox[] mailboxes) { if (selectionOptions == null) throw new ArgumentNullException("selectionOptions"); if (returnOptions == null) throw new ArgumentNullException("returnOptions"); return ListExtendedInternalNoRefName(mailboxNamePattern, null, selectionOptions, returnOptions, out mailboxes); }
private ImapCommandResult ListExtendedInternalNoRefName(string mailboxNamePattern, string[] mailboxNamePatterns, ImapListSelectionOptions selectionOptions, ImapListReturnOptions returnOptions, out ImapMailbox[] mailboxes) { if (mailboxNamePattern == null) throw new ArgumentNullException("mailboxNamePattern"); if (mailboxNamePatterns == null || mailboxNamePatterns.Length == 0) return ListExtendedInternal(string.Empty, new[] {mailboxNamePattern}, selectionOptions, returnOptions, out mailboxes); else return ListExtendedInternal(string.Empty, mailboxNamePatterns.Prepend(mailboxNamePattern), selectionOptions, returnOptions, out mailboxes); }
/// <summary>sends extended LIST command</summary> /// <remarks>valid in authenticated state</remarks> public ImapCommandResult ListExtended(ImapListReturnOptions returnOptions, out ImapMailbox[] mailboxes, string mailboxNamePattern, params string[] mailboxNamePatterns) { if (returnOptions == null) throw new ArgumentNullException("returnOptions"); return ListExtendedInternalNoRefName(mailboxNamePattern, mailboxNamePatterns, null, returnOptions, out mailboxes); }
private ImapCommandResult ListExtendedInternal(string referenceName, string[] mailboxNamePatterns, ImapListSelectionOptions selectionOptions, ImapListReturnOptions returnOptions, out ImapMailbox[] mailboxes) { using (var t = new ListExtendedTransaction(connection)) { if (selectionOptions != null) t.RequestArguments["selection options"] = selectionOptions; if (returnOptions != null) t.RequestArguments["return options"] = returnOptions; var quotedMailboxNamePatterns = Array.ConvertAll(mailboxNamePatterns, delegate(string pattern) { return new ImapMailboxNameString(pattern); }); if (quotedMailboxNamePatterns.Length == 1) ListLsubInternal(t, referenceName, quotedMailboxNamePatterns[0], out mailboxes); else ListLsubInternal(t, referenceName, new ImapParenthesizedString(quotedMailboxNamePatterns), out mailboxes); /* * IMAP4 Extension for Returning STATUS Information in Extended LIST * http://tools.ietf.org/html/rfc5819 */ if (returnOptions != null && returnOptions.RequiredCapabilities.Contains(ImapCapability.ListStatus)) { // XXX: converting STATUS response foreach (var response in t.Result.ReceivedResponses) { var data = response as ImapDataResponse; if (data == null || data.Type != ImapDataResponseType.Status) continue; string mailboxName; var statusAttr = ImapDataResponseConverter.FromStatus(data, out mailboxName); var statusMailbox = Array.Find(mailboxes, delegate(ImapMailbox mailbox) { return mailbox.Name == mailboxName; }); if (statusMailbox != null) statusMailbox.UpdateStatus(statusAttr); } } return t.Result; } }