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