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

Comparing AE/Installer/trunk/source/installer.cpp (file contents):
Revision 496 by gumby, Mon Feb 22 00:00:55 2010 UTC vs.
Revision 502 by iritscen, Mon Mar 22 16:51:50 2010 UTC

# Line 302 | Line 302 | int globalizeData(void)
302                  /* 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).
303                   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
304                   run Oni before :-p */
305 <                string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for edition/
305 >                string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for Edition/ (Oni wants the folder that *contains* the GDF)
306                  char prefsCommand[300] = "[ -f ~/Library/Preferences/com.godgames.oni.plist ] && defaults write com.godgames.oni RetailInstallationPath -string '";
307 <                strcat(prefsCommand, fullAEpath.c_str()); // get path of Edition/ folder (Oni wants the folder that *contains* the GDF)
307 >                strcat(prefsCommand, fullAEpath.c_str());
308                  strcat(prefsCommand, "'"); // path string is enclosed in single quotes to avoid the need to escape UNIX-unfriendly characters
309                  system(prefsCommand);
310   #endif
# Line 326 | Line 326 | int globalizeData(void)
326   vector<ModPackage> getPackages(string packageDir)
327   {
328          vector<ModPackage> packages;
329 +        ModPackage package;
330          packages.reserve(256);
331          fstream file;
332          string filename = "\0";
# Line 337 | Line 338 | vector<ModPackage> getPackages(string pa
338                  {
339                          file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str());
340                          
341 <                        if(!file.fail())
341 >                        if (!file.fail())
342                          {
343 <                                //would prefer to push a pointer to a package, but this will do for now
344 <                                packages.push_back(fileToModPackage(file));
343 >                                package = fileToModPackage(file);
344 >                                if (package.installerVersion.compare(INSTALLER_VERSION) < 1)  // if mod requires newer version of the Installer, we won't add it to the list
345 >                                {
346 > #ifdef WIN32
347 >                                        if (!package.platform.compare("Windows") || !package.platform.compare("Both")) // don't show package if it's not for the right OS
348 > #else
349 >                                        if (!package.platform.compare("Macintosh") || !package.platform.compare("Both"))
350 > #endif
351 >                                                packages.push_back(package);
352 >                                }
353                          }      
354                          file.close();
355                          file.clear();
# Line 367 | Line 376 | ModPackage fileToModPackage(fstream &fil
376           */
377          ModPackage package;
378          string line;
379 <        static string NameOfMod = "NameOfMod";  //used for comparing to the current token...
380 <        //I could have done it in reverse (*iter).compare("ModString") or  
381 <        static string ARROW = "->";                             //did something like "ModString".compare(*iter), and it would have been
382 <        static string ModString = "ModString";  //functionably the same.
379 >        static string AEInstallVersion = "AEInstallVersion"; // used for comparing to the current token...
380 >        static string NameOfMod = "NameOfMod";
381 >        static string ARROW = "->";
382 >        static string ModString = "ModString";
383 >        static string Platform = "Platform";
384          static string HasOnis = "HasOnis";
385          static string HasDeltas = "HasDeltas";
386          static string HasBSL = "HasBSL";
# Line 380 | Line 390 | ModPackage fileToModPackage(fstream &fil
390          static string GlobalNeeded = "GlobalNeeded";
391          static string Category = "Category";
392          static string Creator = "Creator";
393 <        while (! file.eof() )
393 >        while (!file.eof())
394          {
395 <                getline (file,line);
395 >                getline(file,line);
396                  vector<string> tokens;
397                  vector<string>::iterator iter;
398 <                tokenize(line, tokens);                                 //string to vector of "words"
399 <                if (tokens.capacity() >= 3) {                   //make sure they are using enough stuff
400 <                        iter = tokens.begin();                          //what word we are on, starts at first word
401 <                        /* TODO: Get this "required Installer version" code working
402 <                         if (!AEInstallVersion.compare(*iter))
403 <                         If mod is too old, skip this mod.
404 <                         */
405 <                        /*else*/if (!NameOfMod.compare(*iter))  {       //if it contains the name
406 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches the end of the line or a "//" comment
407 <                                        if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) {                 // ignores "->" and "NameOfMod"
398 >                tokenize(line, tokens);
399 >                if (tokens.capacity() >= 3)
400 >                {
401 >                        iter = tokens.begin();
402 >
403 >                        if (!AEInstallVersion.compare(*iter))
404 >                        {
405 >                                iter++; iter++;
406 >                                package.installerVersion = *iter;
407 >                        }
408 >                        else if (!NameOfMod.compare(*iter))
409 >                        {
410 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) // iterates through the words, ends if it reaches the end of the line or a "//" comment
411 >                                {
412 >                                        if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) // ignores "->" and "NameOfMod"
413                                                  package.name += *iter + " ";
399                                        }
414                                  }
401                                
415                          }
416 <                        else if (!ModString.compare(*iter)) {
416 >                        else if (!ModString.compare(*iter))
417 >                        {
418                                  iter++; iter++;
419                                  package.modStringName = *iter;
420                                  iter++;
421                                  package.modStringVersion = atoi((*iter).c_str());
422                          }
423 <                        else if (!HasOnis.compare(*iter)) {
423 >                        else if (!Platform.compare(*iter))
424 >                        {
425 >                                iter++; iter++;
426 >                                package.platform = *iter;
427 >                        }
428 >                        else if (!HasOnis.compare(*iter))
429 >                        {
430                                  iter++; iter++;  
431 <                                if ( boost::iequals(*iter, "Yes")) package.hasOnis = 1;
431 >                                if (boost::iequals(*iter, "Yes")) package.hasOnis = 1;
432                          }      
433 <                        else if (!HasBSL.compare(*iter)) {
434 <                                if(toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasBSL = true;
435 <                                else if ( boost::iequals(*iter, "Addon")) package.hasAddon = true;
433 >                        else if (!HasBSL.compare(*iter))
434 >                        {
435 >                                iter++; iter++;
436 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasBSL = true;
437 >                                else if (boost::iequals(*iter, "Addon")) package.hasAddon = true;
438                          }
439 <                        else if (!HasDeltas.compare(*iter)) {
439 >                        else if (!HasDeltas.compare(*iter))
440 >                        {
441                                  iter++; iter++;  
442 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDeltas = 1;
442 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasDeltas = 1;
443                          }
444 <                        else if (!HasDats.compare(*iter)) {
444 >                        else if (!HasDats.compare(*iter))
445 >                        {
446                                  iter++; iter++;  
447 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDats = 1;
447 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasDats = 1;
448                          }
449 <                        else if (!IsEngine.compare(*iter)) {
449 >                        else if (!IsEngine.compare(*iter))
450 >                        {
451                                  iter++; iter++;  
452 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.isEngine = 1;
452 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.isEngine = 1;
453                          }
454 <                        else if (!GlobalNeeded.compare(*iter)) {
454 >                        else if (!GlobalNeeded.compare(*iter))
455 >                        {
456                                  iter++; iter++;  
457 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.globalNeeded = 1;
458 <                                else if (toupper((*iter)[0]) + toupper((*iter)[1]) == 'N' + 'O') package.globalNeeded = 1; // only place where checking for "No" is important atm.
457 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.globalNeeded = 1;
458 >                                else if (toupper((*iter)[0]) == 'N' && toupper((*iter)[1]) == 'O') package.globalNeeded = 1; // only place where checking for "No" is important atm
459                          }
460 <                        else if (!Category.compare(*iter))  {  
461 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
462 <                                        if (ARROW.compare(*iter) && Category.compare(*iter)) {                  // ignores "->" and "Category"
460 >                        else if (!Category.compare(*iter))
461 >                        {      
462 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
463 >                                {
464 >                                        if (ARROW.compare(*iter) && Category.compare(*iter)) // ignores "->" and "Category"
465                                                  package.category += *iter + " ";
438                                        }
466                                  }
467                          }
468 <                        else if (!Creator.compare(*iter))  {    //if it contains the name
469 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
470 <                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   // ignores "->" and "Creator"
468 >                        else if (!Creator.compare(*iter))
469 >                        {
470 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
471 >                                {
472 >                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) // ignores "->" and "Creator"
473                                                  package.creator += *iter + " ";
445                                        }
474                                  }
475                          }
476 <                        else if (!Readme.compare(*iter))  {     //if it contains the name
477 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
478 <                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    // ignores "->" and "Readme"
479 <                                                if(!(*iter).compare("\\n")) package.readme += '\n';
476 >                        else if (!Readme.compare(*iter))
477 >                        {
478 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
479 >                                {
480 >                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) // ignores "->" and "Readme"
481 >                                        {
482 >                                                if (!(*iter).compare("\\n")) package.readme += '\n';
483                                                  else package.readme += *iter + " ";
484                                          }
485                                  }
486                          }
487                  }
457                
488          }
489  
490          return package;
# Line 939 | Line 969 | bool ReadInstallInfoCfg(fstream *fileHan
969          
970          while (getline(*fileHandler, line))
971          {
972 +                StripNewlines(&line);
973                  tokenize(line, tokens);
974                  iter = tokens.begin();
975                  
# Line 1470 | Line 1501 | void tokenize(const string& str, vector<
1501          }
1502   }
1503  
1504 + /* StripNewlines() gets rids of any linebreaks that come from text returned by getline(); \
1505 + |  getline() should be stripping those out, but Windows CR/LF files seem to be sneaking   |
1506 + \  some extra return characters into strings in the ReadInstallInfoCfg() function.               */
1507 + void StripNewlines(string *theLine)
1508 + {
1509 +        int deleteFromHere = 0;
1510 +        deleteFromHere = theLine->find("\r");
1511 +        if (deleteFromHere > 0)
1512 +                theLine->erase(deleteFromHere, theLine->size());
1513 + }
1514 +
1515   void clearOldDats(void) {
1516          directory_iterator end_iter_gdf;
1517          for ( directory_iterator dir_itr_gdf( "../GameDataFolder" );
# Line 1584 | Line 1626 | ModPackage::ModPackage()
1626          name = "";
1627          modStringName = "";
1628          modStringVersion = 0;
1629 +        platform = "Both";
1630          hasOnis = false;
1631          hasDeltas = false;
1632          hasBSL = false;

Diff Legend

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