summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-09-24 19:37:45 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2015-09-24 19:37:45 +0200
commitbfb30513aee22bd5ccbee099f73b0c08d31ed4ca (patch)
tree89f4389ba738bcbfc6bb39f95248ab49ee6a7f5d
parentc033dd56d7765cd72c7287dc719941a864cb2c69 (diff)
downloadmanager-bfb30513aee22bd5ccbee099f73b0c08d31ed4ca.tar.gz
manager-bfb30513aee22bd5ccbee099f73b0c08d31ed4ca.zip
Add CRSMConfigValue-specialization for ClientInfo
-rw-r--r--src/ClientInfo.hpp68
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(':');
+ }
+};