internal static ImapMailboxInfo Parse(ImapResponseLine line) { const string pattern = "\\(.*?\\)|\".+?\"|\\w+"; var parts = Regex.Matches(line.Text, pattern) .OfType <Match>() .Select(x => x.Value) .ToArray(); var name = ImapMailbox.DecodeName(parts[3].TrimQuotes()); var info = new ImapMailboxInfo(name, parts[2].TrimQuotes().ToCharArray().First()) { Flags = Regex.Match(parts[1], @"\(.*\)").Value.Trim(new[] { '(', ')' }).Split(' ') }; return(info); }
private async Task <List <ImapMailboxInfo> > ReadListResponseAsync(string id) { var mailboxes = new List <ImapMailboxInfo>(); while (true) { var line = await _connection.ReadAsync(); if (line.IsUntagged) { mailboxes.Add(ImapMailboxInfo.Parse(line)); } if (line.TerminatesCommand(id)) { break; } } return(mailboxes); }