1 #ifndef UPDATER_H
2 #define UPDATER_H
3 
4 #include <QtWidgets>
5 
6 
7 class Updater : public QObject {
8     Q_OBJECT
9 
10 public:
11     /// Set a shared Updater instance
12     static void setInstance(Updater *value);
13 
14     /// Get a shared updater instance, null by default
15     static Updater &instance();
16 
17     Updater(QObject *parent = nullptr);
18 
19     QAction *getAction();
20     QPushButton *getButton();
21     QLabel *getLabel();
22 
23     enum class Status {
24         UpToDate,
25         UpdateAvailable,
26         DownloadingUpdate,
27         UpdateDownloaded,
28         UpdateDownloadFailed
29     };
Q_ENUM(Status)30     Q_ENUM(Status)
31     Status getStatus() const { return status; }
32     // This should be protected
33     void setStatus(Status v);
34 
getVersion()35     QString getVersion() const { return version; }
36     // This should be protected
setVersion(const QString & value)37     void setVersion(const QString &value) { version = value; }
38 
getDisplayVersion()39     QString getDisplayVersion() const { return displayVersion; }
40     // This should be protected
setDisplayVersion(const QString & value)41     void setDisplayVersion(const QString &value) { displayVersion = value; }
42 
43     /// true if the app can be stopped and relaunched without user interaction
getImmediateInstallAndRelaunch()44     virtual bool getImmediateInstallAndRelaunch() const { return immediateInstallAndRelaunch; }
setImmediateInstallAndRelaunch(bool value)45     virtual void setImmediateInstallAndRelaunch(bool value) { immediateInstallAndRelaunch = value; }
46 
47     /// true if the app has to be relaunched after the update has completed
getRelaunchAfterInstall()48     virtual bool getRelaunchAfterInstall() const { return relaunchAfterInstall; }
setRelaunchAfterInstall(bool value)49     virtual void setRelaunchAfterInstall(bool value) { relaunchAfterInstall = value; }
50 
51     /// when true an available update will be downloaded without user interaction
getAutomaticDownload()52     virtual bool getAutomaticDownload() const { return automaticDownload; }
setAutomaticDownload(bool value)53     virtual void setAutomaticDownload(bool value) { automaticDownload = value; }
54 
55     virtual void checkAndShowUI() = 0;
56     virtual void checkAndMaybeShowUI() = 0;
57     virtual void checkWithoutUI() = 0;
58 
59 protected slots:
60     virtual void update() = 0;
61     virtual void onUserAction();
62 
63 signals:
64     void statusChanged(Status status);
65     void actionTextChanged(const QString &actionText);
66 
67 private:
68     QAction *action = nullptr;
69     QPushButton *button = nullptr;
70     QLabel *label = nullptr;
71 
72     bool automaticDownload = true;
73     bool immediateInstallAndRelaunch = false;
74     bool relaunchAfterInstall = false;
75     Status status = Status::UpToDate;
76     QString version;
77     QString displayVersion;
78 };
79 
80 #endif // UPDATER_H
81