diff --git a/core/include/core/deviceimpl.h b/core/include/core/deviceimpl.h index 9edadf16e..7241aa7cd 100644 --- a/core/include/core/deviceimpl.h +++ b/core/include/core/deviceimpl.h @@ -64,8 +64,8 @@ public Q_SLOTS: void loadToolList(); void loadBadges(); void setPingPlugin(Plugin *plugin); - void connPluginPingPause(); - void disconnPluginPingPause(); + void bindPing(); + void unbindPing(); protected: PluginManager *p; diff --git a/core/src/deviceimpl.cpp b/core/src/deviceimpl.cpp index 1b54c5409..dd6fc2002 100644 --- a/core/src/deviceimpl.cpp +++ b/core/src/deviceimpl.cpp @@ -230,7 +230,7 @@ void DeviceImpl::setPingPlugin(Plugin *plugin) } } -void DeviceImpl::connPluginPingPause() +void DeviceImpl::bindPing() { if(!m_pingPlugin) { return; @@ -239,9 +239,11 @@ void DeviceImpl::connPluginPingPause() connect(dynamic_cast(p), SIGNAL(pausePingTask(bool)), dynamic_cast(m_pingPlugin), SLOT(onPausePingTask(bool))); } + connect(m_pingPlugin->pingTask(), &PingTask::pingFailed, this, &DeviceImpl::disconnectDev); + m_pingPlugin->startPingTask(); } -void DeviceImpl::disconnPluginPingPause() +void DeviceImpl::unbindPing() { if(!m_pingPlugin) { return; @@ -250,6 +252,9 @@ void DeviceImpl::disconnPluginPingPause() disconnect(dynamic_cast(p), SIGNAL(pausePingTask(bool)), dynamic_cast(m_pingPlugin), SLOT(onPausePingTask(bool))); } + m_pingPlugin->stopPingTask(); + disconnect(m_pingPlugin->pingTask(), &PingTask::pingFailed, this, &DeviceImpl::disconnectDev); + m_pingPlugin = nullptr; } void DeviceImpl::onConnectionFailed() { disconnectDev(); } @@ -323,11 +328,7 @@ void DeviceImpl::connectDev() connbtn->hide(); discbtn->show(); discbtn->setFocus(); - connPluginPingPause(); - if(m_pingPlugin) { - connect(m_pingPlugin->pingTask(), &PingTask::pingFailed, this, &DeviceImpl::disconnectDev); - m_pingPlugin->startPingTask(); - } + bindPing(); Q_EMIT connected(); } qInfo(CAT_BENCHMARK) << this->displayName() << " device connection took: " << timer.elapsed() << "ms"; @@ -338,11 +339,7 @@ void DeviceImpl::disconnectDev() QElapsedTimer pluginTimer; QElapsedTimer timer; timer.start(); - disconnPluginPingPause(); - if(m_pingPlugin) { - m_pingPlugin->stopPingTask(); - disconnect(m_pingPlugin->pingTask(), &PingTask::pingFailed, this, &DeviceImpl::disconnectDev); - } + unbindPing(); connbtn->show(); discbtn->hide(); Preferences *pref = Preferences::GetInstance();