/**************************************************************************** ** ScStw Libraries ** Copyright (C) 2020 Itsblue development ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ****************************************************************************/ #include "../../headers/client/scstwremotesettings.h" ScStwRemoteSettings::ScStwRemoteSettings(QObject* parent) : ScStwSettings(parent) { this->scStwClient = nullptr; } ScStwRemoteSettings::ScStwRemoteSettings(ScStwClient * scStwClient, QObject * parent) : ScStwSettings(parent) { this->setScStwClient(scStwClient); } ScStwRemoteSettings::SettingsMode ScStwRemoteSettings::getMode() { if(this->scStwClient == nullptr || this->scStwClient->getState() != ScStwClient::CONNECTED) return LOCAL; else return REMOTE; } QVariant ScStwRemoteSettings::readSetting(QString key, int keyInt, int keyLevel) { if(this->getMode() == LOCAL || keyLevel > ScStwSettings::KeyLevel) return ScStwSettings::readSetting(key, keyInt, keyLevel); qDebug() << "Setting read: keyLevel: " << keyLevel << " key: " << key; ScStw::StatusCode status; QVariant value = this->scStwClient->readRemoteSetting(ScStwSettings::BaseStationSetting(keyInt), &status); if(status == ScStw::Success) return value; else return QVariant(); } bool ScStwRemoteSettings::writeSetting(QString key, QVariant value, int keyInt, int keyLevel) { if(this->getMode() == LOCAL || keyLevel > ScStwSettings::KeyLevel) return ScStwSettings::writeSetting(key, value, keyInt, keyLevel); qDebug() << "Setting write: keyLevel: " << keyLevel << " key: " << key << " value: " << value; ScStw::StatusCode res = this->scStwClient->writeRemoteSetting(ScStwSettings::BaseStationSetting(keyInt), value); return res == ScStw::Success; } bool ScStwRemoteSettings::setDefaultSetting(QString key, QVariant defaultVariant, int keyInt, int keyLevel) { if(this->getMode() == LOCAL || keyLevel > ScStwSettings::KeyLevel) return ScStwSettings::setDefaultSetting(key, defaultVariant, keyInt, keyLevel); return false; } void ScStwRemoteSettings::handleClientStateChange() { if(this->scStwClient->getState() == ScStwClient::DISCONNECTED) emit this->settingChanged(-1, ScStwSettings::KeyLevel, QVariant()); // Dont't need to do that when changing to connected, // as the basestation emits a wildcrd setting changed on connect anyway } void ScStwRemoteSettings::handleBaseStationSignal(ScStw::SignalKey key, QVariant data) { switch (key) { case ScStw::SettingChanged: emit this->settingChanged(data.toMap()["key"].toInt(), ScStwSettings::KeyLevel, data.toMap()["value"]); default: break; } } ScStwClient* ScStwRemoteSettings::getScStwClient() { return this->scStwClient; } void ScStwRemoteSettings::setScStwClient(ScStwClient* client) { if(client == this->scStwClient) return; this->scStwClient = client; if(this->scStwClient != nullptr) { this->scStwClient->addSignalSubscription(ScStw::SettingChanged); connect(this->scStwClient, &ScStwClient::stateChanged, this, &ScStwRemoteSettings::handleClientStateChange); connect(this->scStwClient, &ScStwClient::gotSignal, this, &ScStwRemoteSettings::handleBaseStationSignal); } }