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"