From af17d56cbd60c9cbd827782c3c12d59f7edb5c6f Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 9 Sep 2018 12:33:19 -0700 Subject: [PATCH] Add option to disable mDNS PC discovery. Fixes #50 --- app/backend/computermanager.cpp | 28 +++++++++++++++++---------- app/gui/SettingsView.qml | 21 ++++++++++++++++++++ app/gui/main.qml | 2 +- app/settings/streamingpreferences.cpp | 3 +++ app/settings/streamingpreferences.h | 3 +++ 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/backend/computermanager.cpp b/app/backend/computermanager.cpp index a69bb900..1717ab9a 100644 --- a/app/backend/computermanager.cpp +++ b/app/backend/computermanager.cpp @@ -1,5 +1,6 @@ #include "computermanager.h" #include "nvhttp.h" +#include "settings/streamingpreferences.h" #include #include @@ -368,17 +369,24 @@ void ComputerManager::startPolling() return; } - // Start an MDNS query for GameStream hosts - m_MdnsBrowser = new QMdnsEngine::Browser(&m_MdnsServer, "_nvstream._tcp.local.", &m_MdnsCache); - connect(m_MdnsBrowser, &QMdnsEngine::Browser::serviceAdded, - this, [this](const QMdnsEngine::Service& service) { - qInfo() << "Discovered mDNS host:" << service.hostname(); + StreamingPreferences prefs; - MdnsPendingComputer* pendingComputer = new MdnsPendingComputer(&m_MdnsServer, &m_MdnsCache, service); - connect(pendingComputer, SIGNAL(resolvedv4(MdnsPendingComputer*,QHostAddress)), - this, SLOT(handleMdnsServiceResolved(MdnsPendingComputer*,QHostAddress))); - m_PendingResolution.append(pendingComputer); - }); + if (prefs.enableMdns) { + // Start an MDNS query for GameStream hosts + m_MdnsBrowser = new QMdnsEngine::Browser(&m_MdnsServer, "_nvstream._tcp.local.", &m_MdnsCache); + connect(m_MdnsBrowser, &QMdnsEngine::Browser::serviceAdded, + this, [this](const QMdnsEngine::Service& service) { + qInfo() << "Discovered mDNS host:" << service.hostname(); + + MdnsPendingComputer* pendingComputer = new MdnsPendingComputer(&m_MdnsServer, &m_MdnsCache, service); + connect(pendingComputer, SIGNAL(resolvedv4(MdnsPendingComputer*,QHostAddress)), + this, SLOT(handleMdnsServiceResolved(MdnsPendingComputer*,QHostAddress))); + m_PendingResolution.append(pendingComputer); + }); + } + else { + qWarning() << "mDNS is disabled by user preference"; + } // Start polling threads for each known host QMapIterator i(m_KnownHosts); diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 937e9859..e5e6222d 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -2,6 +2,7 @@ import QtQuick 2.9 import QtQuick.Controls 2.2 import StreamingPreferences 1.0 +import ComputerManager 1.0 ScrollView { id: settingsPage @@ -601,6 +602,26 @@ ScrollView { fpsComboBox.reinitialize() } } + + CheckBox { + id: enableMdns + text: "Automatically find PCs on the local network (Recommended)" + font.pointSize: 12 + checked: prefs.enableMdns + onCheckedChanged: { + prefs.enableMdns = checked + + // We must save the updated preference to ensure + // ComputerManager can observe the change internally. + prefs.save() + + // Restart polling so the mDNS change takes effect + if (window.pollingActive) { + ComputerManager.stopPollingAsync() + ComputerManager.startPolling() + } + } + } } } } diff --git a/app/gui/main.qml b/app/gui/main.qml index bd227ad6..d20099f4 100644 --- a/app/gui/main.qml +++ b/app/gui/main.qml @@ -14,7 +14,7 @@ ApplicationWindow { id: window visible: true width: 1280 - height: 600 + height: 700 Material.theme: Material.Dark Material.accent: Material.Purple diff --git a/app/settings/streamingpreferences.cpp b/app/settings/streamingpreferences.cpp index 3018724e..526e5235 100644 --- a/app/settings/streamingpreferences.cpp +++ b/app/settings/streamingpreferences.cpp @@ -19,6 +19,7 @@ #define SER_VIDEODEC "videodec" #define SER_WINDOWMODE "windowmode" #define SER_UNSUPPORTEDFPS "unsupportedfps" +#define SER_MDNS "mdns" StreamingPreferences::StreamingPreferences() { @@ -38,6 +39,7 @@ void StreamingPreferences::reload() playAudioOnHost = settings.value(SER_HOSTAUDIO, false).toBool(); multiController = settings.value(SER_MULTICONT, true).toBool(); unsupportedFps = settings.value(SER_UNSUPPORTEDFPS, false).toBool(); + enableMdns = settings.value(SER_MDNS, true).toBool(); audioConfig = static_cast(settings.value(SER_AUDIOCFG, static_cast(AudioConfig::AC_FORCE_STEREO)).toInt()); videoCodecConfig = static_cast(settings.value(SER_VIDEOCFG, @@ -63,6 +65,7 @@ void StreamingPreferences::save() settings.setValue(SER_HOSTAUDIO, playAudioOnHost); settings.setValue(SER_MULTICONT, multiController); settings.setValue(SER_UNSUPPORTEDFPS, unsupportedFps); + settings.setValue(SER_MDNS, enableMdns); settings.setValue(SER_AUDIOCFG, static_cast(audioConfig)); settings.setValue(SER_VIDEOCFG, static_cast(videoCodecConfig)); settings.setValue(SER_VIDEODEC, static_cast(videoDecoderSelection)); diff --git a/app/settings/streamingpreferences.h b/app/settings/streamingpreferences.h index da427809..e23f91d7 100644 --- a/app/settings/streamingpreferences.h +++ b/app/settings/streamingpreferences.h @@ -69,6 +69,7 @@ public: Q_PROPERTY(bool playAudioOnHost MEMBER playAudioOnHost NOTIFY playAudioOnHostChanged) Q_PROPERTY(bool multiController MEMBER multiController NOTIFY multiControllerChanged) Q_PROPERTY(bool unsupportedFps MEMBER unsupportedFps NOTIFY unsupportedFpsChanged) + Q_PROPERTY(bool enableMdns MEMBER enableMdns NOTIFY enableMdnsChanged) Q_PROPERTY(AudioConfig audioConfig MEMBER audioConfig NOTIFY audioConfigChanged) Q_PROPERTY(VideoCodecConfig videoCodecConfig MEMBER videoCodecConfig NOTIFY videoCodecConfigChanged) Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged) @@ -84,6 +85,7 @@ public: bool playAudioOnHost; bool multiController; bool unsupportedFps; + bool enableMdns; AudioConfig audioConfig; VideoCodecConfig videoCodecConfig; VideoDecoderSelection videoDecoderSelection; @@ -97,6 +99,7 @@ signals: void playAudioOnHostChanged(); void multiControllerChanged(); void unsupportedFpsChanged(); + void enableMdnsChanged(); void audioConfigChanged(); void videoCodecConfigChanged(); void videoDecoderSelectionChanged();