ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/main_window.cpp
(Generate patch)

Comparing AE/Installer/trunk/source/main_window.cpp (file contents):
Revision 436 by iritscen, Fri Jul 17 01:55:31 2009 UTC vs.
Revision 461 by gumby, Fri Oct 9 03:22:08 2009 UTC

# Line 33 | Line 33 | ITaskbarList3 *pTaskbarList3;
33  
34   #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
35   #include "boost/lexical_cast.hpp" //int -> string
36 + #include "boost/algorithm/string.hpp"
37   #include "installer.h"
38  
39   #ifdef WIN32
# Line 64 | Line 65 | using namespace boost::filesystem;
65   using namespace std;
66  
67  
68 + vector<string> globalInstalledMods;
69 + vector<ModPackage> globalPackages;
70  
71  
72   #include "boost/date_time/gregorian/gregorian.hpp"
# Line 74 | Line 77 | string escapePath(string input) {
77          
78          string output;
79          string escape_me = "& ;()|<>\"'\\#*?$";
80 <        for(int i = 0; i < input.size(); i++)  {
81 <                for(int j = 0; j < escape_me.size(); j++) if (input[i] == escape_me[j]) output += '\\';
80 >        for(unsigned int i = 0; i < input.size(); i++)  {
81 >                for(unsigned int j = 0; j < escape_me.size(); j++) if (input[i] == escape_me[j]) output += '\\';
82                  output += input[i];
83          }
84          return output;
# Line 331 | Line 334 | int globalizeData(void)
334                  create_directory( VanillaSounds.parent_path() );
335                  create_directory( VanillaAnimations.remove_filename() );
336  
337 <                for(int j = 0; j < GDFPaths.size(); j++) {
337 >                for(unsigned int j = 0; j < GDFPaths.size(); j++) {
338                          logfile << "\tReimporting " << GDFPaths[j].filename() << ".oni\n";
339                          setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": reimporting " + GDFPaths[j].filename() );
340                          system((strOniSplit + " " + strImportOption + " " + GDFPaths[j].string() + " " + VanillaPaths[j].string()).c_str());
# Line 408 | Line 411 | vector<ModPackage> getPackages(void)
411  
412          try
413          {
414 <                directory_iterator end_iter;
412 <                for (directory_iterator dir_itr("./packages"); dir_itr != end_iter; ++dir_itr)
414 >                for (directory_iterator dir_itr("./packages"), end_itr; dir_itr != end_itr; ++dir_itr)
415                  {
416                          file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str());
417                          //cout << filename << "\n";
# Line 488 | Line 490 | ModPackage fileToModPackage(fstream &fil
490                          }
491                          else if (!HasOnis.compare(*iter)) {
492                                  iter++; iter++;  
493 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasOnis = 1; //Gotta love c++'s lack of a standard case-insensitive
494 <                                else if (!HasBSL.compare(*iter)) { // string comparer...I know my implementation here sucks. I need to change it to check each character one by one. At the moment,
495 <                                        iter++; iter++;}  // using "YFR" would probably set it off. :<
496 <
497 <                                if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasBSL = 1;
493 >                                if ( boost::iequals(*iter, "Yes")) package.hasOnis = 1;
494 >                        }      
495 >                        else if (!HasBSL.compare(*iter)) { // string comparer...I know my implementation here sucks. I need to change it to check each character one by one. At the moment,
496 >                                iter++; iter++;  // using "YFR" would probably set it off. :<
497 >                                if ( boost::iequals(*iter, "Yes")) package.hasBSL = 1;
498 >                                else if ( boost::iequals(*iter, "Addon")) package.hasAddon = 1;
499                          }
500                          else if (!HasDeltas.compare(*iter)) {
501                                  iter++; iter++;  
# Line 518 | Line 521 | ModPackage fileToModPackage(fstream &fil
521                                                  //cout << " ";
522                                                  package.category += *iter + " ";
523                                          }
521                                }
524                          }
525 <                        else if (!Creator.compare(*iter))  {    //if it contains the name
526 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
527 <                                        if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   //ignores "->" and "Category"
528 <                                                //cout << *iter;
529 <                                                //cout << " ";
530 <                                                package.creator += *iter + " ";
531 <                                        }
525 >                }
526 >                else if (!Creator.compare(*iter))  {    //if it contains the name
527 >                        for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
528 >                                if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   //ignores "->" and "Category"
529 >                                        //cout << *iter;
530 >                                        //cout << " ";
531 >                                        package.creator += *iter + " ";
532                                  }
533                          }
534 <                        else if (!Readme.compare(*iter))  {     //if it contains the name
535 <                                for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
536 <                                        if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    //ignores "->" and "Category"
537 <                                                if(!(*iter).compare("\\n")) package.readme += '\n';
538 <                                                else package.readme += *iter + " ";
539 <                                        }
534 >                }
535 >                else if (!Readme.compare(*iter))  {     //if it contains the name
536 >                        for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
537 >                                if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    //ignores "->" and "Category"
538 >                                        if(!(*iter).compare("\\n")) package.readme += '\n';
539 >                                        else package.readme += *iter + " ";
540                                  }
541                          }
542                  }
541
543          }
544 <        package.doOutput();
545 <        return package;
544 >
545 > }
546 > package.doOutput();
547 > return package;
548   }
549  
550   void recompileAll(vector<string> installedMods)
# Line 611 | Line 614 | void recompileAll(vector<string> install
614                                          if ( is_directory( dir_itr->status() ) &&  dir_itr.level() == 1)
615                                          {
616                                                  importCommand = strOniSplit + " " + strImportOption + " " + dir_itr->path().parent_path().string() + '/' + dir_itr->path().filename();
617 <                                                for (int i = 0; i < installedMods.size(); ++i) {
617 >                                                for (unsigned int i = 0; i < installedMods.size(); ++i) {
618                                                          if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename()  ))
619                                                                  importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename();
620  
# Line 684 | Line 687 | void recompileAll(vector<string> install
687                                  if ( is_directory( dir_itr->status() ) )
688                                  {
689                                          importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + dir_itr->path().filename() + " ";
690 <                                        for (int i = 0; i < installedMods.size(); ++i) {
690 >                                        for (unsigned int i = 0; i < installedMods.size(); ++i) {
691                                                  if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename()  ))
692                                                          importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename();
693                                          }
# Line 711 | Line 714 | void recompileAll(vector<string> install
714                                  logfile.close();
715                          }}
716          }
717 +
718 +
719 +
720 +        
721 +
722 +
723 +
724 +
725 +                ofstream BSLlog("BSL.log");
726 +                
727 +                vector<string> BSLfolders;
728 +                vector<string> skippedfolders;
729 +
730 +                
731 +
732 +                for ( directory_iterator dir_itr( "../GameDataFolder/IGMD/" ), end_itr;
733 +                        dir_itr != end_itr;
734 +                        ++dir_itr ) {
735 +                                if( exists(dir_itr->path().string() + "/ignore.txt") ){
736 +                                        BSLfolders.push_back(dir_itr->path().filename());
737 +                                        skippedfolders.push_back(dir_itr->path().filename());
738 +                                }
739 +                }
740 +
741 +                for (int i = installedMods.size() - 1; i >= 0; i--) {                                                   //Iterates through the installed mods (backwards :P)
742 +                        for (unsigned int j = 0; j < globalPackages.size(); ++j) {                              //looking in the global packages
743 +                                if (globalPackages[j].modStringName == installedMods[i]) {      //for a mod that has BSL in it
744 +                                        BSLlog << "Testing " << globalPackages[j].modStringName << "\n"
745 +                                                << "HasBSL: " << globalPackages[j].hasBSL << "\n"
746 +                                                << "HasAddon: " << globalPackages[j].hasAddon << "\n";
747 +                                        if(!(globalPackages[j].hasAddon || globalPackages[j].hasBSL)) break; //skip non-BSL
748 +                                        if( exists( "packages/" + globalPackages[j].modStringName + "/BSL" ) )
749 +                                        copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );
750 +                                }
751 +
752 +                        }
753 +                }
754 +
755 +                ModPackage emptyPackage;
756 +                copyBSL("packages/VanillaBSL/IGMD", BSLfolders, emptyPackage);
757 +                BSLlog.close();
758 +        
759 +
760          logfile << "Writing config file";
761          writeInstalledMods(installedMods);
762          setProgressBar(1000);
763 <        setStatusArea("Done! You can now play Oni.");
763 >        
764 >        string finallyDone = "Done! You can now play Oni.";
765 >        
766 > a
767 >        
768 >        setStatusArea(finallyDone);
769  
770          ptime end_time(second_clock::local_time());
771          time_period total_time (start_time, end_time);
# Line 723 | Line 774 | void recompileAll(vector<string> install
774          ofstream logfile2("Install.log", ios::app | ios::ate);
775          string outstring = (string)"\n\nGlobalization ended " + to_simple_string(end_time) + "\nThe process took ";// + (string)total_time.length();
776  
777 <        logfile2 << "\nGlobalization ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();
777 >        logfile2 << "\nInstallation ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();
778  
779          //logfile2.write(outstring.c_str(), outstring.length());
780          logfile2.close();
# Line 732 | Line 783 | void recompileAll(vector<string> install
783  
784          Sleep(1000);
785          setProgressBar(0);
735        
736 }
737                        catch(exception & ex) {
738                                        remove("Install.log");
739                                        ofstream logfile("Install.log");
786  
787 +        }
788 +        catch(exception & ex) {
789 +                remove("Install.log"); //why did we do this? :|
790 +                ofstream logfile("Install.log");
791  
792 <                                        logfile << "Warning, exception " << ex.what() << "!";
793 <                                        setStatusArea("Warning, exception " + (string)ex.what() + "!");
794 <                                        logfile.close();        
795 <                        }
796 <                        busy = 0;
792 >
793 >                logfile << "Warning, exception " << ex.what() << "!";
794 >                setStatusArea("Warning, exception " + (string)ex.what() + "!");
795 >                logfile.close();        
796 >        }
797 >        busy = 0;
798   }
799  
800 + void copyBSL(string copypath, vector<string> BSLfolders, ModPackage pkg) {
801 +        try {
802 +                for ( directory_iterator dir_itr( copypath ), end_itr;
803 +                        dir_itr != end_itr;
804 +                        ++dir_itr ) {
805 +
806 +                                if ( is_directory( dir_itr->path() ) && dir_itr->path().string() != ".svn" ) {  
807 +                                        int skip_folder = 0;
808 +                                        for(unsigned int k = 0; k < BSLfolders.size(); k++)             {//iterate through already found BSL folders    
809 +                                                if(dir_itr->path().filename() == BSLfolders[k]) {
810 +                                                        skip_folder = 1;                        
811 +                                                        break;
812 +                                                }
813 +                                        }
814 +                                        if (!skip_folder && !exists("../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/ignore.txt")) {
815 +                                                remove_all( "../GameDataFolder/IGMD/" + dir_itr->path().filename() );
816 +                                                Sleep(100);
817 +                                                create_directory( "../GameDataFolder/IGMD/" + dir_itr->path().filename());
818 +
819 +                                                for ( directory_iterator bsl_itr( dir_itr->path() );
820 +                                                        bsl_itr != end_itr;
821 +                                                        bsl_itr++ ) {
822 +                                                                if ( bsl_itr->path().extension() == ".bsl" ) {
823 +                                                                        copy_file(bsl_itr->path(),  "../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/" + bsl_itr->path().filename());
824 +                                                                }
825 +                                                }
826 +                                                BSLfolders.push_back( dir_itr->path().filename() );
827 +                                        }
828 +                                }
829 +                }
830 +        }
831 +        catch ( const std::exception & ex )
832 +        {
833 +                setStatusArea("Warning, exception " + (string)ex.what() + "!");
834 +                while(1) Sleep(1000);
835 +        }
836  
837 + }
838 +                        
839 +                        
840   void writeInstalledMods(vector<string> installedMods)
841   {
842  
# Line 828 | Line 918 | void clearOldDats(void) {
918  
919   }
920  
831 vector<string> globalInstalledMods;
832 vector<ModPackage> globalPackages;
921   #include "boost/thread.hpp"
922   #include <boost/thread/mutex.hpp>
923  
# Line 1203 | Line 1291 | void MainWindow::CreateControls()
1291          
1292          globalPackages = getPackages();
1293          globalInstalledMods = getInstallString();
1294 <        for (int i = 0; i < globalPackages.size(); i++) {
1294 >        for (unsigned int i = 0; i < globalPackages.size(); i++) {
1295                  Mods_CheckboxList->Append(globalPackages[i].name.c_str());
1296                  if( binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
1297          }
# Line 1242 | Line 1330 | void MainWindow::OnSelectAllCheckboxClic
1330   {
1331          switch(SelectAll->Get3StateValue()) {
1332          case wxCHK_UNCHECKED:
1333 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1333 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1334                  //SelectAll->Set3StateValue(wxCHK_CHECKED);
1335                  break;
1336          case wxCHK_CHECKED:
1337 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
1337 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
1338                  //SelectAll->Set3StateValue(wxCHK_UNCHECKED);
1339                  break;
1340          case wxCHK_UNDETERMINED:
1341 <                for(int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1341 >                for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
1342                  //SelectAll->Set3StateValue(wxCHK_CHECKED);
1343                  break;
1344  
# Line 1433 | Line 1521 | void MainWindow::OnInstallButtonClick( w
1521  
1522          vector<string> localPackages;
1523          localPackages.push_back("00000Globalize");
1524 <        for(int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
1524 >        for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
1525          if ( !localPackages.empty() )   {
1526                  sort(localPackages.begin(), localPackages.end());
1527                  localPackages[0] = "Globalize";
# Line 1575 | Line 1663 | void MainWindow::refreshMods (vector<str
1663  
1664          Mods_CheckboxList->Clear();
1665          //globalInstalledMods = getPackages();
1666 <        for (int i = 0; i < globalPackages.size(); i++) {
1666 >        for (unsigned int i = 0; i < globalPackages.size(); i++) {
1667                  Mods_CheckboxList->Append(globalPackages[i].name.c_str());
1668                  if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
1669                  //else Mods_CheckboxList->Check(i,0);
# Line 1638 | Line 1726 | void MainWindow::OnSaveClick( wxCommandE
1726                  ofstream file(openFileDialog->GetPath().c_str());
1727  
1728                  vector<string>list;
1729 <                for(int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
1729 >                for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
1730                  vector<string>::iterator begin_iter = list.begin();
1731                  vector<string>::iterator end_iter = list.end();
1732  

Diff Legend

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