diff options
Diffstat (limited to 'src/libs/kdtools/kdupdaterupdatesinfo.cpp')
-rw-r--r-- | src/libs/kdtools/kdupdaterupdatesinfo.cpp | 234 |
1 files changed, 60 insertions, 174 deletions
diff --git a/src/libs/kdtools/kdupdaterupdatesinfo.cpp b/src/libs/kdtools/kdupdaterupdatesinfo.cpp index b0cc8608b..9e6f35aac 100644 --- a/src/libs/kdtools/kdupdaterupdatesinfo.cpp +++ b/src/libs/kdtools/kdupdaterupdatesinfo.cpp @@ -1,68 +1,68 @@ /**************************************************************************** -** Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. All rights reserved. ** -** This file is part of the KD Tools library. +** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** Contact: http://www.qt-project.org/legal ** -** Licensees holding valid commercial KD Tools licenses may use this file in -** accordance with the KD Tools Commercial License Agreement provided with -** the Software. +** This file is part of the Qt Installer Framework. ** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. ** -** This file may be distributed and/or modified under the terms of the -** GNU Lesser General Public License version 2 and version 3 as published by the -** Free Software Foundation and appearing in the file LICENSE.LGPL included. +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** Contact info@kdab.com if any conditions of this licensing are not -** clear to you. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. ** -**********************************************************************/ +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #include "kdupdaterupdatesinfo_p.h" -#include <QCoreApplication> -#include <QtXml/QDomDocument> -#include <QtXml/QDomElement> #include <QFile> -#include <QSharedData> #include <QLocale> +#include <QUrl> using namespace KDUpdater; -// -// UpdatesInfo::UpdatesInfoData -// -struct UpdatesInfo::UpdatesInfoData : public QSharedData +UpdatesInfoData::UpdatesInfoData() + : error(UpdatesInfo::NotYetReadError) { - Q_DECLARE_TR_FUNCTIONS(KDUpdater::UpdatesInfoData) - -public: - UpdatesInfoData() : error(UpdatesInfo::NotYetReadError), compatLevel(-1) { } - - QString errorMessage; - UpdatesInfo::Error error; - QString updateXmlFile; - QString applicationName; - QString applicationVersion; - int compatLevel; - QList<UpdateInfo> updateInfoList; - - void parseFile(const QString &updateXmlFile); - bool parsePackageUpdateElement(const QDomElement &updateE); - bool parseCompatUpdateElement(const QDomElement &updateE); +} - void setInvalidContentError(const QString &detail); -}; +UpdatesInfoData::~UpdatesInfoData() +{ +} -void UpdatesInfo::UpdatesInfoData::setInvalidContentError(const QString &detail) +void UpdatesInfoData::setInvalidContentError(const QString &detail) { error = UpdatesInfo::InvalidContentError; errorMessage = tr("Updates.xml contains invalid content: %1").arg(detail); } -void UpdatesInfo::UpdatesInfoData::parseFile(const QString &updateXmlFile) +void UpdatesInfoData::parseFile(const QString &updateXmlFile) { QFile file(updateXmlFile); if (!file.open(QFile::ReadOnly)) { @@ -73,15 +73,11 @@ void UpdatesInfo::UpdatesInfoData::parseFile(const QString &updateXmlFile) QDomDocument doc; QString parseErrorMessage; - int parseErrorLine; - int parseErrorColumn; + int parseErrorLine, parseErrorColumn; if (!doc.setContent(&file, &parseErrorMessage, &parseErrorLine, &parseErrorColumn)) { error = UpdatesInfo::InvalidXmlError; - errorMessage = tr("Parse error in %1 at %2, %3: %4") - .arg(updateXmlFile, - QString::number(parseErrorLine), - QString::number(parseErrorColumn), - parseErrorMessage); + errorMessage = tr("Parse error in %1 at %2, %3: %4").arg(updateXmlFile, + QString::number(parseErrorLine), QString::number(parseErrorColumn), parseErrorMessage); return; } @@ -93,8 +89,7 @@ void UpdatesInfo::UpdatesInfoData::parseFile(const QString &updateXmlFile) QDomNodeList childNodes = rootE.childNodes(); for(int i = 0; i < childNodes.count(); i++) { - QDomNode childNode = childNodes.at(i); - QDomElement childE = childNode.toElement(); + const QDomElement childE = childNodes.at(i).toElement(); if (childE.isNull()) continue; @@ -102,20 +97,9 @@ void UpdatesInfo::UpdatesInfoData::parseFile(const QString &updateXmlFile) applicationName = childE.text(); else if (childE.tagName() == QLatin1String("ApplicationVersion")) applicationVersion = childE.text(); - else if (childE.tagName() == QLatin1String("RequiredCompatLevel")) - compatLevel = childE.text().toInt(); else if (childE.tagName() == QLatin1String("PackageUpdate")) { - const bool res = parsePackageUpdateElement(childE); - if (!res) { - //error handled in subroutine - return; - } - } else if (childE.tagName() == QLatin1String("CompatUpdate")) { - const bool res = parseCompatUpdateElement(childE); - if (!res) { - //error handled in subroutine - return; - } + if (!parsePackageUpdateElement(childE)) + return; //error handled in subroutine } } @@ -123,40 +107,29 @@ void UpdatesInfo::UpdatesInfoData::parseFile(const QString &updateXmlFile) setInvalidContentError(tr("ApplicationName element is missing.")); return; } - + if (applicationVersion.isEmpty()) { setInvalidContentError(tr("ApplicationVersion element is missing.")); return; } - - error = UpdatesInfo::NoError; + errorMessage.clear(); + error = UpdatesInfo::NoError; } -bool UpdatesInfo::UpdatesInfoData::parsePackageUpdateElement(const QDomElement &updateE) +bool UpdatesInfoData::parsePackageUpdateElement(const QDomElement &updateE) { if (updateE.isNull()) return false; UpdateInfo info; - info.type = PackageUpdate; - - QDomNodeList childNodes = updateE.childNodes(); - for (int i = 0; i < childNodes.count(); i++) { - QDomNode childNode = childNodes.at(i); - QDomElement childE = childNode.toElement(); + for (int i = 0; i < updateE.childNodes().count(); i++) { + QDomElement childE = updateE.childNodes().at(i).toElement(); if (childE.isNull()) continue; if (childE.tagName() == QLatin1String("ReleaseNotes")) { info.data[childE.tagName()] = QUrl(childE.text()); - } else if (childE.tagName() == QLatin1String("UpdateFile")) { - UpdateFileInfo ufInfo; - ufInfo.compressedSize = childE.attribute(QLatin1String("CompressedSize")).toLongLong(); - ufInfo.uncompressedSize = childE.attribute(QLatin1String("UncompressedSize")).toLongLong(); - ufInfo.sha1sum = QByteArray::fromHex(childE.attribute(QLatin1String("sha1sum")).toLatin1()); - ufInfo.fileName = childE.text(); - info.updateFiles.append(ufInfo); } else if (childE.tagName() == QLatin1String("Licenses")) { QHash<QString, QVariant> licenseHash; const QDomNodeList licenseNodes = childE.childNodes(); @@ -171,19 +144,17 @@ bool UpdatesInfo::UpdatesInfoData::parsePackageUpdateElement(const QDomElement & if (!licenseHash.isEmpty()) info.data.insert(QLatin1String("Licenses"), licenseHash); } else if (childE.tagName() == QLatin1String("Version")) { - info.data.insert(QLatin1String("inheritVersionFrom"), childE.attribute(QLatin1String("inheritVersionFrom"))); + info.data.insert(QLatin1String("inheritVersionFrom"), + childE.attribute(QLatin1String("inheritVersionFrom"))); info.data[childE.tagName()] = childE.text(); } else if (childE.tagName() == QLatin1String("Description")) { - QString languageAttribute = childE.attribute(QLatin1String("xml:lang")).toLower(); - if (!info.data.contains(QLatin1String("Description")) && (languageAttribute.isEmpty())) info.data[childE.tagName()] = childE.text(); // overwrite default if we have a language specific description if (languageAttribute == QLocale().name().toLower()) info.data[childE.tagName()] = childE.text(); - } else { info.data[childE.tagName()] = childE.text(); } @@ -201,55 +172,6 @@ bool UpdatesInfo::UpdatesInfoData::parsePackageUpdateElement(const QDomElement & setInvalidContentError(tr("PackageUpdate element without ReleaseDate")); return false; } - if (info.updateFiles.isEmpty()) { - setInvalidContentError(tr("PackageUpdate element without UpdateFile")); - return false; - } - - updateInfoList.append(info); - return true; -} - -bool UpdatesInfo::UpdatesInfoData::parseCompatUpdateElement(const QDomElement &updateE) -{ - if (updateE.isNull()) - return false; - - UpdateInfo info; - info.type = CompatUpdate; - - QDomNodeList childNodes = updateE.childNodes(); - for (int i = 0; i < childNodes.count(); i++) { - QDomNode childNode = childNodes.at(i); - QDomElement childE = childNode.toElement(); - if (childE.isNull()) - continue; - - if (childE.tagName() == QLatin1String("ReleaseNotes")) { - info.data[childE.tagName()] = QUrl(childE.text()); - } else if (childE.tagName() == QLatin1String("UpdateFile")) { - UpdateFileInfo ufInfo; - ufInfo.fileName = childE.text(); - info.updateFiles.append(ufInfo); - } else { - info.data[childE.tagName()] = childE.text(); - } - } - - if (!info.data.contains(QLatin1String("CompatLevel"))) { - setInvalidContentError(tr("CompatUpdate element without CompatLevel")); - return false; - } - - if (!info.data.contains(QLatin1String("ReleaseDate"))) { - setInvalidContentError(tr("CompatUpdate element without ReleaseDate")); - return false; - } - - if (info.updateFiles.isEmpty()) { - setInvalidContentError(tr("CompatUpdate element without UpdateFile")); - return false; - } updateInfoList.append(info); return true; @@ -260,7 +182,7 @@ bool UpdatesInfo::UpdatesInfoData::parseCompatUpdateElement(const QDomElement &u // UpdatesInfo // UpdatesInfo::UpdatesInfo() - : d(new UpdatesInfo::UpdatesInfoData) + : d(new UpdatesInfoData) { } @@ -306,55 +228,19 @@ QString UpdatesInfo::applicationVersion() const return d->applicationVersion; } -int UpdatesInfo::compatLevel() const +int UpdatesInfo::updateInfoCount() const { - return d->compatLevel; -} - -int UpdatesInfo::updateInfoCount(int type) const -{ - if (type == AllUpdate) - return d->updateInfoList.count(); - - int count = 0; - for (int i = 0; i < d->updateInfoList.count(); ++i) { - if (d->updateInfoList.at(i).type == type) - ++count; - } - return count; + return d->updateInfoList.count(); } UpdateInfo UpdatesInfo::updateInfo(int index) const { if (index < 0 || index >= d->updateInfoList.count()) return UpdateInfo(); - return d->updateInfoList.at(index); } -QList<UpdateInfo> UpdatesInfo::updatesInfo(int type, int compatLevel) const +QList<UpdateInfo> UpdatesInfo::updatesInfo() const { - QList<UpdateInfo> list; - if (compatLevel == -1) { - if (type == AllUpdate) - return d->updateInfoList; - for (int i = 0; i < d->updateInfoList.count(); ++i) { - if (d->updateInfoList.at(i).type == type) - list.append(d->updateInfoList.at(i)); - } - } else { - for (int i = 0; i < d->updateInfoList.count(); ++i) { - UpdateInfo updateInfo = d->updateInfoList.at(i); - if (updateInfo.type == type) { - if (updateInfo.type == CompatUpdate) { - if (updateInfo.data.value(QLatin1String("CompatLevel")) == compatLevel) - list.append(updateInfo); - } else { - if (updateInfo.data.value(QLatin1String("RequiredCompatLevel")) == compatLevel) - list.append(updateInfo); - } - } - } - } - return list; + return d->updateInfoList; } |