File indexing completed on 2024-05-12 05:11:14

0001 /*
0002  * This file is part of the KDE Akonadi Search Project
0003  * SPDX-FileCopyrightText: 2012 Vishesh Handa <me@vhanda.in>
0004  * SPDX-FileCopyrightText: 2014 Christian Mollekopf <mollekopf@kolabsys.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  *
0008  */
0009 
0010 #pragma once
0011 
0012 #include <Akonadi/AgentBase>
0013 #include <Akonadi/Collection>
0014 
0015 #include "index.h"
0016 #include "scheduler.h"
0017 #include <QList>
0018 
0019 class AkonadiIndexingAgent : public Akonadi::AgentBase, public Akonadi::AgentBase::ObserverV3
0020 {
0021     Q_OBJECT
0022 public:
0023     using Akonadi::AgentBase::ObserverV3::collectionChanged; // So we don't trigger -Woverloaded-virtual
0024     explicit AkonadiIndexingAgent(const QString &id);
0025     ~AkonadiIndexingAgent() override;
0026 
0027     void reindexAll();
0028     void reindexCollection(const qlonglong id);
0029     void reindexCollections(const QList<qlonglong> &ids);
0030     [[nodiscard]] qlonglong indexedItems(const qlonglong id);
0031     [[nodiscard]] int numberOfCollectionQueued();
0032 
0033     void itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) override;
0034     void itemChanged(const Akonadi::Item &item, const QSet<QByteArray> &partIdentifiers) override;
0035     void itemsFlagsChanged(const Akonadi::Item::List &items, const QSet<QByteArray> &addedFlags, const QSet<QByteArray> &removedFlags) override;
0036     void itemsRemoved(const Akonadi::Item::List &items) override;
0037     void itemsMoved(const Akonadi::Item::List &items, const Akonadi::Collection &sourceCollection, const Akonadi::Collection &destinationCollection) override;
0038 
0039     void collectionAdded(const Akonadi::Collection &collection, const Akonadi::Collection &parent) override;
0040     void collectionChanged(const Akonadi::Collection &collection, const QSet<QByteArray> &changedAttributes) override;
0041     void collectionRemoved(const Akonadi::Collection &collection) override;
0042     void collectionMoved(const Akonadi::Collection &collection,
0043                          const Akonadi::Collection &collectionSource,
0044                          const Akonadi::Collection &collectionDestination) override;
0045 
0046     // Remove the entire db
0047     void cleanup() override;
0048 
0049 private Q_SLOTS:
0050     void onAbortRequested();
0051     void onOnlineChanged(bool online);
0052 
0053 Q_SIGNALS:
0054     void collectionIndexingFinished(const qlonglong id);
0055 
0056 private:
0057     [[nodiscard]] bool shouldIndex(const Akonadi::Item &item) const;
0058     [[nodiscard]] bool shouldIndex(const Akonadi::Collection &collection) const;
0059 
0060     Index m_index;
0061     Scheduler m_scheduler;
0062 };