File indexing completed on 2024-06-23 05:06:08

0001 /*
0002  * This file is part of the KDE Akonadi Search Project
0003  * SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  *
0007  */
0008 
0009 #include "../emailquery.h"
0010 #include "../resultiterator.h"
0011 
0012 #include <QCoreApplication>
0013 #include <QDebug>
0014 #include <QTimer>
0015 
0016 #include <Akonadi/ItemFetchJob>
0017 #include <Akonadi/ItemFetchScope>
0018 
0019 #include <KMime/Message>
0020 
0021 using namespace Akonadi::Search::PIM;
0022 
0023 class App : public QCoreApplication
0024 {
0025     Q_OBJECT
0026 public:
0027     App(int &argc, char **argv, int flags = ApplicationFlags);
0028 
0029     QString m_query;
0030 
0031 private Q_SLOTS:
0032     void main();
0033     void itemsReceived(const Akonadi::Item::List &item);
0034 };
0035 
0036 int main(int argc, char **argv)
0037 {
0038     App app(argc, argv);
0039 
0040     if (argc != 2) {
0041         qWarning() << "Proper args required";
0042         exit(0);
0043     }
0044     app.m_query = QString::fromUtf8(argv[1]);
0045 
0046     return app.exec();
0047 }
0048 
0049 App::App(int &argc, char **argv, int flags)
0050     : QCoreApplication(argc, argv, flags)
0051 {
0052     QTimer::singleShot(0, this, &App::main);
0053 }
0054 
0055 void App::main()
0056 {
0057     EmailQuery query;
0058     query.matches(m_query);
0059     query.setLimit(100);
0060 
0061     QList<Akonadi::Item::Id> m_akonadiIds;
0062 
0063     ResultIterator it = query.exec();
0064     while (it.next()) {
0065         m_akonadiIds << it.id();
0066     }
0067     qDebug() << "Got" << m_akonadiIds.size() << "items";
0068 
0069     if (m_akonadiIds.isEmpty()) {
0070         quit();
0071         return;
0072     }
0073 
0074     auto job = new Akonadi::ItemFetchJob(m_akonadiIds);
0075     job->fetchScope().fetchFullPayload(true);
0076 
0077     connect(job, &Akonadi::ItemFetchJob::itemsReceived, this, &App::itemsReceived);
0078     connect(job, &Akonadi::ItemFetchJob::finished, this, &App::quit);
0079 
0080     job->start();
0081 }
0082 
0083 void App::itemsReceived(const Akonadi::Item::List &itemList)
0084 {
0085     for (const Akonadi::Item &item : itemList) {
0086         auto message = item.payload<KMime::Message::Ptr>();
0087         QDateTime date = message->date()->dateTime();
0088         qDebug() << date.toString(Qt::ISODate) << message->subject()->asUnicodeString();
0089     }
0090 }
0091 
0092 #include "emailquerytest.moc"