Branch data Line data Source code
1 : : // Copyright (C) 2021 The Qt Company Ltd.
2 : : // Copyright (C) 2019 Luxoft Sweden AB
3 : : // Copyright (C) 2018 Pelagicore AG
4 : : // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
5 : :
6 : : #ifndef PACKAGE_H
7 : : #define PACKAGE_H
8 : :
9 : : #include <QtAppManCommon/global.h>
10 : : #include <QtAppManApplication/packageinfo.h>
11 : : #include <QtAppManManager/application.h>
12 : : #include <QtCore/QUrl>
13 : : #include <QtCore/QString>
14 : : #include <QtCore/QAtomicInt>
15 : : #include <QtCore/QObject>
16 : :
17 : : QT_BEGIN_NAMESPACE_AM
18 : :
19 : : class Application;
20 : :
21 : : class Package : public QObject
22 : : {
23 : : Q_OBJECT
24 : : Q_PROPERTY(QString id READ id CONSTANT FINAL)
25 : : Q_PROPERTY(bool builtIn READ isBuiltIn NOTIFY bulkChange FINAL)
26 : : Q_PROPERTY(bool builtInHasRemovableUpdate READ builtInHasRemovableUpdate NOTIFY bulkChange FINAL)
27 : : Q_PROPERTY(QUrl icon READ icon NOTIFY bulkChange FINAL)
28 : : Q_PROPERTY(QString version READ version NOTIFY bulkChange FINAL)
29 : : Q_PROPERTY(QString name READ name NOTIFY bulkChange FINAL)
30 : : Q_PROPERTY(QVariantMap names READ names NOTIFY bulkChange FINAL)
31 : : Q_PROPERTY(QString description READ description NOTIFY bulkChange FINAL)
32 : : Q_PROPERTY(QVariantMap descriptions READ descriptions NOTIFY bulkChange FINAL)
33 : : Q_PROPERTY(QStringList categories READ categories NOTIFY bulkChange FINAL)
34 : : Q_PROPERTY(QtAM::Package::State state READ state NOTIFY stateChanged FINAL)
35 : : Q_PROPERTY(bool blocked READ isBlocked NOTIFY blockedChanged FINAL)
36 : : Q_PROPERTY(QList<QtAM::Application *> applications READ applications NOTIFY applicationsChanged FINAL)
37 : :
38 : : public:
39 : : enum State {
40 : : Installed,
41 : : BeingInstalled,
42 : : BeingUpdated,
43 : : BeingDowngraded,
44 : : BeingRemoved
45 : : };
46 [ # # ]: 0 : Q_ENUM(State)
47 : :
48 : : Package(PackageInfo *packageInfo, State initialState = Installed);
49 : :
50 : : QString id() const;
51 : : bool isBuiltIn() const;
52 : : bool builtInHasRemovableUpdate() const;
53 : : QUrl icon() const;
54 : : QString version() const;
55 : : QString name() const;
56 : : QVariantMap names() const;
57 : : QString description() const;
58 : : QVariantMap descriptions() const;
59 : : QStringList categories() const;
60 : : QList<Application *> applications() const;
61 : :
62 [ + + + - : 369 : State state() const { return m_state; }
- + + - +
- + + ]
63 : 36 : qreal progress() const { return m_progress; }
64 : :
65 : : void setState(State state);
66 : : void setProgress(qreal progress);
67 : :
68 : : /*
69 : : All packages have a base info.
70 : :
71 : : Built-in packages, when updated, also get an updated info.
72 : : The updated info then overlays the base one. Subsequent updates
73 : : just replace the updated info. When requested to be removed, a
74 : : built-in packages only loses its updated info, returning to
75 : : expose the base one.
76 : :
77 : : Regular packages (ie, non-built-in) only have a base info. When
78 : : updated, their base info gets replaced and thus there's no way to go
79 : : back to a previous version. Regular packages get completely
80 : : removed when requested.
81 : : */
82 : :
83 : : // Returns the updated info, if there's one. Otherwise returns the base info.
84 : : PackageInfo *info() const;
85 : : PackageInfo *baseInfo() const;
86 : : PackageInfo *updatedInfo() const;
87 : : PackageInfo *setUpdatedInfo(PackageInfo *info);
88 : : PackageInfo *setBaseInfo(PackageInfo *info);
89 : :
90 : : bool isBlocked() const;
91 : : bool block();
92 : : bool unblock();
93 : :
94 : : // function for Application to report it has stopped after getting a block request
95 : : void applicationStoppedDueToBlock(const QString &appId);
96 : : // query function for the installer to verify that it is safe to manipulate binaries
97 : : bool areAllApplicationsStoppedDueToBlock() const;
98 : :
99 : : // for the ApplicationManager to update the package -> application mapping
100 : : void addApplication(Application *application);
101 : : void removeApplication(Application *application);
102 : :
103 : : signals:
104 : : void bulkChange();
105 : : void stateChanged(QtAM::Package::State state);
106 : : void blockedChanged(bool blocked);
107 : : void applicationsChanged();
108 : :
109 : : private:
110 : : PackageInfo *m_info = nullptr;
111 : : PackageInfo *m_updatedInfo = nullptr;
112 : :
113 : : State m_state = Installed;
114 : : qreal m_progress = 0;
115 : : QAtomicInt m_blocked;
116 : : QAtomicInt m_blockedAppsCount;
117 : : QVector<ApplicationInfo *> m_blockedApps;
118 : : QList<Application *> m_applications;
119 : : };
120 : :
121 : : QT_END_NAMESPACE_AM
122 : :
123 : : #endif // PACKAGE_H
|