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 };