diff --git a/app/backend/computermanager.cpp b/app/backend/computermanager.cpp index 3432f0e8..a69bb900 100644 --- a/app/backend/computermanager.cpp +++ b/app/backend/computermanager.cpp @@ -177,6 +177,11 @@ bool NvComputer::wake() for (QString& addressString : addressList) { QHostInfo hostInfo = QHostInfo::fromName(addressString); + if (hostInfo.error() != QHostInfo::NoError) { + qWarning() << "Error resolving" << addressString << ":" << hostInfo.errorString(); + continue; + } + // Try all IP addresses that this string resolves to for (QHostAddress& address : hostInfo.addresses()) { QUdpSocket sock; diff --git a/app/gui/computermodel.cpp b/app/gui/computermodel.cpp index b3550b5a..5a3f87a5 100644 --- a/app/gui/computermodel.cpp +++ b/app/gui/computermodel.cpp @@ -1,5 +1,7 @@ #include "computermodel.h" +#include + ComputerModel::ComputerModel(QObject* object) : QAbstractListModel(object) {} @@ -119,11 +121,27 @@ void ComputerModel::deleteComputer(int computerIndex) endRemoveRows(); } -bool ComputerModel::wakeComputer(int computerIndex) +class DeferredWakeHostTask : public QRunnable +{ +public: + DeferredWakeHostTask(NvComputer* computer) + : m_Computer(computer) {} + + void run() + { + m_Computer->wake(); + } + +private: + NvComputer* m_Computer; +}; + +void ComputerModel::wakeComputer(int computerIndex) { Q_ASSERT(computerIndex < m_Computers.count()); - return m_Computers[computerIndex]->wake(); + DeferredWakeHostTask* wakeTask = new DeferredWakeHostTask(m_Computers[computerIndex]); + QThreadPool::globalInstance()->start(wakeTask); } void ComputerModel::pairComputer(int computerIndex, QString pin) diff --git a/app/gui/computermodel.h b/app/gui/computermodel.h index 18947d2b..0f4fab20 100644 --- a/app/gui/computermodel.h +++ b/app/gui/computermodel.h @@ -34,7 +34,7 @@ public: Q_INVOKABLE void pairComputer(int computerIndex, QString pin); - Q_INVOKABLE bool wakeComputer(int computerIndex); + Q_INVOKABLE void wakeComputer(int computerIndex); Q_INVOKABLE Session* createSessionForCurrentGame(int computerIndex);