mirror of
https://github.com/moonlight-stream/moonlight-qt
synced 2024-12-14 13:22:27 +00:00
Wake host on a separate worker thread to avoid hanging the UI for DNS resolution
This commit is contained in:
parent
8a2491d955
commit
78730f7235
3 changed files with 26 additions and 3 deletions
|
@ -177,6 +177,11 @@ bool NvComputer::wake()
|
||||||
for (QString& addressString : addressList) {
|
for (QString& addressString : addressList) {
|
||||||
QHostInfo hostInfo = QHostInfo::fromName(addressString);
|
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
|
// Try all IP addresses that this string resolves to
|
||||||
for (QHostAddress& address : hostInfo.addresses()) {
|
for (QHostAddress& address : hostInfo.addresses()) {
|
||||||
QUdpSocket sock;
|
QUdpSocket sock;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "computermodel.h"
|
#include "computermodel.h"
|
||||||
|
|
||||||
|
#include <QThreadPool>
|
||||||
|
|
||||||
ComputerModel::ComputerModel(QObject* object)
|
ComputerModel::ComputerModel(QObject* object)
|
||||||
: QAbstractListModel(object) {}
|
: QAbstractListModel(object) {}
|
||||||
|
|
||||||
|
@ -119,11 +121,27 @@ void ComputerModel::deleteComputer(int computerIndex)
|
||||||
endRemoveRows();
|
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());
|
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)
|
void ComputerModel::pairComputer(int computerIndex, QString pin)
|
||||||
|
|
|
@ -34,7 +34,7 @@ public:
|
||||||
|
|
||||||
Q_INVOKABLE void pairComputer(int computerIndex, QString pin);
|
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);
|
Q_INVOKABLE Session* createSessionForCurrentGame(int computerIndex);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue