Fixed: When incrementing version of ini file, check servers by ID not by index

This commit is contained in:
kervala 2016-10-19 17:06:25 +02:00
parent 48a3439dec
commit ed7ecba122
3 changed files with 53 additions and 7 deletions

View file

@ -114,16 +114,26 @@ bool CConfigFile::load(const QString &filename)
settings.endGroup();
// only resize if added servers in local ryzom_installer.ini
int oldServersCount = m_servers.size();
CServers defaultServers = m_servers;
if (serversCount > oldServersCount) m_servers.resize(serversCount);
m_servers.resize(serversCount);
for (int i = oldServersCount; i < serversCount; ++i)
for (int i = 0; i < serversCount; ++i)
{
settings.beginGroup(QString("server_%1").arg(i));
CServer &server = m_servers[i];
settings.beginGroup(QString("server_%1").arg(i));
server.loadFromSettings(settings);
if (useDefaultValues)
{
// search server with same ID and use these values
server.loadFromServers(defaultServers);
}
else
{
server.loadFromSettings(settings);
}
settings.endGroup();
}

View file

@ -52,6 +52,38 @@ void CServer::loadFromSettings(const QSettings &settings)
comments = settings.value("comments").toString();
}
void CServer::loadFromServers(const CServers &servers)
{
foreach(const CServer &server, servers)
{
if (server.id == id)
{
// found the same server
loadFromServer(server);
break;
}
}
}
void CServer::loadFromServer(const CServer &server)
{
// copy all members
id = server.id;
name = server.name;
displayUrl = server.displayUrl;
filesListUrl = server.filesListUrl;
dataDownloadUrl = server.dataDownloadUrl;
dataDownloadFilename = server.dataDownloadFilename;
dataCompressedSize = server.dataCompressedSize;
dataUncompressedSize = server.dataUncompressedSize;
clientDownloadUrl = server.clientDownloadUrl;
clientDownloadFilename = server.clientDownloadFilename;
clientFilename = server.clientFilename;
clientFilenameOld = server.clientFilenameOld;
configurationFilename = server.configurationFilename;
comments = server.comments;
}
void CServer::saveToSettings(QSettings &settings) const
{
settings.setValue("id", id);

View file

@ -19,6 +19,10 @@
#include "operation.h"
class CServer;
typedef QVector<CServer> CServers;
class CServer
{
public:
@ -44,6 +48,8 @@ public:
QString comments;
void loadFromSettings(const QSettings &settings);
void loadFromServers(const CServers &servers);
void loadFromServer(const CServer &server);
void saveToSettings(QSettings &settings) const;
// helpers
@ -55,6 +61,4 @@ public:
extern const CServer NoServer;
typedef QVector<CServer> CServers;
#endif