aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetlana Abramenkova <sabramenkova@luxoft.com>2019-09-27 19:06:56 +0300
committerSvetlana Abramenkova <sabramenkova@luxoft.com>2019-10-08 15:40:30 +0300
commitfbcaea63a02187bcd2a2392bb961be3cbb292152 (patch)
tree9d30f9f2a63a4dc018f2a675b71390666b1eb2c5
parent75fdf3a9d4f6af8b86bb7ec8628038a3e424a875 (diff)
stop preview after workspace change
Change-Id: I4f39a8e1378db5c8f40304bfd43079eafc07b39b Fixes: AUTOSUITE-1245 Reviewed-by: Nikolay Zamotaev <nzamotaev@luxoft.com>
-rw-r--r--src/bench/mainwindow.cpp3
-rw-r--r--src/bench/runtimemanager.cpp33
-rw-r--r--src/bench/runtimemanager.h3
-rw-r--r--src/bench/runtimeprocess.cpp45
-rw-r--r--src/bench/runtimeprocess.h3
-rw-r--r--src/widgets/logview.h2
6 files changed, 70 insertions, 19 deletions
diff --git a/src/bench/mainwindow.cpp b/src/bench/mainwindow.cpp
index 1b22130..d8ffb5e 100644
--- a/src/bench/mainwindow.cpp
+++ b/src/bench/mainwindow.cpp
@@ -670,11 +670,12 @@ void MainWindow::openProjectFile(const QString &path)
}
s.endArray();
+ m_runtimeManager->restartAll();
+
setImportPaths(paths);
QString path = QDir(m_projectManager->projectLocation()).absoluteFilePath(m_projectManager->workspace());
setWorkspace(m_projectManager->workspace());
activateDocument(LiveDocument(m_projectManager->mainDocument()));
- m_runtimeManager->restartAll();
}
else {
qWarning() << "Unable to read project document: "<<path;
diff --git a/src/bench/runtimemanager.cpp b/src/bench/runtimemanager.cpp
index c6614a1..4049819 100644
--- a/src/bench/runtimemanager.cpp
+++ b/src/bench/runtimemanager.cpp
@@ -128,9 +128,24 @@ void RuntimeManager::onPrimeRuntimeChanged()
void RuntimeManager::setPrimeCurrentFile(const LiveDocument &currentFile)
{
- if (!currentFile.isFileIn(m_engine->workspace()) || m_primeRuntime->state() != QProcess::Running)
+ if (!currentFile.isFileIn(m_engine->workspace())) {
+ qCritical() << "The selected file for preview is not located in the workspace. File: " << currentFile.relativeFilePath();
return;
- m_primeRuntime->setCurrentFile(currentFile);
+ }
+
+ if (m_primeRuntime->state() != QProcess::Running) {
+ QStringList arguments = argumentsList(Constants::PRIMERUNTIME_PORT(), "Prime QML Live Runtime", true);
+
+ if (m_engine == nullptr) {
+ qCritical() << "Failed to start Prime QML Live Runtime: nullptr QML engine object";
+ return;
+ }
+
+ m_primeRuntime->setLiveHubEngine(m_engine);
+ m_primeRuntime->start(m_runtimeBinaryPath, arguments);
+ }
+
+ m_primeRuntime->setCurrentFile(currentFile);
}
void RuntimeManager::initConnectToServer()
@@ -298,5 +313,17 @@ void RuntimeManager::restartAll()
emit logWidgetRemoved(m_logDocks.at(i));
}
- restartPrimeRuntime();
+ stopPrimeRuntime();
+}
+
+void RuntimeManager::stopPrimeRuntime()
+{
+ if (m_primeRuntime->state() == QProcess::Running) {
+ m_primeRuntime->terminate();
+ }
+ if (!m_primeRuntime->waitForFinished(1000)) {
+ m_primeRuntime->kill();
+ }
+ m_primeRuntime->clearLog();
+ m_primeRuntime->remoteLog(LogView::InternalMsgType::InternalInfo, "Please select file for preview.");
}
diff --git a/src/bench/runtimemanager.h b/src/bench/runtimemanager.h
index 63ab2e4..f4fffe5 100644
--- a/src/bench/runtimemanager.h
+++ b/src/bench/runtimemanager.h
@@ -57,6 +57,8 @@ public:
private:
QStringList argumentsList(const int& port, const QString& titles, const bool hideButtons = false);
+ void restartPrimeRuntime();
+ void stopPrimeRuntime();
signals:
void logWidgetAdded(QDockWidget* log);
@@ -71,7 +73,6 @@ public slots:
void onConnected();
void onRuntimeStarted();
void updateRuntimePath(const QString& path);
- void restartPrimeRuntime();
void onError(QProcess::ProcessError error);
private:
diff --git a/src/bench/runtimeprocess.cpp b/src/bench/runtimeprocess.cpp
index 8d35a9c..d3c61b5 100644
--- a/src/bench/runtimeprocess.cpp
+++ b/src/bench/runtimeprocess.cpp
@@ -35,6 +35,7 @@
RuntimeProcess::RuntimeProcess(QObject *parent, int port, bool ismaster) :
QProcess(parent)
,m_ismaster(ismaster)
+ ,m_doNotConnect(false)
,m_port(port)
,m_engine(nullptr)
,m_document(nullptr)
@@ -49,6 +50,7 @@ RuntimeProcess::RuntimeProcess(QObject *parent, int port, bool ismaster) :
//transmit log messages to appropriate LogView
connect(this, &RuntimeProcess::readyReadStandardError, this, &RuntimeProcess::updateErrors);
connect(this, &RuntimeProcess::readyReadStandardOutput, this, &RuntimeProcess::updateOutput);
+ connect(this, &RuntimeProcess::stateChanged, this, &RuntimeProcess::onStateChanged);
}
RuntimeProcess::~RuntimeProcess()
@@ -94,25 +96,29 @@ void RuntimeProcess::setLiveHubEngine(LiveHubEngine *engine)
void RuntimeProcess::connectToServer()
{
- qInfo()<<"RuntimeProcess::connectToServer()"<< Constants::LOCAL_HOST() <<
- " port=" << m_port << m_publisher.state();
+ if (!m_doNotConnect) {
+ qInfo()<<"RuntimeProcess::connectToServer()"<< Constants::LOCAL_HOST() <<
+ " port=" << m_port << m_publisher.state();
- if (m_publisher.state() != QAbstractSocket::UnconnectedState)
- return;
+ if (m_publisher.state() != QAbstractSocket::UnconnectedState)
+ return;
- m_publisher.connectToServer(Constants::LOCAL_HOST(), m_port);
+ m_publisher.connectToServer(Constants::LOCAL_HOST(), m_port);
+ }
}
void RuntimeProcess::connectToServer(int msecs)
{
- qInfo()<<"RuntimeProcess::connectToServer(msecs)"<< Constants::LOCAL_HOST() <<
- " port=" << m_port << m_publisher.state();
- QThread::msleep(msecs);
+ if (!m_doNotConnect) {
+ qInfo()<<"RuntimeProcess::connectToServer(msecs)"<< Constants::LOCAL_HOST() <<
+ " port=" << m_port << m_publisher.state();
+ QThread::msleep(msecs);
- if (m_publisher.state() != QAbstractSocket::UnconnectedState)
- return;
+ if (m_publisher.state() != QAbstractSocket::UnconnectedState)
+ return;
- m_publisher.connectToServer(Constants::LOCAL_HOST(), m_port, msecs);
+ m_publisher.connectToServer(Constants::LOCAL_HOST(), m_port, msecs);
+ }
}
void RuntimeProcess::onConnected()
@@ -125,7 +131,7 @@ void RuntimeProcess::onConnected()
void RuntimeProcess::onDisconnected()
{
qInfo()<<"RuntimeProcess::onDisconnected ismaster="<<m_ismaster;
- if (m_ismaster){
+ if (m_ismaster && !m_doNotConnect){
connectToServer();
}
}
@@ -160,3 +166,18 @@ void RuntimeProcess::updateOutput()
QByteArray log = readAllStandardOutput();
emit remoteLog(QtInfoMsg, log.data());
}
+
+void RuntimeProcess::onStateChanged()
+{
+ switch (state()) {
+ case QProcess::Running:
+ m_doNotConnect = false;
+ break;
+ case QProcess::Starting:
+ case QProcess::NotRunning:
+ m_doNotConnect = true;
+ break;
+ default:
+ break;
+ }
+}
diff --git a/src/bench/runtimeprocess.h b/src/bench/runtimeprocess.h
index 5e1a01b..24dac96 100644
--- a/src/bench/runtimeprocess.h
+++ b/src/bench/runtimeprocess.h
@@ -61,9 +61,10 @@ private Q_SLOTS:
void sendDocument(const LiveDocument &document);
void updateOutput();
void updateErrors();
-
+ void onStateChanged();
private:
bool m_ismaster;
+ bool m_doNotConnect;
int m_port;
int m_waitToConnect;
RemotePublisher m_publisher;
diff --git a/src/widgets/logview.h b/src/widgets/logview.h
index 9a5bdb9..60909aa 100644
--- a/src/widgets/logview.h
+++ b/src/widgets/logview.h
@@ -44,7 +44,7 @@ class LogView : public QWidget
{
Q_OBJECT
public:
- enum {
+ enum InternalMsgType {
InternalInfo = QtDebugMsg - 1,
InternalError = QtDebugMsg - 2
};