File indexing completed on 2024-06-02 05:21:32

0001 /*
0002     SPDX-FileCopyrightText: 2011 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <Akonadi/Collection>
0010 #include <Akonadi/Item>
0011 #include <Akonadi/Job>
0012 
0013 #include "maildir.h"
0014 
0015 class QDirIterator;
0016 namespace Akonadi
0017 {
0018 class TransactionSequence;
0019 }
0020 
0021 /**
0022  * Used to implement ResourceBase::retrieveItems() for Maildirs.
0023  * This completely bypasses ItemSync in order to achieve maximum performance.
0024  */
0025 class RetrieveItemsJob : public Akonadi::Job
0026 {
0027     Q_OBJECT
0028 public:
0029     RetrieveItemsJob(const Akonadi::Collection &collection, const KPIM::Maildir &md, QObject *parent = nullptr);
0030     void setMimeType(const QString &mimeType);
0031 
0032 protected:
0033     void doStart() override;
0034 
0035 private:
0036     void entriesProcessed();
0037     Akonadi::TransactionSequence *transaction();
0038 
0039 private Q_SLOTS:
0040     void localListDone(KJob *job);
0041     void transactionDone(KJob *job);
0042     void processEntry();
0043     void processEntryDone(KJob *);
0044 
0045 private:
0046     const Akonadi::Collection m_collection;
0047     KPIM::Maildir m_maildir;
0048     QHash<QString, Akonadi::Item> m_localItems;
0049     QString m_mimeType;
0050     Akonadi::TransactionSequence *m_transaction = nullptr;
0051     int m_transactionSize = 0;
0052     QDirIterator *m_entryIterator = nullptr;
0053     qint64 m_previousMtime = 0;
0054     qint64 m_highestMtime = 0;
0055     QString m_listingPath;
0056 };