source: s10k/Vago/packageWizard/packagewizard.cpp@ 1092

Last change on this file since 1092 was 1061, checked in by s10k, 8 years ago

Added Vago 1.3

File size: 6.2 KB
Line 
1#include "packagewizard.h"
2
3PackageWizard::PackageWizard(const QString &appDir, QString workspaceWizardLocation, QSettings *vagoSettings, Logger *myLogger)
4 :AbstractWizard(appDir, workspaceWizardLocation, vagoSettings, myLogger, false)
5{
6 this->packagesLocation=this->workspaceWizardLocation+"/Packages";
7}
8
9void PackageWizard::exec(){
10 PackagePage2 *page2 = new PackagePage2(this->myLogger);
11 PackagePage3 *page3 = new PackagePage3();
12 PackagePage4 *page4 = new PackagePage4();
13 this->page4Pointer = page4; // save the pointer in class variable
14 PackagePageFinal *pageFinal = new PackagePageFinal(this->vagoSettings);
15
16 myWizard.addPage(
17 createIntroPage(
18 "Welcome to the Anniversary Edition Installer 2 (AIE2) package"
19 " creator wizard.\n"
20 "This wizard will allow you to create in a few and simple steps a package for AIE2."
21 )
22 );
23 myWizard.addPage(page2);
24 myWizard.addPage(page3);
25 myWizard.addPage(page4);
26 myWizard.addPage(pageFinal);
27
28 showWizard("AIE2 Package Creator", ":/new/icons/package.png");
29}
30
31
32void PackageWizard::createPackage(){
33 const QString aeVersion="2.0";
34
35 //Get info page 2
36 QString modName=this->myWizard.field("leModName").toString();
37 QString authors=this->myWizard.field("leAuthors").toString();
38 QString version=this->myWizard.field("leVersion").toString();
39 QString description=this->myWizard.field("ptDescription").toString();
40 QString packageNumber=this->myWizard.field("lePackageNumber").toString();
41 bool bslReplace=this->myWizard.field("rbReplace").toBool();
42
43 //Get info page 3
44 QString dependentPackages=this->myWizard.field("leDependentPackages").toString();
45 QString incompatiblePackages=this->myWizard.field("leIncompatiblePackages").toString();
46 QString unlockLevels=this->myWizard.field("leUnlockLevels").toString();
47
48 //Get info page 4
49 const DropTableWidget *commonTable=this->page4Pointer->commonTable;
50 const DropTableWidget *windowsTable=this->page4Pointer->windowsTable;
51 const DropTableWidget *macTable=this->page4Pointer->macTable;
52
53 //Get info from final page
54 bool openFolder=this->myWizard.field("cbOpenFolder").toBool();
55 bool createZip=this->myWizard.field("cbCreateZip").toBool();
56 //Remember the final page choices to next time
57 this->vagoSettings->setValue("PackageCreator/OpenFolder",openFolder);
58 this->vagoSettings->setValue("PackageCreator/CreateZip",createZip);
59
60 const QString packageName=packageNumber+Util::fullTrim(modName);
61
62 // Start package creation...
63
64 // Create Packages folder if it doesn't exist
65 if(!QDir(this->packagesLocation).exists()){
66 QDir().mkpath(this->packagesLocation);
67 }
68
69 QString modDir=this->packagesLocation+"/"+packageName+"/";
70
71 QDir().mkdir(modDir);
72
73 bool bslExist=false;
74
75 if(commonTable->rowCount()>0){
76 copyPackageFolders(commonTable,"common",modDir,bslExist);
77 }
78
79 if(windowsTable->rowCount()>0){
80 copyPackageFolders(windowsTable,"win_only",modDir,bslExist);
81 }
82
83 if(macTable->rowCount()>0){
84 copyPackageFolders(macTable,"mac_only",modDir,bslExist);
85 }
86
87 QFile modInfo(modDir+"Mod_Info.cfg");
88
89 if (!modInfo.open(QIODevice::WriteOnly | QIODevice::Text)){ //open to write
90 UtilVago::showAndLogErrorPopUp(this->myLogger, "Couldn't create Mod_Info.cfg file when creating AE Package.");
91 return;
92 }
93
94 QTextStream modWriteStream(&modInfo);
95 modWriteStream << "AEInstallVersion -> "+aeVersion+"\n";
96 modWriteStream << "NameOfMod -> "+modName+"\n";
97 modWriteStream << "ModVersion -> "+version+"\n";
98 modWriteStream << "Creator -> "+authors+"\n";
99 modWriteStream << "Readme -> "+description.replace("\n"," \\n ")+"\n";
100 if(!incompatiblePackages.isEmpty()){
101 modWriteStream << "IncompatibleWith -> "+incompatiblePackages+"\n";
102 }
103 if(!dependentPackages.isEmpty()){
104 modWriteStream << "DependsOn -> "+dependentPackages+"\n";
105 }
106
107 if(bslExist){
108 if(bslReplace){
109 modWriteStream << "HasBsl -> Yes\n";
110 }
111 else{
112 modWriteStream << "HasBsl -> Addon\n";
113 }
114 }
115
116 if(!unlockLevels.isEmpty()){
117 modWriteStream << "UnlockLevel -> "+unlockLevels+"\n";
118 }
119
120 modWriteStream << "Vago -> "+GlobalVars::AppVersion;
121
122 modInfo.close();
123
124 if(createZip){
125 if(!JlCompress::compressDir(this->packagesLocation+"/"+packageName+".zip", modDir)){
126 UtilVago::showAndLogErrorPopUp(this->myLogger, "An error occurred while zipping the package.");
127 }
128 }
129
130 if(openFolder){
131 QDesktopServices::openUrl(QUrl("file:///"+this->packagesLocation));
132 }
133}
134
135void PackageWizard::copyPackageFolders(const DropTableWidget *myTable, QString tableDir, QString modDir, bool &bslExist){
136
137 QString sourceFolder;
138 bool onisExist=false;
139 QString path;
140
141 for(int i=0; i<myTable->rowCount(); i++){
142
143 sourceFolder=myTable->item(i,2)->text();
144
145 if(myTable->item(i,1)->text()==".oni"){
146 path=modDir+"oni/"+tableDir;
147 if(!onisExist){
148 onisExist=true;
149 }
150 }
151 else if(myTable->item(i,1)->text()==".bsl"){
152 path=modDir+"bsl/"+tableDir;
153 if(!bslExist){
154 bslExist=true;
155 }
156 }
157 else{
158 path=modDir+"patches/"+tableDir;
159 if(!bslExist){
160 bslExist=true;
161 }
162 }
163 QDir().mkpath(path); //create path if doesn't exist
164 if(!Util::copyDir(sourceFolder,path,false)){//copy contents (creates dest destination automatically if not exists yet)
165
166 UtilVago::showAndLogErrorPopUpLogButton(this->myLogger, "An error occurred while copying the folder/files to the package folder: \n"
167 "Copying from "+sourceFolder+"\n to "+path);
168 }
169 }
170}
171
172void PackageWizard::beforeClose(QDialog::DialogCode resultStatus){
173
174 //If wizard finished with sucess, create the package
175 if(resultStatus == QDialog::Accepted){
176 createPackage();
177 }
178}
179
Note: See TracBrowser for help on using the repository browser.