mod menu shows conflicts with server data for techs and tilesets ( maps and scenarios will follow the next days )

This commit is contained in:
Titus Tscharntke 2011-09-02 23:53:37 +00:00
parent 343777fbe3
commit 396acdfa15
2 changed files with 106 additions and 72 deletions

View File

@ -150,58 +150,62 @@ MenuStateMods::MenuStateMods(Program *program, MainMenu *mainMenu) :
lineVerticalReturn.init(buttonReturn.getX() - 10, returnLineY-80, 5, 81); lineVerticalReturn.init(buttonReturn.getX() - 10, returnLineY-80, 5, 81);
lineVerticalReturn.setHorizontal(false); lineVerticalReturn.setHorizontal(false);
int buttonposY= returnLineY+40; int buttonLineUpY=installButtonYPos+10;
int buttonLineDownY=installButtonYPos-20;
int legendButtonY= buttonLineDownY-30;
buttonInstalled.registerGraphicComponent(containerName,"buttonInstalled"); buttonInstalled.registerGraphicComponent(containerName,"buttonInstalled");
buttonInstalled.init(10, buttonposY, 200); buttonInstalled.init(techInfoXPos, legendButtonY, 200);
buttonInstalled.setText(lang.get("ModInstalled")); buttonInstalled.setText(lang.get("ModInstalled"));
buttonInstalled.setUseCustomTexture(true); buttonInstalled.setUseCustomTexture(true);
buttonInstalled.setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture()); buttonInstalled.setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture());
buttonInstalled.setEnabled(false); buttonInstalled.setEnabled(false);
buttonAvailable.registerGraphicComponent(containerName,"buttonAvailable"); buttonAvailable.registerGraphicComponent(containerName,"buttonAvailable");
buttonAvailable.init(250, buttonposY, 200); buttonAvailable.init(tilesetInfoXPos, legendButtonY, 200);
buttonAvailable.setUseCustomTexture(true); buttonAvailable.setUseCustomTexture(true);
buttonAvailable.setCustomTexture(CoreData::getInstance().getOnServerTexture()); buttonAvailable.setCustomTexture(CoreData::getInstance().getOnServerTexture());
buttonAvailable.setText(lang.get("ModAvailable")); buttonAvailable.setText(lang.get("ModAvailable"));
buttonOnlyLocal.registerGraphicComponent(containerName,"buttonOnlyLocal"); buttonOnlyLocal.registerGraphicComponent(containerName,"buttonOnlyLocal");
buttonOnlyLocal.init(10, buttonposY-30, 200); buttonOnlyLocal.init(mapInfoXPos, legendButtonY, 200);
buttonOnlyLocal.setUseCustomTexture(true); buttonOnlyLocal.setUseCustomTexture(true);
buttonOnlyLocal.setCustomTexture(CoreData::getInstance().getNotOnServerTexture()); buttonOnlyLocal.setCustomTexture(CoreData::getInstance().getNotOnServerTexture());
buttonOnlyLocal.setText(lang.get("ModOnlyLocal")); buttonOnlyLocal.setText(lang.get("ModOnlyLocal"));
buttonConflict.registerGraphicComponent(containerName,"buttonConflict"); buttonConflict.registerGraphicComponent(containerName,"buttonConflict");
buttonConflict.init(250, buttonposY-30, 200); buttonConflict.init(scenarioInfoXPos, legendButtonY, 200);
buttonConflict.setUseCustomTexture(true); buttonConflict.setUseCustomTexture(true);
buttonConflict.setCustomTexture(CoreData::getInstance().getOnServerDifferentTexture()); buttonConflict.setCustomTexture(CoreData::getInstance().getOnServerDifferentTexture());
buttonConflict.setText(lang.get("ModHasConflict")); buttonConflict.setText(lang.get("ModHasConflict"));
buttonInstallTech.registerGraphicComponent(containerName,"buttonInstallTech"); buttonInstallTech.registerGraphicComponent(containerName,"buttonInstallTech");
buttonInstallTech.init(techInfoXPos + 40, installButtonYPos, 125); buttonInstallTech.init(techInfoXPos + 40, buttonLineUpY, 125);
buttonInstallTech.setText(lang.get("Install")); buttonInstallTech.setText(lang.get("Install"));
buttonRemoveTech.registerGraphicComponent(containerName,"buttonRemoveTech"); buttonRemoveTech.registerGraphicComponent(containerName,"buttonRemoveTech");
buttonRemoveTech.init(techInfoXPos + 40, installButtonYPos-30, 125); buttonRemoveTech.init(techInfoXPos + 40, buttonLineDownY, 125);
buttonRemoveTech.setText(lang.get("Remove")); buttonRemoveTech.setText(lang.get("Remove"));
buttonInstallTileset.registerGraphicComponent(containerName,"buttonInstallTileset"); buttonInstallTileset.registerGraphicComponent(containerName,"buttonInstallTileset");
buttonInstallTileset.init(tilesetInfoXPos + 20, installButtonYPos, 125); buttonInstallTileset.init(tilesetInfoXPos + 20, buttonLineUpY, 125);
buttonInstallTileset.setText(lang.get("Install")); buttonInstallTileset.setText(lang.get("Install"));
buttonRemoveTileset.registerGraphicComponent(containerName,"buttonRemoveTileset"); buttonRemoveTileset.registerGraphicComponent(containerName,"buttonRemoveTileset");
buttonRemoveTileset.init(tilesetInfoXPos + 20, installButtonYPos-30, 125); buttonRemoveTileset.init(tilesetInfoXPos + 20, buttonLineDownY, 125);
buttonRemoveTileset.setText(lang.get("Remove")); buttonRemoveTileset.setText(lang.get("Remove"));
buttonInstallMap.registerGraphicComponent(containerName,"buttonInstallMap"); buttonInstallMap.registerGraphicComponent(containerName,"buttonInstallMap");
buttonInstallMap.init(mapInfoXPos + 40, installButtonYPos, 125); buttonInstallMap.init(mapInfoXPos + 40, buttonLineUpY, 125);
buttonInstallMap.setText(lang.get("Install")); buttonInstallMap.setText(lang.get("Install"));
buttonRemoveMap.registerGraphicComponent(containerName,"buttonRemoveMap"); buttonRemoveMap.registerGraphicComponent(containerName,"buttonRemoveMap");
buttonRemoveMap.init(mapInfoXPos + 40, installButtonYPos-30, 125); buttonRemoveMap.init(mapInfoXPos + 40, buttonLineDownY, 125);
buttonRemoveMap.setText(lang.get("Remove")); buttonRemoveMap.setText(lang.get("Remove"));
buttonInstallScenario.registerGraphicComponent(containerName,"buttonInstallScenario"); buttonInstallScenario.registerGraphicComponent(containerName,"buttonInstallScenario");
buttonInstallScenario.init(scenarioInfoXPos + 20, installButtonYPos, 125); buttonInstallScenario.init(scenarioInfoXPos + 20, buttonLineUpY, 125);
buttonInstallScenario.setText(lang.get("Install")); buttonInstallScenario.setText(lang.get("Install"));
buttonRemoveScenario.registerGraphicComponent(containerName,"buttonRemoveScenario"); buttonRemoveScenario.registerGraphicComponent(containerName,"buttonRemoveScenario");
buttonRemoveScenario.init(scenarioInfoXPos + 20, installButtonYPos-30, 125); buttonRemoveScenario.init(scenarioInfoXPos + 20, buttonLineDownY, 125);
buttonRemoveScenario.setText(lang.get("Remove")); buttonRemoveScenario.setText(lang.get("Remove"));
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
@ -415,20 +419,11 @@ void MenuStateMods::simpleTask(BaseThread *callingThread) {
getTilesetsLocalList(); getTilesetsLocalList();
for(unsigned int i=0; i < tilesetListRemote.size(); i++) { for(unsigned int i=0; i < tilesetListRemote.size(); i++) {
string tilesetInfo = tilesetListRemote[i]; string result=refreshTilesetModInfo(tilesetListRemote[i]);
std::vector<std::string> tilesetInfoList; if(result != "") {
Tokenize(tilesetInfo,tilesetInfoList,"|");
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("tilesetInfoList.size() [%d]\n",(int)tilesetInfoList.size());
if(tilesetInfoList.size() >= 4) {
ModInfo modinfo; ModInfo modinfo;
modinfo.name = tilesetInfoList[0]; //bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),techName) != techTreeFiles.end());
modinfo.crc = tilesetInfoList[1]; modinfo=tilesetCacheList[result];
modinfo.description = tilesetInfoList[2];
modinfo.url = tilesetInfoList[3];
modinfo.imageUrl = tilesetInfoList[4];
modinfo.type = mt_Tileset;
//bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),tilesetName) != tilesetFiles.end()); //bool alreadyHasTileset = (std::find(tilesetFiles.begin(),tilesetFiles.end(),tilesetName) != tilesetFiles.end());
tilesetCacheList[modinfo.name] = modinfo; tilesetCacheList[modinfo.name] = modinfo;
@ -471,23 +466,11 @@ void MenuStateMods::simpleTask(BaseThread *callingThread) {
getTechsLocalList(); getTechsLocalList();
for(unsigned int i=0; i < techListRemote.size(); i++) { for(unsigned int i=0; i < techListRemote.size(); i++) {
string techInfo = techListRemote[i]; string result=refreshTechModInfo(techListRemote[i]);
std::vector<std::string> techInfoList; if(result != "") {
Tokenize(techInfo,techInfoList,"|");
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("techInfoList.size() [%d]\n",(int)techInfoList.size());
if(techInfoList.size() >= 5) {
ModInfo modinfo; ModInfo modinfo;
modinfo.name = techInfoList[0];
modinfo.count = techInfoList[1];
modinfo.crc = techInfoList[2];
modinfo.description = techInfoList[3];
modinfo.url = techInfoList[4];
modinfo.imageUrl = techInfoList[5];
modinfo.type = mt_Techtree;
//bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),techName) != techTreeFiles.end()); //bool alreadyHasTech = (std::find(techTreeFiles.begin(),techTreeFiles.end(),techName) != techTreeFiles.end());
techCacheList[modinfo.name] = modinfo; modinfo=techCacheList[result];
GraphicButton *button=new GraphicButton(); GraphicButton *button=new GraphicButton();
button->init(techInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight); button->init(techInfoXPos, keyButtonsYBase, keyButtonsWidth,keyButtonsHeight);
@ -753,23 +736,39 @@ void MenuStateMods::getTechsLocalList() {
} }
} }
string MenuStateMods::refreshTechModInfo(string techInfo) {
std::vector<std::string> techInfoList;
Tokenize(techInfo,techInfoList,"|");
if(techInfoList.size() >= 5) {
Config &config = Config::getInstance();
ModInfo modinfo;
modinfo.name = techInfoList[0];
modinfo.count = techInfoList[1];
modinfo.crc = techInfoList[2];
modinfo.description = techInfoList[3];
modinfo.url = techInfoList[4];
modinfo.imageUrl = techInfoList[5];
modinfo.type = mt_Techtree;
string itemPath = config.getPathListForType(ptTechs,"")[1] + "/" + modinfo.name + string("/*");
if(itemPath.empty()==false){
bool forceRefresh = (mapCRCUpdateList.find(itemPath) == mapCRCUpdateList.end());
int crc=getFolderTreeContentsCheckSumRecursively(itemPath, ".xml", NULL,forceRefresh);
modinfo.localCRC=intToStr(crc);
//printf("itemPath='%s' remote crc:'%s' local crc:'%s' crc='%d' \n",itemPath.c_str(),modinfo.crc.c_str(),modinfo.localCRC.c_str(),crc);
}
else {
modinfo.localCRC="";
}
techCacheList[modinfo.name] = modinfo;
return modinfo.name;
}
return "";
}
void MenuStateMods::refreshTechs() { void MenuStateMods::refreshTechs() {
getTechsLocalList(); getTechsLocalList();
for(int i=0; i < techListRemote.size(); i++) { for(int i=0; i < techListRemote.size(); i++) {
string techInfo = techListRemote[i]; refreshTechModInfo(techListRemote[i]);
std::vector<std::string> techInfoList;
Tokenize(techInfo,techInfoList,"|");
if(techInfoList.size() >= 5) {
ModInfo modinfo;
modinfo.name = techInfoList[0];
modinfo.count = techInfoList[1];
modinfo.crc = techInfoList[2];
modinfo.description = techInfoList[3];
modinfo.url = techInfoList[4];
modinfo.imageUrl = techInfoList[5];
modinfo.type = mt_Techtree;
techCacheList[modinfo.name] = modinfo;
}
} }
} }
@ -787,23 +786,40 @@ void MenuStateMods::getTilesetsLocalList() {
} }
} }
string MenuStateMods::refreshTilesetModInfo(string tilesetInfo) {
std::vector<std::string> tilesetInfoList;
Tokenize(tilesetInfo,tilesetInfoList,"|");
if(tilesetInfoList.size() >= 4) {
Config &config = Config::getInstance();
ModInfo modinfo;
modinfo.name = tilesetInfoList[0];
modinfo.crc = tilesetInfoList[1];
modinfo.description = tilesetInfoList[2];
modinfo.url = tilesetInfoList[3];
modinfo.imageUrl = tilesetInfoList[4];
modinfo.type = mt_Tileset;
string itemPath = config.getPathListForType(ptTilesets,"")[1] + "/" + modinfo.name + string("/*");
if(itemPath.empty()==false){
bool forceRefresh = (mapCRCUpdateList.find(itemPath) == mapCRCUpdateList.end());
int crc=getFolderTreeContentsCheckSumRecursively(itemPath, ".xml", NULL,forceRefresh);
modinfo.localCRC=intToStr(crc);
//printf("itemPath='%s' remote crc:'%s' local crc:'%s' crc='%d' \n",itemPath.c_str(),modinfo.crc.c_str(),modinfo.localCRC.c_str(),crc);
}
else {
modinfo.localCRC="";
}
tilesetCacheList[modinfo.name] = modinfo;
return modinfo.name;
}
return "";
}
void MenuStateMods::refreshTilesets() { void MenuStateMods::refreshTilesets() {
getTilesetsLocalList(); getTilesetsLocalList();
for(int i=0; i < tilesetListRemote.size(); i++) { for(int i=0; i < tilesetListRemote.size(); i++) {
string tilesetInfo = tilesetListRemote[i]; refreshTilesetModInfo(tilesetListRemote[i]);
std::vector<std::string> tilesetInfoList;
Tokenize(tilesetInfo,tilesetInfoList,"|");
if(tilesetInfoList.size() >= 4) {
ModInfo modinfo;
modinfo.name = tilesetInfoList[0];
modinfo.crc = tilesetInfoList[1];
modinfo.description = tilesetInfoList[2];
modinfo.url = tilesetInfoList[3];
modinfo.imageUrl = tilesetInfoList[4];
modinfo.type = mt_Tileset;
tilesetCacheList[modinfo.name] = modinfo;
}
} }
} }
@ -1807,7 +1823,7 @@ void MenuStateMods::render() {
renderer.renderButton(&buttonInstalled); renderer.renderButton(&buttonInstalled);
renderer.renderButton(&buttonAvailable); renderer.renderButton(&buttonAvailable);
//renderer.renderButton(&buttonConflict); renderer.renderButton(&buttonConflict);
renderer.renderButton(&buttonOnlyLocal); renderer.renderButton(&buttonOnlyLocal);
renderer.renderLabel(&modDescrLabel); renderer.renderLabel(&modDescrLabel);
@ -1846,7 +1862,14 @@ void MenuStateMods::render() {
bool remoteHasTech = (techCacheList.find(keyTechButtons[i]->getText()) != techCacheList.end()); bool remoteHasTech = (techCacheList.find(keyTechButtons[i]->getText()) != techCacheList.end());
if(remoteHasTech) if(remoteHasTech)
{ {
keyTechButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture()); ModInfo &modInfo = techCacheList[keyTechButtons[i]->getText()];
if( modInfo.crc==modInfo.localCRC) {
keyTechButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture());
}
else {
//printf("modInfo.name=%s modInfo.crc=%s modInfo.localCRC=%s\n",modInfo.name.c_str(),modInfo.crc.c_str(),modInfo.localCRC.c_str());
keyTechButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerDifferentTexture());
}
} }
else else
{ {
@ -1881,7 +1904,15 @@ void MenuStateMods::render() {
bool remoteHasTileset= (tilesetCacheList.find(keyTilesetButtons[i]->getText()) != tilesetCacheList.end()); bool remoteHasTileset= (tilesetCacheList.find(keyTilesetButtons[i]->getText()) != tilesetCacheList.end());
if(remoteHasTileset) if(remoteHasTileset)
{ {
keyTilesetButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture()); ModInfo &modInfo = tilesetCacheList[keyTilesetButtons[i]->getText()];
if( modInfo.crc==modInfo.localCRC) {
keyTilesetButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerInstalledTexture());
}
else {
//printf("modInfo.name=%s modInfo.crc=%s modInfo.localCRC=%s\n",modInfo.name.c_str(),modInfo.crc.c_str(),modInfo.localCRC.c_str());
keyTilesetButtons[i]->setCustomTexture(CoreData::getInstance().getOnServerDifferentTexture());
}
} }
else else
{ {

View File

@ -60,6 +60,7 @@ public:
string description; string description;
string count; // used for faction count for example string count; // used for faction count for example
string crc; string crc;
string localCRC;
ModType type; ModType type;
public: public:
ModInfo(); ModInfo();
@ -167,9 +168,11 @@ private:
SimpleTaskThread *modHttpServerThread; SimpleTaskThread *modHttpServerThread;
void getTechsLocalList(); void getTechsLocalList();
string refreshTechModInfo(string techInfo);
void refreshTechs(); void refreshTechs();
void getTilesetsLocalList(); void getTilesetsLocalList();
string refreshTilesetModInfo(string tilesetInfo);
void refreshTilesets(); void refreshTilesets();
void getMapsLocalList(); void getMapsLocalList();