349 |
|
|
350 |
|
if (!file.fail()) |
351 |
|
{ |
352 |
< |
package = fileToModPackage(file); |
352 |
> |
package = fileToModPackage(file, dir_itr->path().filename()); |
353 |
|
if (package.installerVersion.compare(INSTALLER_VERSION) < 1) // if mod requires newer version of the Installer, we won't add it to the list |
354 |
|
{ |
355 |
|
#ifdef WIN32 |
373 |
|
return packages; |
374 |
|
} |
375 |
|
|
376 |
< |
ModPackage fileToModPackage(fstream &file) |
376 |
> |
ModPackage fileToModPackage(fstream &file, string modName) |
377 |
|
{ |
378 |
|
/* |
379 |
|
This converts a file to a ModPackage struct. |
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 |
+ |
|
387 |
|
ModPackage package; |
388 |
|
string line; |
389 |
< |
static string AEInstallVersion = "AEInstallVersion"; // used for comparing to the current token... |
390 |
< |
static string NameOfMod = "NameOfMod"; |
391 |
< |
static string ARROW = "->"; |
392 |
< |
static string ModString = "ModString"; |
393 |
< |
static string Platform = "Platform"; |
394 |
< |
static string HasOnis = "HasOnis"; |
395 |
< |
static string HasDeltas = "HasDeltas"; |
396 |
< |
static string HasBSL = "HasBSL"; |
397 |
< |
static string HasDats = "HasDats"; |
398 |
< |
static string IsEngine = "IsEngine"; |
399 |
< |
static string Readme = "Readme"; |
400 |
< |
static string GlobalNeeded = "GlobalNeeded"; |
401 |
< |
static string Category = "Category"; |
402 |
< |
static string Creator = "Creator"; |
389 |
> |
const string AEInstallVersion = "AEInstallVersion"; // used for comparing to the current token... |
390 |
> |
const string NameOfMod = "NameOfMod"; |
391 |
> |
const string ARROW = "->"; |
392 |
> |
const string ModString = "ModString"; |
393 |
> |
const string ModVersion = "ModVersion"; |
394 |
> |
const string Platform = "Platform"; |
395 |
> |
const string HasOnis = "HasOnis"; |
396 |
> |
const string HasDeltas = "HasDeltas"; |
397 |
> |
const string HasBSL = "HasBSL"; |
398 |
> |
const string HasDats = "HasDats"; |
399 |
> |
const string IsEngine = "IsEngine"; |
400 |
> |
const string Readme = "Readme"; |
401 |
> |
const string GlobalNeeded = "GlobalNeeded"; |
402 |
> |
const string Category = "Category"; |
403 |
> |
const string Creator = "Creator"; |
404 |
> |
package.modStringName = modName; |
405 |
|
while (!file.eof()) |
406 |
|
{ |
407 |
|
getline(file,line); |
428 |
|
else if (!ModString.compare(*iter)) |
429 |
|
{ |
430 |
|
iter++; iter++; |
431 |
< |
package.modStringName = *iter; |
431 |
> |
//package.modStringName = *iter; |
432 |
|
iter++; |
433 |
|
package.modStringVersion = atof((*iter).c_str()); |
434 |
|
} |
435 |
+ |
else if (!ModString.compare(*iter)) |
436 |
+ |
{ |
437 |
+ |
iter++; iter++; |
438 |
+ |
package.modStringVersion = atof((*iter).c_str()); |
439 |
+ |
} |
440 |
|
else if (!Platform.compare(*iter)) |
441 |
|
{ |
442 |
|
iter++; iter++; |
450 |
|
else if (!HasBSL.compare(*iter)) |
451 |
|
{ |
452 |
|
iter++; iter++; |
453 |
< |
if (toupper((*iter)[0]) == 'Y' && toupper((*iter)[1]) == 'E' && toupper((*iter)[2]) == 'S') package.hasBSL = true; |
453 |
> |
if (boost::iequals(*iter, "Yes")) package.hasBSL = true; |
454 |
|
else if (boost::iequals(*iter, "Addon")) package.hasAddon = true; |
455 |
|
} |
456 |
|
else if (!HasDeltas.compare(*iter)) |
983 |
|
file.open( (install_iter->path().string() + "/Mod_Info.cfg").c_str()); |
984 |
|
if (!file.fail()) |
985 |
|
{ |
986 |
< |
ModPackage updatePackage = fileToModPackage(file); |
986 |
> |
ModPackage updatePackage = fileToModPackage(file, install_iter->path().filename()); |
987 |
|
} |
988 |
|
else |
989 |
|
{ |
995 |
|
file.open( ("packages" + install_iter->path().filename() + "/Mod_Info.cfg").c_str()); |
996 |
|
if (!file.fail()) |
997 |
|
{ |
998 |
< |
ModPackage installedPackage = fileToModPackage(file); |
998 |
> |
ModPackage installedPackage = fileToModPackage(file, install_iter->path().filename()); |
999 |
|
} |
1000 |
|
else |
1001 |
|
{ |
1277 |
|
void CrawlPackages(string pathToUpdate, string strPathToPackages) { |
1278 |
|
try{ |
1279 |
|
directory_iterator end; |
1280 |
< |
for ( directory_iterator install_iter( pathToUpdate ); |
1281 |
< |
install_iter != end; |
1282 |
< |
++install_iter ) |
1280 |
> |
for ( directory_iterator update_iter( pathToUpdate ); |
1281 |
> |
update_iter != end; |
1282 |
> |
++update_iter ) |
1283 |
|
{ |
1284 |
|
|
1285 |
|
ModPackage installedPackage, updatePackage; |
1286 |
< |
string updateStr = install_iter->path().string() + "/Mod_Info.cfg"; |
1287 |
< |
if ( !boost::iequals(install_iter->path().filename(),"Edition") |
1288 |
< |
&& !boost::iequals(install_iter->path().filename(),"Edition-patch") |
1289 |
< |
&& is_directory( install_iter->path() ) |
1290 |
< |
&& exists( install_iter->path().string() + "/Mod_Info.cfg" ) ) |
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( (install_iter->path().string() + "/Mod_Info.cfg").c_str()); |
1294 |
> |
file.open( (update_iter->path().string() + "/Mod_Info.cfg").c_str()); |
1295 |
|
if (!file.fail()) |
1296 |
|
{ |
1297 |
< |
updatePackage = fileToModPackage(file); |
1297 |
> |
updatePackage = fileToModPackage(file, update_iter->path().filename()); |
1298 |
|
} |
1299 |
|
else |
1300 |
|
{ |
1301 |
|
file.close(); |
1302 |
|
continue; |
1303 |
|
} |
1304 |
< |
if(!exists(strPathToPackages + "/" + install_iter->path().filename() + "/Mod_Info.cfg")); |
1304 |
> |
if(!exists(strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg")); |
1305 |
|
file.close(); |
1306 |
|
file.clear(); |
1307 |
< |
file.open((strPathToPackages + "/" + install_iter->path().filename() + "/Mod_Info.cfg").c_str()); |
1307 |
> |
file.open((strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg").c_str()); |
1308 |
|
if (!file.fail()) |
1309 |
|
{ |
1310 |
< |
installedPackage = fileToModPackage(file); |
1310 |
> |
installedPackage = fileToModPackage(file, update_iter->path().filename()); |
1311 |
|
file.close(); |
1312 |
|
if(updatePackage.modStringVersion > installedPackage.modStringVersion) { |
1313 |
|
remove_all((path)(strPathToPackages + "/" + installedPackage.modStringName)); |