From 058cb8af065576484f116f9a75bee729a38f2f60 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 5 Oct 2018 01:12:11 +0200 Subject: [PATCH] store the state type along with the value in the state cache --- libnymea/devicemanager.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libnymea/devicemanager.cpp b/libnymea/devicemanager.cpp index 7c2ea7a5..5a9f88cf 100644 --- a/libnymea/devicemanager.cpp +++ b/libnymea/devicemanager.cpp @@ -1530,7 +1530,17 @@ void DeviceManager::loadDeviceStates(Device *device) DeviceClass deviceClass = m_supportedDevices.value(device->deviceClassId()); foreach (const StateType &stateType, deviceClass.stateTypes()) { if (stateType.cached()) { - device->setStateValue(stateType.id(), settings.value(stateType.id().toString(), stateType.defaultValue())); + QVariant value; + // First try to load new style + if (settings.childGroups().contains(stateType.id().toString())) { + settings.beginGroup(stateType.id().toString()); + value = settings.value("value", stateType.defaultValue()); + value.convert(settings.value("type").toInt()); + settings.endGroup(); + } else { // Try to fall back to the pre 0.9.0 way of storing states + value = settings.value(stateType.id().toString(), stateType.defaultValue()); + } + device->setStateValue(stateType.id(), value); } else { device->setStateValue(stateType.id(), stateType.defaultValue()); } @@ -1545,7 +1555,10 @@ void DeviceManager::storeDeviceStates(Device *device) DeviceClass deviceClass = m_supportedDevices.value(device->deviceClassId()); foreach (const StateType &stateType, deviceClass.stateTypes()) { if (stateType.cached()) { - settings.setValue(stateType.id().toString(), device->stateValue(stateType.id())); + settings.beginGroup(stateType.id().toString()); + settings.setValue("type", static_cast(device->stateValue(stateType.id()).type())); + settings.setValue("value", device->stateValue(stateType.id())); + settings.endGroup(); } } settings.endGroup();