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 | #include "ScreenshareScriptingInterface.h" | 12 | #include "ScreenshareScriptingInterface.h" |
| 13 | #include <QProcess> | ||
| 14 | #include <QThread> | 13 | #include <QThread> |
| 15 | #include <QDesktopServices> | 14 | #include <QDesktopServices> |
| 16 | #include <QUrl> | 15 | #include <QUrl> |
| @@ -35,7 +34,12 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 18 unmodified lines | |||
| 35 | return; | 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 | QFileInfo screenshareExecutable(SCREENSHARE_EXE_PATH); | 44 | QFileInfo screenshareExecutable(SCREENSHARE_EXE_PATH); |
| 41 | if (!screenshareExecutable.exists() || !screenshareExecutable.isFile()) { | 45 | if (!screenshareExecutable.exists() || !screenshareExecutable.isFile()) { |
| @@ -55,21 +59,27 @@ void ScreenshareScriptingInterface::startScreenshare(QString displayName, QStrin · 13 unmodified lines | |||
| 55 | arguments << "--apiKey=" + apiKey; | 59 | arguments << "--apiKey=" + apiKey; |
| 56 | arguments << "--sessionID=" + sessionID; | 60 | arguments << "--sessionID=" + sessionID; |
| 57 | 61 | ||
| 58 | QProcess* electronProcess = new QProcess(this); | 62 | connect(_screenshareProcess.get(), &QProcess::errorOccurred, |
| 59 | |||
| 60 | connect(electronProcess, &QProcess::errorOccurred, | ||
| 61 | [=](QProcess::ProcessError error) { qDebug() << "ZRF QProcess::errorOccurred. `error`:" << error; }); | 63 | [=](QProcess::ProcessError error) { qDebug() << "ZRF QProcess::errorOccurred. `error`:" << error; }); |
| 62 | connect(electronProcess, &QProcess::started, [=]() { qDebug() << "ZRF QProcess::started"; }); | 64 | connect(_screenshareProcess.get(), &QProcess::started, [=]() { qDebug() << "ZRF QProcess::started"; }); |
| 63 | connect(electronProcess, &QProcess::stateChanged, | 65 | connect(_screenshareProcess.get(), &QProcess::stateChanged, |
| 64 | [=](QProcess::ProcessState newState) { qDebug() << "ZRF QProcess::stateChanged. `newState`:" << newState; }); | 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 | [=](int exitCode, QProcess::ExitStatus exitStatus) { | 68 | [=](int exitCode, QProcess::ExitStatus exitStatus) { |
| 67 | qDebug() << "ZRF QProcess::finished. `exitCode`:" << exitCode << "`exitStatus`:" << exitStatus; | 69 | qDebug() << "ZRF QProcess::finished. `exitCode`:" << exitCode << "`exitStatus`:" << exitStatus; |
| 70 | emit screenshareStopped(); | ||
| 68 | }); | 71 | }); |
| 69 | 72 | ||
| 70 | // Note for Milad: | 73 | _screenshareProcess->start(SCREENSHARE_EXE_PATH, arguments); |
| 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 | ||
| 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 | } | ||