Refactor EnterLicense dialog and add license activation handling

This commit is contained in:
Martín Capello 2021-10-05 14:15:53 -03:00 committed by David Capello
parent 2639c36b2f
commit 776b97deef
4 changed files with 68 additions and 19 deletions

View File

@ -1075,6 +1075,7 @@ title = Enter License
default_message = If you need a license key, go to
license_key = License Key
activating_message = Activating...
activated_message = Aseprite has been successfully activated!
[tileset_selector]
new_tileset = New Tileset

View File

@ -17,7 +17,7 @@
<box horizontal="true" expansive="true" />
<box horizontal="true" homogeneous="true">
<button text="@general.ok" id="ok_button" magnet="true" width="60" />
<button text="@general.cancel" closewindow="true" />
<button text="@general.close" closewindow="true" />
</box>
</box>
</box>

View File

@ -10,6 +10,8 @@
#include "app/i18n/strings.h"
#include "app/resource_finder.h"
#include "base/fs.h"
#include "enter_license.h"
#include "enter_license.xml.h"
#include "ui/message.h"
@ -32,6 +34,48 @@ EnterLicense::EnterLicense() : m_timer(500, this), m_activationInProgress(false)
okButton()->setEnabled(false);
okButton()->Click.connect([this](ui::Event&) {
startActivation();
});
m_activatedConn = drm::LicenseManager::instance()->Activated.connect(
[this](drm::ActivatedEvent& ev) { onActivated(ev); });
m_activationFailedConn = drm::LicenseManager::instance()->ActivationFailed.connect(
[this](drm::LicenseManager::Exception& e) { onActivationFailed(e); });
Close.connect([this]() {
m_activatedConn.disconnect();
m_activationFailedConn.disconnect();
});
m_timer.start();
}
void EnterLicense::onBeforeClose(ui::CloseEvent& ev)
{
if (m_activationInProgress) {
ev.cancel();
}
}
void EnterLicense::onActivationFailed(drm::LicenseManager::Exception& e)
{
ui::execute_from_ui_thread([this, e]() {
showError(e.what());
});
}
void EnterLicense::onActivated(drm::ActivatedEvent& ev)
{
drm::LicenseManager::instance()->save(ev.getToken());
ui::execute_from_ui_thread([this, ev]() {
showSuccess();
});
}
void EnterLicense::startActivation()
{
icon()->setVisible(false);
message()->setText(app::Strings::instance()->enter_license_activating_message());
layout();
@ -41,34 +85,32 @@ EnterLicense::EnterLicense() : m_timer(500, this), m_activationInProgress(false)
m_activation = std::thread([this, key]() {
drm::LicenseManager::instance()->activate(key, get_app_name(), get_app_version());
});
});
m_activationFailedConn = drm::LicenseManager::instance()->ActivationFailed.connect(
[this](drm::LicenseManager::Exception& e) { onActivationFailed(e); });
Close.connect([this]() {
m_activationFailedConn.disconnect();
});
m_timer.start();
}
void EnterLicense::onBeforeClose(ui::CloseEvent& ev) {
if (m_activationInProgress) {
ev.cancel();
}
}
void EnterLicense::onActivationFailed(drm::LicenseManager::Exception& e) {
ui::execute_from_ui_thread([this, e]() {
void EnterLicense::showError(const std::string& msg)
{
if (m_activation.joinable())
m_activation.join();
setEnabled(true);
icon()->setVisible(true);
message()->setText(e.what());
message()->setText(msg);
layout();
m_activationInProgress = false;
});
}
void EnterLicense::showSuccess()
{
if (m_activation.joinable())
m_activation.join();
setEnabled(true);
icon()->setVisible(false);
message()->setText(app::Strings::instance()->enter_license_activated_message());
layout();
okButton()->setEnabled(false);
m_activationInProgress = false;
}
}

View File

@ -20,12 +20,18 @@ public:
protected:
void onBeforeClose(ui::CloseEvent& ev) override;
void onActivationFailed(drm::LicenseManager::Exception& e);
void onActivated(drm::ActivatedEvent& ev);
private:
std::thread m_activation;
ui::Timer m_timer;
bool m_activationInProgress;
obs::connection m_activationFailedConn;
obs::connection m_activatedConn;
void startActivation();
void showError(const std::string& msg);
void showSuccess();
};
}