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 506 by iritscen, Mon Apr 5 02:11:45 2010 UTC vs.
Revision 548 by gumby, Wed May 26 22:55:00 2010 UTC

# Line 27 | Line 27 | using namespace boost::posix_time;
27   // externs declared in installer.h
28   string strInstallCfg = "../GameDataFolder/Add.cfg";
29   string strEUFN = "Edition"; // GetUpdateStatus() may set this to "Edition-patch" later, but this is the assumed name of the new Edition folder in Updates/
30 + extern MainWindow* TheWindow;
31  
32   int globalizeData(void)
33   {
# Line 658 | Line 659 | void recompileAll(vector<string> install
659          for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
660                  for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
661                          if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
662 <                                if(!(globalPackages[j].hasAddon || globalPackages[j].hasBSL)) break; //skip non-BSL
662 >                                if(globalPackages[j].hasBSL)) break; //skip non-BSL
663                                  if( exists( "packages/" + globalPackages[j].modStringName + "/BSL/" ) ) {
664                                          copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
665                                          BSLlog << "Copied " <<  globalPackages[j].modStringName << "!\n";
# Line 667 | Line 668 | void recompileAll(vector<string> install
668                  }
669          }
670          
671 +
672 +
673          ModPackage emptyPackage;
674          emptyPackage.modStringName = "VanillaBSL";
675          emptyPackage.hasBSL = 1;
676          copyBSL("packages/VanillaBSL/IGMD", BSLfolders, emptyPackage);
677          BSLlog.close();
678 <        
678 >
679 >        for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
680 >                for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
681 >                        if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
682 >                                if(!globalPackages[j].hasAddon) break; //skip non-BSL
683 >                                if( exists( "packages/" + globalPackages[j].modStringName + "/BSL/" ) ) {
684 >                                        copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
685 >                                        BSLlog << "Copied " <<  globalPackages[j].modStringName << "!\n";
686 >                                }
687 >                        }
688 >                }
689 >        }
690 >
691          logfile << "Writing config file";
692          writeInstalledMods(installedMods);
693          setProgressBar(1000);
# Line 713 | Line 728 | void copyBSL(string copypath, vector<str
728                          if ( is_directory( dir_itr->path() ) && dir_itr->path().string() != ".svn" ) {  
729                                  BSLlog << "Testing " << dir_itr->path().string() << " HasBSL: " << pkg.hasBSL << " HasAddon: " << pkg.hasAddon << "\n";
730                                  int skip_folder = 0;
731 <                                
732 <                                for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
733 <                                        BSLlog << "testing " << dir_itr->path().filename() << " vs " << BSLfolders[k] << "\n";
734 <                                        if(dir_itr->path().filename() == BSLfolders[k]) {
735 <                                                skip_folder = 1;
736 <                                                BSLlog << "skipping " << BSLfolders[k] << " in " << pkg.modStringName << "\n";
737 <                                                break;
731 >                                if(!pkg.HasAddon) {
732 >                                        for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
733 >                                                BSLlog << "testing " << dir_itr->path().filename() << " vs " << BSLfolders[k] << "\n";
734 >                                                if(dir_itr->path().filename() == BSLfolders[k]) {
735 >                                                        skip_folder = 1;
736 >                                                        BSLlog << "skipping " << BSLfolders[k] << " in " << pkg.modStringName << "\n";
737 >                                                        break;
738 >                                                }
739                                          }
740                                  }
741                                  if (!skip_folder && !exists("../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/ignore.txt")) {
# Line 734 | Line 750 | void copyBSL(string copypath, vector<str
750                                                          copy_file(bsl_itr->path(),  "../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/" + bsl_itr->path().filename());
751                                                  }
752                                          }
753 <                                        BSLfolders.push_back( dir_itr->path().filename() ); //add back check for addon
754 <                                        BSLlog << "Pushing " << dir_itr->path().filename() << "\n" ;
753 >                                        if( !pkg.hasAddon ) {
754 >                                                BSLfolders.push_back( dir_itr->path().filename() ); //add back check for addon
755 >                                                BSLlog << "Pushing " << dir_itr->path().filename() << "\n" ;
756 >                                        }
757                                  }
758                          }
759                  }
# Line 841 | Line 859 | int GetUpdateStatus(Install_info_cfg *cu
859                          return UPDATE_LOG_READ_ERR;
860          }
861  
862 <        // Is there an update folder, and is it a monthly release or a patch?
862 >        // Is there an update in the updates/ folder, and is it a monthly release or a patch?
863          bool firstParty = 0;
864 +        // First create the folder if it's missing, so users are never left wondering where updates are supposed to be put
865 +        if (!exists("../updates"))
866 +                create_directory("../updates");
867          if (exists("../updates/Edition"))
868          {
869                  firstParty = 1;
# Line 978 | Line 999 | int GetUpdateStatus(Install_info_cfg *cu
999                                          fstream file;
1000                                          file.open((install_iter->path().string() + "/Mod_Info.cfg").c_str());
1001                                          if (!file.fail())
1002 <                                                ModPackage updatePackage = fileToModPackage(file, install_iter->path().filename());
1002 >                                                updatePackage = fileToModPackage(file, install_iter->path().filename());
1003                                          else
1004                                          {
1005                                                  file.close();
1006                                                  continue;
1007                                          }
1008 <                                        if (exists("packages" + install_iter->path().filename() + "/Mod_Info.cfg"))
1008 >                                        if (exists("packages/" + install_iter->path().filename() + "/Mod_Info.cfg"))
1009                                          {
1010                                                  file.close();
1011 <                                                file.open(("packages" + install_iter->path().filename() + "/Mod_Info.cfg").c_str());
1011 >                                                file.clear();
1012 >                                                file.open(("packages/" + install_iter->path().filename() + "/Mod_Info.cfg").c_str());
1013                                                  if (!file.fail())
1014 <                                                        ModPackage installedPackage = fileToModPackage(file, install_iter->path().filename());
1014 >                                                        installedPackage = fileToModPackage(file, install_iter->path().filename());
1015                                                  file.close();
1016                                                  if (updatePackage.modStringVersion > installedPackage.modStringVersion)
1017                                                  {
# Line 1023 | Line 1045 | bool ReadInstallInfoCfg(fstream *fileHan
1045          string strDaodanVersion = "Daodan_Version";
1046          string strOniSplitVersion = "OniSplit_Version";
1047          string strGUIWinVersion = "GUI_Win_Version";
1048 <        string strGUIMacVersion = "GUI_Mac_Version";
1048 >        string strGUIMacVersion = "GUI_Mac_Version";
1049          string strReglobalize = "Reglobalize";
1050          string strDeleteList = "Delete_List";
1051          string strArrow = "->";
# Line 1267 | Line 1289 | bool ProcessInstallerUpdate(Install_info
1289  
1290   bool ProcessAEUpdate(Install_info_cfg *currentAE, Install_info_cfg *updateAE, bool *installerJustUpdated)
1291   {
1292 +        try {
1293          fstream file;
1294          string line;
1295          vector<string> tokens, updateStarted;
# Line 1286 | Line 1309 | bool ProcessAEUpdate(Install_info_cfg *c
1309          string strOniApp = "Oni.exe";
1310   #else
1311          string strOniApp = "Oni.app";
1289 #endif
1312          bool needNewTrashDir = false;
1313 + #endif
1314 +        
1315          bool readingVerAndDate = false;
1316          
1317   #ifdef WIN32
1318 <        string strTrashDir = "Trash\\"; // string unused in Windows because files are simply deleted
1318 >        //string strTrashDir = "Trash\\"; // string unused in Windows because files are simply deleted
1319   #else
1320          FILE *fUserName = NULL;
1321          char chrUserName[32];
# Line 1326 | Line 1350 | bool ProcessAEUpdate(Install_info_cfg *c
1350                          if (readingVerAndDate && tokens.capacity() >= 3)
1351                                  tokenize(tokens[2], updateStarted, "-");
1352                  }
1353 + #ifndef WIN32
1354                  if (updateStarted.capacity() < 3)
1355                          needNewTrashDir = true;
1356                  else
# Line 1335 | Line 1360 | bool ProcessAEUpdate(Install_info_cfg *c
1360                          if (!exists(strTrashDir))
1361                                  needNewTrashDir = true;
1362                  }
1363 + #endif
1364          }
1365   #ifndef WIN32
1366          if (!*installerJustUpdated || needNewTrashDir) // prepare a new directory for deleted files to go to
# Line 1352 | Line 1378 | bool ProcessAEUpdate(Install_info_cfg *c
1378          if (exists(strPathToEUFN + strOniApp))
1379          {
1380                  if (exists(strOniApp))
1381 + #ifdef WIN32
1382 +                        remove((path)strOniApp);
1383 + #else
1384                          rename((path)strOniApp, (path)(strTrashDir + strOniApp));
1385 + #endif
1386                  rename((path)(strPathToEUFN + strOniApp), (path)strOniApp);
1387          }
1388          if (updateAE->OniSplitVersion.compare(currentAE->OniSplitVersion) >= 1)
# Line 1360 | Line 1390 | bool ProcessAEUpdate(Install_info_cfg *c
1390                  if (exists(strPathToEUFNInstall + strOniSplit))
1391                  {
1392                          if (exists(strOniSplit))
1393 + #ifdef WIN32
1394 +                                remove((path)strOniSplit);
1395 + #else
1396                                  rename((path)strOniSplit, (path)(strTrashDir + strOniSplit));
1397 + #endif
1398                          rename((path)(strPathToEUFNInstall + strOniSplit), (path)strOniSplit);
1399                  }
1400          }
# Line 1370 | Line 1404 | bool ProcessAEUpdate(Install_info_cfg *c
1404                  if (exists(strPathToEUFN + strDaodan))
1405                  {
1406                          if (exists(("../" + strDaodan)))
1407 <                                rename((path)("../" + strDaodan), (path)(strTrashDir + strDaodan));
1407 >                                remove((path)("../" + strDaodan));
1408                          rename((path)(strPathToEUFN + strDaodan), (path)("../" + strDaodan));
1409                  }
1410          }
# Line 1379 | Line 1413 | bool ProcessAEUpdate(Install_info_cfg *c
1413                  if (exists(strPathToEUFNInstall + strWinGUI))
1414                  {
1415                          if (exists((path)strWinGUI))
1416 <                                rename((path)strWinGUI, (path)(strTrashDir + strWinGUI));
1416 >                                remove((path)strWinGUI);
1417                          if (exists(strWinGUILang))
1418 <                                rename((path)strWinGUILang, (path)(strTrashDir + strWinGUILang));
1418 >                                remove((path)strWinGUILang);
1419                          rename((path)(strPathToEUFNInstall + strWinGUI), (path)strWinGUI);
1420                          rename((path)(strPathToEUFNInstall + strWinGUILang), (path)strWinGUILang);
1421                  }
# Line 1414 | Line 1448 | bool ProcessAEUpdate(Install_info_cfg *c
1448                          while (curPos != string::npos && curPos < thePath.size())
1449                          {
1450                                  aParentPath = aParentPath + thePath.substr(lastPos, curPos - lastPos);
1451 + #ifndef WIN32
1452                                  if (!exists(strTrashDir + aParentPath))
1453                                          create_directory(strTrashDir + aParentPath);
1454 + #endif
1455                                  lastPos = curPos + 1;
1456                                  curPos = thePath.find("/", lastPos);
1457                                  aParentPath = aParentPath + "/";
# Line 1460 | Line 1496 | bool ProcessAEUpdate(Install_info_cfg *c
1496          for (vector<string>::iterator iter = filesToMove.begin(); iter != filesToMove.end(); iter++)
1497          {
1498                  if (exists(strPathToPackages + strGlobalize + *iter))
1499 + #ifdef WIN32
1500 +                        remove((path)(strPathToPackages + strGlobalize + *iter));
1501 + #else
1502                          rename((path)(strPathToPackages + strGlobalize + *iter), (path)(strTrashDir + *iter));
1503 + #endif
1504                  rename((path)(strPathToEUFNPackages + strGlobalize + *iter), (path)(strPathToPackages + strGlobalize + *iter));
1505          }
1506          
1507          // Clean up after ourselves, trashing any packages or programs in the update package that are not newer than the current AE
1508 + #ifdef WIN32
1509 +        remove((path)strPathToEUFN);
1510 + #else
1511          create_directory(strTrashDir + "Unneeded update files");
1512          rename((path)strPathToEUFN, (path)(strTrashDir + "Unneeded update files/" + strEUFN));
1513 <        
1513 > #endif
1514          // Write to log that we are finished with update
1515          ptime end_time(second_clock::local_time());
1516          string progressMsg2 = "Edition was updated to:\n" +
# Line 1485 | Line 1528 | bool ProcessAEUpdate(Install_info_cfg *c
1528                  CheckForGlobalization(true); // the 'true' value forces re-globalization
1529          
1530          globalPackages = getPackages(); // refresh the list in memory
1531 <        // TODO: Refresh the packages list in the window
1532 <
1531 >        wxCommandEvent e;
1532 >        TheWindow->OnRefreshButtonClick( e );
1533          return true;
1534 +        }
1535 +        catch (exception & ex)
1536 +        {
1537 +                setStatusArea("Warning, handled exception: " + (string)ex.what());
1538 +                return false;
1539 +        }
1540 +        
1541   }
1542  
1543   void ProcessPackageUpdates(string pathToUpdate, string strPathToPackages)
# Line 1540 | Line 1590 | void ProcessPackageUpdates(string pathTo
1590                                          if (!file.fail())
1591                                          {
1592                                                  installedPackage = fileToModPackage(file, updtFolder);
1593 <                                                file.close();
1594 <                                                if (updatePackage.modStringVersion > installedPackage.modStringVersion)
1595 <                                                {
1596 <                                                        if (updatePackage.installerVersion <= INSTALLER_VERSION)
1597 <                                                        {
1593 >                                        }
1594 >                                        file.close();
1595 >                                }
1596 >                                file.close();
1597 >                                if (updatePackage.modStringVersion > installedPackage.modStringVersion)
1598 >                                {
1599 >                                        if (updatePackage.installerVersion <= INSTALLER_VERSION)
1600 >                                        {
1601 >                                                if(exists(strPathToPackages +  "/" + updatePackage.modStringName)) {
1602   #ifdef WIN32
1603 <                                                                remove_all((path)(strPathToPackages +  "/" + installedPackage.modStringName));
1603 >                                                        remove_all((path)(strPathToPackages +  "/" + updatePackage.modStringName));
1604   #else
1605 <                                                                if (needNewTrashDir)
1606 <                                                                {
1607 <                                                                        strTrashDir = strTrashDir + "Old_packages_" + boost::lexical_cast<string>(tmStartTime.tm_hour) + "-" +
1608 <                                                                                                  boost::lexical_cast<string>(tmStartTime.tm_min) + "-" + boost::lexical_cast<string>(tmStartTime.tm_sec) + "/";
1609 <                                                                        create_directory(strTrashDir);
1610 <                                                                        needNewTrashDir = false;
1557 <                                                                }
1558 <                                                                rename((path)(strPathToPackages +  "/" + installedPackage.modStringName), (path)(strTrashDir + installedPackage.modStringName));
1559 < #endif
1560 <                                                                rename((path)(pathToUpdate + "/" + updatePackage.modStringName), (path)(strPathToPackages + "/" + updatePackage.modStringName));
1605 >                                                        if (needNewTrashDir)
1606 >                                                        {
1607 >                                                                strTrashDir = strTrashDir + "Old_packages_" + boost::lexical_cast<string>(tmStartTime.tm_hour) + "-" +
1608 >                                                                        boost::lexical_cast<string>(tmStartTime.tm_min) + "-" + boost::lexical_cast<string>(tmStartTime.tm_sec) + "/";
1609 >                                                                create_directory(strTrashDir);
1610 >                                                                needNewTrashDir = false;
1611                                                          }
1612 +                                                        rename((path)(strPathToPackages +  "/" + updatePackage.modStringName), (path)(strTrashDir + updatePackage.modStringName));
1613 + #endif
1614                                                  }
1615 +                                                rename((path)(pathToUpdate + "/" + updatePackage.modStringName), (path)(strPathToPackages + "/" + updatePackage.modStringName));
1616                                          }
1564                                        else
1565                                                file.close();
1617                                  }
1567                                file.close();
1568                                file.clear();
1618                          }
1619                  }
1620          }
# Line 1573 | Line 1622 | void ProcessPackageUpdates(string pathTo
1622          {
1623                  setStatusArea("Warning, handled exception: " + (string)ex.what());
1624          }
1625 +        wxCommandEvent e;
1626 +        TheWindow->OnRefreshButtonClick( e );
1627   }
1628  
1629   /* MakePathLocalToGlobalize is a function used once by ProcessAEUpdate() that takes a file in an        \

Diff Legend

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