Akonadi::Collection TasksHandler::handlerCollection() const { Akonadi::Collection taskCollection; taskCollection.setContentMimeTypes( QStringList() << KCalCore::Todo::todoMimeType() ); taskCollection.setName( i18nc( "@item folder name", "Tasks" ) ); taskCollection.setRights( Akonadi::Collection::CanChangeItem | Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanDeleteItem ); return taskCollection; }
Akonadi::Collection SalesforceContactsHandler::collection() const { Akonadi::Collection contactCollection; contactCollection.setRemoteId(moduleName()); contactCollection.setContentMimeTypes(QStringList() << KABC::Addressee::mimeType()); contactCollection.setName(i18nc("@item folder name", "Contacts")); contactCollection.setRights(Akonadi::Collection::CanChangeItem | Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanDeleteItem); return contactCollection; }
Akonadi::Collection DocumentsHandler::handlerCollection() const { Akonadi::Collection documentCollection; documentCollection.setRemoteId(moduleToName(module())); documentCollection.setContentMimeTypes(QStringList() << SugarDocument::mimeType()); documentCollection.setName(i18nc("@item folder name", "Documents")); documentCollection.setRights(Akonadi::Collection::CanChangeItem | Akonadi::Collection::CanCreateItem | Akonadi::Collection::CanDeleteItem); return documentCollection; }
void RetrieveCollectionsTask::onMailBoxesReceived(const QList< KIMAP::MailBoxDescriptor > &descriptors, const QList< QList<QByteArray> > &flags) { QStringList contentTypes; contentTypes << KMime::Message::mimeType() << Akonadi::Collection::mimeType(); if (!descriptors.isEmpty()) { // This is still not optimal way of getting the separator, but it's better // than guessing every time from RID of parent collection setSeparatorCharacter(descriptors.first().separator); } for (int i = 0; i < descriptors.size(); ++i) { KIMAP::MailBoxDescriptor descriptor = descriptors[i]; // skip phantom mailboxes contained in LSUB but not LIST if (isSubscriptionEnabled() && !m_fullReportedCollections.contains(descriptor.name)) { qCDebug(IMAPRESOURCE_LOG) << "Got phantom mailbox: " << descriptor.name; continue; } const QString separator = descriptor.separator; Q_ASSERT(separator.size() == 1); // that's what the spec says const QString boxName = descriptor.name.endsWith(separator) ? descriptor.name.left(descriptor.name.size() - 1) : descriptor.name; const QStringList pathParts = boxName.split(separator); QString parentPath; QString currentPath; const int pathPartsSize(pathParts.size()); for (int j = 0; j < pathPartsSize; ++j) { const bool isDummy = j != pathPartsSize - 1; const QString pathPart = pathParts.at(j); currentPath += separator + pathPart; if (m_reportedCollections.contains(currentPath)) { if (m_dummyCollections.contains(currentPath) && !isDummy) { qCDebug(IMAPRESOURCE_LOG) << "Received the real collection for a dummy one : " << currentPath; //set the correct attributes for the collection, eg. noselect needs to be removed Akonadi::Collection c = m_reportedCollections.value(currentPath); c.setContentMimeTypes(contentTypes); c.setRights(Akonadi::Collection::AllRights); c.removeAttribute<NoSelectAttribute>(); m_dummyCollections.remove(currentPath); m_reportedCollections.remove(currentPath); m_reportedCollections.insert(currentPath, c); } parentPath = currentPath; continue; } const QList<QByteArray> currentFlags = isDummy ? (QList<QByteArray>() << "\\noselect") : flags[i]; Akonadi::Collection c; c.setName(pathPart); c.setRemoteId(separator + pathPart); const Akonadi::Collection parentCollection = m_reportedCollections.value(parentPath); c.setParentCollection(parentCollection); c.setContentMimeTypes(contentTypes); // If the folder is the Inbox, make some special settings. if (currentPath.compare(separator + QLatin1String("INBOX"), Qt::CaseInsensitive) == 0) { Akonadi::EntityDisplayAttribute *attr = c.attribute<Akonadi::EntityDisplayAttribute>(Akonadi::Collection::AddIfMissing); attr->setDisplayName(i18n("Inbox")); attr->setIconName(QStringLiteral("mail-folder-inbox")); setIdleCollection(c); } // If the folder is the user top-level folder, mark it as well, even although it is not officially noted in the RFC if (currentPath == (separator + QLatin1String("user")) && currentFlags.contains("\\noselect")) { Akonadi::EntityDisplayAttribute *attr = c.attribute<Akonadi::EntityDisplayAttribute>(Akonadi::Collection::AddIfMissing); attr->setDisplayName(i18n("Shared Folders")); attr->setIconName(QStringLiteral("x-mail-distribution-list")); } // If this folder is a noselect folder, make some special settings. if (currentFlags.contains("\\noselect")) { qCDebug(IMAPRESOURCE_LOG) << "Dummy collection created: " << currentPath; c.addAttribute(new NoSelectAttribute(true)); c.setContentMimeTypes(QStringList() << Akonadi::Collection::mimeType()); c.setRights(Akonadi::Collection::ReadOnly); } else { // remove the noselect attribute explicitly, in case we had set it before (eg. for non-subscribed non-leaf folders) c.removeAttribute<NoSelectAttribute>(); } // If this folder is a noinferiors folder, it is not allowed to create subfolders inside. if (currentFlags.contains("\\noinferiors")) { //qCDebug(IMAPRESOURCE_LOG) << "Noinferiors: " << currentPath; c.addAttribute(new NoInferiorsAttribute(true)); c.setRights(c.rights() & ~Akonadi::Collection::CanCreateCollection); } m_reportedCollections.insert(currentPath, c); if (isDummy) { m_dummyCollections.insert(currentPath, c); } parentPath = currentPath; } } }