#ifdef HAVE_KDE4
NetworkDetectionMode def = UseSolid;
#else
- NetworkDetectionMode def = UsePingTimeout;
+ NetworkDetectionMode def = UseQNetworkConfigurationManager;
#endif
return (NetworkDetectionMode)localValue("NetworkDetectionMode", def).toInt();
}
public:
enum NetworkDetectionMode {
UseSolid,
+ UseQNetworkConfigurationManager,
UsePingTimeout,
NoActiveDetection
};
_progressMinimum(0),
_progressMaximum(-1),
_progressValue(-1),
- _resetting(false)
+ _resetting(false),
+ _qNetworkConfigurationManager(0)
{
qRegisterMetaType<ConnectionState>("CoreConnection::ConnectionState");
}
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);
}
}
#endif /* HAVE_KDE4 */
+ // If using QNetworkConfigurationManager, ditto
+ if (s.networkDetectionMode() == CoreConnectionSettings::UseQNetworkConfigurationManager) {
+ if (!_qNetworkConfigurationManager->isOnline()) {
+ return;
+ }
+ }
reconnectToCore();
}
#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();
# include <Solid/Networking>
#endif
+#include <QNetworkConfigurationManager>
+
#include "coreaccount.h"
#include "remotepeer.h"
#include "types.h"
#ifdef HAVE_KDE4
void solidNetworkStatusChanged(Solid::Networking::Status status);
#endif
+ void onlineStateChanged(bool isOnline);
private:
QPointer<ClientAuthHandler> _authHandler;
CoreAccount _account;
CoreAccountModel *accountModel() const;
+ QPointer<QNetworkConfigurationManager> _qNetworkConfigurationManager;
+
friend class CoreConfigWizard;
};
initAutoWidgets();
connect(ui.useSolid, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
+ connect(ui.useQNetworkConfigurationManager, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
connect(ui.usePingTimeout, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
connect(ui.useNoTimeout, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
}
#ifdef HAVE_KDE4
setRadioButtons(CoreConnectionSettings::UseSolid);
#else
- setRadioButtons(CoreConnectionSettings::UsePingTimeout);
+ setRadioButtons(CoreConnectionSettings::UseQNetworkConfigurationManager);
#endif
SettingsPage::defaults();
ui.useSolid->setChecked(true);
break;
#endif
+ case CoreConnectionSettings::UseQNetworkConfigurationManager:
+ ui.useQNetworkConfigurationManager->setChecked(true);
+ break;
case CoreConnectionSettings::UsePingTimeout:
ui.usePingTimeout->setChecked(true);
break;
if (ui.useSolid->isChecked())
return CoreConnectionSettings::UseSolid;
#endif
+ if (ui.useQNetworkConfigurationManager->isChecked())
+ return CoreConnectionSettings::UseQNetworkConfigurationManager;
if (ui.usePingTimeout->isChecked())
return CoreConnectionSettings::UsePingTimeout;
</property>
</widget>
</item>
+ <item>
+ <widget class="QRadioButton" name="useQNetworkConfigurationManager">
+ <property name="toolTip">
+ <string>Rely on Qt's network configuration manager to detect if we're online.</string>
+ </property>
+ <property name="text">
+ <string>Use Qt's network status detection (via QNetworkConfigurationManager)</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>