| 231 | 
   | 
                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 232 | 
   | 
                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 233 | 
   | 
                                 if ( strcmp(levels[i].c_str(), "0") ){ | 
 
 
 
 
 
 
 
 
 
 
 
 | 234 | 
 < | 
                                         system((strOniSplit + " -move:overwrite ../GameDataFolder/level" + levels[i] + "_Final ../GameDataFolder/level" + levels[i] + "_Final/AKEV/AKEV*.oni").c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 234 | 
 > | 
                                         system((strOniSplit + " -move:overwrite ../GameDataFolder/level" + levels[i] + "_Final ../GameDataFolder/level" + levels[i] + | 
 
 
 
 
 
 | 235 | 
 > | 
                                                         "_Final/AKEV/AKEV*.oni").c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 | 236 | 
   | 
                                         remove(  "../GameDataFolder/level" + levels[i] + "_Final/AKEV" ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 237 | 
   | 
                                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 238 | 
   | 
                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 246 | 
   | 
                 for (int i = 0; i < 15; i++) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 247 | 
   | 
                 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 248 | 
   | 
                         logfile << "\tReimporting level" << levels[i] << "_Final.oni\n"; | 
 
 
 
 
 
 
 
 
 
 
 
 | 249 | 
 < | 
                         setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + " reimporting level" + levels[i]+"_Final.oni"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 249 | 
 > | 
                         setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + " reimporting level" + | 
 
 
 
 
 
 | 250 | 
 > | 
                                                   levels[i] + "_Final.oni"); | 
 
 
 
 
 
 
 
 
 
 
 
 | 251 | 
   | 
                         logfile << (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level"  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 252 | 
   | 
                                                 + levels[i] + "_Final/level" + levels[i] + "_Final.oni >> Globalize.log").c_str() << '\n'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 253 | 
   | 
                         string sys_str = (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level" | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 308 | 
   | 
                 /* On Mac only, set the current GDF to the AE GDF by writing to Oni's global preferences file (thankfully a standard OS X ".plist" XML file). | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 309 | 
   | 
                  Tests for presence of prefs with [ -f ] before doing anything so it doesn't create a partial prefs file -- just in case user has never | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 310 | 
   | 
                  run Oni before :-p */ | 
 
 
 
 
 
 
 
 
 
 
 
 | 311 | 
 < | 
                 string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for Edition/ (Oni wants the folder that *contains* the GDF) | 
 
 
 
 
 
 
 
 
 
 | 311 | 
 > | 
                 string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for Edition/ (Oni wants folder that *contains* the GDF) | 
 
 
 
 
 
 
 
 
 
 
 
 | 312 | 
   | 
                 //bad Iritscen, bad! fixed buffers can cause crashes. | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 313 | 
   | 
                 /*char prefsCommand[300] = "[ -f ~/Library/Preferences/com.godgames.oni.plist ] && defaults write com.godgames.oni RetailInstallationPath -string '"; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 314 | 
   | 
                 strcat(prefsCommand, fullAEpath.c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 376 | 
   | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 377 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 378 | 
   | 
 ModPackage fileToModPackage(fstream &file, string modName) | 
 
 
 
 
 
 
 
 
 
 
 
 | 379 | 
 < | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 378 | 
 < | 
         /* | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 379 | 
 < | 
          This converts a file to a ModPackage struct. | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 380 | 
 < | 
           | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 381 | 
 < | 
          A few notes... | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 382 | 
 < | 
          "iter" is the current word we are on. I should have named it "token" or something, but I don't have multiple iterators, so its ok. | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 383 | 
 < | 
          I refer to (*iter) at the beginning of each if statement block. I could probably store it as a variable, but I'm pretty sure that dereferencing a pointer\iterator isn't much | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 384 | 
 < | 
          slower than reading a variable. | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 385 | 
 < | 
          */ | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 386 | 
 < | 
          | 
 
 
 
 
 
 
 
 
 
 | 379 | 
 > | 
 {        | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 380 | 
   | 
         ModPackage package; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 381 | 
   | 
         string line; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 382 | 
   | 
         const string AEInstallVersion = "AEInstallVersion"; // used for comparing to the current token... | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 568 | 
   | 
                                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 569 | 
   | 
                                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 570 | 
   | 
                                                 setProgressBar( (int)(1000 * (float)(j-1) / (float)numberOfDats) ); //100% * dat we're on / total dats | 
 
 
 
 
 
 
 
 
 
 
 
 | 571 | 
 < | 
                                                 setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " +  dir_itr->path().filename() + " "); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 571 | 
 > | 
                                                 setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " + | 
 
 
 
 
 
 | 572 | 
 > | 
                                                                           dir_itr->path().filename() + " "); | 
 
 
 
 
 
 
 
 
 
 
 
 | 573 | 
   | 
                                                  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 574 | 
   | 
                                                 system(importCommand.c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 575 | 
   | 
                                                 j++;                                             | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 625 | 
   | 
                                         importCommand += " ../GameDataFolder/" + dir_itr->path().filename() + ".dat >> Install.log"; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 626 | 
   | 
                                          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 627 | 
   | 
                                         setProgressBar( (int)(1000 * (float)(j-1) / (float)numberOfDats) ); //100% * dat we're on / total dats | 
 
 
 
 
 
 
 
 
 
 
 
 | 628 | 
 < | 
                                         setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " +  dir_itr->path().filename() + " "); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 628 | 
 > | 
                                         setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " + | 
 
 
 
 
 
 | 629 | 
 > | 
                                                                   dir_itr->path().filename() + " "); | 
 
 
 
 
 
 
 
 
 
 
 
 | 630 | 
   | 
                                         system(importCommand.c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 631 | 
   | 
                                         j++; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 632 | 
   | 
                                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 703 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 704 | 
   | 
 void copyBSL(string copypath, vector<string>& BSLfolders, ModPackage pkg) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 705 | 
   | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 | 706 | 
 < | 
         ofstream BSLlog("BSL2.log", ios::app ); | 
 
 
 
 
 
 
 
 
 
 | 706 | 
 > | 
         ofstream BSLlog("BSL.log", ios::app ); | 
 
 
 
 
 
 
 
 
 
 
 
 | 707 | 
   | 
          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 708 | 
   | 
         try { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 709 | 
   | 
                 for ( directory_iterator dir_itr( copypath ), end_itr; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 811 | 
   | 
 |                                                          Installer to be replaced (when the new Installer                     | | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 812 | 
   | 
 |                                                          launches, this function will be called again but will        | | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 813 | 
   | 
 |                                                          return UPDATE_SIMP_AVAIL or UPDATE_GLOB_AVAIL)                       | | 
 
 
 
 
 
 
 
 
 | 814 | 
 + | 
 |  UPDATE_PKG_AVAIL                     -- A newer version of individual package(s) is available        | | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 815 | 
   | 
 \* UPDATE_CONT_UPD                      -- Currently unused                                                                                */ | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 816 | 
   | 
 int GetUpdateStatus(Install_info_cfg *currentAE, Install_info_cfg *updateAE, bool *installerJustUpdated) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 817 | 
   | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 926 | 
   | 
                                                                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 927 | 
   | 
                                                                 newUpdateLog << "Installer was updated to:\n"; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 928 | 
   | 
                                                                 newUpdateLog << newUpdateLine.c_str(); | 
 
 
 
 
 
 
 
 
 
 
 
 | 929 | 
 < | 
                                                                 *installerJustUpdated = true; // this value is indirectly returned to AEInstallerAp::OnInit() | 
 
 
 
 
 
 
 
 
 
 | 929 | 
 > | 
                                                                 *installerJustUpdated = true; // this value is indirectly returned to AEInstallerApp::OnInit() | 
 
 
 
 
 
 
 
 
 
 
 
 | 930 | 
   | 
                                                                 doneReadingFile = true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 931 | 
   | 
                                                                 newUpdateLog.close(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 932 | 
   | 
                                                                 newUpdateLog.clear(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 965 | 
   | 
                                 return UPDATE_SIMP_AVAIL; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 966 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 967 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 | 968 | 
 < | 
         try { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 973 | 
 < | 
         directory_iterator end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 974 | 
 < | 
         if(exists("../updates")){ | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 975 | 
 < | 
         for ( directory_iterator install_iter( "../updates" ); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 976 | 
 < | 
                  install_iter != end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 977 | 
 < | 
                  ++install_iter ) | 
 
 
 
 
 
 
 
 
 
 | 968 | 
 > | 
         try | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 969 | 
   | 
         { | 
 
 
 
 
 
 
 
 
 
 
 
 | 970 | 
 < | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 971 | 
 < | 
                 ModPackage installedPackage, updatePackage; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 972 | 
 < | 
                 if ( is_directory( install_iter->path() ) && exists( install_iter->path().string() + "/Mod_Info.cfg" ) ) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 973 | 
 < | 
                         fstream file; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 983 | 
 < | 
                         file.open( (install_iter->path().string() + "/Mod_Info.cfg").c_str());   | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 984 | 
 < | 
                         if (!file.fail()) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 985 | 
 < | 
                         { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 986 | 
 < | 
                                 ModPackage updatePackage = fileToModPackage(file, install_iter->path().filename()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 987 | 
 < | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 988 | 
 < | 
                         else  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 989 | 
 < | 
                         { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 990 | 
 < | 
                                 file.close(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 991 | 
 < | 
                                 continue; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 992 | 
 < | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 993 | 
 < | 
                         if(!exists("packages" + install_iter->path().filename() + "/Mod_Info.cfg")); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 994 | 
 < | 
                         file.close(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 995 | 
 < | 
                         file.open( ("packages" + install_iter->path().filename() + "/Mod_Info.cfg").c_str()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 996 | 
 < | 
                         if (!file.fail()) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 997 | 
 < | 
                         { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 998 | 
 < | 
                                 ModPackage installedPackage = fileToModPackage(file, install_iter->path().filename()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 999 | 
 < | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1000 | 
 < | 
                         else | 
 
 
 
 
 
 
 
 
 
 | 970 | 
 > | 
                 directory_iterator end; | 
 
 
 
 
 
 | 971 | 
 > | 
                 if (exists("../updates")) | 
 
 
 
 
 
 | 972 | 
 > | 
                 { | 
 
 
 
 
 
 | 973 | 
 > | 
                         for (directory_iterator install_iter("../updates"); install_iter != end; ++install_iter) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 974 | 
   | 
                         { | 
 
 
 
 
 
 
 
 
 
 
 
 | 975 | 
 < | 
                                 file.close(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 976 | 
 < | 
                                 return UPDATE_THIRD_PARTY; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 977 | 
 < | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 978 | 
 < | 
                         file.close(); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 979 | 
 < | 
                         if(updatePackage.modStringVersion > installedPackage.modStringVersion) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 980 | 
 < | 
                                 return UPDATE_THIRD_PARTY; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 975 | 
 > | 
                                 ModPackage installedPackage, updatePackage; | 
 
 
 
 
 
 | 976 | 
 > | 
                                 if (is_directory(install_iter->path()) && exists(install_iter->path().string() + "/Mod_Info.cfg")) | 
 
 
 
 
 
 | 977 | 
 > | 
                                 { | 
 
 
 
 
 
 | 978 | 
 > | 
                                         fstream file; | 
 
 
 
 
 
 | 979 | 
 > | 
                                         file.open((install_iter->path().string() + "/Mod_Info.cfg").c_str()); | 
 
 
 
 
 
 | 980 | 
 > | 
                                         if (!file.fail()) | 
 
 
 
 
 
 | 981 | 
 > | 
                                                 ModPackage updatePackage = fileToModPackage(file, install_iter->path().filename()); | 
 
 
 
 
 
 | 982 | 
 > | 
                                         else | 
 
 
 
 
 
 | 983 | 
 > | 
                                         { | 
 
 
 
 
 
 | 984 | 
 > | 
                                                 file.close(); | 
 
 
 
 
 
 | 985 | 
 > | 
                                                 continue; | 
 
 
 
 
 
 | 986 | 
 > | 
                                         } | 
 
 
 
 
 
 | 987 | 
 > | 
                                         if (exists("packages" + install_iter->path().filename() + "/Mod_Info.cfg")) | 
 
 
 
 
 
 | 988 | 
 > | 
                                         { | 
 
 
 
 
 
 | 989 | 
 > | 
                                                 file.close(); | 
 
 
 
 
 
 | 990 | 
 > | 
                                                 file.open(("packages" + install_iter->path().filename() + "/Mod_Info.cfg").c_str()); | 
 
 
 
 
 
 | 991 | 
 > | 
                                                 if (!file.fail()) | 
 
 
 
 
 
 | 992 | 
 > | 
                                                         ModPackage installedPackage = fileToModPackage(file, install_iter->path().filename()); | 
 
 
 
 
 
 | 993 | 
 > | 
                                                 file.close(); | 
 
 
 
 
 
 | 994 | 
 > | 
                                                 if (updatePackage.modStringVersion > installedPackage.modStringVersion) | 
 
 
 
 
 
 | 995 | 
 > | 
                                                 { | 
 
 
 
 
 
 | 996 | 
 > | 
                                                         if (updatePackage.installerVersion <= INSTALLER_VERSION) | 
 
 
 
 
 
 | 997 | 
 > | 
                                                                 return UPDATE_PKG_AVAIL; | 
 
 
 
 
 
 | 998 | 
 > | 
                                                 } | 
 
 
 
 
 
 | 999 | 
 > | 
                                         } | 
 
 
 
 
 
 | 1000 | 
 > | 
                                         else | 
 
 
 
 
 
 | 1001 | 
 > | 
                                         { | 
 
 
 
 
 
 | 1002 | 
 > | 
                                                 file.close(); | 
 
 
 
 
 
 | 1003 | 
 > | 
                                                 return UPDATE_PKG_AVAIL; | 
 
 
 
 
 
 | 1004 | 
 > | 
                                         } | 
 
 
 
 
 
 | 1005 | 
 > | 
                                 } | 
 
 
 
 
 
 
 
 
 
 
 
 | 1006 | 
   | 
                         } | 
 
 
 
 
 
 
 
 
 
 | 1009 | 
 – | 
                          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1007 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 | 1011 | 
 – | 
                 } | 
 
 
 
 
 
 
 
 
 
 | 1012 | 
 – | 
                  | 
 
 
 
 
 
 
 
 
 
 | 1013 | 
 – | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1008 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1009 | 
   | 
         catch (exception & ex) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1010 | 
   | 
         //      setStatusArea("Warning, handled exception: " + (string)ex.what()); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1011 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 | 1018 | 
 – | 
          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1012 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1013 | 
   | 
         return UPDATE_NO_UPD_AVAIL; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1014 | 
   | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1235 | 
   | 
          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1236 | 
   | 
         string popenCommand = "../updates/" + strEUFN + "/install/"; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1237 | 
   | 
 #ifdef WIN32 | 
 
 
 
 
 
 
 
 
 
 | 1245 | 
 – | 
         // TODO: Fill in Windows equivalent of code below :-3 | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1238 | 
   | 
         popenCommand = "replace_installer.bat"; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1239 | 
   | 
 #else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1240 | 
   | 
         // We can't just use '~' to mean "the home directory" because we need to check the path in C... | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1264 | 
   | 
 #endif | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1265 | 
   | 
         return true; // returning 'true' tells the Installer to quit itself ASAP so it can be replaced by the process that is now running | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1266 | 
   | 
 } | 
 
 
 
 
 
 
 
 
 
 | 1275 | 
 – | 
 //strPathToEUFNPackages | 
 
 
 
 
 
 
 
 
 
 | 1276 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1277 | 
 – | 
 void CrawlPackages(string pathToUpdate, string strPathToPackages) { | 
 
 
 
 
 
 
 
 
 
 | 1278 | 
 – | 
         try{ | 
 
 
 
 
 
 
 
 
 
 | 1279 | 
 – | 
                 directory_iterator end; | 
 
 
 
 
 
 
 
 
 
 | 1280 | 
 – | 
                 for ( directory_iterator update_iter( pathToUpdate ); | 
 
 
 
 
 
 
 
 
 
 | 1281 | 
 – | 
                         update_iter != end; | 
 
 
 
 
 
 
 
 
 
 | 1282 | 
 – | 
                         ++update_iter ) | 
 
 
 
 
 
 
 
 
 
 | 1283 | 
 – | 
                 { | 
 
 
 
 
 
 
 
 
 
 | 1284 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1285 | 
 – | 
                         ModPackage installedPackage, updatePackage; | 
 
 
 
 
 
 
 
 
 
 | 1286 | 
 – | 
                         string updateStr = update_iter->path().string() + "/Mod_Info.cfg"; | 
 
 
 
 
 
 
 
 
 
 | 1287 | 
 – | 
                         if ( !boost::iequals(update_iter->path().filename(),"Edition") | 
 
 
 
 
 
 
 
 
 
 | 1288 | 
 – | 
                                 && !boost::iequals(update_iter->path().filename(),"Edition-patch") | 
 
 
 
 
 
 
 
 
 
 | 1289 | 
 – | 
                                 && is_directory( update_iter->path() )  | 
 
 
 
 
 
 
 
 
 
 | 1290 | 
 – | 
                                 && exists( update_iter->path().string() + "/Mod_Info.cfg" ) )  | 
 
 
 
 
 
 
 
 
 
 | 1291 | 
 – | 
                         { | 
 
 
 
 
 
 
 
 
 
 | 1292 | 
 – | 
                                 bool update = 0; | 
 
 
 
 
 
 
 
 
 
 | 1293 | 
 – | 
                                 fstream file; | 
 
 
 
 
 
 
 
 
 
 | 1294 | 
 – | 
                                 file.open( (update_iter->path().string() + "/Mod_Info.cfg").c_str());    | 
 
 
 
 
 
 
 
 
 
 | 1295 | 
 – | 
                                 if (!file.fail()) | 
 
 
 
 
 
 
 
 
 
 | 1296 | 
 – | 
                                 { | 
 
 
 
 
 
 
 
 
 
 | 1297 | 
 – | 
                                         updatePackage = fileToModPackage(file, update_iter->path().filename()); | 
 
 
 
 
 
 
 
 
 
 | 1298 | 
 – | 
                                 } | 
 
 
 
 
 
 
 
 
 
 | 1299 | 
 – | 
                                 else  | 
 
 
 
 
 
 
 
 
 
 | 1300 | 
 – | 
                                 { | 
 
 
 
 
 
 
 
 
 
 | 1301 | 
 – | 
                                         file.close(); | 
 
 
 
 
 
 
 
 
 
 | 1302 | 
 – | 
                                         continue; | 
 
 
 
 
 
 
 
 
 
 | 1303 | 
 – | 
                                 } | 
 
 
 
 
 
 
 
 
 
 | 1304 | 
 – | 
                                 if(!exists(strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg")); | 
 
 
 
 
 
 
 
 
 
 | 1305 | 
 – | 
                                 file.close(); | 
 
 
 
 
 
 
 
 
 
 | 1306 | 
 – | 
                                 file.clear(); | 
 
 
 
 
 
 
 
 
 
 | 1307 | 
 – | 
                                 file.open((strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg").c_str()); | 
 
 
 
 
 
 
 
 
 
 | 1308 | 
 – | 
                                 if (!file.fail()) | 
 
 
 
 
 
 
 
 
 
 | 1309 | 
 – | 
                                 { | 
 
 
 
 
 
 
 
 
 
 | 1310 | 
 – | 
                                         installedPackage = fileToModPackage(file, update_iter->path().filename()); | 
 
 
 
 
 
 
 
 
 
 | 1311 | 
 – | 
                                         file.close(); | 
 
 
 
 
 
 
 
 
 
 | 1312 | 
 – | 
                                         if(updatePackage.modStringVersion > installedPackage.modStringVersion) { | 
 
 
 
 
 
 
 
 
 
 | 1313 | 
 – | 
                                                 remove_all((path)(strPathToPackages +  "/" + installedPackage.modStringName));                   | 
 
 
 
 
 
 
 
 
 
 | 1314 | 
 – | 
                                                 update = 1; | 
 
 
 
 
 
 
 
 
 
 | 1315 | 
 – | 
                                         } | 
 
 
 
 
 
 
 
 
 
 | 1316 | 
 – | 
                                 } | 
 
 
 
 
 
 
 
 
 
 | 1317 | 
 – | 
                                 else | 
 
 
 
 
 
 
 
 
 
 | 1318 | 
 – | 
                                 { | 
 
 
 
 
 
 
 
 
 
 | 1319 | 
 – | 
                                         file.close(); | 
 
 
 
 
 
 
 
 
 
 | 1320 | 
 – | 
                                         update = 1; | 
 
 
 
 
 
 
 
 
 
 | 1321 | 
 – | 
                                 } | 
 
 
 
 
 
 
 
 
 
 | 1322 | 
 – | 
                                 file.close(); | 
 
 
 
 
 
 
 
 
 
 | 1323 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1324 | 
 – | 
                                 if(update) { | 
 
 
 
 
 
 
 
 
 
 | 1325 | 
 – | 
                                         rename((path)(pathToUpdate + "/" + updatePackage.modStringName), (path)(strPathToPackages + "/" + updatePackage.modStringName)); | 
 
 
 
 
 
 
 
 
 
 | 1326 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1327 | 
 – | 
                                 } | 
 
 
 
 
 
 
 
 
 
 | 1328 | 
 – | 
                         } | 
 
 
 
 
 
 
 
 
 
 | 1329 | 
 – | 
                 } | 
 
 
 
 
 
 
 
 
 
 | 1330 | 
 – | 
         } | 
 
 
 
 
 
 
 
 
 
 | 1331 | 
 – | 
         catch (exception & ex) { | 
 
 
 
 
 
 
 
 
 
 | 1332 | 
 – | 
                 //      ex.what(); | 
 
 
 
 
 
 
 
 
 
 | 1333 | 
 – | 
                 setStatusArea("Warning, handled exception: " + (string)ex.what()); | 
 
 
 
 
 
 
 
 
 
 | 1334 | 
 – | 
         } | 
 
 
 
 
 
 
 
 
 
 | 1335 | 
 – | 
 } | 
 
 
 
 
 
 
 
 
 
 | 1336 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1337 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 | 1338 | 
 – | 
 bool ProcessThirdPartyUpdates() { | 
 
 
 
 
 
 
 
 
 
 | 1339 | 
 – | 
 CrawlPackages( "../updates",  "./packages"); | 
 
 
 
 
 
 
 
 
 
 | 1340 | 
 – | 
 return true; | 
 
 
 
 
 
 
 
 
 
 | 1341 | 
 – | 
         //      globalPackages = getPackages();  | 
 
 
 
 
 
 
 
 
 
 | 1342 | 
 – | 
 //      refreshMods(globalInstalledMods); | 
 
 
 
 
 
 
 
 
 
 | 1343 | 
 – | 
 } | 
 
 
 
 
 
 
 
 
 
 | 1344 | 
 – | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1267 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1268 | 
   | 
 bool ProcessAEUpdate(Install_info_cfg *currentAE, Install_info_cfg *updateAE, bool *installerJustUpdated) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1269 | 
   | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1290 | 
   | 
         bool needNewTrashDir = false; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1291 | 
   | 
         bool readingVerAndDate = false; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1292 | 
   | 
          | 
 
 
 
 
 
 
 
 
 
 | 1371 | 
 – | 
         // TODO: Fill in Windows equivalent of code below | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1293 | 
   | 
 #ifdef WIN32 | 
 
 
 
 
 
 
 
 
 
 
 
 | 1294 | 
 < | 
         string strTrashDir = "Trash\\"; | 
 
 
 
 
 
 
 
 
 
 | 1294 | 
 > | 
         string strTrashDir = "Trash\\"; // string unused in Windows because files are simply deleted | 
 
 
 
 
 
 
 
 
 
 
 
 | 1295 | 
   | 
 #else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1296 | 
   | 
         FILE *fUserName = NULL; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1297 | 
   | 
         char chrUserName[32]; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1428 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1429 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1430 | 
   | 
          | 
 
 
 
 
 
 
 
 
 
 
 
 | 1431 | 
 < | 
         CrawlPackages( strPathToEUFNPackages,  strPathToPackages); | 
 
 
 
 
 
 
 
 
 
 | 1431 | 
 > | 
         ProcessPackageUpdates(strPathToEUFNPackages, strPathToPackages); | 
 
 
 
 
 
 
 
 
 
 
 
 | 1432 | 
   | 
          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1433 | 
   | 
         // Next, we get a list of which files and folders in the update's Globalize folder to move over; all files not starting with '.' will be moved... | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1434 | 
   | 
         // ...and folders which do not exist in the current AE will be created there | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1490 | 
   | 
         return true; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1491 | 
   | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1492 | 
   | 
  | 
 
 
 
 
 
 
 
 
 | 1493 | 
 + | 
 void ProcessPackageUpdates(string pathToUpdate, string strPathToPackages) | 
 
 
 
 
 
 
 
 
 | 1494 | 
 + | 
 { | 
 
 
 
 
 
 
 
 
 | 1495 | 
 + | 
         ptime startTime(second_clock::local_time()); | 
 
 
 
 
 
 
 
 
 | 1496 | 
 + | 
 #ifdef WIN32 | 
 
 
 
 
 
 
 
 
 | 1497 | 
 + | 
         string strTrashDir = "Trash\\"; // string unused in Windows because files are simply deleted | 
 
 
 
 
 
 
 
 
 | 1498 | 
 + | 
 #else | 
 
 
 
 
 
 
 
 
 | 1499 | 
 + | 
         FILE *fUserName = NULL; | 
 
 
 
 
 
 
 
 
 | 1500 | 
 + | 
         char chrUserName[32]; | 
 
 
 
 
 
 
 
 
 | 1501 | 
 + | 
         fUserName = popen("whoami", "r"); | 
 
 
 
 
 
 
 
 
 | 1502 | 
 + | 
         fgets(chrUserName, sizeof(chrUserName), fUserName); | 
 
 
 
 
 
 
 
 
 | 1503 | 
 + | 
         pclose(fUserName); | 
 
 
 
 
 
 
 
 
 | 1504 | 
 + | 
         string strUserName = (string)chrUserName; // stringsblaaarrrgggghhhh | 
 
 
 
 
 
 
 
 
 | 1505 | 
 + | 
         int endOfName = strUserName.find("\n", 0); | 
 
 
 
 
 
 
 
 
 | 1506 | 
 + | 
         string strTrashDir = "/Users/" + strUserName.substr(0, endOfName) + "/.Trash/"; | 
 
 
 
 
 
 
 
 
 | 1507 | 
 + | 
         bool needNewTrashDir = true; | 
 
 
 
 
 
 
 
 
 | 1508 | 
 + | 
         tm tmStartTime = to_tm(startTime); | 
 
 
 
 
 
 
 
 
 | 1509 | 
 + | 
 #endif | 
 
 
 
 
 
 
 
 
 | 1510 | 
 + | 
          | 
 
 
 
 
 
 
 
 
 | 1511 | 
 + | 
         try | 
 
 
 
 
 
 
 
 
 | 1512 | 
 + | 
         { | 
 
 
 
 
 
 
 
 
 | 1513 | 
 + | 
                 directory_iterator end; | 
 
 
 
 
 
 
 
 
 | 1514 | 
 + | 
                 for (directory_iterator update_iter(pathToUpdate); update_iter != end; ++update_iter) | 
 
 
 
 
 
 
 
 
 | 1515 | 
 + | 
                 { | 
 
 
 
 
 
 
 
 
 | 1516 | 
 + | 
                         ModPackage installedPackage, updatePackage; | 
 
 
 
 
 
 
 
 
 | 1517 | 
 + | 
                         string updtPath = update_iter->path().string(); | 
 
 
 
 
 
 
 
 
 | 1518 | 
 + | 
                         string updtFolder = update_iter->path().filename(); | 
 
 
 
 
 
 
 
 
 | 1519 | 
 + | 
                         string updtModInfo = updtPath + "/Mod_Info.cfg"; | 
 
 
 
 
 
 
 
 
 | 1520 | 
 + | 
                         string instModInfo = strPathToPackages + "/" + updtFolder + "/Mod_Info.cfg"; | 
 
 
 
 
 
 
 
 
 | 1521 | 
 + | 
                         if (!boost::iequals(updtFolder, "Edition") | 
 
 
 
 
 
 
 
 
 | 1522 | 
 + | 
                                 && !boost::iequals(updtFolder, "Edition-patch") | 
 
 
 
 
 
 
 
 
 | 1523 | 
 + | 
                                 && is_directory(update_iter->path())  | 
 
 
 
 
 
 
 
 
 | 1524 | 
 + | 
                                 && exists(updtModInfo))  | 
 
 
 
 
 
 
 
 
 | 1525 | 
 + | 
                         { | 
 
 
 
 
 
 
 
 
 | 1526 | 
 + | 
                                 fstream file; | 
 
 
 
 
 
 
 
 
 | 1527 | 
 + | 
                                 file.open((updtModInfo).c_str());        | 
 
 
 
 
 
 
 
 
 | 1528 | 
 + | 
                                 if (!file.fail()) | 
 
 
 
 
 
 
 
 
 | 1529 | 
 + | 
                                         updatePackage = fileToModPackage(file, updtFolder); | 
 
 
 
 
 
 
 
 
 | 1530 | 
 + | 
                                 else | 
 
 
 
 
 
 
 
 
 | 1531 | 
 + | 
                                 { | 
 
 
 
 
 
 
 
 
 | 1532 | 
 + | 
                                         file.close(); | 
 
 
 
 
 
 
 
 
 | 1533 | 
 + | 
                                         continue; | 
 
 
 
 
 
 
 
 
 | 1534 | 
 + | 
                                 } | 
 
 
 
 
 
 
 
 
 | 1535 | 
 + | 
                                 if (exists(instModInfo)) | 
 
 
 
 
 
 
 
 
 | 1536 | 
 + | 
                                 { | 
 
 
 
 
 
 
 
 
 | 1537 | 
 + | 
                                         file.close(); | 
 
 
 
 
 
 
 
 
 | 1538 | 
 + | 
                                         file.clear(); | 
 
 
 
 
 
 
 
 
 | 1539 | 
 + | 
                                         file.open(instModInfo.c_str()); | 
 
 
 
 
 
 
 
 
 | 1540 | 
 + | 
                                         if (!file.fail()) | 
 
 
 
 
 
 
 
 
 | 1541 | 
 + | 
                                         { | 
 
 
 
 
 
 
 
 
 | 1542 | 
 + | 
                                                 installedPackage = fileToModPackage(file, updtFolder); | 
 
 
 
 
 
 
 
 
 | 1543 | 
 + | 
                                                 file.close(); | 
 
 
 
 
 
 
 
 
 | 1544 | 
 + | 
                                                 if (updatePackage.modStringVersion > installedPackage.modStringVersion) | 
 
 
 
 
 
 
 
 
 | 1545 | 
 + | 
                                                 { | 
 
 
 
 
 
 
 
 
 | 1546 | 
 + | 
                                                         if (updatePackage.installerVersion <= INSTALLER_VERSION) | 
 
 
 
 
 
 
 
 
 | 1547 | 
 + | 
                                                         { | 
 
 
 
 
 
 
 
 
 | 1548 | 
 + | 
 #ifdef WIN32 | 
 
 
 
 
 
 
 
 
 | 1549 | 
 + | 
                                                                 remove_all((path)(strPathToPackages +  "/" + installedPackage.modStringName)); | 
 
 
 
 
 
 
 
 
 | 1550 | 
 + | 
 #else | 
 
 
 
 
 
 
 
 
 | 1551 | 
 + | 
                                                                 if (needNewTrashDir) | 
 
 
 
 
 
 
 
 
 | 1552 | 
 + | 
                                                                 { | 
 
 
 
 
 
 
 
 
 | 1553 | 
 + | 
                                                                         strTrashDir = strTrashDir + "Old_packages_" + boost::lexical_cast<string>(tmStartTime.tm_hour) + "-" + | 
 
 
 
 
 
 
 
 
 | 1554 | 
 + | 
                                                                                                   boost::lexical_cast<string>(tmStartTime.tm_min) + "-" + boost::lexical_cast<string>(tmStartTime.tm_sec) + "/"; | 
 
 
 
 
 
 
 
 
 | 1555 | 
 + | 
                                                                         create_directory(strTrashDir); | 
 
 
 
 
 
 
 
 
 | 1556 | 
 + | 
                                                                         needNewTrashDir = false; | 
 
 
 
 
 
 
 
 
 | 1557 | 
 + | 
                                                                 } | 
 
 
 
 
 
 
 
 
 | 1558 | 
 + | 
                                                                 rename((path)(strPathToPackages +  "/" + installedPackage.modStringName), (path)(strTrashDir + installedPackage.modStringName)); | 
 
 
 
 
 
 
 
 
 | 1559 | 
 + | 
 #endif | 
 
 
 
 
 
 
 
 
 | 1560 | 
 + | 
                                                                 rename((path)(pathToUpdate + "/" + updatePackage.modStringName), (path)(strPathToPackages + "/" + updatePackage.modStringName)); | 
 
 
 
 
 
 
 
 
 | 1561 | 
 + | 
                                                         } | 
 
 
 
 
 
 
 
 
 | 1562 | 
 + | 
                                                 } | 
 
 
 
 
 
 
 
 
 | 1563 | 
 + | 
                                         } | 
 
 
 
 
 
 
 
 
 | 1564 | 
 + | 
                                         else | 
 
 
 
 
 
 
 
 
 | 1565 | 
 + | 
                                                 file.close(); | 
 
 
 
 
 
 
 
 
 | 1566 | 
 + | 
                                 } | 
 
 
 
 
 
 
 
 
 | 1567 | 
 + | 
                                 file.close(); | 
 
 
 
 
 
 
 
 
 | 1568 | 
 + | 
                                 file.clear(); | 
 
 
 
 
 
 
 
 
 | 1569 | 
 + | 
                         } | 
 
 
 
 
 
 
 
 
 | 1570 | 
 + | 
                 } | 
 
 
 
 
 
 
 
 
 | 1571 | 
 + | 
         } | 
 
 
 
 
 
 
 
 
 | 1572 | 
 + | 
         catch (exception & ex) | 
 
 
 
 
 
 
 
 
 | 1573 | 
 + | 
         { | 
 
 
 
 
 
 
 
 
 | 1574 | 
 + | 
                 setStatusArea("Warning, handled exception: " + (string)ex.what()); | 
 
 
 
 
 
 
 
 
 | 1575 | 
 + | 
         } | 
 
 
 
 
 
 
 
 
 | 1576 | 
 + | 
 } | 
 
 
 
 
 
 
 
 
 | 1577 | 
 + | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1578 | 
   | 
 /* MakePathLocalToGlobalize is a function used once by ProcessAEUpdate() that takes a file in an        \ | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1579 | 
   | 
 |  update's Globalize folder and changes its path, originally relative to the Installer, to be          | | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1580 | 
   | 
 |  relative to the structure of the Globalize folder; this makes it easier to have the Installer        | |