_progressValue(-1)
{
qRegisterMetaType<ConnectionState>("CoreConnection::ConnectionState");
+}
+
+void CoreConnection::init() {
+ Client::signalProxy()->setHeartBeatInterval(30);
+ connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected()));
+ connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), SIGNAL(lagUpdated(int)));
_reconnectTimer.setSingleShot(true);
connect(&_reconnectTimer, SIGNAL(timeout()), SLOT(reconnectTimeout()));
connect(Solid::Networking::notifier(), SIGNAL(statusChanged(Solid::Networking::Status)),
SLOT(solidNetworkStatusChanged(Solid::Networking::Status)));
#endif
-}
-
-void CoreConnection::init() {
- Client::signalProxy()->setHeartBeatInterval(30);
- connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected()));
CoreConnectionSettings s;
s.initAndNotify("PingTimeoutInterval", this, SLOT(pingTimeoutIntervalChanged(QVariant)), 60);
setProgressValue(value);
}
-void CoreConnection::resetConnection(bool wantReconnect) {
- _wantReconnect = wantReconnect;
-
- if(_socket) {
- disconnect(_socket, 0, this, 0);
- _socket->deleteLater();
- _socket = 0;
- }
- _blockSize = 0;
-
- _coreMsgBuffer.clear();
-
- _netsToSync.clear();
- _numNetsToSync = 0;
-
- setProgressMaximum(-1); // disable
- setState(Disconnected);
-
- emit connectionMsg(tr("Disconnected from core."));
- emit encrypted(false);
-
- // initiate if a reconnect if appropriate
- CoreConnectionSettings s;
- if(wantReconnect && s.autoReconnect()) {
- _reconnectTimer.start();
- //reconnectToCore();
- }
-}
-
void CoreConnection::reconnectTimeout() {
if(!_socket) {
CoreConnectionSettings s;
}
void CoreConnection::coreSocketDisconnected() {
- emit disconnected();
qDebug() << Q_FUNC_INFO;
resetConnection(true);
// FIXME handle disconnects gracefully
resetConnection(wantReconnect);
}
+void CoreConnection::resetConnection(bool wantReconnect) {
+ _wantReconnect = wantReconnect;
+
+ if(_socket) {
+ disconnect(_socket, 0, this, 0);
+ _socket->deleteLater();
+ _socket = 0;
+ }
+ _blockSize = 0;
+
+ _coreMsgBuffer.clear();
+
+ _netsToSync.clear();
+ _numNetsToSync = 0;
+
+ setProgressMaximum(-1); // disable
+ setState(Disconnected);
+ emit lagUpdated(-1);
+
+ emit connectionMsg(tr("Disconnected from core."));
+ emit encrypted(false);
+
+ // initiate if a reconnect if appropriate
+ CoreConnectionSettings s;
+ if(wantReconnect && s.autoReconnect()) {
+ _reconnectTimer.start();
+ }
+}
+
void CoreConnection::reconnectToCore() {
if(currentAccount().isValid())
connectToCore(currentAccount().accountId());
checkSyncState();
}
+// this is also called for destroyed networks!
void CoreConnection::networkInitDone() {
- Network *net = qobject_cast<Network *>(sender());
+ QObject *net = sender();
Q_ASSERT(net);
disconnect(net, 0, this, 0);
_netsToSync.remove(net);
}
void CoreConnection::checkSyncState() {
- if(_netsToSync.isEmpty()) {
+ if(_netsToSync.isEmpty() && state() >= Synchronizing) {
setState(Synchronized);
setProgressText(tr("Synchronized to %1").arg(currentAccount().accountName()));
setProgressMaximum(-1);