swift
artifact.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_DB_ARTIFACT_H
7 #define SWIFT_MISC_DB_ARTIFACT_H
8 
9 #include <QString>
10 
11 #include "misc/db/datastore.h"
14 #include "misc/platform.h"
15 #include "misc/swiftmiscexport.h"
16 
17 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::db, CArtifact)
18 
19 namespace swift::misc::db
20 {
23  {
24  public:
27  {
28  IndexName = CPropertyIndexRef::GlobalIndexCArtifact,
29  IndexMd5,
30  IndexType,
31  IndexPlatform,
32  IndexVersionString,
33  IndexQVersion,
34  IndexSize,
35  IndexSizeHumanReadable,
36  IndexDistributions
37  };
38 
41  {
42  UnknownArtifact,
43  PilotClientInstaller,
44  Symbols,
45  XSwiftBus
46  };
47 
49  CArtifact();
50 
52  CArtifact(const QString &name, const QString &version, const QString &md5, ArtifactType type, int size,
53  bool existing, const CPlatform &platform);
54 
56  bool hasName() const { return !m_name.isEmpty(); }
57 
59  const QString &getName() const { return m_name; }
60 
62  void setName(const QString &name) { m_name = name.trimmed(); }
63 
65  bool matchesName(const QString &name, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
66 
68  ArtifactType getType() const { return static_cast<ArtifactType>(m_type); }
69 
71  bool isUnknown() const { return this->getType() == UnknownArtifact; }
72 
74  void setType(ArtifactType type) { m_type = static_cast<int>(type); }
75 
77  int getFileSize() const { return m_size; }
78 
80  QString getFileSizeHumanReadable() const;
81 
83  void setFileSize(int size) { m_size = size; }
84 
86  const QString &getMd5() const { return m_md5; }
87 
89  const CPlatform &getPlatform() const { return m_platform; }
90 
92  bool matchesAnyPlatform(const CPlatform &platform) const;
93 
95  void setPlatform(const CPlatform &platform) { m_platform = platform; }
96 
98  const CDistributionList &getDistributions() const { return m_distributions; }
99 
101  CDistribution getMostStableDistribution() const { return this->getDistributions().getMostStableOrDefault(); }
102 
104  void setDistributions(const CDistributionList &distributions) { m_distributions = distributions; }
105 
107  bool hasDistributions() const { return !m_distributions.isEmpty(); }
108 
110  bool hasUnrestrictedDistribution() const;
111 
113  bool isWithDistribution(const CDistribution &distribution, bool acceptMoreStableDistributions) const;
114 
117  network::CRemoteFile asRemoteFile() const;
118 
120  bool isNewerThanCurrentBuild() const;
121 
123  QString convertToQString(bool i18n = false) const;
124 
126  QString convertToQString(const QString &separator, bool i18n = false) const;
127 
129  QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const;
130 
132  void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant);
133 
135  static CArtifact fromDatabaseJson(const QJsonObject &json, const QString &prefix = {});
136 
138  static const QString &typeToString(ArtifactType type);
139 
141  static CPlatform artifactNameToPlatform(const QString &name);
142 
143  private:
144  QString m_name;
145  QString m_md5;
146  int m_type = static_cast<int>(UnknownArtifact);
147  int m_size = -1;
148  bool m_existing = false;
149  CPlatform m_platform;
150  CDistributionList m_distributions;
151 
153  static QString versionNumberFromFilename(const QString &filename);
154 
156  static ArtifactType stringToType(const QString &str);
157 
159  static QString trimVersionString(const QString &version);
160 
162  static QString trim4thSegment(const QString &seg);
163 
165  CArtifact,
166  SWIFT_METAMEMBER(name),
167  SWIFT_METAMEMBER(version),
168  SWIFT_METAMEMBER(md5),
169  SWIFT_METAMEMBER(type),
170  SWIFT_METAMEMBER(size),
171  SWIFT_METAMEMBER(existing),
172  SWIFT_METAMEMBER(platform),
173  SWIFT_METAMEMBER(distributions),
174  SWIFT_METAMEMBER(timestampMSecsSinceEpoch));
175  };
176 } // namespace swift::misc::db
177 
178 Q_DECLARE_METATYPE(swift::misc::db::CArtifact)
180 
181 #endif // SWIFT_MISC_DB_ARTIFACT_H
Platform (i.e.
Definition: platform.h:24
Non-owning reference to a CPropertyIndex with a subset of its features.
Mix of the most commonly used mixin classes.
Definition: valueobject.h:114
Artifacts ("our software" products)
Definition: artifact.h:23
ColumnIndex
Properties by index.
Definition: artifact.h:27
bool hasDistributions() const
Has distributions?
Definition: artifact.h:107
void setType(ArtifactType type)
Set type.
Definition: artifact.h:74
void setName(const QString &name)
Set the name.
Definition: artifact.h:62
const QString & getMd5() const
MD5.
Definition: artifact.h:86
bool isUnknown() const
Unknown.
Definition: artifact.h:71
int getFileSize() const
File size.
Definition: artifact.h:77
const CPlatform & getPlatform() const
OS.
Definition: artifact.h:89
void setPlatform(const CPlatform &platform)
Set the OS.
Definition: artifact.h:95
void setFileSize(int size)
Set file size.
Definition: artifact.h:83
void setDistributions(const CDistributionList &distributions)
Related distributions.
Definition: artifact.h:104
bool hasName() const
Having name?
Definition: artifact.h:56
CDistribution getMostStableDistribution() const
Most stable distribution if any.
Definition: artifact.h:101
const CDistributionList & getDistributions() const
Related distributions.
Definition: artifact.h:98
const QString & getName() const
Name (i.e. installer name, symbol name)
Definition: artifact.h:59
ArtifactType getType() const
Get type.
Definition: artifact.h:68
Distributions for channel.
Definition: distribution.h:27
Multiple distributions for different channels:
Class from which a derived class can inherit datastore-related functions.
Definition: datastore.h:70
#define SWIFT_METAMEMBER(MEMBER,...)
Macro to define an element within a metaclass.
Definition: metaclass.h:73
#define SWIFT_METACLASS(CLASS,...)
Macro to define a nested metaclass that describes the attributes of its enclosing class.
Definition: metaclass.h:53
Plugin loaded by X-Plane which publishes a DBus service.
Definition: command.h:14
#define SWIFT_MISC_EXPORT
Export a class or function from the library.
#define SWIFT_DECLARE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template declaration of mixins for a CValueObject subclass to be placed near the top of the ...
Definition: valueobject.h:65