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