diff options
author | Alessandro Portale <alessandro.portale@nokia.com> | 2011-02-03 19:46:41 +0100 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@nokia.com> | 2011-02-03 19:48:12 +0100 |
commit | efc596170cad15f56c18643508fc1ea0c83a5644 (patch) | |
tree | e5a9cd4976a3e2eb395f5441ae1c264bd2f5b6f1 /src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp | |
parent | 07b52446897d6345bc26e5463aa64e5866da6c26 (diff) | |
download | qt-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.cpp | 60 |
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 |