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 |
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"; |
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(); |
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"; |
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; |