X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Fcoreconnection.cpp;h=735fab46d4baf7a5c4574aa50c7cc492eeb6dd0e;hb=d32f2fcafe3d3925cd64e332e0d02261a134af21;hp=c08151b5675f0a7f5e28c525edd244666f1cb2e1;hpb=921e54680da16fcf2adb7a90506875aceb6633a4;p=quassel.git diff --git a/src/client/coreconnection.cpp b/src/client/coreconnection.cpp index c08151b5..735fab46 100644 --- a/src/client/coreconnection.cpp +++ b/src/client/coreconnection.cpp @@ -43,7 +43,8 @@ CoreConnection::CoreConnection(QObject *parent) _progressMinimum(0), _progressMaximum(-1), _progressValue(-1), - _resetting(false) + _resetting(false), + _qNetworkConfigurationManager(0) { qRegisterMetaType("CoreConnection::ConnectionState"); } @@ -57,10 +58,12 @@ void CoreConnection::init() _reconnectTimer.setSingleShot(true); connect(&_reconnectTimer, SIGNAL(timeout()), SLOT(reconnectTimeout())); -#ifdef HAVE_KDE +#ifdef HAVE_KDE4 connect(Solid::Networking::notifier(), SIGNAL(statusChanged(Solid::Networking::Status)), SLOT(solidNetworkStatusChanged(Solid::Networking::Status))); #endif + _qNetworkConfigurationManager = new QNetworkConfigurationManager(this); + connect(_qNetworkConfigurationManager, SIGNAL(onlineStateChanged(bool)), SLOT(onlineStateChanged(bool))); CoreConnectionSettings s; s.initAndNotify("PingTimeoutInterval", this, SLOT(pingTimeoutIntervalChanged(QVariant)), 60); @@ -127,7 +130,7 @@ void CoreConnection::reconnectTimeout() if (!_peer) { CoreConnectionSettings s; if (_wantReconnect && s.autoReconnect()) { -#ifdef HAVE_KDE +#ifdef HAVE_KDE4 // If using Solid, we don't want to reconnect if we're offline if (s.networkDetectionMode() == CoreConnectionSettings::UseSolid) { if (Solid::Networking::status() != Solid::Networking::Connected @@ -135,7 +138,13 @@ void CoreConnection::reconnectTimeout() return; } } -#endif /* HAVE_KDE */ +#endif /* HAVE_KDE4 */ + // If using QNetworkConfigurationManager, ditto + if (s.networkDetectionMode() == CoreConnectionSettings::UseQNetworkConfigurationManager) { + if (!_qNetworkConfigurationManager->isOnline()) { + return; + } + } reconnectToCore(); } @@ -169,7 +178,7 @@ void CoreConnection::reconnectIntervalChanged(const QVariant &interval) } -#ifdef HAVE_KDE +#ifdef HAVE_KDE4 void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status) { @@ -199,6 +208,26 @@ void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status) #endif +void CoreConnection::onlineStateChanged(bool isOnline) +{ + CoreConnectionSettings s; + if (s.networkDetectionMode() != CoreConnectionSettings::UseQNetworkConfigurationManager) + return; + + if(isOnline) { + // qDebug() << "QNetworkConfigurationManager reports Online"; + if (state() == Disconnected) { + if (_wantReconnect && s.autoReconnect()) { + reconnectToCore(); + } + } + } else { + // qDebug() << "QNetworkConfigurationManager reports Offline"; + if (state() != Disconnected && !isLocalConnection()) + disconnectFromCore(tr("Network is down"), true); + } +} + bool CoreConnection::isEncrypted() const { return _peer && _peer->isSecure();