2010-07-13 15:26:12 +02:00
|
|
|
/**************************************************************************
|
|
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
|
|
|
|
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
|
|
|
**
|
|
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
|
|
|
|
**
|
|
|
|
|
** Commercial Usage
|
|
|
|
|
**
|
|
|
|
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
|
|
|
|
** accordance with the Qt Commercial License Agreement provided with the
|
|
|
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
|
|
|
** a written agreement between you and Nokia.
|
|
|
|
|
**
|
|
|
|
|
** 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.
|
|
|
|
|
**
|
|
|
|
|
** If you are unsure which license is appropriate for your use, please
|
|
|
|
|
** contact the sales department at http://qt.nokia.com/contact.
|
|
|
|
|
**
|
|
|
|
|
**************************************************************************/
|
|
|
|
|
|
2010-07-12 11:07:36 +02:00
|
|
|
#ifndef MAEMODEPLOYSTEP_H
|
|
|
|
|
#define MAEMODEPLOYSTEP_H
|
|
|
|
|
|
2010-07-13 15:24:21 +02:00
|
|
|
#include "maemodeployable.h"
|
|
|
|
|
#include "maemodeviceconfigurations.h"
|
|
|
|
|
|
|
|
|
|
#include <coreplugin/ssh/sftpdefs.h>
|
2010-07-12 11:07:36 +02:00
|
|
|
#include <projectexplorer/buildstep.h>
|
|
|
|
|
|
2010-07-13 15:24:21 +02:00
|
|
|
#include <QtCore/QHash>
|
|
|
|
|
#include <QtCore/QList>
|
|
|
|
|
#include <QtCore/QMap>
|
|
|
|
|
#include <QtCore/QPair>
|
|
|
|
|
#include <QtCore/QSharedPointer>
|
|
|
|
|
|
2010-08-11 16:31:59 +02:00
|
|
|
// #define DEPLOY_VIA_MOUNT
|
|
|
|
|
|
2010-07-13 15:24:21 +02:00
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
|
class QEventLoop;
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifdef DEPLOY_VIA_MOUNT
|
|
|
|
|
class QTimer;
|
|
|
|
|
#endif
|
2010-07-13 15:24:21 +02:00
|
|
|
QT_END_NAMESPACE
|
|
|
|
|
|
|
|
|
|
namespace Core {
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifndef DEPLOY_VIA_MOUNT
|
2010-07-13 15:24:21 +02:00
|
|
|
class SftpChannel;
|
2010-08-11 16:31:59 +02:00
|
|
|
#endif
|
2010-07-13 15:24:21 +02:00
|
|
|
class SshConnection;
|
|
|
|
|
class SshRemoteProcess;
|
|
|
|
|
}
|
|
|
|
|
|
2010-07-12 11:07:36 +02:00
|
|
|
namespace Qt4ProjectManager {
|
|
|
|
|
namespace Internal {
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifdef DEPLOY_VIA_MOUNT
|
|
|
|
|
class MaemoRemoteMounter;
|
|
|
|
|
#endif
|
2010-07-14 12:21:35 +02:00
|
|
|
class MaemoDeployables;
|
2010-07-16 17:09:05 +02:00
|
|
|
class MaemoDeviceConfigListModel;
|
2010-07-13 15:24:21 +02:00
|
|
|
class MaemoPackageCreationStep;
|
2010-07-12 11:07:36 +02:00
|
|
|
|
|
|
|
|
class MaemoDeployStep : public ProjectExplorer::BuildStep
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
friend class MaemoDeployStepFactory;
|
|
|
|
|
public:
|
2010-07-16 14:00:41 +02:00
|
|
|
MaemoDeployStep(ProjectExplorer::BuildStepList *bc);
|
2010-07-13 15:24:21 +02:00
|
|
|
virtual ~MaemoDeployStep();
|
|
|
|
|
MaemoDeviceConfig deviceConfig() const;
|
2010-07-16 17:09:05 +02:00
|
|
|
MaemoDeviceConfigListModel *deviceConfigModel() const;
|
2010-07-13 15:24:21 +02:00
|
|
|
bool currentlyNeedsDeployment(const QString &host,
|
|
|
|
|
const MaemoDeployable &deployable) const;
|
|
|
|
|
void setDeployed(const QString &host, const MaemoDeployable &deployable);
|
2010-07-14 12:21:35 +02:00
|
|
|
MaemoDeployables *deployables() const { return m_deployables; }
|
2010-07-13 15:24:21 +02:00
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
void done();
|
|
|
|
|
void error();
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
void start();
|
2010-07-14 08:33:17 +02:00
|
|
|
void stop();
|
2010-07-13 15:24:21 +02:00
|
|
|
void handleConnected();
|
|
|
|
|
void handleConnectionFailure();
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifdef DEPLOY_VIA_MOUNT
|
|
|
|
|
void handleMounted();
|
|
|
|
|
void handleUnmounted();
|
|
|
|
|
void handleMountError(const QString &errorMsg);
|
|
|
|
|
void handleProgressReport(const QString &progressMsg);
|
|
|
|
|
void handleCopyProcessFinished(int exitStatus);
|
|
|
|
|
void handleCleanupTimeout();
|
|
|
|
|
#else
|
2010-07-13 15:24:21 +02:00
|
|
|
void handleSftpChannelInitialized();
|
|
|
|
|
void handleSftpChannelInitializationFailed(const QString &error);
|
|
|
|
|
void handleSftpJobFinished(Core::SftpJobId job, const QString &error);
|
|
|
|
|
void handleLinkProcessFinished(int exitStatus);
|
2010-08-11 16:31:59 +02:00
|
|
|
#endif
|
2010-07-13 15:24:21 +02:00
|
|
|
void handleInstallationFinished(int exitStatus);
|
|
|
|
|
void handleInstallerOutput(const QByteArray &output);
|
|
|
|
|
void handleInstallerErrorOutput(const QByteArray &output);
|
2010-07-12 11:07:36 +02:00
|
|
|
|
|
|
|
|
private:
|
2010-07-16 14:00:41 +02:00
|
|
|
MaemoDeployStep(ProjectExplorer::BuildStepList *bc,
|
2010-07-12 11:07:36 +02:00
|
|
|
MaemoDeployStep *other);
|
|
|
|
|
virtual bool init();
|
|
|
|
|
virtual void run(QFutureInterface<bool> &fi);
|
|
|
|
|
virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
|
|
|
|
|
virtual bool immutable() const { return true; }
|
2010-07-13 15:24:21 +02:00
|
|
|
virtual QVariantMap toMap() const;
|
|
|
|
|
virtual bool fromMap(const QVariantMap &map);
|
|
|
|
|
|
|
|
|
|
void ctor();
|
|
|
|
|
void raiseError(const QString &error);
|
2010-07-15 10:29:38 +02:00
|
|
|
void writeOutput(const QString &text, ProjectExplorer::BuildStep::OutputFormat = BuildStep::NormalOutput);
|
2010-07-13 15:24:21 +02:00
|
|
|
void addDeployTimesToMap(QVariantMap &map) const;
|
|
|
|
|
void getDeployTimesFromMap(const QVariantMap &map);
|
|
|
|
|
const MaemoPackageCreationStep *packagingStep() const;
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifdef DEPLOY_VIA_MOUNT
|
|
|
|
|
QString deployMountPoint() const;
|
|
|
|
|
void deployNextFile();
|
|
|
|
|
#else
|
2010-07-13 15:24:21 +02:00
|
|
|
bool deploy(const MaemoDeployable &deployable);
|
2010-08-11 16:31:59 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef DEPLOY_VIA_MOUNT
|
2010-07-13 15:24:21 +02:00
|
|
|
QString uploadDir() const;
|
2010-08-11 16:31:59 +02:00
|
|
|
#endif
|
2010-07-12 11:07:36 +02:00
|
|
|
|
|
|
|
|
static const QLatin1String Id;
|
2010-07-13 15:24:21 +02:00
|
|
|
|
2010-07-14 12:21:35 +02:00
|
|
|
MaemoDeployables * const m_deployables;
|
2010-07-13 15:24:21 +02:00
|
|
|
QSharedPointer<Core::SshConnection> m_connection;
|
2010-08-11 16:31:59 +02:00
|
|
|
#ifdef DEPLOY_VIA_MOUNT
|
|
|
|
|
typedef QPair<MaemoDeployable, QSharedPointer<Core::SshRemoteProcess> > DeployAction;
|
|
|
|
|
QScopedPointer<DeployAction> m_currentDeployAction;
|
|
|
|
|
QList<MaemoDeployable> m_filesToCopy;
|
|
|
|
|
MaemoRemoteMounter *m_mounter;
|
|
|
|
|
QTimer *m_cleanupTimer;
|
|
|
|
|
bool m_canStart;
|
|
|
|
|
#else
|
2010-07-13 15:24:21 +02:00
|
|
|
QSharedPointer<Core::SftpChannel> m_uploader;
|
|
|
|
|
typedef QPair<MaemoDeployable, QString> DeployInfo;
|
|
|
|
|
QMap<Core::SftpJobId, DeployInfo> m_uploadsInProgress;
|
|
|
|
|
QMap<QSharedPointer<Core::SshRemoteProcess>, MaemoDeployable> m_linksInProgress;
|
2010-08-11 16:31:59 +02:00
|
|
|
#endif
|
|
|
|
|
QSharedPointer<Core::SshRemoteProcess> m_installer;
|
|
|
|
|
|
2010-07-13 15:24:21 +02:00
|
|
|
bool m_stopped;
|
2010-08-11 16:31:59 +02:00
|
|
|
bool m_needsInstall;
|
|
|
|
|
bool m_connecting;
|
2010-07-13 15:24:21 +02:00
|
|
|
typedef QPair<MaemoDeployable, QString> DeployablePerHost;
|
|
|
|
|
QHash<DeployablePerHost, QDateTime> m_lastDeployed;
|
2010-07-16 17:09:05 +02:00
|
|
|
MaemoDeviceConfigListModel *m_deviceConfigModel;
|
2010-07-13 15:24:21 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class MaemoDeployEventHandler : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
MaemoDeployEventHandler(MaemoDeployStep *deployStep,
|
|
|
|
|
QFutureInterface<bool> &future);
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
void handleDeployingDone();
|
|
|
|
|
void handleDeployingFailed();
|
|
|
|
|
void checkForCanceled();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const MaemoDeployStep * const m_deployStep;
|
|
|
|
|
const QFutureInterface<bool> m_future;
|
|
|
|
|
QEventLoop * const m_eventLoop;
|
2010-07-12 11:07:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace Internal
|
|
|
|
|
} // namespace Qt4ProjectManager
|
|
|
|
|
|
|
|
|
|
#endif // MAEMODEPLOYSTEP_H
|