1 /*
2 * This file is part of the KDE Akonadi Search Project
3 * SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 *
7 */
8
9 #include "../emailquery.h"
10 #include "../resultiterator.h"
11
12 #include <QCoreApplication>
13 #include <QDebug>
14 #include <QTimer>
15
16 #include <Akonadi/ItemFetchJob>
17 #include <Akonadi/ItemFetchScope>
18
19 #include <KMime/Message>
20
21 using namespace Akonadi::Search::PIM;
22
23 class App : public QCoreApplication
24 {
25 Q_OBJECT
26 public:
27 App(int &argc, char **argv, int flags = ApplicationFlags);
28
29 QString m_query;
30
31 private Q_SLOTS:
32 void main();
33 void itemsReceived(const Akonadi::Item::List &item);
34 };
35
main(int argc,char ** argv)36 int main(int argc, char **argv)
37 {
38 App app(argc, argv);
39
40 if (argc != 2) {
41 qWarning() << "Proper args required";
42 exit(0);
43 }
44 app.m_query = QString::fromUtf8(argv[1]);
45
46 return app.exec();
47 }
48
App(int & argc,char ** argv,int flags)49 App::App(int &argc, char **argv, int flags)
50 : QCoreApplication(argc, argv, flags)
51 {
52 QTimer::singleShot(0, this, &App::main);
53 }
54
main()55 void App::main()
56 {
57 EmailQuery query;
58 query.matches(m_query);
59 query.setLimit(100);
60
61 QList<Akonadi::Item::Id> m_akonadiIds;
62
63 ResultIterator it = query.exec();
64 while (it.next()) {
65 m_akonadiIds << it.id();
66 }
67 qDebug() << "Got" << m_akonadiIds.size() << "items";
68
69 if (m_akonadiIds.isEmpty()) {
70 quit();
71 return;
72 }
73
74 auto job = new Akonadi::ItemFetchJob(m_akonadiIds);
75 job->fetchScope().fetchFullPayload(true);
76
77 connect(job, &Akonadi::ItemFetchJob::itemsReceived, this, &App::itemsReceived);
78 connect(job, &Akonadi::ItemFetchJob::finished, this, &App::quit);
79
80 job->start();
81 }
82
itemsReceived(const Akonadi::Item::List & itemList)83 void App::itemsReceived(const Akonadi::Item::List &itemList)
84 {
85 for (const Akonadi::Item &item : itemList) {
86 KMime::Message::Ptr message = item.payload<KMime::Message::Ptr>();
87 QDateTime date = message->date()->dateTime();
88 qDebug() << date.toString(Qt::ISODate) << message->subject()->asUnicodeString();
89 }
90 }
91
92 #include "emailquerytest.moc"
93