Showing the changes to interface/src/scripting/ScreenshareScriptingInterface.cpp (1 of 2 files). Show all
Unified · Split
| @@ -10,7 +10,6 @@ · 9 unmodified lines | ||
| 10 | 10 | // |
| 11 | 11 | |
| 12 | 12 | #include "ScreenshareScriptingInterface.h" |
| 13 | −#include <QProcess> | |
| 14 | 13 | #include <QThread> |
| 15 | 14 | #include <QDesktopServices> |
| 16 | 15 | #include <QUrl> |
| @@ -35,7 +34,12 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 18 unmodified lines | ||
| 35 | 34 | return; |
| 36 | 35 | } |
| 37 | 36 | |
| 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)); | |
| 39 | 43 | |
| 40 | 44 | QFileInfo screenshareExecutable(SCREENSHARE_EXE_PATH); |
| 41 | 45 | if (!screenshareExecutable.exists() || !screenshareExecutable.isFile()) { |
| @@ -55,21 +59,27 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 13 unmodified lines | ||
| 55 | 59 | arguments << "--apiKey=" + apiKey; |
| 56 | 60 | arguments << "--sessionID=" + sessionID; |
| 57 | 61 | |
| 58 | − QProcess* electronProcess = new QProcess(this); | |
| 59 | − | |
| 60 | − connect(electronProcess, &QProcess::errorOccurred, | |
| 62 | + connect(_screenshareProcess.get(), &QProcess::errorOccurred, | |
| 61 | 63 | [=](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, | |
| 64 | 66 | [=](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), | |
| 66 | 68 | [=](int exitCode, QProcess::ExitStatus exitStatus) { |
| 67 | 69 | qDebug() << "ZRF QProcess::finished. `exitCode`:" << exitCode << "`exitStatus`:" << exitStatus; |
| 70 | + emit screenshareStopped(); | |
| 68 | 71 | }); |
| 69 | 72 | |
| 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); | |
| 75 | 74 | }; |
| 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 | +} | |