diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 8561eb4e..7d826227 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -55,7 +55,7 @@ SOURCES += src/main.cpp \ src/WebClient.cpp \ src/PluginWizardPage.cpp \ src/PluginManager.cpp \ - src/DirectoryManager.cpp + src/CoreInterface.cpp HEADERS += src/MainWindow.h \ src/AboutDialog.h \ src/ServerConfig.h \ @@ -97,7 +97,7 @@ HEADERS += src/MainWindow.h \ src/PluginWizardPage.h \ src/ProcessorArch.h \ src/PluginManager.h \ - src/DirectoryManager.h + src/CoreInterface.h RESOURCES += res/Synergy.qrc RC_FILE = res/win/Synergy.rc macx { diff --git a/src/gui/src/CoreInterface.cpp b/src/gui/src/CoreInterface.cpp new file mode 100644 index 00000000..6bec6bfa --- /dev/null +++ b/src/gui/src/CoreInterface.cpp @@ -0,0 +1,86 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Si 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 COPYING 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 "CoreInterface.h" + +#include +#include +#include + +static const char kCoreBinary[] = "syntool"; + +CoreInterface::CoreInterface() +{ +} + +QString CoreInterface::getPluginDir() +{ + QStringList args("--get-plugin-dir"); + return run(args); +} + +QString CoreInterface::getProfileDir() +{ + QStringList args("--get-profile-dir"); + return run(args); +} + +QString CoreInterface::getArch() +{ + QStringList args("--get-arch"); + return run(args); +} + +QString CoreInterface::run(const QStringList& args, const QString& input) +{ + QString program( + QCoreApplication::applicationDirPath() + + "/" + kCoreBinary); + + QProcess process; + process.setReadChannel(QProcess::StandardOutput); + process.start(program, args); + bool success = process.waitForStarted(); + + QString output, error; + if (success) + { + if (!input.isEmpty()) { + process.write(input.toStdString().c_str()); + } + + if (process.waitForFinished()) { + output = process.readAllStandardOutput(); + error = process.readAllStandardError(); + } + } + + output = output.trimmed(); + error = error.trimmed(); + + int code = process.exitCode(); + if (!error.isEmpty() || !success || code != 0) + { + throw std::runtime_error( + QString("Code: %1\nError: %2") + .arg(process.exitCode()) + .arg(error.isEmpty() ? "Unknown" : error) + .toStdString()); + } + + return output; +} diff --git a/src/gui/src/DirectoryManager.h b/src/gui/src/CoreInterface.h similarity index 69% rename from src/gui/src/DirectoryManager.h rename to src/gui/src/CoreInterface.h index f07d64c9..8deb5480 100644 --- a/src/gui/src/DirectoryManager.h +++ b/src/gui/src/CoreInterface.h @@ -1,36 +1,31 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015 Synergy Si 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 COPYING 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 . - */ - -#ifndef DIRECTORYMANAGER_H -#define DIRECTORYMANAGER_H - -#include -#include - -class DirectoryManager -{ -public: - DirectoryManager(); - -static QString getPluginDir(); -static QString getProfileDir(); - -private: -static QString getDirViaSyntool(QStringList& args); -}; - -#endif // DIRECTORYMANAGER_H +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Si 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 COPYING 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 . + */ + +#pragma once + +#include + +class CoreInterface +{ +public: + CoreInterface(); + + QString getPluginDir(); + QString getProfileDir(); + QString getArch(); + QString run(const QStringList& args, const QString& input = ""); +}; diff --git a/src/gui/src/DirectoryManager.cpp b/src/gui/src/DirectoryManager.cpp deleted file mode 100644 index b416ca9b..00000000 --- a/src/gui/src/DirectoryManager.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2015 Synergy Si 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 COPYING 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 "DirectoryManager.h" - -#include -#include -#include -#include - -static const char kGetPluginDirArg[] = "--get-plugin-dir"; -static const char kGetProfileDirArg[] = "--get-profile-dir"; - -DirectoryManager::DirectoryManager() -{ -} - -QString DirectoryManager::getPluginDir() -{ - QStringList args(kGetPluginDirArg); - return getDirViaSyntool(args); -} - -QString DirectoryManager::getProfileDir() -{ - QStringList args(kGetProfileDirArg); - return getDirViaSyntool(args); -} - -QString DirectoryManager::getDirViaSyntool(QStringList& args) -{ - QString program(QCoreApplication::applicationDirPath() + "/syntool"); - - QProcess process; - process.setReadChannel(QProcess::StandardOutput); - process.start(program, args); - bool success = process.waitForStarted(); - - QString out, error; - if (success) - { - if (process.waitForFinished()) { - out = process.readAllStandardOutput(); - error = process.readAllStandardError(); - } - } - - out = out.trimmed(); - error = error.trimmed(); - - if (out.isEmpty() || - !error.isEmpty() || - !success || - process.exitCode() != 0) - { - QMessageBox::critical( - NULL, QObject::tr("Synergy"), - QObject::tr("An error occured while calling syntool " - "with the first arg %1. Code: %2\nError: %3") - .arg(args.at(0)) - .arg(process.exitCode()) - .arg(error.isEmpty() ? "Unknown" : error)); - return ""; - } - - return out; -} diff --git a/src/gui/src/PluginWizardPage.cpp b/src/gui/src/PluginWizardPage.cpp index 92160a7d..1ac21bd2 100644 --- a/src/gui/src/PluginWizardPage.cpp +++ b/src/gui/src/PluginWizardPage.cpp @@ -63,7 +63,7 @@ void PluginWizardPage::changeEvent(QEvent *e) void PluginWizardPage::showError(QString error) { - updateStatus(error); + updateStatus(tr("Error: %1").arg(error)); showFinished(); } diff --git a/src/gui/src/SettingsDialog.cpp b/src/gui/src/SettingsDialog.cpp index 5625457f..7f6318a5 100644 --- a/src/gui/src/SettingsDialog.cpp +++ b/src/gui/src/SettingsDialog.cpp @@ -18,7 +18,7 @@ #include "SettingsDialog.h" -#include "DirectoryManager.h" +#include "CoreInterface.h" #include "SynergyLocale.h" #include "QSynergyApplication.h" #include "QUtility.h" @@ -57,7 +57,7 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) : m_pCheckBoxElevateMode->hide(); #endif - QString pluginDir = DirectoryManager::getPluginDir(); + QString pluginDir = m_CoreInterface.getPluginDir(); QDir dir(pluginDir); int fileNum = dir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries).count(); if (fileNum == 0) { diff --git a/src/gui/src/SettingsDialog.h b/src/gui/src/SettingsDialog.h index f8bfb68d..30fb5d5e 100644 --- a/src/gui/src/SettingsDialog.h +++ b/src/gui/src/SettingsDialog.h @@ -23,6 +23,7 @@ #include #include "ui_SettingsDialogBase.h" #include "SynergyLocale.h" +#include "CoreInterface.h" class AppConfig; @@ -44,6 +45,7 @@ class SettingsDialog : public QDialog, public Ui::SettingsDialogBase private: AppConfig& m_AppConfig; SynergyLocale m_Locale; + CoreInterface m_CoreInterface; bool m_SuppressElevateWarning; private slots: diff --git a/src/gui/src/WebClient.cpp b/src/gui/src/WebClient.cpp index e7325e28..e283372a 100644 --- a/src/gui/src/WebClient.cpp +++ b/src/gui/src/WebClient.cpp @@ -140,44 +140,11 @@ void WebClient::queryPluginList() } QString WebClient::request( - const QString& email, - const QString& password, - QStringList& args) + const QString& email, + const QString& password, + QStringList& args) { - QString program(QCoreApplication::applicationDirPath() + "/syntool"); - - QProcess process; - process.setReadChannel(QProcess::StandardOutput); - process.start(program, args); - bool success = process.waitForStarted(); - - QString out, error; - if (success) - { - // hash password in case it contains interesting chars. - QString credentials(email + ":" + hash(password) + "\n"); - process.write(credentials.toStdString().c_str()); - - if (process.waitForFinished()) { - out = process.readAllStandardOutput(); - error = process.readAllStandardError(); - } - } - - out = out.trimmed(); - error = error.trimmed(); - - if (out.isEmpty() || - !error.isEmpty() || - !success || - process.exitCode() != 0) - { - throw std::runtime_error( - QString("Code: %1\nError: %2") - .arg(process.exitCode()) - .arg(error.isEmpty() ? "Unknown" : error) - .toStdString()); - } - - return out; + // hash password in case it contains interesting chars. + QString credentials(email + ":" + hash(password) + "\n"); + return m_CoreInterface.run(args, credentials); } diff --git a/src/gui/src/WebClient.h b/src/gui/src/WebClient.h index e39fa552..c2775193 100644 --- a/src/gui/src/WebClient.h +++ b/src/gui/src/WebClient.h @@ -22,6 +22,8 @@ #include #include +#include "CoreInterface.h" + class QMessageBox; class QWidget; class QStringList; @@ -55,6 +57,7 @@ private: QString m_Email; QString m_Password; QStringList m_PluginList; + CoreInterface m_CoreInterface; }; #endif // WEBCLIENT_H