// TODO: support system application proxy (new in Qt 4.6)
#include "QPointer"
+#include "QTimer"
#ifdef HAVE_SSL
# include <QSslSocket>
# include <QTcpSocket>
#endif
+#ifdef HAVE_KDE
+# include <Solid/Networking>
+#endif
+
#include "coreaccount.h"
#include "types.h"
void init();
- inline ConnectionState state() const;
inline bool isConnected() const;
+ inline ConnectionState state() const;
inline CoreAccount currentAccount() const;
bool isEncrypted() const;
+ bool isLocalConnection() const;
inline int progressMinimum() const;
inline int progressMaximum() const;
inline int progressValue() const;
inline QString progressText() const;
+ //! Check if we consider the last connect as reconnect
+ inline bool wasReconnect() const { return _wasReconnect; }
+
#ifdef HAVE_SSL
inline const QSslSocket *sslSocket() const;
#endif
public slots:
bool connectToCore(AccountId = 0);
void reconnectToCore();
- void disconnectFromCore(const QString &errorString = QString());
+ void disconnectFromCore();
signals:
void stateChanged(CoreConnection::ConnectionState);
void encrypted(bool isEncrypted = true);
void synchronized();
+ void lagUpdated(int msecs);
void connectionError(const QString &errorMsg);
void connectionErrorPopup(const QString &errorMsg);
private slots:
void connectToCurrentAccount();
+ void disconnectFromCore(const QString &errorString, bool wantReconnect = true);
void socketStateChanged(QAbstractSocket::SocketState);
void coreSocketError(QAbstractSocket::SocketError);
void internalSessionStateReceived(const QVariant &packedState);
void sessionStateReceived(const QVariantMap &state);
- void resetConnection();
+ void resetConnection(bool wantReconnect = false);
void connectionReady();
void loginToCore(const QString &user, const QString &password, bool remember); // for config wizard
void sslErrors();
#endif
+ void networkDetectionModeChanged(const QVariant &mode);
+ void pingTimeoutIntervalChanged(const QVariant &interval);
+ void reconnectIntervalChanged(const QVariant &interval);
+ void reconnectTimeout();
+
+#ifdef HAVE_KDE
+ void solidNetworkStatusChanged(Solid::Networking::Status status);
+#endif
+
private:
CoreAccountModel *_model;
CoreAccount _account;
QVariantMap _coreMsgBuffer;
- QPointer<QIODevice> _socket;
+ QPointer<QAbstractSocket> _socket;
quint32 _blockSize;
ConnectionState _state;
- QSet<Network *> _netsToSync;
+ QTimer _reconnectTimer;
+ bool _wantReconnect;
+
+ QSet<QObject *> _netsToSync;
int _numNetsToSync;
int _progressMinimum, _progressMaximum, _progressValue;
QString _progressText;
QString _coreInfoString(const QVariantMap &);
+ bool _wasReconnect;
+ bool _requestedDisconnect;
inline CoreAccountModel *accountModel() const;