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