28 #include <kio/copyjob.h>
29 #include <kmacroexpander.h>
30 #include <kmessagebox.h>
31 #include <kmimetype.h>
32 #include <kstandarddirs.h>
41 const QString
current_year = QString().setNum(QDate::currentDate().year());
46 setTitle(i18n(
"Generating your project"));
47 ui_generate.setupUi(
this);
50 bool GeneratePage::unpackArchive(
const KArchiveDirectory *dir,
const QString &dest)
52 kDebug(9010) <<
"unpacking dir:" << dir->name() <<
"to" << dest;
53 QStringList entries = dir->entries();
54 kDebug(9010) <<
"entries:" << entries.join(
",");
61 if(!QDir::root().mkpath(dest)){
62 KMessageBox::sorry(0, i18n(
"%1 cannot be created.", dest));
68 foreach (
const QString &entry, entries)
71 ui_generate.progressBar->setValue( (progress / entries.size()) * 100);
73 if (entry.endsWith(
".kdevtemplate"))
75 if (entry == templateName+
".png")
77 if (dir->entry(entry)->isDirectory()) {
78 const KArchiveDirectory *file = (KArchiveDirectory *)dir->entry(entry);
79 QString newdest = dest+
"/"+file->name();
80 if( !QFileInfo( newdest ).exists() ) {
81 QDir::root().mkdir( newdest );
83 ret |= unpackArchive(file, newdest);
85 else if (dir->entry(entry)->isFile()) {
86 const KArchiveFile *file = (KArchiveFile *)dir->entry(entry);
87 file->copyTo(tdir.name());
88 QString destName = dest +
'/' + file->name();
89 if (!destName.contains(
"/icons/")) {
90 if (!copyFile(QDir::cleanPath(tdir.name()+
'/'+file->name()),
91 KMacroExpander::expandMacros(destName, m_variables))) {
92 KMessageBox::sorry(0, i18n(
"The file %1 cannot be created.", dest));
93 feedback.append(i18n(
"\n\nThe file %1 cannot be created.", dest));
94 ui_generate.label->setText(feedback);
100 if (!QFile(QDir::cleanPath(tdir.name()+
'/'+file->name())).copy(KMacroExpander::expandMacros(destName, m_variables))) {
101 KMessageBox::sorry(0, i18n(
"The file %1 cannot be created.", dest));
102 feedback.append(i18n(
"\n\nThe file %1 cannot be created.", dest));
103 ui_generate.label->setText(feedback);
106 kDebug() <<
"after copying.... " << endl;
114 bool GeneratePage::copyFile(
const QString &source,
const QString &dest)
116 kDebug(9010) <<
"copy:" << source <<
"to" << dest;
117 QFile inputFile(source);
118 QFile outputFile(dest);
120 QFileInfo temp(source);
122 if (inputFile.open(QFile::ReadOnly) && outputFile.open(QFile::WriteOnly))
124 if( KMimeType::isBinaryData(source) ) {
125 KIO::CopyJob* job = KIO::copy( KUrl(source), KUrl(dest), KIO::Overwrite );
130 }
else if(temp.suffix().compare(
"png",Qt::CaseInsensitive) == 0) {
131 QDataStream input(&inputFile);
132 QDataStream output(&outputFile);
134 while(!input.atEnd()) {
140 QTextStream input(&inputFile);
141 input.setCodec(QTextCodec::codecForName(
"UTF-8"));
142 QTextStream output(&outputFile);
143 output.setCodec(QTextCodec::codecForName(
"UTF-8"));
145 while(!input.atEnd()) {
146 QString line = input.readLine();
148 output << KMacroExpander::expandMacros(line, m_variables) <<
"\n";
153 ::fstat(inputFile.handle(), &fmode);
154 ::fchmod(outputFile.handle(), fmode.st_mode);
164 void GeneratePage::initializePage()
166 feedback = i18n(
"Generation Progress\n");
167 ui_generate.label->setText(feedback);
168 templateName = field(
"tempName").toString();
169 if (templateName.isEmpty()) {
170 templateName =
"kde4";
172 QString templateArchive = KGlobal::dirs()->findResource(
"data", QString(
"kdevappwizard/templates/%1.zip").arg(templateName));
173 if( templateArchive.isEmpty() ) {
174 templateArchive = KGlobal::dirs()->findResource(
"data", QString(
"kdevappwizard/templates/%1.tar.bz2").arg(templateName));
177 QString appName = field(
"appName").toString();
178 QString
version = field(
"version").toString();
179 KUrl dest(field(
"url").toString()+
"/"+appName.toLower());
182 m_variables[
"APPNAME"] = appName;
183 m_variables[
"APPNAMEUC"] = appName.toUpper();
184 m_variables[
"APPNAMELC"] = appName.toLower();
185 m_variables[
"PROJECTDIRNAME"] = appName.toLower();
186 m_variables[
"APPNAMEFU"] = appName.replace(0, 1, appName.toUpper().at(0));
187 m_variables[
"AUTHOR"] = field(
"author").toString();
188 m_variables[
"EMAIL"] = field(
"email").toString();
189 m_variables[
"VERSION"] =
version;
190 m_variables[
"VERSIONCONTROLPLUGIN"] =
version;
191 m_variables[
"PROJECTDIRNAME"] = appName.toLower()+
"-"+
version;
194 if( templateArchive.endsWith(
".zip") ) {
195 arch =
new KZip(templateArchive);
197 arch =
new KTar(templateArchive,
"application/x-bzip");
199 if (arch->open(QIODevice::ReadOnly)) {
200 if( !QFileInfo( dest.toLocalFile() ).exists() ) {
201 QDir::root().mkdir( dest.toLocalFile() );
203 unpackArchive(arch->directory(), dest.toLocalFile());
207 feedback.append(i18n(
"Succeeded.\n"));
208 ui_generate.label->setText(feedback);
211 QString url = field(
"url").toString();
212 resume = i18n(
"Your project name is: <b>%1</b>, based on the %2 template.<br />", appName, templateName);
213 resume.append(i18n(
"Version: %1 <br /><br />", version));
214 resume.append(i18n(
"Installed in: %1 <br /><br />", url));
215 resume.append(i18n(
"You will find a README in your project folder <b>%1</b><br /> to help you get started with your project.", url+
'/'+appName.toLower()));
216 ui_generate.summaryLabel->setText(resume);
219 #include "generatepage.moc"
GeneratePage(QWidget *parent=0)
class @6 QWidget
This is the main view class for %{APPNAME}.
const QString current_year
static const char version[]