From b2f9e911ad9c8cae57d853c1c235df5792025b12 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 20 Feb 2021 22:56:57 +0100 Subject: [PATCH] Don't cal thingRemoved() when a thing didn't complete the setup --- .../integrations/thingmanagerimplementation.cpp | 14 +++++++++++++- .../integrations/thingmanagerimplementation.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/libnymea-core/integrations/thingmanagerimplementation.cpp b/libnymea-core/integrations/thingmanagerimplementation.cpp index 694fd9a3..992005d6 100644 --- a/libnymea-core/integrations/thingmanagerimplementation.cpp +++ b/libnymea-core/integrations/thingmanagerimplementation.cpp @@ -455,6 +455,10 @@ ThingSetupInfo *ThingManagerImplementation::reconfigureThingInternal(Thing *thin // try to setup the thing with the new params ThingSetupInfo *info = new ThingSetupInfo(thing, this, 30000); plugin->setupThing(info); + connect(info, &ThingSetupInfo::destroyed, thing, [=](){ + m_pendingSetups.remove(thing->id()); + }); + connect(info, &ThingSetupInfo::finished, this, [this, info](){ if (info->status() != Thing::ThingErrorNoError) { @@ -775,8 +779,11 @@ Thing::ThingError ThingManagerImplementation::removeConfiguredThing(const ThingI IntegrationPlugin *plugin = m_integrationPlugins.value(thing->pluginId()); if (!plugin) { qCWarning(dcThingManager()).nospace() << "Plugin not loaded for thing " << thing->name() << ". Not calling thingRemoved on plugin."; - } else { + } else if (thing->setupStatus() == Thing::ThingSetupStatusComplete) { plugin->thingRemoved(thing); + } else if (thing->setupStatus() == Thing::ThingSetupStatusInProgress) { + ThingSetupInfo *setupInfo = m_pendingSetups.value(thingId); + emit setupInfo->aborted(); } thing->deleteLater(); @@ -1989,6 +1996,11 @@ ThingSetupInfo* ThingManagerImplementation::setupThing(Thing *thing) plugin->setupThing(info); + m_pendingSetups.insert(thing->id(), info); + connect(info, &ThingSetupInfo::destroyed, thing, [=](){ + m_pendingSetups.remove(thing->id()); + }); + return info; } diff --git a/libnymea-core/integrations/thingmanagerimplementation.h b/libnymea-core/integrations/thingmanagerimplementation.h index e8628e81..7e6e357f 100644 --- a/libnymea-core/integrations/thingmanagerimplementation.h +++ b/libnymea-core/integrations/thingmanagerimplementation.h @@ -191,6 +191,7 @@ private: QString thingName; }; QHash m_pendingPairings; + QHash m_pendingSetups; QHash m_ioConnections;