Warning, file /pim/akonadi-search/agent/emailindexer.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  *
0006  */
0007 
0008 #pragma once
0009 
0010 #include <xapian.h>
0011 
0012 #include "abstractindexer.h"
0013 
0014 #include <Akonadi/MessageStatus>
0015 #include <KMime/Message>
0016 
0017 class EmailIndexer : public AbstractIndexer
0018 {
0019 public:
0020     /**
0021      * You must provide the path where the indexed information
0022      * should be stored
0023      */
0024     explicit EmailIndexer(const QString &path, const QString &contactDbPath);
0025     ~EmailIndexer() override;
0026 
0027     [[nodiscard]] QStringList mimeTypes() const override;
0028 
0029     void index(const Akonadi::Item &item) override;
0030     void updateFlags(const Akonadi::Item &item, const QSet<QByteArray> &added, const QSet<QByteArray> &removed) override;
0031     void remove(const Akonadi::Item &item) override;
0032     void remove(const Akonadi::Collection &item) override;
0033     void move(Akonadi::Item::Id itemId, Akonadi::Collection::Id from, Akonadi::Collection::Id to) override;
0034 
0035     void commit() override;
0036 
0037 private:
0038     Xapian::WritableDatabase *m_db = nullptr;
0039     Xapian::Document *m_doc = nullptr;
0040     Xapian::TermGenerator *m_termGen = nullptr;
0041 
0042     Xapian::WritableDatabase *m_contactDb = nullptr;
0043 
0044     void toggleFlag(Xapian::Document &doc, const char *remove, const char *add);
0045 
0046     void process(const KMime::Message::Ptr &msg);
0047     void processPart(KMime::Content *content, KMime::Content *mainContent);
0048     void processMessageStatus(Akonadi::MessageStatus status);
0049 
0050     void insert(const QByteArray &key, KMime::Headers::Base *base);
0051     void insert(const QByteArray &key, KMime::Headers::Generics::MailboxList *mlist);
0052     void insert(const QByteArray &key, KMime::Headers::Generics::AddressList *alist);
0053     void insert(const QByteArray &key, const KMime::Types::Mailbox::List &list);
0054 
0055     void insertBool(char key, bool value);
0056 };