History

First steps towards a screenshare app

milad committed 7 years ago

Commit ea373ac1 parent faa192a22 files · +3068 −359Browse files

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

Unified · Split

interface/src/scripting/ScreenshareScriptingInterface.cpp+70−0
@@ -0,0 +1,70 @@
1+//
2+// ScreenshareScriptingInterface.cpp
3+// interface/src/scripting/
4+//
5+// Created by Milad Nazeri on 2019-10-23.
6+// Copyright 2019 High Fidelity, Inc.
7+//
8+// Distributed under the Apache License, Version 2.0.
9+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10+//
11+
12+#include "ScreenshareScriptingInterface.h"
13+#include <QProcess>
14+#include <QThread>
15+#include <QDesktopServices>
16+#include <QUrl>
17+#include <QCoreApplication>
18+
19+
20+ScreenshareScriptingInterface::ScreenshareScriptingInterface() {
21+
22+};
23+
24+void ScreenshareScriptingInterface::startScreenshare(QString displayName, QString userName, QString token, QString sessionID, QString apiKey, QString fileLocation) {
25+ if (QThread::currentThread() != thread()) {
26+ // We must start a new QProcess from the main thread.
27+ QMetaObject::invokeMethod(
28+ this, "startScreenshare",
29+ Q_ARG(QString, displayName),
30+ Q_ARG(QString, userName),
31+ Q_ARG(QString, token),
32+ Q_ARG(QString, sessionID),
33+ Q_ARG(QString, apiKey),
34+ Q_ARG(QString, fileLocation)
35+ );
36+ return;
37+ }
38+
39+ qDebug() << "ZRF: Inside startScreenshare(). `SCREENSHARE_EXE_PATH`:" << SCREENSHARE_EXE_PATH;
40+
41+ if (displayName.isEmpty() || userName.isEmpty() || token.isEmpty() || sessionID.isEmpty() || apiKey.isEmpty()) {
42+ qDebug() << "Screenshare executable can't launch without connection info.";
43+ return;
44+ }
45+
46+ QStringList arguments;
47+ arguments << "--userName=" + userName;
48+ arguments << "--displayName=" + displayName;
49+ arguments << "--token=" + token;
50+ arguments << "--apiKey=" + apiKey;
51+ arguments << "--sessionID=" + sessionID;
52+
53+ QProcess* electronProcess = new QProcess(this);
54+
55+ connect(electronProcess, &QProcess::errorOccurred,
56+ [=](QProcess::ProcessError error) { qDebug() << "ZRF QProcess::errorOccurred. `error`:" << error; });
57+ connect(electronProcess, &QProcess::started, [=]() { qDebug() << "ZRF QProcess::started"; });
58+ connect(electronProcess, &QProcess::stateChanged,
59+ [=](QProcess::ProcessState newState) { qDebug() << "ZRF QProcess::stateChanged. `newState`:" << newState; });
60+ connect(electronProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
61+ [=](int exitCode, QProcess::ExitStatus exitStatus) {
62+ qDebug() << "ZRF QProcess::finished. `exitCode`:" << exitCode << "`exitStatus`:" << exitStatus;
63+ });
64+
65+ // Note for Milad:
66+ // We'll have to have equivalent lines of code for MacOS.
67+#ifdef Q_OS_WIN
68+ electronProcess->start(fileLocation, arguments);
69+#endif
70+};