diff options
author | Iikka Eklund <iikka.eklund@theqtcompany.com> | 2016-01-20 14:18:22 +0200 |
---|---|---|
committer | Iikka Eklund <iikka.eklund@theqtcompany.com> | 2016-01-20 14:18:30 +0200 |
commit | 2af57eb8c8351e09f3224128b3593aa160c6c424 (patch) | |
tree | 410ee4a7da7485937f21fd2d11e0cb12cdfb61f8 /src/libs/installer/component.cpp | |
parent | 8bf239c376285f9f5254d78ad263d46ceb944a33 (diff) | |
parent | 0a54640535049bf5124a7b4414bb75a8b2075087 (diff) |
Merge remote-tracking branch 'origin/2.0'
Conflicts:
installerfw.pri
src/libs/kdtools/kdgenericfactory.cpp
src/libs/kdtools/kdgenericfactory.h
src/libs/kdtools/kdupdaterapplication.cpp
src/libs/kdtools/kdupdaterapplication.h
src/libs/kdtools/kdupdaterupdatesourcesinfo.cpp
src/libs/kdtools/kdupdaterupdatesourcesinfo.h
sync.profile
Change-Id: Ifdc8b065f89b7e241bd3788ed79768e21888161f
Diffstat (limited to 'src/libs/installer/component.cpp')
-rw-r--r-- | src/libs/installer/component.cpp | 87 |
1 files changed, 52 insertions, 35 deletions
diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp index 4ffefe384..07f526a21 100644 --- a/src/libs/installer/component.cpp +++ b/src/libs/installer/component.cpp @@ -1,17 +1,17 @@ /************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** 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 The Qt Company. For licensing terms -** and conditions see http://qt.io/terms-conditions. For further +** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage @@ -27,7 +27,6 @@ ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** ** $QT_END_LICENSE$ ** **************************************************************************/ @@ -55,6 +54,10 @@ #include <QtUiTools/QUiLoader> +#include <private/qv8engine_p.h> +#include <private/qv4scopedvalue_p.h> +#include <private/qv4global_p.h> + #include <algorithm> using namespace QInstaller; @@ -699,11 +702,11 @@ void Component::createOperationsForPath(const QString &path) if (fi.isFile()) { static const QString copy = QString::fromLatin1("Copy"); - addOperation(copy, fi.filePath(), target); + addOperation(copy, QStringList() << fi.filePath() << target); } else if (fi.isDir()) { qApp->processEvents(); static const QString mkdir = QString::fromLatin1("Mkdir"); - addOperation(mkdir, target); + addOperation(mkdir, QStringList(target)); QDirIterator it(fi.filePath()); while (it.hasNext()) @@ -743,7 +746,7 @@ void Component::createOperationsForArchive(const QString &archive) if (isZip) { // archives get completely extracted per default (if the script isn't doing other stuff) - addOperation(QLatin1String("Extract"), archive, QLatin1String("@TargetDir@")); + addOperation(QLatin1String("Extract"), QStringList() << archive << QLatin1String("@TargetDir@")); } else { createOperationsForPath(archive); } @@ -1004,23 +1007,44 @@ Operation *Component::createOperation(const QString &operationName, const QStrin return operation; } -/*! - Convenience method for calling the operation \a operation with up to ten parameters: - \a parameter1, \a parameter2, \a parameter3, \a parameter4, \a parameter5, \a parameter6, - \a parameter7, \a parameter8, \a parameter9, and \a parameter10. +namespace { - \sa {component::addOperation}{component.addOperation} -*/ -bool Component::addOperation(const QString &operation, const QString ¶meter1, const QString ¶meter2, - const QString ¶meter3, const QString ¶meter4, const QString ¶meter5, const QString ¶meter6, - const QString ¶meter7, const QString ¶meter8, const QString ¶meter9, const QString ¶meter10) +inline bool convert(QQmlV4Function *func, QStringList *toArgs) { - if (Operation *op = createOperation(operation, parameter1, parameter2, parameter3, parameter4, parameter5, - parameter6, parameter7, parameter8, parameter9, parameter10)) { - addOperation(op); - return true; + if (func->length() < 2) + return false; + + QV4::Scope scope(func->v4engine()); + QV4::ScopedValue val(scope); + val = (*func)[0]; + + *toArgs << val->toQString(); + for (int i = 1; i < func->length(); i++) { + val = (*func)[i]; + if (val->isObject() && val->asObject()->isArrayObject()) { + QV4::ScopedValue valtmp(scope); + QV4::Object *array = val->asObject(); + uint length = array->getLength(); + for (uint ii = 0; ii < length; ++ii) { + valtmp = array->getIndexed(ii); + *toArgs << valtmp->toQStringNoThrow(); + } + } else { + *toArgs << val->toQString(); + } } + return true; +} +} +/*! + \internal +*/ +bool Component::addOperation(QQmlV4Function *func) +{ + QStringList args; + if (convert(func, &args)) + return addOperation(args[0], args.mid(1)); return false; } @@ -1028,6 +1052,8 @@ bool Component::addOperation(const QString &operation, const QString ¶meter1 Creates and adds an installation operation for \a operation. Add any number of \a parameters. The variables that the parameters contain, such as \c @TargetDir@, are replaced with their values. + + \sa {component::addOperation}{component.addOperation} */ bool Component::addOperation(const QString &operation, const QStringList ¶meters) { @@ -1040,23 +1066,13 @@ bool Component::addOperation(const QString &operation, const QStringList ¶me } /*! - Convenience method for calling the elevated operation \a operation with up to ten parameters: - \a parameter1, \a parameter2, \a parameter3, \a parameter4, \a parameter5, \a parameter6, - \a parameter7, \a parameter8, \a parameter9, and \a parameter10. - - \sa {component::addElevatedOperation}{component.addElevatedOperation} + \internal */ -bool Component::addElevatedOperation(const QString &operation, const QString ¶meter1, - const QString ¶meter2, const QString ¶meter3, const QString ¶meter4, const QString ¶meter5, - const QString ¶meter6, const QString ¶meter7, const QString ¶meter8, const QString ¶meter9, - const QString ¶meter10) +bool Component::addElevatedOperation(QQmlV4Function *func) { - if (Operation *op = createOperation(operation, parameter1, parameter2, parameter3, parameter4, parameter5, - parameter6, parameter7, parameter8, parameter9, parameter10)) { - addElevatedOperation(op); - return true; - } - + QStringList args; + if (convert(func, &args)) + return addElevatedOperation(args[0], args.mid(1)); return false; } @@ -1065,6 +1081,7 @@ bool Component::addElevatedOperation(const QString &operation, const QString &pa The variables that the parameters contain, such as \c @TargetDir@, are replaced with their values. The operation is executed with elevated rights. + \sa {component::addElevatedOperation}{component.addElevatedOperation} */ bool Component::addElevatedOperation(const QString &operation, const QStringList ¶meters) { |