Use core interface to activate subscription in wizard #4715

This commit is contained in:
Jerry (Xinyu Hou) 2015-10-22 16:14:37 -07:00
parent 85ef7935cc
commit 3bc46dca2d
10 changed files with 179 additions and 16 deletions

View File

@ -61,8 +61,8 @@ SOURCES += src/main.cpp \
src/SslCertificate.cpp \ src/SslCertificate.cpp \
src/Plugin.cpp \ src/Plugin.cpp \
src/WebClient.cpp \ src/WebClient.cpp \
../lib/common/PluginVersion.cpp ../lib/common/PluginVersion.cpp \
src/SubscriptionManager.cpp
HEADERS += src/MainWindow.h \ HEADERS += src/MainWindow.h \
src/AboutDialog.h \ src/AboutDialog.h \
src/ServerConfig.h \ src/ServerConfig.h \
@ -108,8 +108,8 @@ HEADERS += src/MainWindow.h \
src/SslCertificate.h \ src/SslCertificate.h \
src/Plugin.h \ src/Plugin.h \
src/WebClient.h \ src/WebClient.h \
../lib/common/PluginVersion.h ../lib/common/PluginVersion.h \
src/SubscriptionManager.h
RESOURCES += res/Synergy.qrc RESOURCES += res/Synergy.qrc
RC_FILE = res/win/Synergy.rc RC_FILE = res/win/Synergy.rc
macx { macx {

View File

@ -227,7 +227,7 @@
</spacer> </spacer>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="radioButton"> <widget class="QRadioButton" name="m_pRadioButtonSubscription">
<property name="text"> <property name="text">
<string>Subscription</string> <string>Subscription</string>
</property> </property>

View File

@ -51,6 +51,20 @@ QString CoreInterface::getArch()
return run(args); return run(args);
} }
QString CoreInterface::activateSerial(const QString& serial)
{
QStringList args("--subscription-serial");
args << serial;
return run(args);
}
QString CoreInterface::checkSubscription()
{
QStringList args("--check-subscription");
return run(args);
}
QString CoreInterface::run(const QStringList& args, const QString& input) QString CoreInterface::run(const QStringList& args, const QString& input)
{ {
QString program( QString program(

View File

@ -28,5 +28,7 @@ public:
QString getProfileDir(); QString getProfileDir();
QString getInstalledDir(); QString getInstalledDir();
QString getArch(); QString getArch();
QString activateSerial(const QString& serial);
QString checkSubscription();
QString run(const QStringList& args, const QString& input = ""); QString run(const QStringList& args, const QString& input = "");
}; };

View File

@ -21,6 +21,7 @@
#include "SslCertificate.h" #include "SslCertificate.h"
#include "PluginManager.h" #include "PluginManager.h"
#include "MainWindow.h" #include "MainWindow.h"
#include "EditionType.h"
#include <QMovie> #include <QMovie>
#include <QThread> #include <QThread>
@ -29,6 +30,7 @@
PluginWizardPage::PluginWizardPage(MainWindow& mainWindow, QWidget *parent) : PluginWizardPage::PluginWizardPage(MainWindow& mainWindow, QWidget *parent) :
QWizardPage(parent), QWizardPage(parent),
m_Finished(false), m_Finished(false),
m_Edition(Unknown),
m_pSslCertificate(NULL), m_pSslCertificate(NULL),
m_mainWindow(mainWindow) m_mainWindow(mainWindow)
{ {
@ -62,8 +64,8 @@ void PluginWizardPage::initializePage()
{ {
QWizardPage::initializePage(); QWizardPage::initializePage();
if (m_Email.isEmpty() || if (m_Edition == Unknown ||
m_Password.isEmpty()) { m_Edition == Basic) {
updateStatus(tr("Setup complete.")); updateStatus(tr("Setup complete."));
showFinished(); showFinished();
return; return;

View File

@ -36,8 +36,7 @@ public:
~PluginWizardPage(); ~PluginWizardPage();
void setFinished(bool b) { m_Finished = b; } void setFinished(bool b) { m_Finished = b; }
void setEmail(QString e) { m_Email = e; } void setEdition(int edition) { m_Edition = edition; }
void setPassword(QString p) { m_Password = p; }
bool isComplete() const; bool isComplete() const;
void initializePage(); void initializePage();
@ -58,8 +57,7 @@ private:
private: private:
bool m_Finished; bool m_Finished;
QString m_Email; int m_Edition;
QString m_Password;
PluginManager m_PluginManager; PluginManager m_PluginManager;
SslCertificate* m_pSslCertificate; SslCertificate* m_pSslCertificate;
QThread* m_pThread; QThread* m_pThread;

View File

@ -18,6 +18,7 @@
#include "SetupWizard.h" #include "SetupWizard.h"
#include "MainWindow.h" #include "MainWindow.h"
#include "WebClient.h" #include "WebClient.h"
#include "SubscriptionManager.h"
#include "EditionType.h" #include "EditionType.h"
#include "QSynergyApplication.h" #include "QSynergyApplication.h"
#include "QUtility.h" #include "QUtility.h"
@ -85,7 +86,7 @@ bool SetupWizard::validateCurrentPage()
} }
else { else {
WebClient webClient; WebClient webClient;
m_Edition = webClient .getEdition( m_Edition = webClient.getEdition(
m_pLineEditEmail->text(), m_pLineEditEmail->text(),
m_pLineEditPassword->text(), m_pLineEditPassword->text(),
message, message,
@ -95,12 +96,36 @@ bool SetupWizard::validateCurrentPage()
return false; return false;
} }
else { else {
m_pPluginPage->setEmail(m_pLineEditEmail->text()); m_pPluginPage->setEdition(m_Edition);
m_pPluginPage->setPassword(m_pLineEditPassword->text());
return true; return true;
} }
} }
} }
else if (m_pRadioButtonSubscription->isChecked()) {
if (m_pLineEditSerialKey->text().isEmpty()) {
message.setText(tr("Please enter your subscription serial key."));
message.exec();
return false;
}
else {
// plugin page no longer requires email and password
// create subscription file in profile directory
SubscriptionManager subscriptionManager;
bool r = subscriptionManager.activateSerial(m_pLineEditSerialKey->text());
if (!r) {
return r;
}
// check if the serial is valid
r = subscriptionManager.checkSubscription(m_Edition);
if (r) {
m_pPluginPage->setEdition(m_Edition);
}
return r;
}
}
else { else {
return true; return true;
} }
@ -170,6 +195,7 @@ void SetupWizard::accept()
appConfig.setUserToken(hashResult); appConfig.setUserToken(hashResult);
appConfig.setEdition(m_Edition); appConfig.setEdition(m_Edition);
} }
m_MainWindow.setEdition(m_Edition); m_MainWindow.setEdition(m_Edition);
m_MainWindow.updateLocalFingerprint(); m_MainWindow.updateLocalFingerprint();
@ -221,7 +247,7 @@ void SetupWizard::on_m_pRadioButtonActivate_toggled(bool checked)
} }
} }
void SetupWizard::on_radioButton_toggled(bool checked) void SetupWizard::on_m_pRadioButtonSubscription_toggled(bool checked)
{ {
if (checked) { if (checked) {
m_pLineEditEmail->setEnabled(false); m_pLineEditEmail->setEnabled(false);

View File

@ -47,7 +47,7 @@ private:
PluginWizardPage* m_pPluginPage; PluginWizardPage* m_pPluginPage;
private slots: private slots:
void on_radioButton_toggled(bool checked); void on_m_pRadioButtonSubscription_toggled(bool checked);
void on_m_pRadioButtonActivate_toggled(bool checked); void on_m_pRadioButtonActivate_toggled(bool checked);
void on_m_pRadioButtonSkip_toggled(bool checked); void on_m_pRadioButtonSkip_toggled(bool checked);
void on_m_pComboLanguage_currentIndexChanged(int index); void on_m_pComboLanguage_currentIndexChanged(int index);

View File

@ -0,0 +1,88 @@
/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2015 Synergy Seamless Inc.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "SubscriptionManager.h"
#include "CoreInterface.h"
#include "EditionType.h"
#include <QMessageBox>
SubscriptionManager::SubscriptionManager()
{
}
bool SubscriptionManager::activateSerial(const QString& serial)
{
CoreInterface coreInterface;
try
{
coreInterface.activateSerial(serial);
}
catch (std::exception& e)
{
showErrorDialog(e.what());
return false;
}
return true;
}
bool SubscriptionManager::checkSubscription(int& edition)
{
edition = Unknown;
CoreInterface coreInterface;
QString output;
try
{
output = coreInterface.checkSubscription();
}
catch (std::exception& e)
{
showErrorDialog(e.what());
return false;
}
if (output.contains("subscription will expire soon")) {
QMessageBox::warning(
this, tr("Activate Subscription"),
tr("Your subscription will be expired soon."));
}
edition = getEditionType(output);
return true;
}
void SubscriptionManager::showErrorDialog(const QString& errorMsg)
{
QMessageBox::critical(
this, "Activate Subscription",
tr("An error occurred while trying to activate using a serial key. "
"Please contact the helpdesk, and provide the "
"following details.\n\n%1").arg(errorMsg));
}
int SubscriptionManager::getEditionType(QString& string)
{
if (string.contains("full subscription valid")) {
return Pro;
}
return Unknown;
}

View File

@ -0,0 +1,33 @@
/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2015 Synergy Seamless Inc.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <QWidget>
class SubscriptionManager : public QWidget
{
public:
SubscriptionManager();
bool activateSerial(const QString& serial);
bool checkSubscription(int& edition);
private:
void showErrorDialog(const QString& errorMsg);
int getEditionType(QString& string);
};