#5657 Handle expired keys properly

This commit is contained in:
Andrew Nelless 2016-10-18 17:01:44 +01:00
parent 020b7974df
commit 02c23905d6
4 changed files with 47 additions and 38 deletions

View File

@ -81,8 +81,9 @@ void ActivationDialog::accept()
if (edition != kUnregistered) {
if (m_LicenseManager->serialKey().isTrial()) {
message.information(this, "Thanks!",
tr("Thanks for trying %1!").arg
(m_LicenseManager->getEditionName(edition)));
tr("Thanks for trying %1!\n\n%2 days of your trial remain").arg
(m_LicenseManager->getEditionName(edition)).arg
(m_LicenseManager->serialKey().daysLeft(::time(0))));
}
else {
message.information(this, "Activated!",

View File

@ -26,22 +26,16 @@
LicenseManager::LicenseManager(AppConfig* appConfig) :
m_AppConfig(appConfig),
m_serialKey(appConfig->edition()) {
try {
setSerialKey(m_AppConfig->serialKey());
} catch (...) {
/* Remove garbage serial keys from the registry */
m_AppConfig->setSerialKey("");
m_AppConfig->saveSettings();
}
}
std::pair<bool, QString>
LicenseManager::setSerialKey(QString serialKeyString)
LicenseManager::setSerialKey(QString serialKeyString, bool acceptExpired)
{
std::pair<bool, QString> ret (true, "");
time_t currentTime = ::time(0);
SerialKey serialKey (serialKeyString.toStdString());
if (serialKey.isExpired(::time(0))) {
if (!acceptExpired && serialKey.isExpired(currentTime)) {
ret.first = false;
ret.second = "Serial key expired";
return ret;
@ -50,22 +44,25 @@ LicenseManager::setSerialKey(QString serialKeyString)
if (serialKey != m_serialKey) {
using std::swap;
swap (serialKey, m_serialKey);
m_AppConfig->setSerialKey (serialKeyString);
notifyActivation ("serial:" + serialKeyString);
emit serialKeyChanged (m_serialKey);
if (serialKey.isTrial()) {
emit endTrial(false);
}
if (m_serialKey.edition() != serialKey.edition()) {
m_AppConfig->setEdition (m_serialKey.edition());
emit editionChanged (m_serialKey.edition());
}
if (serialKey.isTrial()) {
emit endTrial(false);
}
if (m_serialKey.isTrial()) {
emit beginTrial(m_serialKey.isExpiring(::time(0)));
if (m_serialKey.isExpired(currentTime)) {
emit endTrial(true);
} else {
emit beginTrial(m_serialKey.isExpiring(currentTime));
}
}
m_AppConfig->saveSettings();
@ -92,13 +89,9 @@ LicenseManager::serialKey() const
return m_serialKey;
}
void LicenseManager::refresh() const
void LicenseManager::refresh(bool acceptExpired)
{
emit serialKeyChanged (m_serialKey);
emit editionChanged (m_serialKey.edition());
if (m_serialKey.isTrial()) {
emit beginTrial(m_serialKey.isExpiring(::time(0)));
}
setSerialKey (m_AppConfig->serialKey(), acceptExpired);
}
void LicenseManager::skipActivation()
@ -109,16 +102,16 @@ void LicenseManager::skipActivation()
QString
LicenseManager::getEditionName(Edition const edition, bool trial)
{
std::string name ("Synergy ");
std::string name ("Synergy");
switch (edition) {
case kUnregistered:
name += "(UNREGISTERED)";
name += " (UNREGISTERED)";
return QString::fromUtf8 (name.c_str(), name.size());
case kBasic:
name += "Basic";
name += " Basic";
break;
default:
name += "Pro";
name += " Pro";
}
if (trial) {
name += " (Trial)";

View File

@ -30,8 +30,8 @@ class LicenseManager: public QObject
public:
LicenseManager(AppConfig* appConfig);
std::pair<bool, QString> setSerialKey(QString serialKey);
void refresh() const;
std::pair<bool, QString> setSerialKey(QString serialKey, bool acceptExpired = false);
void refresh(bool acceptExpired = false);
Edition activeEdition() const;
QString activeEditionName() const;
SerialKey serialKey() const;

View File

@ -154,7 +154,8 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig,
connect (m_AppConfig, SIGNAL(sslToggled(bool)),
this, SLOT(sslToggled(bool)), Qt::QueuedConnection);
m_LicenseManager->refresh();
setWindowTitle (m_LicenseManager->activeEditionName());
m_LicenseManager->refresh(true);
}
MainWindow::~MainWindow()
@ -1064,15 +1065,14 @@ void MainWindow::beginTrial(bool isExpiring)
QString expiringNotice ("<html><head/><body><p><span style=\""
"font-weight:600;\">%1</span> days of "
"your %2 trial remain. <a href="
"\"http://symless.com/synergy/trial/thanks?id=%3\">"
"\"http://symless.com/pricing\">"
"<span style=\"text-decoration: underline;"
" color:#0000ff;\">Buy now!</span></a>"
"</p></body></html>");
expiringNotice = expiringNotice.arg
(m_LicenseManager->serialKey().daysLeft(::time(0))).arg
(LicenseManager::getEditionName(m_LicenseManager->activeEdition())).arg
(QString::fromStdString(m_LicenseManager->serialKey().toString()));
expiringNotice = expiringNotice
.arg (m_LicenseManager->serialKey().daysLeft(::time(0)))
.arg (LicenseManager::getEditionName
(m_LicenseManager->activeEdition()));
this->m_trialLabel->setText(expiringNotice);
this->m_trialWidget->show();
}
@ -1081,7 +1081,22 @@ void MainWindow::beginTrial(bool isExpiring)
void MainWindow::endTrial(bool isExpired)
{
if (!isExpired) {
if (isExpired) {
QString expiredNotice (
"<html><head/><body><p>Your %1 trial has expired. <a href="
"\"http://symless.com/synergy/trial/thanks?id=%2\">"
"<span style=\"text-decoration: underline;color:#0000ff;\">"
"Buy now!</span></a></p></body></html>"
);
expiredNotice = expiredNotice
.arg(LicenseManager::getEditionName
(m_LicenseManager->activeEdition()))
.arg(QString::fromStdString
(m_LicenseManager->serialKey().toString()));
this->m_trialLabel->setText(expiredNotice);
this->m_trialWidget->show();
} else {
this->m_trialWidget->hide();
}
setWindowTitle (m_LicenseManager->activeEditionName());