ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/main_window.cpp
(Generate patch)

Comparing AE/Installer/trunk/source/main_window.cpp (file contents):
Revision 392 by gumby, Mon Jul 6 14:44:10 2009 UTC vs.
Revision 461 by gumby, Fri Oct 9 03:22:08 2009 UTC

# Line 1 | Line 1
1 + #ifndef NTDDI_VERSION          
2 + #define NTDDI_VERSION NTDDI_WIN7
3 + #endif
4 + #ifdef WIN32
5 + #include <windows.h>
6 + #include <shobjidl.h>
7 + HWND Handle;
8 +
9 + ITaskbarList *pTaskbarList;
10 + ITaskbarList3 *pTaskbarList3;
11 + #endif
12 +
13   /*
14   AE/Mod Installer
15   by Gumby and Iritscen
# Line 21 | Line 33
33  
34   #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
35   #include "boost/lexical_cast.hpp" //int -> string
36 + #include "boost/algorithm/string.hpp"
37   #include "installer.h"
38  
39   #ifdef WIN32
# Line 30 | Line 43
43   #include <dirent.h>
44   #endif
45  
46 < //const string strInstallerVersion = "1.0";
46 >
47   const bool SPLIT = 1;
48   const bool NOT_SPLIT = 0;
49   bool splitInstances = SPLIT;
# Line 52 | Line 65 | using namespace boost::filesystem;
65   using namespace std;
66  
67  
68 + vector<string> globalInstalledMods;
69 + vector<ModPackage> globalPackages;
70  
71  
72   #include "boost/date_time/gregorian/gregorian.hpp"
# Line 62 | Line 77 | string escapePath(string input) {
77          
78          string output;
79          string escape_me = "& ;()|<>\"'\\#*?$";
80 <        for(int i = 0; i < input.size(); i++)  {
81 <                for(int j = 0; j < escape_me.size(); j++) if (input[i] == escape_me[j]) output += '//';
80 >        for(unsigned int i = 0; i < input.size(); i++)  {
81 >                for(unsigned int j = 0; j < escape_me.size(); j++) if (input[i] == escape_me[j]) output += '\\';
82                  output += input[i];
83          }
84          return output;
# Line 109 | Line 124 | int globalizeData(void)
124                  path TRAM = Animations / "level0_TRAM";
125  
126                  vector<path> GDFPaths;
127 <                GDFPaths.push_back(Characters);
127 >                //GDFPaths.push_back(Characters);
128                  GDFPaths.push_back(Particles);
129                  GDFPaths.push_back(Textures);
130                  GDFPaths.push_back(Sounds);
# Line 117 | Line 132 | int globalizeData(void)
132                  GDFPaths.push_back(TRAM);
133  
134  
135 <                path VanillaCharacters = "packages/VanillaDats/level0_Final/level0_Characters/level0_Characters.oni";
136 <                path VanillaParticles = "packages/VanillaDats/level0_Final/level0_Particles/level0_Particles.oni";
137 <                path VanillaTextures  = "packages/VanillaDats/level0_Final/level0_Textures/level0_Textures.oni";
138 <                path VanillaSounds = "packages/VanillaDats/level0_Final/level0_Sounds/level0_Sounds.oni";
139 <                path VanillaAnimations = "packages/VanillaDats/level0_Final/level0_Animations/level0_Animations.oni";
140 <                path VanillaTRAC = "packages/VanillaDats/level0_Final/level0_Animations/level0_TRAC.oni";
141 <                path VanillaTRAM = "packages/VanillaDats/level0_Final/level0_Animations/level0_TRAM.oni";
135 >                path VanillaCharacters = "VanillaDats/level0_Final/level0_Characters/level0_Characters.oni";
136 >                path VanillaParticles = "VanillaDats/level0_Final/level0_Particles/level0_Particles.oni";
137 >                path VanillaTextures  = "VanillaDats/level0_Final/level0_Textures/level0_Textures.oni";
138 >                path VanillaSounds = "VanillaDats/level0_Final/level0_Sounds/level0_Sounds.oni";
139 >                path VanillaAnimations = "VanillaDats/level0_Final/level0_Animations/level0_Animations.oni";
140 >                path VanillaTRAC = "VanillaDats/level0_Final/level0_Animations/level0_TRAC.oni";
141 >                path VanillaTRAM = "VanillaDats/level0_Final/level0_Animations/level0_TRAM.oni";
142  
143                  vector<path> VanillaPaths;
144  
145 <                VanillaPaths.push_back(VanillaCharacters);
145 >                //VanillaPaths.push_back(VanillaCharacters);
146                  VanillaPaths.push_back(VanillaParticles);
147                  VanillaPaths.push_back(VanillaTextures);
148                  VanillaPaths.push_back(VanillaSounds);
# Line 157 | Line 172 | int globalizeData(void)
172  
173                  create_directory( "packages" );
174  
175 <                if (exists("packages/VanillaDats")) remove_all("packages/VanillaDats");
176 <                create_directory( "packages/VanillaDats" );
177 <                create_directory( "packages/VanillaDats/level0_Final/" );
175 >                if (exists("VanillaDats")) remove_all("VanillaDats");
176 >                create_directory( "VanillaDats" );
177 >                create_directory( "VanillaDats/level0_Final/" );
178                  //blah blah finish this.
179 <                //logfile <<  "packages/VanillaDats/level0_Final/ created";
179 >                //logfile <<  "VanillaDats/level0_Final/ created";
180                  create_directory( Characters );
181                  create_directory( Particles );
182                  create_directory( Archive );
# Line 193 | Line 208 | int globalizeData(void)
208                                  create_directory( "../GameDataFolder/level" + levels[i] + "_Final" );
209                                  //                              setStatusArea(strOniSplit + " -export ../GameDataFolder/level" + levels[i] + "_Final ../../GameDataFolder/level" + levels[i] + "_Final.dat");
210                                  system((strOniSplit + " -export ../GameDataFolder/level" + levels[i] + "_Final ../../GameDataFolder/level" + levels[i] + "_Final.dat").c_str());
211 <                                create_directory( "packages/VanillaDats/level" + levels[i] + "_Final" );
212 <                                create_directory( "packages/VanillaDats/level" + levels[i] + "_Final/level" + levels[i] + "_Final" );
211 >                                create_directory( "VanillaDats/level" + levels[i] + "_Final" );
212 >                                create_directory( "VanillaDats/level" + levels[i] + "_Final/level" + levels[i] + "_Final" );
213  
214                                  directory_iterator end_iter;
215                                  for ( directory_iterator dir_itr( "../GameDataFolder/level" + levels[i] + "_Final" ); dir_itr != end_iter; ++dir_itr )
# Line 217 | Line 232 | int globalizeData(void)
232                                                          else remove(dir_itr->path());
233                                                  }
234                                                  else if (dir_itr->path().filename().substr(0,4) == "TRAC"
235 <                                                        || dir_itr->path().filename().substr(0,4) == "ONVL") {
235 >                                                        ) {
236                                                                  cout <<dir_itr->path().filename() << "\n";
237                                                                  if(!exists( TRAC / dir_itr->filename())) rename(dir_itr->path(), TRAC / dir_itr->filename());
238                                                                  else remove(dir_itr->path());
# Line 237 | Line 252 | int globalizeData(void)
252                                                  else if (dir_itr->path().filename().substr(0,4) == "ONCC"
253                                                          || dir_itr->path().filename().substr(0,4) == "TRBS"
254                                                          || dir_itr->path().filename().substr(0,4) == "ONCV"
255 +                                                        || dir_itr->path().filename().substr(0,4) == "ONVL"
256                                                          || dir_itr->path().filename().substr(0,4) == "TRMA"
257                                                          || dir_itr->path().filename().substr(0,4) == "TRSC"
258                                                          || dir_itr->path().filename().substr(0,4) == "TRAS") {
# Line 274 | Line 290 | int globalizeData(void)
290                                                  else if (dir_itr->path().filename().substr(0,4) == "ONWC") { //fix for buggy ONWC overriding
291                                                                  cout <<dir_itr->path().filename() << "\n";
292  
293 <                                                                if(!exists( "packages/VanillaDats/level" + levels[i] + "_Final/level" + levels[i] + "_Final/" +  dir_itr->filename())) rename(dir_itr->path(), "packages/VanillaDats/level" + levels[i] + "_Final/level" + levels[i] + "_Final/" +  dir_itr->filename());
293 >                                                                if(!exists( "VanillaDats/level0_Final/level0_Final/" +  dir_itr->filename())) rename(dir_itr->path(), "VanillaDats/level0_Final/level0_Final/" +  dir_itr->filename());
294                                                                  else remove(dir_itr->path());
295                                                  }
296 +
297                                                  if (exists(dir_itr->path())) {
298  
299                                                  }
300                                                  else {
301 <                                                        //logfile << "\tMoved file: " << dir_itr->path().filename() << "\n";
301 >                                                        logfile << "\tMoved file: " << dir_itr->path().filename() << "\n";
302                                                  }
303                                          }
304  
# Line 303 | Line 320 | int globalizeData(void)
320                          //printf(levels[i],"%d",levels[i]);
321                          //printf(Step_x_x,"Step %d/%d: reimporting level", parts_done + 1, 7 + 2 * num_levels); setStatusArea((string)Step_x_x + levels[i] + (string)"_Final.dat");
322                          setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + " reimporting level" + levels[i]+"_Final.oni");
323 <                        logfile << (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final packages/VanillaDats/level" + levels[i] + "_Final/level"
323 >                        logfile << (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level"
324                                  + levels[i] + "_Final/level" + levels[i] + "_Final.oni >> Globalize.log").c_str() << '\n';
325 <                        string sys_str = (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final packages/VanillaDats/level" + levels[i] + "_Final/level"
326 <                                + levels[i] + "_Final/level" + levels[i] + "_Final.oni >> Globalize2.log");
325 >                        string sys_str = (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level"
326 >                                + levels[i] + "_Final/level" + levels[i] + "_Final.oni");
327                                  system(sys_str.c_str() );
328                          setProgressBar( (int)(1000 * (float)(parts_done) / (float)(total_steps) ));
329                          parts_done++;
330                  }
331 <                create_directory( VanillaCharacters.parent_path() );
331 >                //create_directory( VanillaCharacters.parent_path() );
332                  create_directory( VanillaParticles.parent_path() );
333                  create_directory( VanillaTextures.parent_path() );
334                  create_directory( VanillaSounds.parent_path() );
335                  create_directory( VanillaAnimations.remove_filename() );
336  
337 <                for(int j = 0; j < GDFPaths.size(); j++) {
337 >                for(unsigned int j = 0; j < GDFPaths.size(); j++) {
338                          logfile << "\tReimporting " << GDFPaths[j].filename() << ".oni\n";
339                          setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": reimporting " + GDFPaths[j].filename() );
340                          system((strOniSplit + " " + strImportOption + " " + GDFPaths[j].string() + " " + VanillaPaths[j].string()).c_str());
341                          parts_done++;
342                          setProgressBar( (int)(1000 * (float)(parts_done) / (float)(total_steps) ));
343                  }
344 +                logfile << "\nMoving level0_Characters\n";
345 +                setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": moving level0_Characters" );      
346 +                copy((path)"../GameDataFolder/level0_Characters", (path)("VanillaDats/level0_Final"));
347                  /*
348                  printf(Step_x_x,"Step %d/%d: reimporting level0_Characters", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));
349                  system((strOniSplit + " " + strImportOption + " " + Characters.string() + " " + VanillaCharacters.string()).c_str());
# Line 344 | Line 364 | int globalizeData(void)
364                  create_directory((path)"../GameDataFolder/IGMD");
365                  copy((path)"packages/VanillaBSL/IGMD", (path)"../GameDataFolder");
366                  setProgressBar( 1000 );
347                
348                // CIP:last of all, set up the edition folder as a playable Oni installation by placing the latest application (+ Daodan DLL on Windows) in edition/
349                // or we could just include it in the zip in the proper place already.
367  
368 <                copy("../../persist.dat","../persist.dat");
369 <                copy("../../keyconfig.txt","../keyconfig.txt");
368 >                if(exists("../../persist.dat")) if(!exists("../persist.dat"))
369 >                        copy("../../persist.dat","..");
370 >                if(exists("../../key_config.txt"))if(!exists("../key_config.txt"))
371 >                        copy("../../key_config.txt","..");
372 >                
373   #ifndef WIN32
374                  /* 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).
375 <                   If there are no Oni prefs (only possible if Oni has not been run even once), then the above line will fail silently, no harm done,
376 <                   and when the user does run Oni for the first time, using the copy of the app in the AE GDF, Oni will set the prefs to use that GDF at that point */
377 <                path fullAEpath = system_complete("."); // get full path for Installer
378 <                char prefsCommand[300] = "defaults write com.godgames.oni RetailInstallationPath -string '";
379 <                strcat(prefsCommand, fullAEpath.parent_path().parent_path().string().c_str()); // get path of edition/ folder (Oni wants the folder that *contains* the GDF)
375 >                   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
376 >                   run Oni before :-p */
377 >                string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for edition/
378 >                char prefsCommand[300] = "[ -f ~/Library/Preferences/com.godgames.oni.plist ] && defaults write com.godgames.oni RetailInstallationPath -string '";
379 >                strcat(prefsCommand, fullAEpath.c_str()); // get path of edition/ folder (Oni wants the folder that *contains* the GDF)
380                  strcat(prefsCommand, "'"); // path string is enclosed in single quotes to avoid the need to escape UNIX-unfriendly characters
381                  system(prefsCommand);
382                  
# Line 367 | Line 387 | int globalizeData(void)
387                  //      while(1) Sleep(-1);
388  
389          }
390 <        catch (exception ex) {
390 >        catch (exception & ex) {
391                  setStatusArea("Warning, handled exception: " + (string)ex.what());
392          }
393  
# Line 391 | Line 411 | vector<ModPackage> getPackages(void)
411  
412          try
413          {
414 <                directory_iterator end_iter;
395 <                for (directory_iterator dir_itr("./packages"); dir_itr != end_iter; ++dir_itr)
414 >                for (directory_iterator dir_itr("./packages"), end_itr; dir_itr != end_itr; ++dir_itr)
415                  {
416                          file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str());
417                          //cout << filename << "\n";
# Line 471 | Line 490 | ModPackage fileToModPackage(fstream &fil
490                          }
491                          else if (!HasOnis.compare(*iter)) {
492                                  iter++; iter++;  
493 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasOnis = 1; //Gotta love c++'s lack of a standard case-insensitive
494 <                                else if (!HasBSL.compare(*iter)) { // string comparer...I know my implementation here sucks. I need to change it to check each character one by one. At the moment,
495 <                                        iter++; iter++;}  // using "YFR" would probably set it off. :<
496 <
497 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasBSL = 1;
493 >                                if ( boost::iequals(*iter, "Yes")) package.hasOnis = 1;
494 >                        }      
495 >                        else if (!HasBSL.compare(*iter)) { // string comparer...I know my implementation here sucks. I need to change it to check each character one by one. At the moment,
496 >                                iter++; iter++;  // using "YFR" would probably set it off. :<
497 >                                if ( boost::iequals(*iter, "Yes")) package.hasBSL = 1;
498 >                                else if ( boost::iequals(*iter, "Addon")) package.hasAddon = 1;
499                          }
500                          else if (!HasDeltas.compare(*iter)) {
501                                  iter++; iter++;  
# Line 501 | Line 521 | ModPackage fileToModPackage(fstream &fil
521                                                  //cout << " ";
522                                                  package.category += *iter + " ";
523                                          }
504                                }
524                          }
525 <                        else if (!Creator.compare(*iter))  {    //if it contains the name
526 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
527 <                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   //ignores "->" and "Category"
528 <                                                //cout << *iter;
529 <                                                //cout << " ";
530 <                                                package.creator += *iter + " ";
531 <                                        }
525 >                }
526 >                else if (!Creator.compare(*iter))  {    //if it contains the name
527 >                        for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
528 >                                if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   //ignores "->" and "Category"
529 >                                        //cout << *iter;
530 >                                        //cout << " ";
531 >                                        package.creator += *iter + " ";
532                                  }
533                          }
534 <                        else if (!Readme.compare(*iter))  {     //if it contains the name
535 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
536 <                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    //ignores "->" and "Category"
537 <                                                if(!(*iter).compare("\\n")) package.readme += '\n';
538 <                                                else package.readme += *iter + " ";
539 <                                        }
534 >                }
535 >                else if (!Readme.compare(*iter))  {     //if it contains the name
536 >                        for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
537 >                                if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    //ignores "->" and "Category"
538 >                                        if(!(*iter).compare("\\n")) package.readme += '\n';
539 >                                        else package.readme += *iter + " ";
540                                  }
541                          }
542                  }
524
543          }
544 <        package.doOutput();
545 <        return package;
544 >
545 > }
546 > package.doOutput();
547 > return package;
548   }
549  
550   void recompileAll(vector<string> installedMods)
551 < {
551 > {try {
552          busy = 1;
553          using namespace boost::gregorian;
554          using namespace boost::posix_time;
555          using boost::lexical_cast;
556          using boost::bad_lexical_cast;
557 <        
538 <        setStatusArea("Importing levels...");
539 <        //setStatusArea("Recompiling Data...");
540 <        path vanilla_dir = "./packages/VanillaDats/";
557 >                path vanilla_dir = "./VanillaDats/";
558          string importCommand = "";
559          char statusString[128];
560          int numberOfDats = 0;
561          int j = 1;
562          string datString;
563 +        
564 +
565 +        setStatusArea("Importing levels...");
566 +        //setStatusArea("Recompiling Data...");
567 +
568          std::stringstream out;
569  
570          ptime start_time(second_clock::local_time());
571          clearOldDats();
572 <        remove("Install.log");
572 >        
573 >        if(exists("Install.log")) remove("Install.log");
574          ofstream logfile("Install.log");
575          logfile << "Mod Installation started " << to_simple_string(start_time) << endl;
576          logfile.close();
577 +
578 +
579          if(splitInstances == SPLIT){
580                  recursive_directory_iterator end_iter;
581  
# Line 564 | Line 589 | void recompileAll(vector<string> install
589                                          numberOfDats++;
590                                  }
591                          }
592 <                        catch(exception ex) {
592 >                        catch(exception & ex) {
593 >                                        remove("Install.log");
594 >                                        ofstream logfile("Install.log");
595 >
596  
597 +                                        logfile << "Warning, exception " << ex.what() << "!";
598 +                                        setStatusArea("Warning, exception " + (string)ex.what() + "!");
599 +                                        logfile.close();        
600                          }
601                  }
602 <
602 >                try {
603                  //recursive_directory_iterator end_iter;
604 <
604 >                
605  
606                  out << numberOfDats;
607                  datString = out.str();
577                try {
608                          for ( recursive_directory_iterator dir_itr( vanilla_dir );
609                                  dir_itr != end_iter;
610                                  ++dir_itr )
# Line 584 | Line 614 | void recompileAll(vector<string> install
614                                          if ( is_directory( dir_itr->status() ) &&  dir_itr.level() == 1)
615                                          {
616                                                  importCommand = strOniSplit + " " + strImportOption + " " + dir_itr->path().parent_path().string() + '/' + dir_itr->path().filename();
617 <                                                for (int i = 0; i < installedMods.size(); ++i) {
617 >                                                for (unsigned int i = 0; i < installedMods.size(); ++i) {
618                                                          if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename()  ))
619                                                                  importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename();
620  
621 <                                                        //else cout << " packages/VanillaDats/" + installedMods[i] + "/oni/";
621 >                                                        //else cout << " VanillaDats/" + installedMods[i] + "/oni/";
622                                                  }
623                                                  importCommand += " ../GameDataFolder/" + dir_itr->path().filename() + ".dat >> Install.log";
624  
# Line 657 | Line 687 | void recompileAll(vector<string> install
687                                  if ( is_directory( dir_itr->status() ) )
688                                  {
689                                          importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + dir_itr->path().filename() + " ";
690 <                                        for (int i = 0; i < installedMods.size(); ++i) {
690 >                                        for (unsigned int i = 0; i < installedMods.size(); ++i) {
691                                                  if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename()  ))
692                                                          importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename();
693                                          }
# Line 684 | Line 714 | void recompileAll(vector<string> install
714                                  logfile.close();
715                          }}
716          }
717 +
718 +
719 +
720 +        
721 +
722 +
723 +
724 +
725 +                ofstream BSLlog("BSL.log");
726 +                
727 +                vector<string> BSLfolders;
728 +                vector<string> skippedfolders;
729 +
730 +                
731 +
732 +                for ( directory_iterator dir_itr( "../GameDataFolder/IGMD/" ), end_itr;
733 +                        dir_itr != end_itr;
734 +                        ++dir_itr ) {
735 +                                if( exists(dir_itr->path().string() + "/ignore.txt") ){
736 +                                        BSLfolders.push_back(dir_itr->path().filename());
737 +                                        skippedfolders.push_back(dir_itr->path().filename());
738 +                                }
739 +                }
740 +
741 +                for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
742 +                        for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
743 +                                if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
744 +                                        BSLlog << "Testing " << globalPackages[j].modStringName << "\n"
745 +                                                << "HasBSL: " << globalPackages[j].hasBSL << "\n"
746 +                                                << "HasAddon: " << globalPackages[j].hasAddon << "\n";
747 +                                        if(!(globalPackages[j].hasAddon || globalPackages[j].hasBSL)) break; //skip non-BSL
748 +                                        if( exists( "packages/" + globalPackages[j].modStringName + "/BSL" ) )
749 +                                        copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
750 +                                }
751 +
752 +                        }
753 +                }
754 +
755 +                ModPackage emptyPackage;
756 +                copyBSL("packages/VanillaBSL/IGMD", BSLfolders, emptyPackage);
757 +                BSLlog.close();
758 +        
759 +
760          logfile << "Writing config file";
761          writeInstalledMods(installedMods);
762          setProgressBar(1000);
763 <        setStatusArea("Done! You can now play Oni.");
763 >        
764 >        string finallyDone = "Done! You can now play Oni.";
765 >        
766 > a
767 >        
768 >        setStatusArea(finallyDone);
769  
770          ptime end_time(second_clock::local_time());
771          time_period total_time (start_time, end_time);
# Line 696 | Line 774 | void recompileAll(vector<string> install
774          ofstream logfile2("Install.log", ios::app | ios::ate);
775          string outstring = (string)"\n\nGlobalization ended " + to_simple_string(end_time) + "\nThe process took ";// + (string)total_time.length();
776  
777 <        logfile2 << "\nGlobalization ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();
777 >        logfile2 << "\nInstallation ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();
778  
779          //logfile2.write(outstring.c_str(), outstring.length());
780          logfile2.close();
# Line 705 | Line 783 | void recompileAll(vector<string> install
783  
784          Sleep(1000);
785          setProgressBar(0);
786 +
787 +        }
788 +        catch(exception & ex) {
789 +                remove("Install.log"); //why did we do this? :|
790 +                ofstream logfile("Install.log");
791 +
792 +
793 +                logfile << "Warning, exception " << ex.what() << "!";
794 +                setStatusArea("Warning, exception " + (string)ex.what() + "!");
795 +                logfile.close();        
796 +        }
797          busy = 0;
798   }
799  
800 + void copyBSL(string copypath, vector<string> BSLfolders, ModPackage pkg) {
801 +        try {
802 +                for ( directory_iterator dir_itr( copypath ), end_itr;
803 +                        dir_itr != end_itr;
804 +                        ++dir_itr ) {
805 +
806 +                                if ( is_directory( dir_itr->path() ) && dir_itr->path().string() != ".svn" ) {  
807 +                                        int skip_folder = 0;
808 +                                        for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
809 +                                                if(dir_itr->path().filename() == BSLfolders[k]) {
810 +                                                        skip_folder = 1;                        
811 +                                                        break;
812 +                                                }
813 +                                        }
814 +                                        if (!skip_folder && !exists("../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/ignore.txt")) {
815 +                                                remove_all( "../GameDataFolder/IGMD/" + dir_itr->path().filename() );
816 +                                                Sleep(100);
817 +                                                create_directory( "../GameDataFolder/IGMD/" + dir_itr->path().filename());
818 +
819 +                                                for ( directory_iterator bsl_itr( dir_itr->path() );
820 +                                                        bsl_itr != end_itr;
821 +                                                        bsl_itr++ ) {
822 +                                                                if ( bsl_itr->path().extension() == ".bsl" ) {
823 +                                                                        copy_file(bsl_itr->path(),  "../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/" + bsl_itr->path().filename());
824 +                                                                }
825 +                                                }
826 +                                                BSLfolders.push_back( dir_itr->path().filename() );
827 +                                        }
828 +                                }
829 +                }
830 +        }
831 +        catch ( const std::exception & ex )
832 +        {
833 +                setStatusArea("Warning, exception " + (string)ex.what() + "!");
834 +                while(1) Sleep(1000);
835 +        }
836 +
837 + }
838 +                        
839 +                        
840   void writeInstalledMods(vector<string> installedMods)
841   {
842  
# Line 789 | Line 918 | void clearOldDats(void) {
918  
919   }
920  
792 vector<string> globalInstalledMods;
793 vector<ModPackage> globalPackages;
921   #include "boost/thread.hpp"
922   #include <boost/thread/mutex.hpp>
923  
# Line 1064 | Line 1191 | void MainWindow::CreateControls()
1191      StatusArea = new wxStatusBar( itemFrame1, ID_STATUSBAR, 0 );
1192      StatusArea->SetName(_T("StatusArea"));
1193      StatusArea->SetFieldsCount(1);
1194 <    StatusArea->SetStatusText(_("AE Installer v1.0"), 0);
1194 >    StatusArea->SetStatusText(_("AE Installer v1.0.1"), 0);
1195      itemBoxSizer2->Add(StatusArea, 0, wxGROW|wxALL, 0);
1196  
1197      wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxHORIZONTAL);
# Line 1130 | Line 1257 | void MainWindow::CreateControls()
1257      // Connect events and objects
1258      Mods_CheckboxList->Connect(Mods_CheckboxList1, wxEVT_CREATE, wxWindowCreateEventHandler(MainWindow::ModList_OnCreate), NULL, this);
1259          ////@end MainWindow content construction
1260 + #ifdef WIN32
1261 +        Handle = (HWND)GetHWND();
1262 +        ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskbarList);
1263 + #endif
1264 +
1265  
1266 <        if ( exists( "../../GameDataFolder/level0_Final.sep" ) ) {
1266 >        /*if ( exists( "../../GameDataFolder/level0_Final.sep" ) ) {
1267                  strImportOption = "-import:sep";
1268                  splitInstances = NOT_SPLIT;
1269          }
1270          else {
1271                  strImportOption = "-import:nosep";
1272                  splitInstances = SPLIT;
1273 <        }
1273 >        }*/
1274 >        
1275 >
1276 > #ifndef WIN32
1277 >                strImportOption = "-import:sep";
1278 >                splitInstances = NOT_SPLIT;
1279 > #else
1280 >                strImportOption = "-import:nosep";
1281 >                splitInstances = SPLIT;
1282 > #endif
1283 >
1284 > #ifndef WIN32
1285 >        strImportOption = "-import:sep";
1286 >        splitInstances = NOT_SPLIT;
1287 > #else
1288 >        strImportOption = "-import:nosep";
1289 >        splitInstances = SPLIT;
1290 > #endif
1291          
1292          globalPackages = getPackages();
1293          globalInstalledMods = getInstallString();
1294 <        for (int i = 0; i < globalPackages.size(); i++) {
1294 >        for (unsigned int i = 0; i < globalPackages.size(); i++) {
1295                  Mods_CheckboxList->Append(globalPackages[i].name.c_str());
1296                  if( binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
1297          }
# Line 1181 | Line 1330 | void MainWindow::OnSelectAllCheckboxClic
1330   {
1331          switch(SelectAll->Get3StateValue()) {
1332          case wxCHK_UNCHECKED:
1333 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1333 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1334                  //SelectAll->Set3StateValue(wxCHK_CHECKED);
1335                  break;
1336          case wxCHK_CHECKED:
1337 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
1337 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
1338                  //SelectAll->Set3StateValue(wxCHK_UNCHECKED);
1339                  break;
1340          case wxCHK_UNDETERMINED:
1341 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1341 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1342                  //SelectAll->Set3StateValue(wxCHK_CHECKED);
1343                  break;
1344  
# Line 1353 | Line 1502 | struct recompile
1502                  TheInstallButton->Disable();
1503                  recompileAll(thePackages);
1504                  TheInstallButton->Enable();
1505 +                
1506          }
1507  
1508          vector<string> thePackages;
1509   };
1510  
1511 + void globalize2(void) {
1512 +                TheInstallButton->Disable();
1513 +                globalizeData();
1514 +                TheInstallButton->Enable();
1515 + }
1516 +
1517 +
1518 +
1519   void MainWindow::OnInstallButtonClick( wxCommandEvent& event )
1520   {
1521  
1522          vector<string> localPackages;
1523 <        localPackages.push_back("Globalize");
1524 <        for(int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
1523 >        localPackages.push_back("00000Globalize");
1524 >        for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
1525          if ( !localPackages.empty() )   {
1526 <        
1526 >                sort(localPackages.begin(), localPackages.end());
1527 >                localPackages[0] = "Globalize";
1528                  //MainWindow::MainWindow().Hide();      
1529                  //      boost::thread thrd2(recompileAll(localPackages) );
1530                  //MainWindow::MainWindow().Show();
# Line 1399 | Line 1558 | void MainWindow::OnInstallButtonClick( w
1558  
1559   void setProgressBar( int i ) {
1560          //TheProgressBar->SetValue(
1561 + #ifdef WIN32
1562 +        
1563 +
1564  
1565 + if (SUCCEEDED(pTaskbarList->QueryInterface(IID_ITaskbarList3, (void **)&pTaskbarList3)))
1566 + {
1567 +        
1568 +        pTaskbarList3->SetProgressValue(Handle,i, 1000);
1569 +        if ( i == 0 ) {
1570 +
1571 +        pTaskbarList3->SetProgressState(Handle,TBPF_NOPROGRESS);
1572 +        }
1573 + }
1574 +
1575 +
1576 + #endif
1577          TheProgressBar->SetValue(i);
1578  
1579   }
# Line 1489 | Line 1663 | void MainWindow::refreshMods (vector<str
1663  
1664          Mods_CheckboxList->Clear();
1665          //globalInstalledMods = getPackages();
1666 <        for (int i = 0; i < globalPackages.size(); i++) {
1666 >        for (unsigned int i = 0; i < globalPackages.size(); i++) {
1667                  Mods_CheckboxList->Append(globalPackages[i].name.c_str());
1668                  if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
1669                  //else Mods_CheckboxList->Check(i,0);
# Line 1552 | Line 1726 | void MainWindow::OnSaveClick( wxCommandE
1726                  ofstream file(openFileDialog->GetPath().c_str());
1727  
1728                  vector<string>list;
1729 <                for(int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
1729 >                for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
1730                  vector<string>::iterator begin_iter = list.begin();
1731                  vector<string>::iterator end_iter = list.end();
1732  

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)