Changeset 461 for AE/Installer


Ignore:
Timestamp:
Oct 9, 2009, 5:22:08 AM (10 years ago)
Author:
gumby
Message:

Added bsl support

Location:
AE/Installer/trunk/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • AE/Installer/trunk/source/installer.h

    r379 r461  
    1 #pragma once
     1 #pragma once
    22/* AE/Mod Installer header file */
    33#ifndef DOUBLE_HEADER
     
    2626        bool    hasDeltas;
    2727        bool    hasBSL;
     28        bool    hasAddon;
    2829        bool    hasDats;
    2930        string  category;
     
    3334        bool    globalNeeded;
    3435        ModPackage();
     36
    3537        void doOutput()
    3638        {
     
    7072        hasDeltas = false;
    7173        hasBSL = false;
     74        hasAddon = false;
    7275        hasDats = false;
    7376        category = "";
     
    98101void setProgressBar( int );
    99102
     103void copyBSL( string, vector<string>, ModPackage );
     104
    100105//New copy(path, path) function. Too lazy to implement my own, this is basically how I would have done it though.
    101106//No, really. :)
  • AE/Installer/trunk/source/main_window.cpp

    r436 r461  
    3434#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
    3535#include "boost/lexical_cast.hpp" //int -> string
     36#include "boost/algorithm/string.hpp"
    3637#include "installer.h"
    3738
     
    6566
    6667
     68vector<string> globalInstalledMods;
     69vector<ModPackage> globalPackages;
    6770
    6871
     
    7578        string output;
    7679        string escape_me = "& ;()|<>\"'\\#*?$";
    77         for(int i = 0; i < input.size(); i++)  {
    78                 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 += '\\';
    7982                output += input[i];
    8083        }
     
    332335                create_directory( VanillaAnimations.remove_filename() );
    333336
    334                 for(int j = 0; j < GDFPaths.size(); j++) {
     337                for(unsigned int j = 0; j < GDFPaths.size(); j++) {
    335338                        logfile << "\tReimporting " << GDFPaths[j].filename() << ".oni\n";
    336339                        setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": reimporting " + GDFPaths[j].filename() );
     
    409412        try
    410413        {
    411                 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)
    413415                {
    414416                        file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str());
     
    489491                        else if (!HasOnis.compare(*iter)) {
    490492                                iter++; iter++; 
    491                                 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
    492                                 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,
    493                                         iter++; iter++;}  // using "YFR" would probably set it off. :<
    494 
    495                                 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;
    496499                        }
    497500                        else if (!HasDeltas.compare(*iter)) {
     
    519522                                                package.category += *iter + " ";
    520523                                        }
     524                        }
     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 + " ";
    521532                                }
    522533                        }
    523                         else if (!Creator.compare(*iter))  {    //if it contains the name
    524                                 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
    525                                         if (ARROW.compare(*iter) && Creator.compare(*iter)) {                   //ignores "->" and "Category"
    526                                                 //cout << *iter;
    527                                                 //cout << " ";
    528                                                 package.creator += *iter + " ";
    529                                         }
     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 + " ";
    530540                                }
    531541                        }
    532                         else if (!Readme.compare(*iter))  {     //if it contains the name
    533                                 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) {     //interates through the words, ends if it reaches the end of the line or a "//" comment
    534                                         if (ARROW.compare(*iter) && Readme.compare(*iter)) {                    //ignores "->" and "Category"
    535                                                 if(!(*iter).compare("\\n")) package.readme += '\n';
    536                                                 else package.readme += *iter + " ";
    537                                         }
    538                                 }
    539                         }
    540                 }
    541 
    542         }
    543         package.doOutput();
    544         return package;
     542                }
     543        }
     544
     545}
     546package.doOutput();
     547return package;
    545548}
    546549
     
    612615                                        {
    613616                                                importCommand = strOniSplit + " " + strImportOption + " " + dir_itr->path().parent_path().string() + '/' + dir_itr->path().filename();
    614                                                 for (int i = 0; i < installedMods.size(); ++i) {
     617                                                for (unsigned int i = 0; i < installedMods.size(); ++i) {
    615618                                                        if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename()  ))
    616619                                                                importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename();
     
    685688                                {
    686689                                        importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + dir_itr->path().filename() + " ";
    687                                         for (int i = 0; i < installedMods.size(); ++i) {
     690                                        for (unsigned int i = 0; i < installedMods.size(); ++i) {
    688691                                                if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename()  ))
    689692                                                        importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename();
     
    712715                        }}
    713716        }
     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
    714760        logfile << "Writing config file";
    715761        writeInstalledMods(installedMods);
    716762        setProgressBar(1000);
    717         setStatusArea("Done! You can now play Oni.");
     763       
     764        string finallyDone = "Done! You can now play Oni.";
     765       
     766a
     767       
     768        setStatusArea(finallyDone);
    718769
    719770        ptime end_time(second_clock::local_time());
     
    724775        string outstring = (string)"\n\nGlobalization ended " + to_simple_string(end_time) + "\nThe process took ";// + (string)total_time.length();
    725776
    726         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();
    727778
    728779        //logfile2.write(outstring.c_str(), outstring.length());
     
    733784        Sleep(1000);
    734785        setProgressBar(0);
    735        
    736 }
    737                         catch(exception & ex) {
    738                                         remove("Install.log");
    739                                         ofstream logfile("Install.log");
    740 
    741 
    742                                         logfile << "Warning, exception " << ex.what() << "!";
    743                                         setStatusArea("Warning, exception " + (string)ex.what() + "!");
    744                                         logfile.close();       
    745                         }
    746                         busy = 0;
    747 }
    748 
    749 
     786
     787        }
     788        catch(exception & ex) {
     789                remove("Install.log"); //why did we do this? :|
     790                ofstream logfile("Install.log");
     791
     792
     793                logfile << "Warning, exception " << ex.what() << "!";
     794                setStatusArea("Warning, exception " + (string)ex.what() + "!");
     795                logfile.close();       
     796        }
     797        busy = 0;
     798}
     799
     800void 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                         
    750840void writeInstalledMods(vector<string> installedMods)
    751841{
     
    829919}
    830920
    831 vector<string> globalInstalledMods;
    832 vector<ModPackage> globalPackages;
    833921#include "boost/thread.hpp"
    834922#include <boost/thread/mutex.hpp>
     
    12041292        globalPackages = getPackages();
    12051293        globalInstalledMods = getInstallString();
    1206         for (int i = 0; i < globalPackages.size(); i++) {
     1294        for (unsigned int i = 0; i < globalPackages.size(); i++) {
    12071295                Mods_CheckboxList->Append(globalPackages[i].name.c_str());
    12081296                if( binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
     
    12431331        switch(SelectAll->Get3StateValue()) {
    12441332        case wxCHK_UNCHECKED:
    1245                 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);
    12461334                //SelectAll->Set3StateValue(wxCHK_CHECKED);
    12471335                break;
    12481336        case wxCHK_CHECKED:
    1249                 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);
    12501338                //SelectAll->Set3StateValue(wxCHK_UNCHECKED);
    12511339                break;
    12521340        case wxCHK_UNDETERMINED:
    1253                 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);
    12541342                //SelectAll->Set3StateValue(wxCHK_CHECKED);
    12551343                break;
     
    14341522        vector<string> localPackages;
    14351523        localPackages.push_back("00000Globalize");
    1436         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 );
    14371525        if ( !localPackages.empty() )   {
    14381526                sort(localPackages.begin(), localPackages.end());
     
    15761664        Mods_CheckboxList->Clear();
    15771665        //globalInstalledMods = getPackages();
    1578         for (int i = 0; i < globalPackages.size(); i++) {
     1666        for (unsigned int i = 0; i < globalPackages.size(); i++) {
    15791667                Mods_CheckboxList->Append(globalPackages[i].name.c_str());
    15801668                if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i);
     
    16391727
    16401728                vector<string>list;
    1641                 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 );
    16421730                vector<string>::iterator begin_iter = list.begin();
    16431731                vector<string>::iterator end_iter = list.end();
Note: See TracChangeset for help on using the changeset viewer.