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 543 by gumby, Mon May 24 19:13:59 2010 UTC vs.
Revision 551 by gumby, Thu May 27 20:30:35 2010 UTC

# Line 597 | Line 597 | void recompileAll(vector<string> install
597          else if(splitInstances == false){
598                  directory_iterator end_iter;
599                  
600 <                for ( directory_iterator dir_itr( vanilla_dir );
601 <                         dir_itr != end_iter;
602 <                         ++dir_itr )
603 <                {
604 <                        if ( is_directory( dir_itr->status() ) )
605 <                        {
606 <                                numberOfDats++;
600 >                
601 >                char levelnums[256] = {0};
602 >
603 >
604 >
605 >                for(int k = 0; k < 256; k++) {
606 >                        if( exists( (path)("./VanillaDats/level" + lexical_cast<std::string>(k) + "_final/") ) ) {
607 >                                        levelnums[k] = 1;
608 >                                        
609                          }
610                  }
611 <                
611 >        
612 >                for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
613 >                        for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
614 >                                if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
615 >                                        for(int k = 0; k < 256; k++) {
616 >                                                if( globalPackages[j].hasOnis &&
617 >                                                        exists( (path)("packages/" + globalPackages[j].modStringName + "/oni/level" + lexical_cast<std::string>(k) + "_final/") ) ) {
618 >                                                        levelnums[k] = 1;
619 >                                                        
620 >                                                }
621 >                                        }
622 >                                }
623 >                        }
624 >                }
625 >                for (int levelnum = 0; levelnum < 256; levelnum++)
626 >                        if (levelnums[levelnum])
627 >                                numberOfDats++;
628 >
629                  out << numberOfDats;
630                  datString = out.str();
631 <                
632 <                for ( directory_iterator dir_itr( vanilla_dir );
614 <                         dir_itr != end_iter;
615 <                         ++dir_itr )
616 <                {
631 >
632 >                for(int levelnum = 0; levelnum < 256; levelnum++) {
633                          try
634                          {
635 <                                if ( is_directory( dir_itr->status() ) )
635 >                                if ( levelnums[levelnum] )
636                                  {
637 <                                        importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + dir_itr->path().filename() + " ";
637 >                                        importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + "level" + lexical_cast<std::string>(levelnum) + "_Final ";
638                                          for (unsigned int i = 0; i < installedMods.size(); ++i) {
639 <                                                if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename()  ))
640 <                                                        importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename();
639 >                                                if (exists((path)("packages/" + installedMods[i] + "/oni/level" + lexical_cast<std::string>(levelnum) + "_final") ))
640 >                                                        importCommand += " packages/" + installedMods[i] + "/oni/level" + lexical_cast<std::string>(levelnum) + "_Final";
641                                          }
642 <                                        importCommand += " ../GameDataFolder/" + dir_itr->path().filename() + ".dat >> Install.log";
642 >                                        importCommand += " ../GameDataFolder/level" + lexical_cast<std::string>(levelnum) + "_Final.dat >> Install.log";
643                                          
644                                          setProgressBar( (int)(1000 * (float)(j-1) / (float)numberOfDats) ); //100% * dat we're on / total dats
645                                          setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " +
646 <                                                                  dir_itr->path().filename() + " ");
646 >                                                                  "level" + lexical_cast<std::string>(levelnum) + "_Final"+ " ");
647                                          system(importCommand.c_str());
648                                          j++;
649                                  }
# Line 647 | Line 663 | void recompileAll(vector<string> install
663          vector<string> skippedfolders;
664  
665          ofstream BSLlog("BSL.log");
666 +        if(exists("../GameDataFolder/BSLBackup/")) {
667 +                remove_all("../GameDataFolder/BSLBackup/");
668 +        }
669 +        else {
670 +                create_directory("../GameDataFolder/BSLBackup/");
671 +        }
672 +        copy("../GameDataFolder/IGMD/", "../GameDataFolder/BSLBackup/");
673          for ( directory_iterator dir_itr( "../GameDataFolder/IGMD/" ), end_itr;
674                   dir_itr != end_itr;
675                   ++dir_itr ) {
# Line 659 | Line 682 | void recompileAll(vector<string> install
682          for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
683                  for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
684                          if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
685 <                                if(!(globalPackages[j].hasAddon || globalPackages[j].hasBSL)) break; //skip non-BSL
685 >                                if(globalPackages[j].hasBSL) break; //skip non-BSL
686                                  if( exists( "packages/" + globalPackages[j].modStringName + "/BSL/" ) ) {
687                                          copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
688                                          BSLlog << "Copied " <<  globalPackages[j].modStringName << "!\n";
# Line 668 | Line 691 | void recompileAll(vector<string> install
691                  }
692          }
693          
694 +
695 +
696          ModPackage emptyPackage;
697          emptyPackage.modStringName = "VanillaBSL";
698          emptyPackage.hasBSL = 1;
699          copyBSL("packages/VanillaBSL/IGMD", BSLfolders, emptyPackage);
700          BSLlog.close();
701 <        
701 >
702 >        for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
703 >                for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
704 >                        if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
705 >                                if(!globalPackages[j].hasAddon) break; //skip non-BSL
706 >                                if( exists( "packages/" + globalPackages[j].modStringName + "/BSL/" ) ) {
707 >                                        copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
708 >                                        BSLlog << "Copied " <<  globalPackages[j].modStringName << "!\n";
709 >                                }
710 >                        }
711 >                }
712 >        }
713 >
714          logfile << "Writing config file";
715          writeInstalledMods(installedMods);
716          setProgressBar(1000);
# Line 714 | Line 751 | void copyBSL(string copypath, vector<str
751                          if ( is_directory( dir_itr->path() ) && dir_itr->path().string() != ".svn" ) {  
752                                  BSLlog << "Testing " << dir_itr->path().string() << " HasBSL: " << pkg.hasBSL << " HasAddon: " << pkg.hasAddon << "\n";
753                                  int skip_folder = 0;
754 <                                
755 <                                for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
756 <                                        BSLlog << "testing " << dir_itr->path().filename() << " vs " << BSLfolders[k] << "\n";
757 <                                        if(dir_itr->path().filename() == BSLfolders[k]) {
758 <                                                skip_folder = 1;
759 <                                                BSLlog << "skipping " << BSLfolders[k] << " in " << pkg.modStringName << "\n";
760 <                                                break;
754 >                                if(!pkg.hasAddon) {
755 >                                        for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
756 >                                                BSLlog << "testing " << dir_itr->path().filename() << " vs " << BSLfolders[k] << "\n";
757 >                                                if(dir_itr->path().filename() == BSLfolders[k]) {
758 >                                                        skip_folder = 1;
759 >                                                        BSLlog << "skipping " << BSLfolders[k] << " in " << pkg.modStringName << "\n";
760 >                                                        break;
761 >                                                }
762                                          }
763                                  }
764                                  if (!skip_folder && !exists("../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/ignore.txt")) {
# Line 1362 | Line 1400 | bool ProcessAEUpdate(Install_info_cfg *c
1400          // Special code to replace our special files -- the Oni app, OniSplit, the Daodan DLL, and the GUI for OniSplit
1401          if (exists(strPathToEUFN + strOniApp))
1402          {
1403 <                if (exists(strOniApp))
1403 >                if (exists("../" + strOniApp))
1404   #ifdef WIN32
1405 <                        remove((path)strOniApp);
1405 >                        remove((path)("../" + strOniApp));
1406   #else
1407 <                        rename((path)strOniApp, (path)(strTrashDir + strOniApp));
1407 >                        rename((path)("../" + strOniApp), (path)(strTrashDir + strOniApp));
1408   #endif
1409 <                rename((path)(strPathToEUFN + strOniApp), (path)strOniApp);
1409 >                rename((path)(strPathToEUFN + strOniApp), (path)("../" + strOniApp));
1410          }
1411          if (updateAE->OniSplitVersion.compare(currentAE->OniSplitVersion) >= 1)
1412          {
# Line 1491 | Line 1529 | bool ProcessAEUpdate(Install_info_cfg *c
1529          
1530          // Clean up after ourselves, trashing any packages or programs in the update package that are not newer than the current AE
1531   #ifdef WIN32
1532 <        remove((path)strPathToEUFN);
1532 >        remove_all((path)strPathToEUFN);
1533   #else
1534          create_directory(strTrashDir + "Unneeded update files");
1535          rename((path)strPathToEUFN, (path)(strTrashDir + "Unneeded update files/" + strEUFN));

Diff Legend

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