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 499 by iritscen, Wed Mar 3 02:09:02 2010 UTC vs.
Revision 500 by iritscen, Sun Mar 14 23:31:14 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 >                                        packages.push_back(package);
346                          }      
347                          file.close();
348                          file.clear();
# Line 367 | Line 369 | ModPackage fileToModPackage(fstream &fil
369           */
370          ModPackage package;
371          string line;
372 <        static string NameOfMod = "NameOfMod";  //used for comparing to the current token...
373 <        //I could have done it in reverse (*iter).compare("ModString") or  
374 <        static string ARROW = "->";                             //did something like "ModString".compare(*iter), and it would have been
375 <        static string ModString = "ModString";  //functionably the same.
372 >        static string AEInstallVersion = "AEInstallVersion"; // used for comparing to the current token...
373 >        static string NameOfMod = "NameOfMod";
374 >        static string ARROW = "->";
375 >        static string ModString = "ModString";
376          static string HasOnis = "HasOnis";
377          static string HasDeltas = "HasDeltas";
378          static string HasBSL = "HasBSL";
# Line 380 | Line 382 | ModPackage fileToModPackage(fstream &fil
382          static string GlobalNeeded = "GlobalNeeded";
383          static string Category = "Category";
384          static string Creator = "Creator";
385 <        while (! file.eof() )
385 >        while (!file.eof())
386          {
387 <                getline (file,line);
387 >                getline(file,line);
388                  vector<string> tokens;
389                  vector<string>::iterator iter;
390 <                tokenize(line, tokens);                                 //string to vector of "words"
391 <                if (tokens.capacity() >= 3) {                   //make sure they are using enough stuff
392 <                        iter = tokens.begin();                          //what word we are on, starts at first word
393 <                        /* TODO: Get this "required Installer version" code working
394 <                         if (!AEInstallVersion.compare(*iter))
395 <                         If mod is too old, skip this mod.
396 <                         */
397 <                        /*else*/if (!NameOfMod.compare(*iter))  {       //if it contains the name
398 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches the end of the line or a "//" comment
399 <                                        if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) {                 // ignores "->" and "NameOfMod"
390 >                tokenize(line, tokens);
391 >                if (tokens.capacity() >= 3)
392 >                {
393 >                        iter = tokens.begin();
394 >
395 >                        if (!AEInstallVersion.compare(*iter))
396 >                        {
397 >                                iter++; iter++;
398 >                                package.installerVersion = *iter;
399 >                        }
400 >                        else if (!NameOfMod.compare(*iter))
401 >                        {
402 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) // iterates through the words, ends if it reaches the end of the line or a "//" comment
403 >                                {
404 >                                        if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) // ignores "->" and "NameOfMod"
405                                                  package.name += *iter + " ";
399                                        }
406                                  }
401                                
407                          }
408 <                        else if (!ModString.compare(*iter)) {
408 >                        else if (!ModString.compare(*iter))
409 >                        {
410                                  iter++; iter++;
411                                  package.modStringName = *iter;
412                                  iter++;
413                                  package.modStringVersion = atoi((*iter).c_str());
414                          }
415 <                        else if (!HasOnis.compare(*iter)) {
415 >                        else if (!HasOnis.compare(*iter))
416 >                        {
417                                  iter++; iter++;  
418 <                                if ( boost::iequals(*iter, "Yes")) package.hasOnis = 1;
418 >                                if (boost::iequals(*iter, "Yes")) package.hasOnis = 1;
419                          }      
420 <                        else if (!HasBSL.compare(*iter)) {
421 <                                if(toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasBSL = true;
422 <                                else if ( boost::iequals(*iter, "Addon")) package.hasAddon = true;
420 >                        else if (!HasBSL.compare(*iter))
421 >                        {
422 >                                iter++; iter++;
423 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasBSL = true;
424 >                                else if (boost::iequals(*iter, "Addon")) package.hasAddon = true;
425                          }
426 <                        else if (!HasDeltas.compare(*iter)) {
426 >                        else if (!HasDeltas.compare(*iter))
427 >                        {
428                                  iter++; iter++;  
429 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDeltas = 1;
429 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasDeltas = 1;
430                          }
431 <                        else if (!HasDats.compare(*iter)) {
431 >                        else if (!HasDats.compare(*iter))
432 >                        {
433                                  iter++; iter++;  
434 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDats = 1;
434 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasDats = 1;
435                          }
436 <                        else if (!IsEngine.compare(*iter)) {
436 >                        else if (!IsEngine.compare(*iter))
437 >                        {
438                                  iter++; iter++;  
439 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.isEngine = 1;
439 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.isEngine = 1;
440                          }
441 <                        else if (!GlobalNeeded.compare(*iter)) {
441 >                        else if (!GlobalNeeded.compare(*iter))
442 >                        {
443                                  iter++; iter++;  
444 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.globalNeeded = 1;
445 <                                else if (toupper((*iter)[0]) + toupper((*iter)[1]) == 'N' + 'O') package.globalNeeded = 1; // only place where checking for "No" is important atm.
444 >                                if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.globalNeeded = 1;
445 >                                else if (toupper((*iter)[0]) == 'N' && toupper((*iter)[1]) == 'O') package.globalNeeded = 1; // only place where checking for "No" is important atm
446                          }
447 <                        else if (!Category.compare(*iter))  {  
448 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
449 <                                        if (ARROW.compare(*iter) && Category.compare(*iter)) {                  // ignores "->" and "Category"
447 >                        else if (!Category.compare(*iter))
448 >                        {      
449 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
450 >                                {
451 >                                        if (ARROW.compare(*iter) && Category.compare(*iter)) // ignores "->" and "Category"
452                                                  package.category += *iter + " ";
438                                        }
453                                  }
454                          }
455 <                        else if (!Creator.compare(*iter))  {    //if it contains the name
456 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
457 <                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   // ignores "->" and "Creator"
455 >                        else if (!Creator.compare(*iter))
456 >                        {
457 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
458 >                                {
459 >                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) // ignores "->" and "Creator"
460                                                  package.creator += *iter + " ";
445                                        }
461                                  }
462                          }
463 <                        else if (!Readme.compare(*iter))  {     //if it contains the name
464 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     // iterates through the words, ends if it reaches end of line or a "//" comment
465 <                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    // ignores "->" and "Readme"
466 <                                                if(!(*iter).compare("\\n")) package.readme += '\n';
463 >                        else if (!Readme.compare(*iter))
464 >                        {
465 >                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++)
466 >                                {
467 >                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) // ignores "->" and "Readme"
468 >                                        {
469 >                                                if (!(*iter).compare("\\n")) package.readme += '\n';
470                                                  else package.readme += *iter + " ";
471                                          }
472                                  }
473                          }
474                  }
457                
475          }
476  
477          return package;

Diff Legend

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