1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
/*
SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
SPDX-FileContributor: Kevin Ottens <kevin@kdab.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#pragma once
#include <QObject>
#include <Akonadi/Collection>
#include <Akonadi/Item>
#include <KIMAP/Acl>
#include "resourcestateinterface.h"
namespace KIMAP
{
class Session;
}
class SessionPool;
class ResourceTask : public QObject
{
Q_OBJECT
public:
enum ActionIfNoSession {
CancelIfNoSession,
DeferIfNoSession,
};
Q_ENUM(ActionIfNoSession)
explicit ResourceTask(ActionIfNoSession action, ResourceStateInterface::Ptr resource, QObject *parent = nullptr);
~ResourceTask() override;
void start(SessionPool *pool);
void kill();
static QList<QByteArray> fromAkonadiToSupportedImapFlags(const QList<QByteArray> &flags, const Akonadi::Collection &collection);
static QSet<QByteArray> toAkonadiFlags(const QList<QByteArray> &flags);
Q_SIGNALS:
void status(int status, const QString &message = QString());
protected:
virtual void doStart(KIMAP::Session *session) = 0;
protected:
QString userName() const;
QString resourceName() const;
QStringList serverCapabilities() const;
QList<KIMAP::MailBoxDescriptor> serverNamespaces() const;
bool isAutomaticExpungeEnabled() const;
bool isSubscriptionEnabled() const;
bool isDisconnectedModeEnabled() const;
int intervalCheckTime() const;
Akonadi::Collection collection() const;
Akonadi::Item item() const;
Akonadi::Item::List items() const;
Akonadi::Collection parentCollection() const;
Akonadi::Collection sourceCollection() const;
Akonadi::Collection targetCollection() const;
QSet<QByteArray> parts() const;
QSet<QByteArray> addedFlags() const;
QSet<QByteArray> removedFlags() const;
QString rootRemoteId() const;
QString mailBoxForCollection(const Akonadi::Collection &collection) const;
void setIdleCollection(const Akonadi::Collection &collection);
void applyCollectionChanges(const Akonadi::Collection &collection);
void itemRetrieved(const Akonadi::Item &item);
void itemsRetrieved(const Akonadi::Item::List &items);
void itemsRetrievedIncremental(const Akonadi::Item::List &changed, const Akonadi::Item::List &removed);
void itemsRetrievalDone();
void setTotalItems(int);
void changeCommitted(const Akonadi::Item &item);
void changesCommitted(const Akonadi::Item::List &items);
void collectionsRetrieved(const Akonadi::Collection::List &collections);
void collectionAttributesRetrieved(const Akonadi::Collection &col);
void changeCommitted(const Akonadi::Collection &collection);
void changeCommitted(const Akonadi::Tag &tag);
void changeProcessed();
void searchFinished(const QList<qint64> &result, bool isRid = true);
void cancelTask(const QString &errorString);
void deferTask();
void restartItemRetrieval(Akonadi::Collection::Id col);
void taskDone();
void emitPercent(int percent);
void emitError(const QString &message);
void emitWarning(const QString &message);
void synchronizeCollectionTree();
void showInformationDialog(const QString &message, const QString &title, const QString &dontShowAgainName);
const QChar separatorCharacter() const;
void setSeparatorCharacter(QChar separator);
virtual bool serverSupportsAnnotations() const;
virtual bool serverSupportsCondstore() const;
int batchSize() const;
void setItemMergingMode(Akonadi::ItemSync::MergeMode mode);
ResourceStateInterface::Ptr resourceState();
KIMAP::Acl::Rights myRights(const Akonadi::Collection &);
private:
void abortTask(const QString &errorString);
static QList<QByteArray> fromAkonadiFlags(const QList<QByteArray> &flags);
private Q_SLOTS:
void onSessionRequested(qint64 requestId, KIMAP::Session *session, int errorCode, const QString &errorString);
void onConnectionLost(KIMAP::Session *session);
void onPoolDisconnect();
private:
SessionPool *m_pool = nullptr;
qint64 m_sessionRequestId = 0;
KIMAP::Session *m_session = nullptr;
ActionIfNoSession m_actionIfNoSession;
ResourceStateInterface::Ptr m_resource;
bool mCancelled = false;
};
|