summaryrefslogtreecommitdiff
path: root/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@nokia.com>2011-02-03 19:46:41 +0100
committerAlessandro Portale <alessandro.portale@nokia.com>2011-02-03 19:48:12 +0100
commitefc596170cad15f56c18643508fc1ea0c83a5644 (patch)
treee5a9cd4976a3e2eb395f5441ae1c264bd2f5b6f1 /src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
parent07b52446897d6345bc26e5463aa64e5866da6c26 (diff)
downloadqt-creator-efc596170cad15f56c18643508fc1ea0c83a5644.tar.gz
Refactoring the template code updater. Reusable for html5
Less static functions, more ploymorphism.
Diffstat (limited to 'src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp')
-rw-r--r--src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp60
1 files changed, 49 insertions, 11 deletions
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
index bd7c8dfb58..f354d373e4 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp
@@ -47,23 +47,13 @@ namespace Internal {
AbstractGeneratedFileInfo::AbstractGeneratedFileInfo()
: fileType(ExtendedFile)
+ , currentVersion(-1)
, version(-1)
, dataChecksum(0)
, statedChecksum(0)
{
}
-bool AbstractGeneratedFileInfo::isUpToDate() const
-{
- return !isOutdated() && !wasModified();
-}
-
-bool AbstractGeneratedFileInfo::wasModified() const
-{
- return dataChecksum != statedChecksum;
-}
-
-
const QString AbstractMobileApp::CFileComment(QLatin1String("//"));
const QString AbstractMobileApp::ProFileComment(QLatin1String("#"));
const QString AbstractMobileApp::DeploymentPriFileName(QLatin1String("deployment.pri"));
@@ -298,6 +288,54 @@ QByteArray AbstractMobileApp::generateProFile(QString *errorMessage) const
return proFileContent;
}
+QList<AbstractGeneratedFileInfo> AbstractMobileApp::fileUpdates(const QString &mainProFile) const
+{
+ QList<AbstractGeneratedFileInfo> result;
+ foreach (const AbstractGeneratedFileInfo &file, updateableFiles(mainProFile)) {
+ AbstractGeneratedFileInfo newFile = file;
+ QFile readFile(newFile.fileInfo.absoluteFilePath());
+ if (!readFile.open(QIODevice::ReadOnly))
+ continue;
+ const QString firstLine = readFile.readLine();
+ const QStringList elements = firstLine.split(QLatin1Char(' '));
+ if (elements.count() != 5 || elements.at(1) != FileChecksum
+ || elements.at(3) != FileStubVersion)
+ continue;
+ const QString versionString = elements.at(4);
+ newFile.version = versionString.startsWith(QLatin1String("0x"))
+ ? versionString.toInt(0, 16) : 0;
+ newFile.statedChecksum = elements.at(2).toUShort(0, 16);
+ QByteArray data = readFile.readAll();
+ data.replace('\x0D', "");
+ data.replace('\x0A', "");
+ newFile.dataChecksum = qChecksum(data.constData(), data.length());
+ if (newFile.dataChecksum != newFile.statedChecksum
+ || newFile.version < newFile.currentVersion)
+ result.append(newFile);
+ }
+ return result;
+}
+
+
+bool AbstractMobileApp::updateFiles(const QList<AbstractGeneratedFileInfo> &list, QString &error) const
+{
+ error.clear();
+ foreach (const AbstractGeneratedFileInfo &info, list) {
+ const QByteArray data = generateFile(info.fileType, &error);
+ if (!error.isEmpty())
+ return false;
+ QFile file(info.fileInfo.absoluteFilePath());
+ if (!file.open(QIODevice::WriteOnly) || file.write(data) == -1) {
+ error = QCoreApplication::translate(
+ "Qt4ProjectManager::Internal::QmlStandaloneApp",
+ "Could not write file '%1'.").
+ arg(QDir::toNativeSeparators(info.fileInfo.canonicalFilePath()));
+ return false;
+ }
+ }
+ return true;
+}
+
#ifndef CREATORLESSTEST
// The definition of QmlStandaloneApp::templatesRoot() for
// CREATORLESSTEST is in tests/manual/qmlstandalone/main.cpp