From 8d70075171b9e4fd72493304ae84e110c5e278e6 Mon Sep 17 00:00:00 2001 From: Adam Potolsky Date: Fri, 29 May 2015 15:57:21 -0700 Subject: [PATCH] Replaces plugin download with install and copy functionality #4696 --- src/gui/gui.pro | 13 +- src/gui/src/FileSysClient.cpp | 52 +++++++ src/gui/src/FileSysClient.h | 63 ++++++++ src/gui/src/Plugin.cpp | 90 ++++++++++++ src/gui/src/Plugin.h | 53 +++++++ src/gui/src/PluginManager.cpp | 243 ++++++++----------------------- src/gui/src/PluginManager.h | 21 +-- src/gui/src/PluginWizardPage.cpp | 75 ++++------ src/gui/src/PluginWizardPage.h | 9 +- 9 files changed, 373 insertions(+), 246 deletions(-) create mode 100644 src/gui/src/FileSysClient.cpp create mode 100644 src/gui/src/FileSysClient.h create mode 100644 src/gui/src/Plugin.cpp create mode 100644 src/gui/src/Plugin.h diff --git a/src/gui/gui.pro b/src/gui/gui.pro index f519885e..2e441c67 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -52,12 +52,14 @@ SOURCES += src/main.cpp \ src/DataDownloader.cpp \ src/AddClientDialog.cpp \ src/CommandProcess.cpp \ - src/WebClient.cpp \ src/PluginWizardPage.cpp \ src/PluginManager.cpp \ src/CoreInterface.cpp \ src/Fingerprint.cpp \ - src/SslCertificate.cpp + src/SslCertificate.cpp \ + src/FileSysClient.cpp \ + src/Plugin.cpp \ + src/WebClient.cpp HEADERS += src/MainWindow.h \ src/AboutDialog.h \ src/ServerConfig.h \ @@ -94,14 +96,17 @@ HEADERS += src/MainWindow.h \ src/DataDownloader.h \ src/AddClientDialog.h \ src/CommandProcess.h \ - src/WebClient.h \ src/EditionType.h \ src/PluginWizardPage.h \ src/ProcessorArch.h \ src/PluginManager.h \ src/CoreInterface.h \ src/Fingerprint.h \ - src/SslCertificate.h + src/SslCertificate.h \ + src/LocalFilesystemClient.h \ + src/FileSysClient.h \ + src/Plugin.h \ + src/WebClient.h RESOURCES += res/Synergy.qrc RC_FILE = res/win/Synergy.rc macx { diff --git a/src/gui/src/FileSysClient.cpp b/src/gui/src/FileSysClient.cpp new file mode 100644 index 00000000..53b759b9 --- /dev/null +++ b/src/gui/src/FileSysClient.cpp @@ -0,0 +1,52 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Si, Std. + * + * 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 "FileSysClient.h" + +#include "EditionType.h" +#include "QUtility.h" + +#include +#include +#include +#include +#include + +void FileSysClient::queryPluginList() +{ + try { + isDone(false); + QString extension = "*" + Plugin::getOsSpecificExt(); + QStringList nameFilter(extension); + + QString searchDirectory(Plugin::getOsSpecificInstallerLocation()); + + QDir directory(searchDirectory); + + m_PluginList = directory.entryList(nameFilter); + isDone(true); + } + catch (std::exception& e) + { + isDone(true); + emit error(tr("An error occurred while trying to load the " + "plugin list. Please contact the help desk, and " + "provide the following details.\n\n%1").arg(e.what())); + } + emit queryPluginDone(); + return; +} diff --git a/src/gui/src/FileSysClient.h b/src/gui/src/FileSysClient.h new file mode 100644 index 00000000..dfe7ee95 --- /dev/null +++ b/src/gui/src/FileSysClient.h @@ -0,0 +1,63 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Si, Std. + * + * 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 . + */ + +#ifndef FileSysClient_H +#define FileSysClient_H + +#include +#include +#include + +#include "Plugin.h" +#include "CoreInterface.h" + +class QMessageBox; +class QWidget; +class QStringList; + +class FileSysClient : public QObject +{ + Q_OBJECT + +public: + QStringList& getPluginList() { return m_PluginList; } + bool isDone() { return done; } + int count() { return copyCount; } + +public slots: + void queryPluginList(); + +signals: + void error(QString e); + void queryPluginDone(); + +private: + void isDone(bool b) { done = b; } + QString request(const QString& email, + const QString& password, + QStringList& args); + Plugin plugin; + void count(int i) { copyCount = i; } + +private: + int copyCount; + bool done; + QStringList m_PluginList; + CoreInterface m_CoreInterface; +}; + +#endif // FileSysClient_H diff --git a/src/gui/src/Plugin.cpp b/src/gui/src/Plugin.cpp new file mode 100644 index 00000000..4759e4e2 --- /dev/null +++ b/src/gui/src/Plugin.cpp @@ -0,0 +1,90 @@ +/* + * 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 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 "Plugin.h" + +#include "CoreInterface.h" +//#include "CommandProcess.h" +//#include "DataDownloader.h" +//#include "QUtility.h" +//#include "ProcessorArch.h" +//#include "Fingerprint.h" + +//#include +//#include +//#include +//#include + +static const char kBaseUrl[] = "http://synergy-project.org/files"; +static const char kDefaultVersion[] = "1.1"; +static const char kWinPackagePlatform32[] = "Windows-x86"; +static const char kWinPackagePlatform64[] = "Windows-x64"; +static const char kMacPackagePlatform[] = "MacOSX%1-i386"; +static const char kLinuxPackagePlatformDeb32[] = "Linux-i686-deb"; +static const char kLinuxPackagePlatformDeb64[] = "Linux-x86_64-deb"; +static const char kLinuxPackagePlatformRpm32[] = "Linux-i686-rpm"; +static const char kLinuxPackagePlatformRpm64[] = "Linux-x86_64-rpm"; + +#if defined(Q_OS_WIN) +static const char kWinPluginExt[] = ".dll"; +static const char kInstallerPluginLocation[] = "C:/Program Files/Synergy/Plugins/"; //TODO: needs proper windows %X% notation +static const char kUserPluginLocation[] = "C:/Users/speaker/AppData/Local/Synergy/Plugins";//TODO: needs proper windows %X% notation +#elif defined(Q_OS_MAC) +static const char kMacPluginPrefix[] = "lib"; +static const char kMacPluginExt[] = ".dylib"; +static const char kInstallerPluginLocation[] = "/usr/lib/synergy/plugins"; +static const char kUserPluginLocation[] = "/home/speaker/.synergy/plugins";//TODO: needs proper unix notation +#else +static const char kLinuxPluginPrefix[] = "lib"; +static const char kLinuxPluginExt[] = ".so"; +static const char kInstallerPluginLocation[] = "/usr/lib/synergy/plugins"; +static const char kUserPluginLocation[] = "/home/speaker/.synergy/plugins";//TODO: needs proper MacOS X notation +#endif + +QString Plugin::getOsSpecificExt() +{ + +#if defined(Q_OS_WIN) + return kWinPluginExt; +#elif defined(Q_OS_MAC) + return kMacPluginExt; +#else + return kLinuxPluginExt; +#endif +} + +QString Plugin::getOsSpecificName(const QString& pluginName) +{ + QString result = pluginName; +#if defined(Q_OS_WIN) + result.append(getOsSpecificExt()); +#elif defined(Q_OS_MAC) + result = kMacPluginPrefix + pluginName + getPluginOsSpecificExt(); +#else + result = kLinuxPluginPrefix + pluginName + getPluginOsSpecificExt(); +#endif + return result; +} + +QString Plugin::getOsSpecificInstallerLocation() { + return kInstallerPluginLocation; +} + +QString Plugin::getOsSpecificUserLocation() { + return kUserPluginLocation; +} + diff --git a/src/gui/src/Plugin.h b/src/gui/src/Plugin.h new file mode 100644 index 00000000..431e1a80 --- /dev/null +++ b/src/gui/src/Plugin.h @@ -0,0 +1,53 @@ +/* + * 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 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 . + */ +#ifndef PLUGIN_H +#define PLUGIN_H + +#include +#include +#include + +#include "SslCertificate.h" +#include "CoreInterface.h" +#include "DataDownloader.h" + +class Plugin : public QObject +{ + Q_OBJECT + +public: + //Plugin(); + //~PluginManager(); + + static QString getOsSpecificName(const QString& pluginName); + static QString getOsSpecificExt(); + static QString getOsSpecificLocation(); + static QString getOsSpecificInstallerLocation(); + static QString getOsSpecificUserLocation(); + +public slots: + +private: +// CoreInterface m_CoreInterface; + +signals: + +private: + +}; + +#endif // PLUGIN_H diff --git a/src/gui/src/PluginManager.cpp b/src/gui/src/PluginManager.cpp index fd3a24e4..e73c93e6 100644 --- a/src/gui/src/PluginManager.cpp +++ b/src/gui/src/PluginManager.cpp @@ -23,37 +23,23 @@ #include "QUtility.h" #include "ProcessorArch.h" #include "Fingerprint.h" +#include "Plugin.h" #include #include #include #include -static const char kBaseUrl[] = "http://synergy-project.org/files"; -static const char kDefaultVersion[] = "1.1"; -static const char kWinPackagePlatform32[] = "Windows-x86"; -static const char kWinPackagePlatform64[] = "Windows-x64"; -static const char kMacPackagePlatform[] = "MacOSX%1-i386"; -static const char kLinuxPackagePlatformDeb32[] = "Linux-i686-deb"; -static const char kLinuxPackagePlatformDeb64[] = "Linux-x86_64-deb"; -static const char kLinuxPackagePlatformRpm32[] = "Linux-i686-rpm"; -static const char kLinuxPackagePlatformRpm64[] = "Linux-x86_64-rpm"; - -#if defined(Q_OS_WIN) -static const char kWinPluginExt[] = ".dll"; - -#elif defined(Q_OS_MAC) -static const char kMacPluginPrefix[] = "lib"; -static const char kMacPluginExt[] = ".dylib"; -#else -static const char kLinuxPluginPrefix[] = "lib"; -static const char kLinuxPluginExt[] = ".so"; -#endif - -PluginManager::PluginManager(QStringList pluginList) : - m_PluginList(pluginList), - m_DownloadIndex(-1) +PluginManager::PluginManager() : + m_FileSysPluginList() { +} + +void PluginManager::initFromFileSys(QStringList pluginList) +{ + m_FileSysPluginList.clear(); + m_FileSysPluginList.append(pluginList); + m_PluginDir = m_CoreInterface.getPluginDir(); if (m_PluginDir.isEmpty()) { emit error(tr("Failed to get plugin directory.")); @@ -73,7 +59,7 @@ bool PluginManager::exist(QString name) { CoreInterface coreInterface; QString PluginDir = coreInterface.getPluginDir(); - QString pluginName = getPluginOsSpecificName(name); + QString pluginName = Plugin::getOsSpecificName(name); QString filename; filename.append(PluginDir); filename.append(QDir::separator()).append(pluginName); @@ -86,166 +72,63 @@ bool PluginManager::exist(QString name) return exist; } -void PluginManager::downloadPlugins() +void PluginManager::copyPlugins() { - if (m_DataDownloader.isFinished()) { - if (!savePlugin()) { - return; - } - - if (m_DownloadIndex != m_PluginList.size() - 1) { - emit downloadNext(); - } - else { - emit downloadFinished(); - return; - } - } - - m_DownloadIndex++; - - if (m_DownloadIndex < m_PluginList.size()) { - QUrl url; - QString pluginUrl = getPluginUrl(m_PluginList.at(m_DownloadIndex)); - if (pluginUrl.isEmpty()) { - return; - } - url.setUrl(pluginUrl); - - connect(&m_DataDownloader, SIGNAL(isComplete()), this, SLOT(downloadPlugins())); - - m_DataDownloader.download(url); - } -} - -bool PluginManager::savePlugin() -{ - // create the path if not exist - QDir dir(m_PluginDir); - if (!dir.exists()) { - dir.mkpath("."); - } - - QString filename = m_PluginDir; - QString pluginName = m_PluginList.at(m_DownloadIndex); - pluginName = getPluginOsSpecificName(pluginName); - filename.append(QDir::separator()).append(pluginName); - - QFile file(filename); - if (!file.open(QIODevice::WriteOnly)) { - emit error( - tr("Failed to download plugin '%1' to: %2\n%3") - .arg(m_PluginList.at(m_DownloadIndex)) - .arg(m_PluginDir) - .arg(file.errorString())); - - file.close(); - return false; - } - - file.write(m_DataDownloader.data()); - file.close(); - - return true; -} - -QString PluginManager::getPluginUrl(const QString& pluginName) -{ - QString archName; - -#if defined(Q_OS_WIN) - try { - QString coreArch = m_CoreInterface.getArch(); - if (coreArch.startsWith("x86")) { - archName = kWinPackagePlatform32; + // Get the Directory where plugins are put on installation + // If it doesn't exist, there is nothing to do + QString srcDirName = Plugin::getOsSpecificInstallerLocation(); + QDir srcDir(srcDirName); + if (!srcDir.exists()) { + emit info( + tr("No plugins found to copy from %1") + .arg(srcDirName)); + emit copyFinished(); } - else if (coreArch.startsWith("x64")) { - archName = kWinPackagePlatform64; + + // Get the directory where Plugins are installed into Synergy + // If it doesn't exist make it + QString destDirName = m_PluginDir; + QDir destDir(destDirName); + if (!destDir.exists()) { + destDir.mkpath("."); + } + // Run through the list of plugins and copy them + for ( int i = 0 ; i < m_FileSysPluginList.size() ; i++ ) { + // Get a file entry for the plugin using the full path + QFile file(srcDirName + m_FileSysPluginList.at(i)); + // construct the destination file name + QString newName = destDirName; + newName.append(QDir::separator()).append(m_FileSysPluginList.at(i)); + + QFile newFile(newName); + if(newFile.exists()) { + newFile.remove(); + } + // make a copy of the plugin in the new location + bool result = file.copy(newName); + if ( !result ) { + emit error( + tr("Failed to copy plugin '%1' to: %2\n%3") + .arg(m_FileSysPluginList.at(i)) + .arg(newName) + .arg(file.errorString())); + } + else { + emit info( + tr("Copying '%1' plugin (%2/%3)...") + .arg(m_FileSysPluginList.at(i)) + .arg(i+1) + .arg(m_FileSysPluginList.size())); + } } } - catch (...) { - emit error(tr("Could not get Windows architecture type.")); - return ""; - } - -#elif defined(Q_OS_MAC) - - QString macVersion = "1010"; -#if __MAC_OS_X_VERSION_MIN_REQUIRED <= 1090 // 10.9 - macVersion = "109"; -#elif __MAC_OS_X_VERSION_MIN_REQUIRED <= 1080 // 10.8 - macVersion = "108"; -#elif __MAC_OS_X_VERSION_MIN_REQUIRED <= 1070 // 10.7 - emit error(tr("Plugins not supported on this Mac OS X version.")); - return ""; -#endif - - archName = QString(kMacPackagePlatform).arg(macVersion); - -#else - - QString program("dpkg"); - QStringList args; - args << "-s" << "synergy"; - - QProcess process; - process.setReadChannel(QProcess::StandardOutput); - process.start(program, args); - bool success = process.waitForStarted(); - - if (!success || !process.waitForFinished()) + catch (std::exception& e) { - emit error(tr("Could not get Linux package type.")); - return ""; + emit error(tr("An error occurred while trying to copy the " + "plugin list. Please contact the help desk, and " + "provide the following details.\n\n%1").arg(e.what())); } - - bool isDeb = (process.exitCode() == 0); - - int arch = getProcessorArch(); - if (arch == kProcessorArchLinux32) { - if (isDeb) { - archName = kLinuxPackagePlatformDeb32; - } - else { - archName = kLinuxPackagePlatformRpm32; - } - } - else if (arch == kProcessorArchLinux64) { - if (isDeb) { - archName = kLinuxPackagePlatformDeb64; - } - else { - archName = kLinuxPackagePlatformRpm64; - } - } - else { - emit error(tr("Could not get Linux architecture type.")); - return ""; - } - -#endif - - QString result = QString("%1/plugins/%2/%3/%4/%5") - .arg(kBaseUrl) - .arg(pluginName) - .arg(kDefaultVersion) - .arg(archName) - .arg(getPluginOsSpecificName(pluginName)); - - qDebug() << result; - return result; -} - -QString PluginManager::getPluginOsSpecificName(const QString& pluginName) -{ - QString result = pluginName; -#if defined(Q_OS_WIN) - result.append(kWinPluginExt); -#elif defined(Q_OS_MAC) - result = kMacPluginPrefix + pluginName + kMacPluginExt; -#else - result = kLinuxPluginPrefix + pluginName + kLinuxPluginExt; -#endif - return result; + emit copyFinished(); + return; } diff --git a/src/gui/src/PluginManager.h b/src/gui/src/PluginManager.h index 279e5ff4..f6bdb5e4 100644 --- a/src/gui/src/PluginManager.h +++ b/src/gui/src/PluginManager.h @@ -25,44 +25,45 @@ #include "SslCertificate.h" #include "CoreInterface.h" #include "DataDownloader.h" +#include "Plugin.h" class PluginManager : public QObject { Q_OBJECT public: - PluginManager(QStringList pluginList); + PluginManager(); ~PluginManager(); - int downloadIndex() { return m_DownloadIndex; } + void initFromWeb(QStringList pluginList); + void initFromFileSys(QStringList pluginList); + + int pluginCount() { return m_FileSysPluginList.count(); } static bool exist(QString name); public slots: - void downloadPlugins(); + void copyPlugins(); private: - bool savePlugin(); QString getPluginUrl(const QString& pluginName); bool runProgram( const QString& program, const QStringList& args, const QStringList& env); - static QString getPluginOsSpecificName(const QString& pluginName); + //static QString getPluginOsSpecificName(const QString& pluginName); signals: void error(QString e); void info(QString i); - void downloadNext(); - void downloadFinished(); + void updateCopyStatus(int); + void copyFinished(); private: - QStringList m_PluginList; + QStringList m_FileSysPluginList; QString m_PluginDir; QString m_ProfileDir; - int m_DownloadIndex; - DataDownloader m_DataDownloader; CoreInterface m_CoreInterface; SslCertificate m_SslCertificate; }; diff --git a/src/gui/src/PluginWizardPage.cpp b/src/gui/src/PluginWizardPage.cpp index 2abdb178..9c2994a6 100644 --- a/src/gui/src/PluginWizardPage.cpp +++ b/src/gui/src/PluginWizardPage.cpp @@ -19,6 +19,7 @@ #include "ui_PluginWizardPageBase.h" #include "SslCertificate.h" +#include "FileSysClient.h" #include "WebClient.h" #include "PluginManager.h" @@ -28,8 +29,7 @@ PluginWizardPage::PluginWizardPage(AppConfig& appConfig, QWidget *parent) : QWizardPage(parent), m_Finished(false), - m_pWebClient(NULL), - m_pPluginManager(NULL), + m_pFileSysClient(NULL), m_pSslCertificate(NULL), m_AppConfig(appConfig) { @@ -44,12 +44,8 @@ PluginWizardPage::PluginWizardPage(AppConfig& appConfig, QWidget *parent) : PluginWizardPage::~PluginWizardPage() { - if (m_pWebClient != NULL) { - delete m_pWebClient; - } - - if (m_pPluginManager != NULL) { - delete m_pPluginManager; + if (m_pFileSysClient != NULL) { + delete m_pFileSysClient; } delete m_pSslCertificate; @@ -75,27 +71,16 @@ void PluginWizardPage::showError(QString error) void PluginWizardPage::queryPluginDone() { - QStringList pluginList = m_pWebClient->getPluginList(); + QStringList pluginList = m_pFileSysClient->getPluginList(); if (pluginList.isEmpty()) { updateStatus(tr("Setup complete.")); showFinished(); } else { - downloadPlugins(); + copyPlugins(); } } -void PluginWizardPage::updateDownloadStatus() -{ - QStringList pluginList = m_pWebClient->getPluginList(); - int index = m_pPluginManager->downloadIndex(); - updateStatus( - tr("Downloading '%1' plugin (%2/%3)...") - .arg(pluginList.at(index + 1)) - .arg(index + 2) - .arg(pluginList.size())); -} - void PluginWizardPage::finished() { // TODO: we should check if ns plugin exists @@ -130,33 +115,29 @@ void PluginWizardPage::updateStatus(QString info) m_pLabelStatus->setText(info); } -void PluginWizardPage::downloadPlugins() +void PluginWizardPage::copyPlugins() { - QStringList pluginList = m_pWebClient->getPluginList(); - m_pPluginManager = new PluginManager(pluginList); + QStringList pluginList = m_pFileSysClient->getPluginList(); + m_PluginManager.initFromFileSys(pluginList); + m_pThread = new QThread; - connect(m_pPluginManager, + connect(&m_PluginManager, SIGNAL(error(QString)), this, SLOT(showError(QString))); - connect(m_pPluginManager, + connect(&m_PluginManager, SIGNAL(info(QString)), this, SLOT(updateStatus(QString))); - connect(m_pPluginManager, - SIGNAL(downloadNext()), - this, - SLOT(updateDownloadStatus())); - - connect(m_pPluginManager, - SIGNAL(downloadFinished()), + connect(&m_PluginManager, + SIGNAL(copyFinished()), this, SLOT(generateCertificate())); - connect(m_pPluginManager, + connect(&m_PluginManager, SIGNAL(error(QString)), m_pThread, SLOT(quit())); @@ -167,16 +148,14 @@ void PluginWizardPage::downloadPlugins() SLOT(deleteLater())); updateStatus( - tr("Downloading plugin: %1 (1/%2)") - .arg(pluginList.at(0)) - .arg(pluginList.size())); + tr("Copying plugins...")); - m_pPluginManager->moveToThread(m_pThread); + m_PluginManager.moveToThread(m_pThread); m_pThread->start(); QMetaObject::invokeMethod( - m_pPluginManager, - "downloadPlugins", + &m_PluginManager, + "copyPlugins", Qt::QueuedConnection); } @@ -195,7 +174,7 @@ bool PluginWizardPage::isComplete() const void PluginWizardPage::initializePage() { QWizardPage::initializePage(); - if (m_pWebClient == NULL) { + if (m_pFileSysClient == NULL) { if (m_Email.isEmpty() || m_Password.isEmpty()) { updateStatus(tr("Setup complete.")); @@ -205,38 +184,38 @@ void PluginWizardPage::initializePage() m_pLabelSpinning->show(); + m_pFileSysClient = new FileSysClient(); m_pWebClient = new WebClient(); m_pWebClient->setEmail(m_Email); m_pWebClient->setPassword(m_Password); QThread* thread = new QThread; - connect(m_pWebClient, + connect(m_pFileSysClient, SIGNAL(error(QString)), this, SLOT(showError(QString))); - connect(m_pWebClient, + connect(m_pFileSysClient, SIGNAL(queryPluginDone()), this, SLOT(queryPluginDone())); - connect(m_pWebClient, + connect(m_pFileSysClient, SIGNAL(queryPluginDone()), thread, SLOT(quit())); - connect(m_pWebClient, + connect(m_pFileSysClient, SIGNAL(error(QString)), thread, SLOT(quit())); connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); - m_pWebClient->moveToThread(thread); + m_pFileSysClient->moveToThread(thread); thread->start(); - updateStatus(tr("Getting plugin list...")); - QMetaObject::invokeMethod(m_pWebClient, "queryPluginList", Qt::QueuedConnection); + QMetaObject::invokeMethod(m_pFileSysClient, "queryPluginList", Qt::QueuedConnection); } } diff --git a/src/gui/src/PluginWizardPage.h b/src/gui/src/PluginWizardPage.h index 95d4245a..65c7ea18 100644 --- a/src/gui/src/PluginWizardPage.h +++ b/src/gui/src/PluginWizardPage.h @@ -21,10 +21,11 @@ #include "AppConfig.h" #include "ui_PluginWizardPageBase.h" +#include "PluginManager.h" #include +class FileSysClient; class WebClient; -class PluginManager; class SslCertificate; class PluginWizardPage : public QWizardPage, public Ui::PluginWizardPage { @@ -49,12 +50,11 @@ protected slots: void showError(QString error); void updateStatus(QString info); void queryPluginDone(); - void updateDownloadStatus(); void finished(); void generateCertificate(); private: - void downloadPlugins(); + void copyPlugins(); void showFinished(); private: @@ -62,7 +62,8 @@ private: QString m_Email; QString m_Password; WebClient* m_pWebClient; - PluginManager* m_pPluginManager; + FileSysClient* m_pFileSysClient; + PluginManager m_PluginManager; SslCertificate* m_pSslCertificate; QThread* m_pThread; AppConfig& m_AppConfig;