Files
evcharger-app/apikeyvaluehelper.cpp
T

80 lines
2.0 KiB
C++
Raw Normal View History

#include "apikeyvaluehelper.h"
void ApiKeyValueHelper::setDeviceConnection(DeviceConnection *deviceConnection)
{
if (m_deviceConnection == deviceConnection)
return;
if (m_deviceConnection)
{
disconnect(m_deviceConnection, &DeviceConnection::fullStatusReceived,
this, &ApiKeyValueHelper::fullStatusReceived);
disconnect(m_deviceConnection, &DeviceConnection::valueChanged,
this, &ApiKeyValueHelper::valueChangedSlot);
}
emit deviceConnectionChanged(m_deviceConnection = deviceConnection);
if (m_deviceConnection)
{
connect(m_deviceConnection, &DeviceConnection::fullStatusReceived,
this, &ApiKeyValueHelper::fullStatusReceived);
connect(m_deviceConnection, &DeviceConnection::valueChanged,
this, &ApiKeyValueHelper::valueChangedSlot);
}
fullStatusReceived();
}
void ApiKeyValueHelper::setApiKey(const QString &apiKey)
{
if (m_apiKey == apiKey)
return;
emit apiKeyChanged(m_apiKey = apiKey);
fullStatusReceived();
}
void ApiKeyValueHelper::fullStatusReceived()
{
if (!m_deviceConnection)
{
if (m_value.isValid())
emit valueChanged(m_value = {});
if (m_exists)
emit existsChanged(m_exists = false);
return;
}
const auto &fullStatus = m_deviceConnection->getFullStatus();
const auto iter = fullStatus.find(m_apiKey);
QVariant value;
bool exists{};
if (iter != std::cend(fullStatus))
{
value = *iter;
exists = true;
}
if (m_value != value)
emit valueChanged(m_value = value);
if (m_exists != exists)
emit existsChanged(m_exists = exists);
}
void ApiKeyValueHelper::valueChangedSlot(const QString &key, const QVariant &value)
{
if (m_apiKey != key)
return;
if (m_value != value)
emit valueChanged(m_value = value);
if (!m_exists)
emit existsChanged(m_exists = true);
}