mirror of
https://github.com/glest/glest-source.git
synced 2025-08-21 15:41:24 +02:00
- we now rename duplicate tilesets and techtrees also at program startup (with a warning message)
This commit is contained in:
@@ -1595,6 +1595,9 @@ void ShowINISettings(int argc, char **argv,Config &config,Config &configKeys) {
|
|||||||
void CheckForDuplicateData() {
|
void CheckForDuplicateData() {
|
||||||
Config &config = Config::getInstance();
|
Config &config = Config::getInstance();
|
||||||
|
|
||||||
|
string duplicateWarnings="";
|
||||||
|
|
||||||
|
{
|
||||||
vector<string> maps;
|
vector<string> maps;
|
||||||
std::vector<std::string> results;
|
std::vector<std::string> results;
|
||||||
vector<string> mapPaths = config.getPathListForType(ptMaps);
|
vector<string> mapPaths = config.getPathListForType(ptMaps);
|
||||||
@@ -1654,14 +1657,17 @@ void CheckForDuplicateData() {
|
|||||||
}
|
}
|
||||||
errorMsg += szBuf;
|
errorMsg += szBuf;
|
||||||
}
|
}
|
||||||
//throw runtime_error(szBuf);
|
duplicateWarnings += errorMsg;
|
||||||
Program *program = Program::getInstance();
|
|
||||||
if(program) {
|
// Program *program = Program::getInstance();
|
||||||
program->getState()->setForceMouseRender(true);
|
// if(program) {
|
||||||
|
// program->getState()->setForceMouseRender(true);
|
||||||
|
// }
|
||||||
|
// ExceptionHandler::DisplayMessage(errorMsg.c_str(), false);
|
||||||
}
|
}
|
||||||
ExceptionHandler::DisplayMessage(errorMsg.c_str(), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
//tilesets
|
//tilesets
|
||||||
std::vector<std::string> tileSets;
|
std::vector<std::string> tileSets;
|
||||||
vector<string> tilesetPaths = config.getPathListForType(ptTilesets);
|
vector<string> tilesetPaths = config.getPathListForType(ptTilesets);
|
||||||
@@ -1671,21 +1677,61 @@ void CheckForDuplicateData() {
|
|||||||
throw runtime_error("No tilesets were found!");
|
throw runtime_error("No tilesets were found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<string> duplicateTilesetsToRename;
|
||||||
for(int i = 0; i < tileSets.size(); ++i) {
|
for(int i = 0; i < tileSets.size(); ++i) {
|
||||||
string tileset1 = tileSets[i];
|
string tileSet1 = tileSets[i];
|
||||||
for(int j = 0; j < tileSets.size(); ++j) {
|
for(int j = 0; j < tileSets.size(); ++j) {
|
||||||
if(i != j) {
|
if(i != j) {
|
||||||
string tileset2 = tileSets[j];
|
string tileSet2= tileSets[j];
|
||||||
if(tileset1 == tileset2) {
|
if(tileSet1 == tileSet2) {
|
||||||
|
if(std::find(duplicateTilesetsToRename.begin(),duplicateTilesetsToRename.end(),tileSet1) == duplicateTilesetsToRename.end()) {
|
||||||
|
duplicateTilesetsToRename.push_back(tileSet1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(duplicateTilesetsToRename.size() > 0) {
|
||||||
|
string errorMsg = "Warning duplicate tilesets were detected and renamed:\n";
|
||||||
|
|
||||||
|
for(int i = 0; i < duplicateTilesetsToRename.size(); ++i) {
|
||||||
|
string currentPath = tilesetPaths[1];
|
||||||
|
endPathWithSlash(currentPath);
|
||||||
|
|
||||||
|
string oldFile = currentPath + duplicateTilesetsToRename[i];
|
||||||
|
string newFile = currentPath + duplicateTilesetsToRename[i];
|
||||||
|
newFile = newFile + "_custom";
|
||||||
|
|
||||||
char szBuf[4096]="";
|
char szBuf[4096]="";
|
||||||
sprintf(szBuf,"You have duplicate tilesets for tileset [%s] in [%s] and [%s]",tileset1.c_str(),tilesetPaths[0].c_str(),tilesetPaths[1].c_str());
|
int result = rename(oldFile.c_str(),newFile.c_str());
|
||||||
|
if(result != 0) {
|
||||||
|
char *errmsg = strerror(errno);
|
||||||
|
sprintf(szBuf,"Error [%s]\nCould not rename [%s] to [%s]!",errmsg,oldFile.c_str(),newFile.c_str());
|
||||||
throw runtime_error(szBuf);
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sprintf(szBuf,"tileset [%s] in [%s]\nwas renamed to [%s]",duplicateTilesetsToRename[i].c_str(),oldFile.c_str(),newFile.c_str());
|
||||||
|
|
||||||
|
string tilesetName = extractFileFromDirectoryPath(oldFile);
|
||||||
|
oldFile = newFile + "/" + tilesetName + ".xml";
|
||||||
|
newFile = newFile + "/" + tilesetName + "_custom.xml";
|
||||||
|
|
||||||
|
//printf("\n\n\n###### RENAME [%s] to [%s]\n\n",oldFile.c_str(),newFile.c_str());
|
||||||
|
int result2 = rename(oldFile.c_str(),newFile.c_str());
|
||||||
}
|
}
|
||||||
|
errorMsg += szBuf;
|
||||||
}
|
}
|
||||||
|
duplicateWarnings += errorMsg;
|
||||||
|
|
||||||
|
// Program *program = Program::getInstance();
|
||||||
|
// if(program) {
|
||||||
|
// program->getState()->setForceMouseRender(true);
|
||||||
|
// }
|
||||||
|
// ExceptionHandler::DisplayMessage(errorMsg.c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
vector<string> techPaths = config.getPathListForType(ptTechs);
|
vector<string> techPaths = config.getPathListForType(ptTechs);
|
||||||
vector<string> techTrees;
|
vector<string> techTrees;
|
||||||
findDirs(techPaths, techTrees, false, true);
|
findDirs(techPaths, techTrees, false, true);
|
||||||
@@ -1693,19 +1739,66 @@ void CheckForDuplicateData() {
|
|||||||
throw runtime_error("No tech-trees were found!");
|
throw runtime_error("No tech-trees were found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<string> duplicateTechtreesToRename;
|
||||||
for(int i = 0; i < techTrees.size(); ++i) {
|
for(int i = 0; i < techTrees.size(); ++i) {
|
||||||
string techtree1 = techTrees[i];
|
string techtree1 = techTrees[i];
|
||||||
for(int j = 0; j < techTrees.size(); ++j) {
|
for(int j = 0; j < techTrees.size(); ++j) {
|
||||||
if(i != j) {
|
if(i != j) {
|
||||||
string techtree2 = techTrees[j];
|
string techtree2 = techTrees[j];
|
||||||
if(techtree1 == techtree2) {
|
if(techtree1 == techtree2) {
|
||||||
char szBuf[4096]="";
|
if(std::find(duplicateTechtreesToRename.begin(),duplicateTechtreesToRename.end(),techtree1) == duplicateTechtreesToRename.end()) {
|
||||||
sprintf(szBuf,"You have duplicate techtrees for techtree [%s] in [%s] and [%s]",techtree1.c_str(),techTrees[0].c_str(),techTrees[1].c_str());
|
duplicateTechtreesToRename.push_back(techtree1);
|
||||||
throw runtime_error(szBuf);
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(duplicateTechtreesToRename.size() > 0) {
|
||||||
|
string errorMsg = "Warning duplicate techtrees were detected and renamed:\n";
|
||||||
|
|
||||||
|
for(int i = 0; i < duplicateTechtreesToRename.size(); ++i) {
|
||||||
|
string currentPath = techPaths[1];
|
||||||
|
endPathWithSlash(currentPath);
|
||||||
|
|
||||||
|
string oldFile = currentPath + duplicateTechtreesToRename[i];
|
||||||
|
string newFile = currentPath + duplicateTechtreesToRename[i];
|
||||||
|
newFile = newFile + "_custom";
|
||||||
|
|
||||||
|
char szBuf[4096]="";
|
||||||
|
int result = rename(oldFile.c_str(),newFile.c_str());
|
||||||
|
if(result != 0) {
|
||||||
|
char *errmsg = strerror(errno);
|
||||||
|
sprintf(szBuf,"Error [%s]\nCould not rename [%s] to [%s]!",errmsg,oldFile.c_str(),newFile.c_str());
|
||||||
|
throw runtime_error(szBuf);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sprintf(szBuf,"techtree [%s] in [%s]\nwas renamed to [%s]",duplicateTechtreesToRename[i].c_str(),oldFile.c_str(),newFile.c_str());
|
||||||
|
|
||||||
|
string tilesetName = extractFileFromDirectoryPath(oldFile);
|
||||||
|
oldFile = newFile + "/" + tilesetName + ".xml";
|
||||||
|
newFile = newFile + "/" + tilesetName + "_custom.xml";
|
||||||
|
|
||||||
|
//printf("\n\n\n###### RENAME [%s] to [%s]\n\n",oldFile.c_str(),newFile.c_str());
|
||||||
|
int result2 = rename(oldFile.c_str(),newFile.c_str());
|
||||||
|
}
|
||||||
|
errorMsg += szBuf;
|
||||||
|
}
|
||||||
|
duplicateWarnings += errorMsg;
|
||||||
|
|
||||||
|
// Program *program = Program::getInstance();
|
||||||
|
// if(program) {
|
||||||
|
// program->getState()->setForceMouseRender(true);
|
||||||
|
// }
|
||||||
|
// ExceptionHandler::DisplayMessage(errorMsg.c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(duplicateWarnings != "") {
|
||||||
|
Program *program = Program::getInstance();
|
||||||
|
if(program) {
|
||||||
|
program->getState()->setForceMouseRender(true);
|
||||||
}
|
}
|
||||||
|
ExceptionHandler::DisplayMessage(duplicateWarnings.c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user