diff options
author | Svetlana Abramenkova <sabramenkova@luxoft.com> | 2019-09-27 19:06:56 +0300 |
---|---|---|
committer | Svetlana Abramenkova <sabramenkova@luxoft.com> | 2019-10-08 15:40:30 +0300 |
commit | fbcaea63a02187bcd2a2392bb961be3cbb292152 (patch) | |
tree | 9d30f9f2a63a4dc018f2a675b71390666b1eb2c5 | |
parent | 75fdf3a9d4f6af8b86bb7ec8628038a3e424a875 (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.cpp | 3 | ||||
-rw-r--r-- | src/bench/runtimemanager.cpp | 33 | ||||
-rw-r--r-- | src/bench/runtimemanager.h | 3 | ||||
-rw-r--r-- | src/bench/runtimeprocess.cpp | 45 | ||||
-rw-r--r-- | src/bench/runtimeprocess.h | 3 | ||||
-rw-r--r-- | src/widgets/logview.h | 2 |
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 ¤tFile) { - 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 }; |