1 #include "ActivationDialog.h"
2 #include "ui_ActivationDialog.h"
3 #include "CancelActivationDialog.h"
4 #include "AppConfig.h"
5 #include <shared/EditionType.h>
6 #include "ActivationNotifier.h"
7 #include "MainWindow.h"
8 #include "QUtility.h"
9 #include "LicenseManager.h"
10 #include "FailedLoginDialog.h"
11 
12 #include <QMessageBox>
13 #include <QThread>
14 #include <iostream>
15 
ActivationDialog(QWidget * parent,AppConfig & appConfig,LicenseManager & licenseManager)16 ActivationDialog::ActivationDialog(QWidget* parent, AppConfig& appConfig,
17                                    LicenseManager& licenseManager) :
18     QDialog(parent),
19     ui(new Ui::ActivationDialog),
20     m_appConfig(&appConfig),
21     m_LicenseManager (&licenseManager)
22 {
23     ui->setupUi(this);
24     refreshSerialKey();
25     time_t currentTime = ::time(0);
26     if (!m_LicenseManager->serialKey().isExpired(currentTime)) {
27         ui->m_trialWidget->hide();
28     }
29 }
30 
refreshSerialKey()31 void ActivationDialog::refreshSerialKey()
32 {
33     ui->m_pTextEditSerialKey->setText(m_appConfig->serialKey());
34     ui->m_pTextEditSerialKey->setFocus();
35     ui->m_pTextEditSerialKey->moveCursor(QTextCursor::End);
36     ui->m_trialLabel->setText(tr(m_LicenseManager->getLicenseNotice().toStdString().c_str()));
37 }
38 
~ActivationDialog()39 ActivationDialog::~ActivationDialog()
40 {
41     delete ui;
42 }
43 
reject()44 void ActivationDialog::reject()
45 {
46     if (m_LicenseManager->activeEdition() == kUnregistered) {
47         CancelActivationDialog cancelActivationDialog(this);
48         if (QDialog::Accepted == cancelActivationDialog.exec()) {
49             m_LicenseManager->skipActivation();
50         } else {
51             return;
52         }
53     }
54     QDialog::reject();
55 }
56 
accept()57 void ActivationDialog::accept()
58 {
59     QMessageBox message;
60     m_appConfig->activationHasRun(true);
61 
62     std::pair<bool, QString> result;
63     try {
64         SerialKey serialKey (ui->m_pTextEditSerialKey->toPlainText().
65                              trimmed().toStdString());
66         result = m_LicenseManager->setSerialKey(serialKey);
67     }
68     catch (std::exception& e) {
69         message.critical(this, "Unknown Error",
70             tr("An error occurred while trying to activate Synergy. "
71                 "Please contact the helpdesk, and provide the "
72                 "following information:\n\n%1").arg(e.what()));
73         refreshSerialKey();
74         return;
75     }
76 
77     if (!result.first) {
78         message.critical(this, "Activation failed",
79                          tr("%1").arg(result.second));
80         refreshSerialKey();
81         return;
82     }
83 
84     m_LicenseManager->notifyActivation("serial:" + m_appConfig->serialKey());
85     Edition edition = m_LicenseManager->activeEdition();
86     time_t daysLeft = m_LicenseManager->serialKey().daysLeft(::time(0));
87     if (edition != kUnregistered) {
88         QString thanksMessage = tr("Thanks for trying %1! %5\n\n%2 day%3 of "
89                                    "your trial remain%4").
90                 arg (m_LicenseManager->getEditionName(edition)).
91                 arg    (daysLeft).
92                 arg ((daysLeft == 1) ? "" : "s").
93                 arg ((daysLeft == 1) ? "s" : "");
94 
95         if (edition == kPro || edition == kPro_China || edition == kBusiness) {
96             m_appConfig->generateCertificate();
97             thanksMessage = thanksMessage.arg("If you're using SSL, "
98                             "remember to activate all of your devices.");
99         } else {
100             thanksMessage = thanksMessage.arg("");
101         }
102 
103         if (m_LicenseManager->serialKey().isTrial()) {
104             message.information(this, "Thanks!", thanksMessage);
105         }
106         else {
107             message.information(this, "Activated!",
108                     tr("Thanks for activating %1!").arg
109                         (m_LicenseManager->getEditionName(edition)));
110         }
111     }
112 
113     QDialog::accept();
114 }
115