/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2021 Symless Ltd.
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file LICENSE that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include "ClientConnection.h"
#include
#include
namespace synergy::gui {
ClientConnection::ClientConnection(QWidget &parent, AppConfig &appConfig)
: m_parent(parent),
m_appConfig(appConfig) {}
void ClientConnection::update(const QString &line) {
if (m_checkConnection && checkMainWindow()) {
if (line.contains("failed to connect to server")) {
m_checkConnection = false;
if (!line.contains("server refused client with our name") &&
!line.contains("Trying next address")) {
showMessage(getMessage(line));
}
} else if (line.contains("connected to server")) {
m_checkConnection = false;
}
}
}
bool ClientConnection::checkMainWindow() {
bool result = m_parent.isActiveWindow();
if (m_parent.isMinimized() || m_parent.isHidden()) {
m_parent.showNormal();
m_parent.activateWindow();
result = true;
}
return result;
}
QString ClientConnection::getMessage(const QString &line) const {
QString message(QObject::tr("Connection failed.\nCheck the IP address on the "
"server, your TLS and firewall settings."));
if (line.contains("server already has a connected client with our name")) {
message =
QObject::tr("Connection failed.\nYou can’t name 2 computers the same.");
} else {
QHostAddress address(m_appConfig.serverHostname());
if (address.isNull()) {
message =
QObject::tr(
"We can’t connect to the server \"%1\" try to connect using the "
"server IP address and check your firewall settings.")
.arg(m_appConfig.serverHostname());
}
}
return message;
}
void ClientConnection::showMessage(const QString &message) const {
QMessageBox dialog(&m_parent);
dialog.addButton(QObject::tr("Close"), QMessageBox::RejectRole);
dialog.setText(message);
dialog.exec();
}
void ClientConnection::setCheckConnection(bool checkConnection) {
m_checkConnection = checkConnection;
}
} // namespace synergy::gui