diff --git a/app/backend/computermanager.cpp b/app/backend/computermanager.cpp index dfe985fc..6dd0bf36 100644 --- a/app/backend/computermanager.cpp +++ b/app/backend/computermanager.cpp @@ -593,7 +593,7 @@ void ComputerManager::stopPollingAsync() void ComputerManager::addNewHostManually(QString address) { QUrl url = QUrl::fromUserInput(address); - if (!url.isEmpty() && url.isValid()) { + if (url.isValid() && !url.host().isEmpty()) { // If there wasn't a port specified, use the default addNewHost(NvAddress(url.host(), url.port(47989)), false); } diff --git a/app/backend/nvaddress.cpp b/app/backend/nvaddress.cpp new file mode 100644 index 00000000..ae1a7859 --- /dev/null +++ b/app/backend/nvaddress.cpp @@ -0,0 +1,65 @@ +#include "nvaddress.h" + +#include + +NvAddress::NvAddress() +{ + setAddress(nullptr); + setPort(0); +} + +NvAddress::NvAddress(QString addr, uint16_t port) +{ + setAddress(addr); + setPort(port); +} + +NvAddress::NvAddress(QHostAddress addr, uint16_t port) +{ + setAddress(addr); + setPort(port); +} + +uint16_t NvAddress::port() const +{ + return m_Port; +} + +QString NvAddress::address() const +{ + return m_Address; +} + +void NvAddress::setPort(uint16_t port) +{ + m_Port = port; +} + +void NvAddress::setAddress(QString addr) +{ + m_Address = addr; +} + +void NvAddress::setAddress(QHostAddress addr) +{ + m_Address = addr.toString(); +} + +bool NvAddress::isNull() const +{ + return m_Address.isEmpty(); +} + +QString NvAddress::toString() const +{ + if (m_Address.isEmpty()) { + return ""; + } + + if (QHostAddress(m_Address).protocol() == QAbstractSocket::IPv6Protocol) { + return QString("[%1]:%2").arg(m_Address).arg(m_Port); + } + else { + return QString("%1:%2").arg(m_Address).arg(m_Port); + } +} diff --git a/app/backend/nvaddress.h b/app/backend/nvaddress.h new file mode 100644 index 00000000..d20c7d2e --- /dev/null +++ b/app/backend/nvaddress.h @@ -0,0 +1,36 @@ +#pragma once + +#include + +class NvAddress +{ +public: + NvAddress(); + explicit NvAddress(QString addr, uint16_t port); + explicit NvAddress(QHostAddress addr, uint16_t port); + + uint16_t port() const; + void setPort(uint16_t port); + + QString address() const; + void setAddress(QString addr); + void setAddress(QHostAddress addr); + + bool isNull() const; + QString toString() const; + + bool operator==(const NvAddress& other) const + { + return m_Address == other.m_Address && + m_Port == other.m_Port; + } + + bool operator!=(const NvAddress& other) const + { + return !operator==(other); + } + +private: + QString m_Address; + uint16_t m_Port; +};