diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp index 5f92f74a6..4088110e3 100644 --- a/src/mumble/MainWindow.cpp +++ b/src/mumble/MainWindow.cpp @@ -809,6 +809,7 @@ static void recreateServerHandler() { g.sh = sh; g.mw->connect(sh.get(), SIGNAL(connected()), g.mw, SLOT(serverConnected())); g.mw->connect(sh.get(), SIGNAL(disconnected(QAbstractSocket::SocketError, QString)), g.mw, SLOT(serverDisconnected(QAbstractSocket::SocketError, QString))); + g.mw->connect(sh.get(), SIGNAL(error(QAbstractSocket::SocketError, QString)), g.mw, SLOT(resolverError(QAbstractSocket::SocketError, QString))); } void MainWindow::openUrl(const QUrl &url) { @@ -3013,6 +3014,21 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re AudioInput::setMaxBandwidth(-1); } +void MainWindow::resolverError(QAbstractSocket::SocketError, QString reason) { + if (! reason.isEmpty()) { + g.l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(Qt::escape(reason))); + } else { + g.l->log(Log::ServerDisconnected, tr("Server connection failed.")); + } + + if (g.s.bReconnect) { + qaServerDisconnect->setEnabled(true); + if (bRetryServer) { + qtReconnect->start(); + } + } +} + void MainWindow::trayAboutToShow() { bool top = false; diff --git a/src/mumble/MainWindow.h b/src/mumble/MainWindow.h index 28dce2f1f..5d13db304 100644 --- a/src/mumble/MainWindow.h +++ b/src/mumble/MainWindow.h @@ -267,6 +267,7 @@ class MainWindow : public QMainWindow, public MessageHandler, public Ui::MainWin void qtvUserCurrentChanged(const QModelIndex &, const QModelIndex &); void serverConnected(); void serverDisconnected(QAbstractSocket::SocketError, QString reason); + void resolverError(QAbstractSocket::SocketError, QString reason); void viewCertificate(bool); void openUrl(const QUrl &url); void context_triggered(); diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp index 709d86923..08038735c 100644 --- a/src/mumble/ServerHandler.cpp +++ b/src/mumble/ServerHandler.cpp @@ -295,6 +295,7 @@ void ServerHandler::run() { int ret = exec(); if (ret < 0) { qWarning("ServerHandler: failed to resolve hostname"); + emit error(QAbstractSocket::HostNotFoundError, tr("Unable to resolve hostname")); return; } } diff --git a/src/mumble/ServerHandler.h b/src/mumble/ServerHandler.h index bb558c4bf..0840debae 100644 --- a/src/mumble/ServerHandler.h +++ b/src/mumble/ServerHandler.h @@ -135,6 +135,7 @@ class ServerHandler : public QThread { void disconnect(); void run() Q_DECL_OVERRIDE; signals: + void error(QAbstractSocket::SocketError, QString reason); void disconnected(QAbstractSocket::SocketError, QString reason); void connected(); void pingRequested();