_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;
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() {
- emit disconnected();
- qDebug() << Q_FUNC_INFO;
+ // 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());
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);
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);