mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2025-07-01 15:26:09 +00:00
Avoid GUI display for App listing
This commit is contained in:
parent
0802609fd8
commit
4ee36fd405
@ -546,7 +546,8 @@ void ListCommandLineParser::parse(const QStringList &args)
|
|||||||
parser.addPositionalArgument("list", "list available apps");
|
parser.addPositionalArgument("list", "list available apps");
|
||||||
parser.addPositionalArgument("host", "Host computer name, UUID, or IP address", "<host>");
|
parser.addPositionalArgument("host", "Host computer name, UUID, or IP address", "<host>");
|
||||||
|
|
||||||
parser.addFlagOption("csv", "Print as CSV with additional information");
|
parser.addFlagOption("csv", "Print as CSV with additional information");
|
||||||
|
parser.addFlagOption("verbose", "Displays additional information");
|
||||||
|
|
||||||
if (!parser.parse(args)) {
|
if (!parser.parse(args)) {
|
||||||
parser.showError(parser.errorText());
|
parser.showError(parser.errorText());
|
||||||
@ -556,6 +557,7 @@ void ListCommandLineParser::parse(const QStringList &args)
|
|||||||
|
|
||||||
|
|
||||||
m_PrintCSV = parser.isSet("csv");
|
m_PrintCSV = parser.isSet("csv");
|
||||||
|
m_Verbose = parser.isSet("verbose");
|
||||||
|
|
||||||
// This method will not return and terminates the process if --version or
|
// This method will not return and terminates the process if --version or
|
||||||
// --help is specified
|
// --help is specified
|
||||||
@ -578,3 +580,8 @@ bool ListCommandLineParser::isPrintCSV() const
|
|||||||
{
|
{
|
||||||
return m_PrintCSV;
|
return m_PrintCSV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ListCommandLineParser::isVerbose() const
|
||||||
|
{
|
||||||
|
return m_Verbose;
|
||||||
|
}
|
||||||
|
@ -84,8 +84,10 @@ public:
|
|||||||
|
|
||||||
QString getHost() const;
|
QString getHost() const;
|
||||||
bool isPrintCSV() const;
|
bool isPrintCSV() const;
|
||||||
|
bool isVerbose() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_Host;
|
QString m_Host;
|
||||||
bool m_PrintCSV;
|
bool m_PrintCSV;
|
||||||
|
bool m_Verbose;
|
||||||
};
|
};
|
||||||
|
@ -54,7 +54,7 @@ public:
|
|||||||
NvApp app;
|
NvApp app;
|
||||||
|
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
// Occurs when CliListAppsSegue becomes visible and the UI calls launcher's execute()
|
// Occurs when CLI main calls execute
|
||||||
case Event::Executed:
|
case Event::Executed:
|
||||||
if (m_State == StateInit) {
|
if (m_State == StateInit) {
|
||||||
m_State = StateSeekComputer;
|
m_State = StateSeekComputer;
|
||||||
@ -72,14 +72,17 @@ public:
|
|||||||
|
|
||||||
m_BoxArtManager = new BoxArtManager(q);
|
m_BoxArtManager = new BoxArtManager(q);
|
||||||
|
|
||||||
emit q->searchingComputer();
|
if (m_Arguments.isVerbose()) {
|
||||||
|
fprintf(stdout, "Establishing connection to PC...\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Occurs when computer search timed out
|
// Occurs when computer search timed out
|
||||||
case Event::ComputerSeekTimedout:
|
case Event::ComputerSeekTimedout:
|
||||||
if (m_State == StateSeekComputer) {
|
if (m_State == StateSeekComputer) {
|
||||||
m_State = StateFailure;
|
fprintf(stderr, "%s\n", qPrintable(QString("Failed to connect to %1").arg(m_ComputerName)));
|
||||||
emit q->failed(QString("Failed to connect to %1").arg(m_ComputerName));
|
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Occurs when searched computer is found
|
// Occurs when searched computer is found
|
||||||
@ -89,20 +92,23 @@ public:
|
|||||||
m_State = StateSeekApp;
|
m_State = StateSeekApp;
|
||||||
m_Computer = event.computer;
|
m_Computer = event.computer;
|
||||||
m_TimeoutTimer->start(APP_SEEK_TIMEOUT);
|
m_TimeoutTimer->start(APP_SEEK_TIMEOUT);
|
||||||
emit q->searchingApps();
|
if (m_Arguments.isVerbose()) {
|
||||||
|
fprintf(stdout, "Loading app list...\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m_State = StateFailure;
|
m_State = StateFailure;
|
||||||
QString msg = QObject::tr("Computer %1 has not been paired. "
|
fprintf(stderr, "%s\n", qPrintable(QObject::tr("Computer %1 has not been paired. "
|
||||||
"Please open Moonlight to pair before retrieving games list.")
|
"Please open Moonlight to pair before retrieving games list.")
|
||||||
.arg(event.computer->name);
|
.arg(event.computer->name)));
|
||||||
emit q->failed(msg);
|
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Occurs when a computer is updated
|
// Occurs when a computer is updated
|
||||||
case Event::ComputerUpdated:
|
case Event::ComputerUpdated:
|
||||||
if (m_State == StateSeekApp) {
|
if (m_State == StateSeekApp) {
|
||||||
m_PrintCSV ? printAppsCSV(m_Computer->appList) : printApps(m_Computer->appList);
|
m_Arguments.isPrintCSV() ? printAppsCSV(m_Computer->appList) : printApps(m_Computer->appList);
|
||||||
|
|
||||||
QCoreApplication::exit(0);
|
QCoreApplication::exit(0);
|
||||||
}
|
}
|
||||||
@ -142,10 +148,10 @@ public:
|
|||||||
NvComputer *m_Computer;
|
NvComputer *m_Computer;
|
||||||
State m_State;
|
State m_State;
|
||||||
QTimer *m_TimeoutTimer;
|
QTimer *m_TimeoutTimer;
|
||||||
bool m_PrintCSV;
|
ListCommandLineParser m_Arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
Launcher::Launcher(QString computer, bool printCSV, QObject *parent)
|
Launcher::Launcher(QString computer, ListCommandLineParser arguments, QObject *parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
m_DPtr(new LauncherPrivate(this))
|
m_DPtr(new LauncherPrivate(this))
|
||||||
{
|
{
|
||||||
@ -154,7 +160,7 @@ Launcher::Launcher(QString computer, bool printCSV, QObject *parent)
|
|||||||
d->m_State = StateInit;
|
d->m_State = StateInit;
|
||||||
d->m_TimeoutTimer = new QTimer(this);
|
d->m_TimeoutTimer = new QTimer(this);
|
||||||
d->m_TimeoutTimer->setSingleShot(true);
|
d->m_TimeoutTimer->setSingleShot(true);
|
||||||
d->m_PrintCSV = printCSV;
|
d->m_Arguments = arguments;
|
||||||
connect(d->m_TimeoutTimer, &QTimer::timeout,
|
connect(d->m_TimeoutTimer, &QTimer::timeout,
|
||||||
this, &Launcher::onComputerSeekTimeout);
|
this, &Launcher::onComputerSeekTimeout);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "commandlineparser.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
@ -17,17 +19,12 @@ class Launcher : public QObject
|
|||||||
Q_DECLARE_PRIVATE_D(m_DPtr, Launcher)
|
Q_DECLARE_PRIVATE_D(m_DPtr, Launcher)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Launcher(QString computer, bool printCSV, QObject *parent = nullptr);
|
explicit Launcher(QString computer, ListCommandLineParser arguments, QObject *parent = nullptr);
|
||||||
~Launcher();
|
~Launcher();
|
||||||
|
|
||||||
Q_INVOKABLE void execute(ComputerManager *manager);
|
Q_INVOKABLE void execute(ComputerManager *manager);
|
||||||
Q_INVOKABLE bool isExecuted() const;
|
Q_INVOKABLE bool isExecuted() const;
|
||||||
|
|
||||||
signals:
|
|
||||||
void searchingComputer();
|
|
||||||
void searchingApps();
|
|
||||||
void failed(QString text);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onComputerFound(NvComputer *computer);
|
void onComputerFound(NvComputer *computer);
|
||||||
void onComputerUpdated(NvComputer *computer);
|
void onComputerUpdated(NvComputer *computer);
|
||||||
@ -35,7 +32,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<LauncherPrivate> m_DPtr;
|
QScopedPointer<LauncherPrivate> m_DPtr;
|
||||||
bool m_Print_CSV;
|
ListCommandLineParser m_Arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
import QtQuick 2.0
|
|
||||||
import QtQuick.Controls 2.2
|
|
||||||
|
|
||||||
import ComputerManager 1.0
|
|
||||||
import Session 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
function onSearchingComputer() {
|
|
||||||
stageLabel.text = qsTr("Establishing connection to PC...")
|
|
||||||
}
|
|
||||||
|
|
||||||
function onSearchingApps() {
|
|
||||||
stageLabel.text = qsTr("Loading app list...")
|
|
||||||
}
|
|
||||||
|
|
||||||
function onFailure(message) {
|
|
||||||
errorDialog.text = message
|
|
||||||
errorDialog.open()
|
|
||||||
}
|
|
||||||
|
|
||||||
StackView.onActivated: {
|
|
||||||
if (!launcher.isExecuted()) {
|
|
||||||
toolBar.visible = false
|
|
||||||
launcher.searchingComputer.connect(onSearchingComputer)
|
|
||||||
launcher.searchingComputer.connect(onSearchingApps)
|
|
||||||
launcher.failed.connect(onFailure)
|
|
||||||
launcher.execute(ComputerManager)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: 5
|
|
||||||
|
|
||||||
BusyIndicator {
|
|
||||||
id: stageSpinner
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
id: stageLabel
|
|
||||||
height: stageSpinner.height
|
|
||||||
text: stageText
|
|
||||||
font.pointSize: 20
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
|
|
||||||
wrapMode: Text.Wrap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ErrorMessageDialog {
|
|
||||||
id: errorDialog
|
|
||||||
|
|
||||||
onClosed: {
|
|
||||||
Qt.quit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
21
app/main.cpp
21
app/main.cpp
@ -38,6 +38,7 @@
|
|||||||
#include "gui/computermodel.h"
|
#include "gui/computermodel.h"
|
||||||
#include "gui/appmodel.h"
|
#include "gui/appmodel.h"
|
||||||
#include "backend/autoupdatechecker.h"
|
#include "backend/autoupdatechecker.h"
|
||||||
|
#include "backend/computermanager.h"
|
||||||
#include "backend/systemproperties.h"
|
#include "backend/systemproperties.h"
|
||||||
#include "streaming/session.h"
|
#include "streaming/session.h"
|
||||||
#include "settings/streamingpreferences.h"
|
#include "settings/streamingpreferences.h"
|
||||||
@ -585,6 +586,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
QString initialView;
|
QString initialView;
|
||||||
|
bool hasGUI = true;
|
||||||
|
|
||||||
GlobalCommandLineParser parser;
|
GlobalCommandLineParser parser;
|
||||||
switch (parser.parse(app.arguments())) {
|
switch (parser.parse(app.arguments())) {
|
||||||
@ -623,21 +625,24 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
case GlobalCommandLineParser::ListRequested:
|
case GlobalCommandLineParser::ListRequested:
|
||||||
{
|
{
|
||||||
initialView = "qrc:/gui/CliListAppsSegue.qml";
|
|
||||||
ListCommandLineParser listParser;
|
ListCommandLineParser listParser;
|
||||||
listParser.parse(app.arguments());
|
listParser.parse(app.arguments());
|
||||||
auto launcher = new CliListApps::Launcher(listParser.getHost(), listParser.isPrintCSV(), &app);
|
auto launcher = new CliListApps::Launcher(listParser.getHost(), listParser, &app);
|
||||||
engine.rootContext()->setContextProperty("launcher", launcher);
|
launcher->execute(new ComputerManager(&app));
|
||||||
|
hasGUI = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.rootContext()->setContextProperty("initialView", initialView);
|
if (hasGUI) {
|
||||||
|
engine.rootContext()->setContextProperty("initialView", initialView);
|
||||||
|
|
||||||
|
// Load the main.qml file
|
||||||
|
engine.load(QUrl(QStringLiteral("qrc:/gui/main.qml")));
|
||||||
|
if (engine.rootObjects().isEmpty())
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
// Load the main.qml file
|
|
||||||
engine.load(QUrl(QStringLiteral("qrc:/gui/main.qml")));
|
|
||||||
if (engine.rootObjects().isEmpty())
|
|
||||||
return -1;
|
|
||||||
int err = app.exec();
|
int err = app.exec();
|
||||||
|
|
||||||
// Give worker tasks time to properly exit. Fixes PendingQuitTask
|
// Give worker tasks time to properly exit. Fixes PendingQuitTask
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
<file>gui/NavigableToolButton.qml</file>
|
<file>gui/NavigableToolButton.qml</file>
|
||||||
<file>gui/NavigableItemDelegate.qml</file>
|
<file>gui/NavigableItemDelegate.qml</file>
|
||||||
<file>gui/NavigableMenuItem.qml</file>
|
<file>gui/NavigableMenuItem.qml</file>
|
||||||
<file>gui/CliListAppsSegue.qml</file>
|
|
||||||
<file>gui/CliQuitStreamSegue.qml</file>
|
<file>gui/CliQuitStreamSegue.qml</file>
|
||||||
<file>gui/CliStartStreamSegue.qml</file>
|
<file>gui/CliStartStreamSegue.qml</file>
|
||||||
<file>gui/AutoResizingComboBox.qml</file>
|
<file>gui/AutoResizingComboBox.qml</file>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user