4 Updater *sharedInstance = nullptr;
7 void Updater::setInstance(Updater *value) {
8 sharedInstance = value;
11 Updater &Updater::instance() {
12 return *sharedInstance;
15 Updater::Updater(QObject *parent) : QObject(parent) {}
17 QAction *Updater::getAction() {
19 action = new QAction(this);
20 connect(action, &QWidget::destroyed, this, [this] { action = nullptr; });
21 action->setMenuRole(QAction::ApplicationSpecificRole);
22 connect(action, &QAction::triggered, this, &Updater::onUserAction);
23 auto onStatusChange = [this](Updater::Status status) {
24 QString v = displayVersion.isEmpty() ? version : displayVersion;
27 case Updater::Status::UpToDate:
28 t = tr("Check for Updates...");
30 case Updater::Status::UpdateAvailable:
31 t = tr("Version %1 is available...").arg(v);
33 case Updater::Status::DownloadingUpdate:
34 t = tr("Downloading version %1...").arg(v);
36 case Updater::Status::UpdateDownloaded:
37 t = tr("Restart to Update");
39 case Updater::Status::UpdateDownloadFailed:
40 t = tr("Version %1 download failed").arg(v);
45 connect(this, &Updater::statusChanged, this, onStatusChange);
46 onStatusChange(status);
51 QPushButton *Updater::getButton() {
53 button = new QPushButton();
54 connect(button, &QWidget::destroyed, this, [this] { button = nullptr; });
55 connect(button, &QPushButton::clicked, this, &Updater::onUserAction);
56 auto onStatusChange = [this](Updater::Status status) {
60 case Updater::Status::UpToDate:
61 t = tr("Check for Updates");
63 case Updater::Status::UpdateAvailable:
64 t = tr("Download Update");
66 case Updater::Status::DownloadingUpdate:
67 t = tr("Downloading update...");
70 case Updater::Status::UpdateDownloaded:
71 t = tr("Restart to Update");
73 case Updater::Status::UpdateDownloadFailed:
74 t = tr("Retry Update Download");
78 button->setVisible(visible);
80 connect(this, &Updater::statusChanged, this, onStatusChange);
81 onStatusChange(status);
86 QLabel *Updater::getLabel() {
89 connect(label, &QWidget::destroyed, this, [this] { label = nullptr; });
90 auto onStatusChange = [this](Updater::Status status) {
91 QString v = displayVersion.isEmpty() ? version : displayVersion;
94 case Updater::Status::UpToDate:
95 t = tr("You have the latest version.");
97 case Updater::Status::UpdateAvailable:
98 t = tr("Version %1 is available.").arg(v);
100 case Updater::Status::DownloadingUpdate:
101 t = tr("Downloading update...");
103 case Updater::Status::UpdateDownloaded:
104 t = tr("An update has been downloaded and is ready to be installed.");
106 case Updater::Status::UpdateDownloadFailed:
107 t = tr("Version %1 download failed").arg(v);
112 connect(this, &Updater::statusChanged, this, onStatusChange);
113 onStatusChange(status);
118 void Updater::setStatus(Status v) {
121 emit statusChanged(status);
125 void Updater::onUserAction() {
126 if (status == Updater::Status::UpdateDownloaded) {
127 // update will be installed on quit