protected function _parseList(Horde_Imap_Client_Interaction_Pipeline $pipeline, Horde_Imap_Client_Tokenize $data)
{
$data->next();
$attr = null;
$attr_raw = $data->flushIterator();
$delimiter = $data->next();
$mbox = Horde_Imap_Client_Mailbox::get($data->next(), !$this->_capability()->isEnabled('UTF8=ACCEPT'));
$ml = $pipeline->data['mailboxlist'];
switch ($ml['mode']) {
case Horde_Imap_Client::MBOX_ALL_SUBSCRIBED:
case Horde_Imap_Client::MBOX_SUBSCRIBED_EXISTS:
case Horde_Imap_Client::MBOX_UNSUBSCRIBED:
$attr = array_flip(array_map('Horde_String::lower', $attr_raw));
/* Subscribed list is in UTF-8. */
if (is_null($ml['sub']) && !isset($attr['\\subscribed']) && strcasecmp($mbox, 'INBOX') === 0) {
$attr['\\subscribed'] = 1;
} elseif (isset($ml['sub'][strval($mbox)])) {
$attr['\\subscribed'] = 1;
}
break;
}
switch ($ml['mode']) {
case Horde_Imap_Client::MBOX_SUBSCRIBED_EXISTS:
if (isset($attr['\\nonexistent']) || !isset($attr['\\subscribed'])) {
return;
}
break;
case Horde_Imap_Client::MBOX_UNSUBSCRIBED:
if (isset($attr['\\subscribed'])) {
return;
}
break;
}
if (!empty($ml['opts']['flat'])) {
$pipeline->data['listresponse'][] = $mbox;
return;
}
$tmp = array('delimiter' => $delimiter, 'mailbox' => $mbox);
if ($attr || !empty($ml['opts']['attributes'])) {
if (is_null($attr)) {
$attr = array_flip(array_map('Horde_String::lower', $attr_raw));
}
/* RFC 5258 [3.4]: inferred attributes. */
if ($ml['ext']) {
if (isset($attr['\\noinferiors'])) {
$attr['\\hasnochildren'] = 1;
}
if (isset($attr['\\nonexistent'])) {
$attr['\\noselect'] = 1;
}
}
$tmp['attributes'] = array_keys($attr);
}
if ($data->next() !== false) {
$tmp['extended'] = $data->flushIterator();
}
$pipeline->data['listresponse'][strval($mbox)] = $tmp;
}