| 1514 | } |
| 1515 | |
| 1516 | Array * /* IMAPFolder */ IMAPSession::fetchAllFolders(ErrorCode * pError) |
| 1517 | { |
| 1518 | int r; |
| 1519 | clist * imap_folders; |
| 1520 | |
| 1521 | loginIfNeeded(pError); |
| 1522 | if (* pError != ErrorNone) |
| 1523 | return NULL; |
| 1524 | |
| 1525 | if (mDelimiter == 0) { |
| 1526 | char delimiter; |
| 1527 | |
| 1528 | delimiter = fetchDelimiterIfNeeded(mDelimiter, pError); |
| 1529 | if (* pError != ErrorNone) |
| 1530 | return NULL; |
| 1531 | |
| 1532 | //setDelimiter(delimiter); |
| 1533 | mDelimiter = delimiter; |
| 1534 | } |
| 1535 | |
| 1536 | String * prefix = NULL; |
| 1537 | if (defaultNamespace()) { |
| 1538 | prefix = defaultNamespace()->mainPrefix(); |
| 1539 | } |
| 1540 | if (prefix == NULL) { |
| 1541 | prefix = MCSTR(""); |
| 1542 | } |
| 1543 | if (prefix->length() > 0) { |
| 1544 | if (!prefix->hasSuffix(String::stringWithUTF8Format("%c", mDelimiter))) { |
| 1545 | prefix = prefix->stringByAppendingUTF8Format("%c", mDelimiter); |
| 1546 | } |
| 1547 | } |
| 1548 | |
| 1549 | if (mXListEnabled) { |
| 1550 | r = mailimap_xlist(mImap, MCUTF8(prefix), "*", &imap_folders); |
| 1551 | } |
| 1552 | else { |
| 1553 | r = mailimap_list(mImap, MCUTF8(prefix), "*", &imap_folders); |
| 1554 | } |
| 1555 | Array * result = resultsWithError(r, imap_folders, pError); |
| 1556 | if (* pError == ErrorConnection || * pError == ErrorParse) |
| 1557 | mShouldDisconnect = true; |
| 1558 | |
| 1559 | if (result != NULL) { |
| 1560 | bool hasInbox = false; |
| 1561 | mc_foreacharray(IMAPFolder, folder, result) { |
| 1562 | if (folder->path()->isEqual(MCSTR("INBOX"))) { |
| 1563 | hasInbox = true; |
| 1564 | } |
| 1565 | } |
| 1566 | |
| 1567 | if (!hasInbox) { |
| 1568 | mc_foreacharray(IMAPFolder, folder, result) { |
| 1569 | if (folder->flags() & IMAPFolderFlagInbox) { |
| 1570 | // some mail providers use non-standart name for inbox folder |
| 1571 | hasInbox = true; |
| 1572 | folder->setPath(MCSTR("INBOX")); |
| 1573 | break; |
no test coverage detected