MCPcopy Create free account
hub / github.com/MailCore/mailcore2 / fetchAllFolders

Method fetchAllFolders

src/core/imap/MCIMAPSession.cpp:1516–1589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1514}
1515
1516Array * /* 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;

Callers 1

mainMethod · 0.80

Calls 6

resultsWithErrorFunction · 0.85
hasSuffixMethod · 0.80
mainPrefixMethod · 0.45
lengthMethod · 0.45
addObjectsFromArrayMethod · 0.45

Tested by

no test coverage detected