_wantReconnect(false),
_progressMinimum(0),
_progressMaximum(-1),
- _progressValue(-1)
+ _progressValue(-1),
+ _wasReconnect(false),
+ _requestedDisconnect(false)
{
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);
switch(status) {
case Solid::Networking::Unknown:
case Solid::Networking::Connected:
- qDebug() << "Solid: Network status changed to connected or unknown";
+ //qDebug() << "Solid: Network status changed to connected or unknown";
if(state() == Disconnected) {
if(_wantReconnect && s.autoReconnect()) {
reconnectToCore();
}
}
break;
+ case Solid::Networking::Disconnecting:
case Solid::Networking::Unconnected:
- qDebug() << "Solid: Disconnected";
- if(!isLocalConnection())
+ if(state() != Disconnected && !isLocalConnection())
disconnectFromCore(tr("Network is down"), true);
break;
default:
}
void CoreConnection::coreSocketDisconnected() {
- qDebug() << Q_FUNC_INFO;
+ // qDebug() << Q_FUNC_INFO;
+ _wasReconnect = !_requestedDisconnect;
resetConnection(true);
// FIXME handle disconnects gracefully
}
}
void CoreConnection::disconnectFromCore() {
+ _requestedDisconnect = true;
disconnectFromCore(QString(), false); // requested disconnect, so don't try to reconnect
}
if(!wantReconnect)
_reconnectTimer.stop();
+ _wasReconnect = wantReconnect; // store if disconnect was requested
+
if(errorString.isEmpty())
emit connectionError(tr("Disconnected"));
else
_socket->deleteLater();
_socket = 0;
}
+ _requestedDisconnect = false;
_blockSize = 0;
_coreMsgBuffer.clear();
setProgressMaximum(-1); // disable
setState(Disconnected);
+ emit lagUpdated(-1);
emit connectionMsg(tr("Disconnected from core."));
emit encrypted(false);
return;
}
+ Client::setCoreFeatures((Quassel::Features)msg["CoreFeatures"].toUInt());
+
#ifndef QT_NO_COMPRESS
if(msg["SupportsCompression"].toBool()) {
_socket->setProperty("UseCompression", true);
}
void CoreConnection::syncToCore(const QVariantMap &sessionState) {
+ if(sessionState.contains("CoreFeatures"))
+ Client::setCoreFeatures((Quassel::Features)sessionState["CoreFeatures"].toUInt());
+
setProgressText(tr("Receiving network states"));
updateProgress(0, 100);