History

Add screenshareStopped signal; use std::unique_ptr<QProcess>

Zach Fox committed 7 years ago

Commit 1e2fcf81 parent c22f5092 files · +30 −13Browse files

Showing the changes to interface/src/scripting/ScreenshareScriptingInterface.cpp (1 of 2 files). Show all

Unified · Split

interface/src/scripting/ScreenshareScriptingInterface.cpp+23−13
@@ -10,7 +10,6 @@ · 9 unmodified lines
1010 //
1111
1212 #include "ScreenshareScriptingInterface.h"
13−#include <QProcess>
1413 #include <QThread>
1514 #include <QDesktopServices>
1615 #include <QUrl>
@@ -35,7 +34,12 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 18 unmodified lines
3534 return;
3635 }
3736
38− qDebug() << "ZRF: Inside startScreenshare(). `SCREENSHARE_EXE_PATH`:" << SCREENSHARE_EXE_PATH;
37+ if (_screenshareProcess && _screenshareProcess->state() != QProcess::NotRunning) {
38+ qDebug() << "Screenshare process already running. Aborting...";
39+ return;
40+ }
41+
42+ _screenshareProcess.reset(new QProcess(this));
3943
4044 QFileInfo screenshareExecutable(SCREENSHARE_EXE_PATH);
4145 if (!screenshareExecutable.exists() || !screenshareExecutable.isFile()) {
@@ -55,21 +59,27 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 13 unmodified lines
5559 arguments << "--apiKey=" + apiKey;
5660 arguments << "--sessionID=" + sessionID;
5761
58− QProcess* electronProcess = new QProcess(this);
59−
60− connect(electronProcess, &QProcess::errorOccurred,
62+ connect(_screenshareProcess.get(), &QProcess::errorOccurred,
6163 [=](QProcess::ProcessError error) { qDebug() << "ZRF QProcess::errorOccurred. `error`:" << error; });
62− connect(electronProcess, &QProcess::started, [=]() { qDebug() << "ZRF QProcess::started"; });
63− connect(electronProcess, &QProcess::stateChanged,
64+ connect(_screenshareProcess.get(), &QProcess::started, [=]() { qDebug() << "ZRF QProcess::started"; });
65+ connect(_screenshareProcess.get(), &QProcess::stateChanged,
6466 [=](QProcess::ProcessState newState) { qDebug() << "ZRF QProcess::stateChanged. `newState`:" << newState; });
65− connect(electronProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
67+ connect(_screenshareProcess.get(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
6668 [=](int exitCode, QProcess::ExitStatus exitStatus) {
6769 qDebug() << "ZRF QProcess::finished. `exitCode`:" << exitCode << "`exitStatus`:" << exitStatus;
70+ emit screenshareStopped();
6871 });
6972
70− // Note for Milad:
71− // We'll have to have equivalent lines of code for MacOS.
72−#ifdef Q_OS_WIN
73− electronProcess->start(SCREENSHARE_EXE_PATH, arguments);
74−#endif
73+ _screenshareProcess->start(SCREENSHARE_EXE_PATH, arguments);
7574 };
75+
76+void ScreenshareScriptingInterface::stopScreenshare() {
77+ if (QThread::currentThread() != thread()) {
78+ QMetaObject::invokeMethod(this, "stopScreenshare");
79+ return;
80+ }
81+
82+ if (_screenshareProcess->state() != QProcess::NotRunning) {
83+ _screenshareProcess->terminate();
84+ }
85+}