Files
evcharger-app/appsettings.cpp
T

175 lines
4.7 KiB
C++

#include "appsettings.h"
#include <QFile>
#include <QQmlFile>
#include <algorithm>
std::vector<SavedDevice> AppSettings::getSavedDevices()
{
std::vector<SavedDevice> savedDevices;
int size = beginReadArray("devices");
for (int i = 0; i < size; ++i)
{
setArrayIndex(i);
savedDevices.emplace_back(SavedDevice {
.serial = value("serial").toString(),
.manufacturer = value("manufacturer").toString(),
.deviceType = value("deviceType").toString(),
.friendlyName = value("friendlyName").toString(),
.password = value("password").toString(),
});
}
endArray();
return savedDevices;
}
void AppSettings::saveSavedDevices(const std::vector<SavedDevice> &savedDevices)
{
beginWriteArray("devices");
for (qsizetype i = 0; i < savedDevices.size(); ++i) {
setArrayIndex(i);
setValue("serial", savedDevices.at(i).serial);
setValue("manufacturer", savedDevices.at(i).manufacturer);
setValue("deviceType", savedDevices.at(i).deviceType);
setValue("friendlyName", savedDevices.at(i).friendlyName);
setValue("password", savedDevices.at(i).password);
}
endArray();
}
void AppSettings::refreshSavedDevice(SavedDevice &&savedDevice)
{
auto savedDevices = getSavedDevices();
if (auto iter = std::find_if(std::begin(savedDevices), std::end(savedDevices),
[&serial=savedDevice.serial](const SavedDevice &savedDevice){ return savedDevice.serial == serial; });
iter != std::end(savedDevices))
{
if (savedDevice.password.isEmpty())
savedDevice.password = std::move(iter->password);
savedDevices.erase(iter);
}
savedDevices.emplace(std::begin(savedDevices), std::move(savedDevice));
saveSavedDevices(savedDevices);
}
void AppSettings::removeSavedDevice(const QString &serial)
{
auto savedDevices = getSavedDevices();
if (auto iter = std::find_if(std::begin(savedDevices), std::end(savedDevices),
[&serial](const SavedDevice &savedDevice){ return savedDevice.serial == serial; });
iter != std::end(savedDevices))
{
savedDevices.erase(iter);
}
saveSavedDevices(savedDevices);
}
int AppSettings::numberOfAppInstances() const
{
if (m_numberOfAppInstances)
return *m_numberOfAppInstances;
bool ok{};
int numberOfAppInstances = value("numberOfAppInstances", 1).toInt(&ok);
if (!ok || numberOfAppInstances < 1)
numberOfAppInstances = 1;
m_numberOfAppInstances = numberOfAppInstances;
return numberOfAppInstances;
}
void AppSettings::setNumberOfAppInstances(int numberOfAppInstances)
{
if (numberOfAppInstances < 1)
return;
setValue("numberOfAppInstances", numberOfAppInstances);
m_numberOfAppInstances = numberOfAppInstances;
emit numberOfAppInstancesChanged(numberOfAppInstances);
}
QString AppSettings::solalawebKey() const
{
if (m_solalawebKey)
return *m_solalawebKey;
auto solalawebKey = value("solalawebKey").toString();
m_solalawebKey = solalawebKey;
return solalawebKey;
}
void AppSettings::setSolalawebKey(const QString &solalawebKey)
{
setValue("solalawebKey", solalawebKey);
m_solalawebKey = solalawebKey;
emit solalawebKeyChanged(solalawebKey);
}
bool AppSettings::loadSolalawebKey(const QString &url)
{
QFile file{QQmlFile::urlToLocalFileOrQrc(url)};
if (!file.open(QFile::ReadOnly))
{
qWarning() << "Could not open file:" << file.errorString();
return false;
}
setSolalawebKey(file.readAll());
return true;
}
QString AppSettings::solalawebCert() const
{
if (m_solalawebCert)
return *m_solalawebCert;
auto solalawebCert = value("solalawebCert").toString();
m_solalawebCert = solalawebCert;
return solalawebCert;
}
void AppSettings::setSolalawebCert(const QString &solalawebCert)
{
setValue("solalawebCert", solalawebCert);
m_solalawebCert = solalawebCert;
emit solalawebCertChanged(solalawebCert);
}
bool AppSettings::loadSolalawebCert(const QString &url)
{
QFile file{QQmlFile::urlToLocalFileOrQrc(url)};
if (!file.open(QFile::ReadOnly))
{
qWarning() << "Could not open file:" << file.errorString();
return false;
}
setSolalawebCert(file.readAll());
return true;
}
bool AppSettings::showSolalaweb() const
{
if (m_showSolalaweb)
return *m_showSolalaweb;
auto showSolalaweb = value("showSolalaweb").toBool();
m_showSolalaweb = showSolalaweb;
return showSolalaweb;
}
void AppSettings::setShowSolalaweb(bool showSolalaweb)
{
setValue("showSolalaweb", showSolalaweb);
m_showSolalaweb = showSolalaweb;
emit showSolalawebChanged(showSolalaweb);
}