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
|
/*
SPDX-FileCopyrightText: 2007 Till Adam <adam@kde.org>
SPDX-FileCopyrightText: 2008 Omat Holding B.V. <info@omat.nl>
SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org>
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 "resourcestateinterface.h"
#include <Akonadi/Collection>
#include <QObject>
#include <QPointer>
namespace KIMAP
{
class IdleJob;
class Session;
}
class ImapResourceBase;
class SessionPool;
class KJob;
class QTimer;
class ImapIdleManager : public QObject
{
Q_OBJECT
public:
ImapIdleManager(ResourceStateInterface::Ptr state, SessionPool *pool, ImapResourceBase *parent);
~ImapIdleManager() override;
void stop();
KIMAP::Session *session() const;
private Q_SLOTS:
void onConnectionLost(KIMAP::Session *session);
void onPoolDisconnect();
void onSessionRequestDone(qint64 requestId, KIMAP::Session *session, int errorCode, const QString &errorString);
void onSelectDone(KJob *job);
void onIdleStopped();
void onStatsReceived(KIMAP::IdleJob *job, const QString &mailBox, int messageCount, int recentCount);
void onFlagsChanged(KIMAP::IdleJob *job);
void reconnect();
void restartIdle();
private:
void startIdle();
qint64 m_sessionRequestId;
SessionPool *m_pool = nullptr;
KIMAP::Session *m_session = nullptr;
QPointer<KIMAP::IdleJob> m_idle;
ImapResourceBase *m_resource = nullptr;
ResourceStateInterface::Ptr m_state;
QTimer *m_idleTimeout = nullptr;
qint64 m_lastMessageCount = -1;
qint64 m_lastRecentCount = -1;
};
|