25 #include <QtCore/QHash>
36 class SlaveConfigProtocol
39 SlaveConfigProtocol() {}
40 ~SlaveConfigProtocol()
47 QHash<QString, MetaData> host;
53 *metaData += config->
entryMap(group);
56 class SlaveConfigPrivate
59 void readGlobalConfig();
60 SlaveConfigProtocol *readProtocolConfig(
const QString &_protocol);
61 SlaveConfigProtocol *findProtocolConfig(
const QString &_protocol);
62 void readConfigProtocolHost(
const QString &_protocol, SlaveConfigProtocol *scp,
const QString &host);
65 QHash<QString, SlaveConfigProtocol*> protocol;
68 void SlaveConfigPrivate::readGlobalConfig()
78 SlaveConfigProtocol* SlaveConfigPrivate::readProtocolConfig(
const QString &_protocol)
80 SlaveConfigProtocol *scp = protocol.value(_protocol,0);
84 scp =
new SlaveConfigProtocol;
86 protocol.insert(_protocol, scp);
89 readConfig(scp->configFile,
"<default>", &(scp->global));
93 SlaveConfigProtocol* SlaveConfigPrivate::findProtocolConfig(
const QString &_protocol)
95 SlaveConfigProtocol *scp = protocol.value(_protocol,0);
97 scp = readProtocolConfig(_protocol);
101 void SlaveConfigPrivate::readConfigProtocolHost(
const QString &, SlaveConfigProtocol *scp,
const QString &host)
104 scp->host.insert(host, metaData);
110 if (!domain.contains(
'.'))
113 if (scp->configFile->hasGroup(
"<local>")) {
114 readConfig(scp->configFile,
"<local>", &metaData);
115 scp->host.insert(host, metaData);
122 pos = host.lastIndexOf(
'.', pos-1);
127 domain = host.mid(pos+1);
129 if (scp->configFile->hasGroup(domain)) {
130 readConfig(scp->configFile, domain.toLower(), &metaData);
131 scp->host.insert(host, metaData);
144 :d(new SlaveConfigPrivate)
146 d->readGlobalConfig();
151 qDeleteAll(d->protocol);
161 config.insert(key, value);
167 if (protocol.isEmpty())
170 SlaveConfigProtocol *scp = d->findProtocolConfig(protocol);
173 scp->global += config;
177 if (!scp->host.contains(host))
178 d->readConfigProtocolHost(protocol, scp, host);
180 MetaData hostConfig = scp->host.value(host);
181 hostConfig += config;
182 scp->host.insert(host, hostConfig);
190 SlaveConfigProtocol *scp = d->findProtocolConfig(protocol);
191 config += scp->global;
195 if (!scp->host.contains(host))
197 d->readConfigProtocolHost(protocol, scp, host);
200 MetaData hostConfig = scp->host.value(host);
201 config += hostConfig;
213 qDeleteAll(d->protocol);
215 d->readGlobalConfig();
220 #include "slaveconfig.moc"