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