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
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
76void 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}