1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
4 ** Contact: BlackBerry (qt@blackberry.com), KDAB (info@kdab.com)
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #pragma once
27 
28 #include <QDialog>
29 
30 #include <projectexplorer/deployablefile.h>
31 #include <projectexplorer/devicesupport/idevice.h>
32 
33 namespace QSsh {
34 class SshRemoteProcessRunner;
35 }
36 
37 namespace RemoteLinux {
38 class GenericDirectUploadService;
39 }
40 
41 namespace Qnx {
42 namespace Internal {
43 
44 namespace Ui {
45 class QnxDeployQtLibrariesDialog;
46 }
47 
48 class QnxDeployQtLibrariesDialog : public QDialog
49 {
50     Q_OBJECT
51 
52 public:
53     enum State {
54         Inactive,
55         CheckingRemoteDirectory,
56         RemovingRemoteDirectory,
57         Uploading
58     };
59 
60     explicit QnxDeployQtLibrariesDialog(const ProjectExplorer::IDevice::ConstPtr &device,
61                                         QWidget *parent = nullptr);
62     ~QnxDeployQtLibrariesDialog() override;
63 
64     int execAndDeploy(int qtVersionId, const QString &remoteDirectory);
65 
66 protected:
67     void closeEvent(QCloseEvent *event) override;
68 
69 private slots:
70     void deployLibraries();
71     void updateProgress(const QString &progressMessage);
72     void handleUploadFinished();
73 
74     void handleRemoteProcessError();
75     void handleRemoteProcessCompleted();
76 
77 private:
78     QList<ProjectExplorer::DeployableFile> gatherFiles();
79     QList<ProjectExplorer::DeployableFile> gatherFiles(const QString &dirPath,
80             const QString &baseDir = QString(),
81             const QStringList &nameFilters = QStringList());
82 
83     QString fullRemoteDirectory() const;
84     void checkRemoteDirectoryExistance();
85     void removeRemoteDirectory();
86     void startUpload();
87 
88     Ui::QnxDeployQtLibrariesDialog *m_ui;
89 
90     QSsh::SshRemoteProcessRunner *m_processRunner;
91     RemoteLinux::GenericDirectUploadService *m_uploadService;
92 
93     ProjectExplorer::IDevice::ConstPtr m_device;
94 
95     int m_progressCount;
96 
97     State m_state;
98 };
99 
100 } // namespace Internal
101 } // namespace Qnx
102