--- AE/Installer/trunk/source/installer.cpp 2010/04/05 02:11:45 506 +++ AE/Installer/trunk/source/installer.cpp 2010/04/24 17:41:46 507 @@ -1004,6 +1004,27 @@ int GetUpdateStatus(Install_info_cfg *cu } } } + else + { + file.close(); + continue; + } + file.close(); + + file.open( ("packages" + install_iter->path().filename() + "/Mod_Info.cfg").c_str()); + if (!file.fail()) + { + ModPackage installedPackage = fileToModPackage(file, install_iter->path().filename()); + } + else + { + file.close(); + return UPDATE_THIRD_PARTY; + } + file.close(); + if(((string)INSTALLER_VERSION).compare(updatePackage.installerVersion) < 1 && updatePackage.modStringVersion > installedPackage.modStringVersion) { + return UPDATE_THIRD_PARTY; + } } } catch (exception & ex) { @@ -1265,6 +1286,79 @@ bool ProcessInstallerUpdate(Install_info return true; // returning 'true' tells the Installer to quit itself ASAP so it can be replaced by the process that is now running } + +void CrawlPackages(string pathToUpdate, string strPathToPackages) { + try{ + directory_iterator end; + for ( directory_iterator update_iter( pathToUpdate ); + update_iter != end; + ++update_iter ) + { + + ModPackage installedPackage, updatePackage; + string updateStr = update_iter->path().string() + "/Mod_Info.cfg"; + if ( !boost::iequals(update_iter->path().filename(),"Edition") + && !boost::iequals(update_iter->path().filename(),"Edition-patch") + && is_directory( update_iter->path() ) + && exists( update_iter->path().string() + "/Mod_Info.cfg" ) ) + { + bool update = 0; + fstream file; + file.open( (update_iter->path().string() + "/Mod_Info.cfg").c_str()); + if (!file.fail()) + { + updatePackage = fileToModPackage(file, update_iter->path().filename()); + } + else + { + file.close(); + continue; + } + file.close(); + file.clear(); + if(exists(strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg")) + { + file.open((strPathToPackages + "/" + update_iter->path().filename() + "/Mod_Info.cfg").c_str()); + if (!file.fail()) + { + installedPackage = fileToModPackage(file, update_iter->path().filename()); + file.close(); + if(updatePackage.modStringVersion > installedPackage.modStringVersion) { + update = 1; + } + } + else + { + file.close(); + update = 1; + } + file.close(); + } + else update = 1; + if(update) { + if(exists((path)(strPathToPackages + "/" + updatePackage.modStringName))) + remove_all((path)(strPathToPackages + "/" + updatePackage.modStringName)); + rename((path)(pathToUpdate + "/" + updatePackage.modStringName), (path)(strPathToPackages + "/" + updatePackage.modStringName)); + + } + } + } + } + catch (exception & ex) { + // ex.what(); + setStatusArea("Warning, handled exception: " + (string)ex.what()); + } +} + + +bool ProcessThirdPartyUpdates() { +CrawlPackages( "../updates", "./packages"); +return true; + // globalPackages = getPackages(); +// refreshMods(globalInstalledMods); +} + + bool ProcessAEUpdate(Install_info_cfg *currentAE, Install_info_cfg *updateAE, bool *installerJustUpdated) { fstream file;