Changeset 461
- Timestamp:
- Oct 9, 2009, 5:22:08 AM (15 years ago)
- Location:
- AE/Installer/trunk/source
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
AE/Installer/trunk/source/installer.h
r379 r461 1 #pragma once1 #pragma once 2 2 /* AE/Mod Installer header file */ 3 3 #ifndef DOUBLE_HEADER … … 26 26 bool hasDeltas; 27 27 bool hasBSL; 28 bool hasAddon; 28 29 bool hasDats; 29 30 string category; … … 33 34 bool globalNeeded; 34 35 ModPackage(); 36 35 37 void doOutput() 36 38 { … … 70 72 hasDeltas = false; 71 73 hasBSL = false; 74 hasAddon = false; 72 75 hasDats = false; 73 76 category = ""; … … 98 101 void setProgressBar( int ); 99 102 103 void copyBSL( string, vector<string>, ModPackage ); 104 100 105 //New copy(path, path) function. Too lazy to implement my own, this is basically how I would have done it though. 101 106 //No, really. :) -
AE/Installer/trunk/source/main_window.cpp
r436 r461 34 34 #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations 35 35 #include "boost/lexical_cast.hpp" //int -> string 36 #include "boost/algorithm/string.hpp" 36 37 #include "installer.h" 37 38 … … 65 66 66 67 68 vector<string> globalInstalledMods; 69 vector<ModPackage> globalPackages; 67 70 68 71 … … 75 78 string output; 76 79 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 += '\\'; 79 82 output += input[i]; 80 83 } … … 332 335 create_directory( VanillaAnimations.remove_filename() ); 333 336 334 for( int j = 0; j < GDFPaths.size(); j++) {337 for(unsigned int j = 0; j < GDFPaths.size(); j++) { 335 338 logfile << "\tReimporting " << GDFPaths[j].filename() << ".oni\n"; 336 339 setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": reimporting " + GDFPaths[j].filename() ); … … 409 412 try 410 413 { 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) 413 415 { 414 416 file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str()); … … 489 491 else if (!HasOnis.compare(*iter)) { 490 492 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; 496 499 } 497 500 else if (!HasDeltas.compare(*iter)) { … … 519 522 package.category += *iter + " "; 520 523 } 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 + " "; 521 532 } 522 533 } 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 + " "; 530 540 } 531 541 } 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 } 546 package.doOutput(); 547 return package; 545 548 } 546 549 … … 612 615 { 613 616 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) { 615 618 if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename() )) 616 619 importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename(); … … 685 688 { 686 689 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) { 688 691 if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename() )) 689 692 importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename(); … … 712 715 }} 713 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 714 760 logfile << "Writing config file"; 715 761 writeInstalledMods(installedMods); 716 762 setProgressBar(1000); 717 setStatusArea("Done! You can now play Oni."); 763 764 string finallyDone = "Done! You can now play Oni."; 765 766 a 767 768 setStatusArea(finallyDone); 718 769 719 770 ptime end_time(second_clock::local_time()); … … 724 775 string outstring = (string)"\n\nGlobalization ended " + to_simple_string(end_time) + "\nThe process took ";// + (string)total_time.length(); 725 776 726 logfile2 << "\n Globalization 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(); 727 778 728 779 //logfile2.write(outstring.c_str(), outstring.length()); … … 733 784 Sleep(1000); 734 785 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 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 750 840 void writeInstalledMods(vector<string> installedMods) 751 841 { … … 829 919 } 830 920 831 vector<string> globalInstalledMods;832 vector<ModPackage> globalPackages;833 921 #include "boost/thread.hpp" 834 922 #include <boost/thread/mutex.hpp> … … 1204 1292 globalPackages = getPackages(); 1205 1293 globalInstalledMods = getInstallString(); 1206 for ( int i = 0; i < globalPackages.size(); i++) {1294 for (unsigned int i = 0; i < globalPackages.size(); i++) { 1207 1295 Mods_CheckboxList->Append(globalPackages[i].name.c_str()); 1208 1296 if( binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i); … … 1243 1331 switch(SelectAll->Get3StateValue()) { 1244 1332 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); 1246 1334 //SelectAll->Set3StateValue(wxCHK_CHECKED); 1247 1335 break; 1248 1336 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); 1250 1338 //SelectAll->Set3StateValue(wxCHK_UNCHECKED); 1251 1339 break; 1252 1340 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); 1254 1342 //SelectAll->Set3StateValue(wxCHK_CHECKED); 1255 1343 break; … … 1434 1522 vector<string> localPackages; 1435 1523 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 ); 1437 1525 if ( !localPackages.empty() ) { 1438 1526 sort(localPackages.begin(), localPackages.end()); … … 1576 1664 Mods_CheckboxList->Clear(); 1577 1665 //globalInstalledMods = getPackages(); 1578 for ( int i = 0; i < globalPackages.size(); i++) {1666 for (unsigned int i = 0; i < globalPackages.size(); i++) { 1579 1667 Mods_CheckboxList->Append(globalPackages[i].name.c_str()); 1580 1668 if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i); … … 1639 1727 1640 1728 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 ); 1642 1730 vector<string>::iterator begin_iter = list.begin(); 1643 1731 vector<string>::iterator end_iter = list.end();
Note:
See TracChangeset
for help on using the changeset viewer.