File indexing completed on 2024-05-19 05:11:07

0001 /*
0002   SPDX-FileCopyrightText: 2013 Sérgio Martins <iamsergio@gmail.com>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0005 */
0006 
0007 #include "collectionloader.h"
0008 
0009 #include <KCalendarCore/Incidence>
0010 
0011 #include <Akonadi/CollectionFetchJob>
0012 #include <Akonadi/CollectionFetchScope>
0013 #include <QSet>
0014 #include <QString>
0015 
0016 #include <QDebug>
0017 
0018 CollectionLoader::CollectionLoader(QObject *parent)
0019     : QObject(parent)
0020 {
0021 }
0022 
0023 void CollectionLoader::load()
0024 {
0025     auto job = new Akonadi::CollectionFetchJob(Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive);
0026 
0027     job->fetchScope().setContentMimeTypes(KCalendarCore::Incidence::mimeTypes());
0028     connect(job, &Akonadi::CollectionFetchJob::result, this, &CollectionLoader::onCollectionsLoaded);
0029     job->start();
0030 }
0031 
0032 Akonadi::Collection::List CollectionLoader::collections() const
0033 {
0034     return m_collections;
0035 }
0036 
0037 void CollectionLoader::onCollectionsLoaded(KJob *job)
0038 {
0039     if (job->error() == 0) {
0040         auto cfj = qobject_cast<Akonadi::CollectionFetchJob *>(job);
0041         Q_ASSERT(cfj);
0042         const QStringList mimetypes = KCalendarCore::Incidence::mimeTypes();
0043         QSet<QString> mimeTypeSet = QSet<QString>(mimetypes.begin(), mimetypes.end());
0044         const auto collections = cfj->collections();
0045         for (const Akonadi::Collection &collection : collections) {
0046             const QStringList contentMimeTypesLst = collection.contentMimeTypes();
0047             QSet<QString> collectionMimeTypeSet = QSet<QString>(contentMimeTypesLst.begin(), contentMimeTypesLst.end());
0048             if (mimeTypeSet.intersects(collectionMimeTypeSet)) {
0049                 m_collections << collection;
0050             }
0051         }
0052         Q_EMIT loaded(true);
0053     } else {
0054         qCritical() << job->errorString();
0055         Q_EMIT loaded(false);
0056     }
0057 }
0058 
0059 #include "moc_collectionloader.cpp"