diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-09-24 19:37:45 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-09-24 19:37:45 +0200 |
| commit | bfb30513aee22bd5ccbee099f73b0c08d31ed4ca (patch) | |
| tree | 89f4389ba738bcbfc6bb39f95248ab49ee6a7f5d /src/ClientInfo.hpp | |
| parent | c033dd56d7765cd72c7287dc719941a864cb2c69 (diff) | |
| download | manager-bfb30513aee22bd5ccbee099f73b0c08d31ed4ca.tar.gz manager-bfb30513aee22bd5ccbee099f73b0c08d31ed4ca.zip | |
Add CRSMConfigValue-specialization for ClientInfo
Diffstat (limited to 'src/ClientInfo.hpp')
| -rw-r--r-- | src/ClientInfo.hpp | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/src/ClientInfo.hpp b/src/ClientInfo.hpp index 3371a18..1927088 100644 --- a/src/ClientInfo.hpp +++ b/src/ClientInfo.hpp @@ -2,12 +2,17 @@ #include <QDateTime> #include <QString> +#include <QStringList> + +#include <CRSMConfig.hpp> enum ClientInterface { Auto = 0, Clonk = 1, IRC = 1 << 1, - Management = 1 << 2 + Management = 1 << 2, + First = Auto, + Last = Management }; @@ -127,3 +132,64 @@ public: *this = ClientInfo(); } }; + +template<> +class CRSMConfigValue<ClientInfo> : public CRSMConfigValueBase { + ClientInfo& info; + +public: + CRSMConfigValue(ClientInfo& info) : info(info) {} + + void setValue(const QString& string) + { + info = ClientInfo(); + if(string == "empty") return; + QStringList parts(string.split(':', QString::KeepEmptyParts)); + ClientInterface interface = static_cast<ClientInterface>(parts.first().toUInt(0, 36)); + if(interface > ClientInterface::Last || interface < ClientInterface::First) + { + throw CRSMConfigException("Cannot read ClientInfo with unknown ClientInterface: " + string.toStdString()); + } + switch(interface) + { + case Auto: break; + case Clonk: + { + if(parts.length() != 5) throw CRSMConfigException("Cannot read corrupt ClientInfo with Clonk-ClientInterface: " + string.toStdString()); + info.pcName = parts.at(1); + info.CUID = parts.at(2).toUInt(); + info.nick = parts.at(3); + info.activated = CRSMConfigValueBase::getValue<bool>(parts.at(4)); + break; + } + case IRC: + { + if(parts.length() != 2) throw CRSMConfigException("Cannot read corrupt ClientInfo with IRC-ClientInterface: " + string.toStdString()); + info.nick = parts.at(1); + break; + } + case Management: + { + if(parts.length() != 2) throw CRSMConfigException("Cannot read corrupt ClientInfo with Management-ClientInterface: " + string.toStdString()); + info.management.name = parts.at(1); + break; + } + } + info.interface = interface; + } + + QString value() + { + if(info.empty()) return "empty"; + QStringList ret; + ret.append(QString::number(info.interface, 36)); + switch(info.interface) + { + case Auto: break; + case Clonk: ret.append(info.pcName); ret.append(QString::number(info.CUID)); ret.append(info.nick); ret.append(CRSMConfigValueBase::getStringValue(info.activated)); break; + case IRC: ret.append(info.nick); break; + case Management: ret.append(info.management.name); break; + } + return ret.join(':'); + } +}; |
