diff --git a/src/core/slavebase.h b/src/core/slavebase.h --- a/src/core/slavebase.h +++ b/src/core/slavebase.h @@ -333,14 +333,26 @@ */ MetaData allMetaData() const; + /** + * Returns a map to query config/meta-data information + * from. + * + * The application provides the slave with all configuration information + * relevant for the current protocol and host. + */ + QMap *mapConfig(); + /** * Returns a configuration object to query config/meta-data information * from. * * The application provides the slave with all configuration information * relevant for the current protocol and host. + * + * TODO KF6: remove + * @deprecated use mapConfig(StatSide side) */ - KConfigGroup *config(); + KIOCORE_DEPRECATED KConfigGroup *config(); /** * Returns an object that can translate remote filenames into proper diff --git a/src/core/slavebase.cpp b/src/core/slavebase.cpp --- a/src/core/slavebase.cpp +++ b/src/core/slavebase.cpp @@ -35,12 +35,14 @@ #include #endif +#include #include #include #include #include #include #include +#include #include #include @@ -113,8 +115,7 @@ bool inOpenLoop: 1; bool exit_loop: 1; MetaData configData; - KConfig *config; - KConfigGroup *configGroup; + QMap mapConfig; QUrl onHoldUrl; QElapsedTimer lastTimeout; @@ -170,18 +171,18 @@ // Reconstructs configGroup from configData and mIncomingMetaData void rebuildConfig() { - configGroup->deleteGroup(KConfigGroup::WriteConfigFlags()); + mapConfig.clear(); // mIncomingMetaData cascades over config, so we write config first, // to let it be overwritten MetaData::ConstIterator end = configData.constEnd(); for (MetaData::ConstIterator it = configData.constBegin(); it != end; ++it) { - configGroup->writeEntry(it.key(), it->toUtf8(), KConfigGroup::WriteConfigFlags()); + mapConfig.insert(it.key(), it->toUtf8()); } end = q->mIncomingMetaData.constEnd(); for (MetaData::ConstIterator it = q->mIncomingMetaData.constBegin(); it != end; ++it) { - configGroup->writeEntry(it.key(), it->toUtf8(), KConfigGroup::WriteConfigFlags()); + mapConfig.insert(it.key(), it->toUtf8()); } } @@ -271,9 +272,7 @@ d->slaveid = QString::fromUtf8(protocol) + QString::number(getpid()); d->resume = false; d->needSendCanResume = false; - d->config = new KConfig(QString(), KConfig::SimpleConfig); - // The KConfigGroup needs the KConfig to exist during its whole lifetime. - d->configGroup = new KConfigGroup(d->config, QString()); + d->mapConfig = QMap(); d->onHold = false; d->wasKilled = false; // d->processed_size = 0; @@ -287,8 +286,6 @@ SlaveBase::~SlaveBase() { - delete d->configGroup; - delete d->config; delete d->remotefile; delete d; s_protocol = ""; @@ -404,9 +401,24 @@ return false; } +QMap *SlaveBase::mapConfig() +{ + return &d->mapConfig; +} + KConfigGroup *SlaveBase::config() { - return d->configGroup; + KConfig* config = new KConfig(QString(), KConfig::SimpleConfig); + + KConfigGroup *configGroup = new KConfigGroup(config, QString()); + + auto end = d->mapConfig.cend(); + for (auto it = d->mapConfig.cbegin(); it != end; ++it) + { + configGroup->writeEntry(it.key(), it->toUtf8(), KConfigGroup::WriteConfigFlags()); + } + + return configGroup; } void SlaveBase::sendMetaData()